From d73cd0ecdd55f92e1985527b33e51678ea36d33e Mon Sep 17 00:00:00 2001 From: flarum-bot Date: Fri, 21 Jun 2024 08:39:52 +0000 Subject: [PATCH] Bundled output for commit a8777c6198edd520011731d939ae92b45fcec176 Includes transpiled JS/TS, and Typescript declaration files (typings). [skip ci] --- .../js/dist-typings/components/ConfigureJson.d.ts | 5 +++-- extensions/package-manager/js/dist/admin.js | 2 +- extensions/package-manager/js/dist/admin.js.map | 2 +- .../tags/js/dist-typings/admin/components/EditTagModal.d.ts | 4 ++-- .../admin/components/SelectTagsSettingComponent.d.ts | 4 ++-- extensions/tags/js/dist-typings/common/models/Tag.d.ts | 3 ++- extensions/tags/js/dist/admin.js | 2 +- extensions/tags/js/dist/admin.js.map | 2 +- .../tags/js/dist/common/components/TagSelectionModal.js | 2 +- .../tags/js/dist/common/components/TagSelectionModal.js.map | 2 +- extensions/tags/js/dist/forum.js | 2 +- extensions/tags/js/dist/forum.js.map | 2 +- .../tags/js/dist/forum/components/TagDiscussionModal.js | 2 +- .../tags/js/dist/forum/components/TagDiscussionModal.js.map | 2 +- framework/core/js/dist/admin.js | 2 +- framework/core/js/dist/admin.js.map | 2 +- framework/core/js/dist/forum.js | 2 +- framework/core/js/dist/forum.js.map | 2 +- 18 files changed, 23 insertions(+), 21 deletions(-) diff --git a/extensions/package-manager/js/dist-typings/components/ConfigureJson.d.ts b/extensions/package-manager/js/dist-typings/components/ConfigureJson.d.ts index fa2f0cf85..48cda1620 100644 --- a/extensions/package-manager/js/dist-typings/components/ConfigureJson.d.ts +++ b/extensions/package-manager/js/dist-typings/components/ConfigureJson.d.ts @@ -1,6 +1,7 @@ import type Mithril from 'mithril'; import Component, { type ComponentAttrs } from 'flarum/common/Component'; -import { CommonSettingsItemOptions, type SettingsComponentOptions } from '@flarum/core/src/admin/components/AdminPage'; +import { type SettingsComponentOptions } from '@flarum/core/src/admin/components/AdminPage'; +import { type CommonFieldOptions } from 'flarum/common/components/FormGroup'; import type ItemList from 'flarum/common/utils/ItemList'; import Stream from 'flarum/common/utils/Stream'; export interface IConfigureJson extends ComponentAttrs { @@ -17,7 +18,7 @@ export default abstract class ConfigureJson Mithril.Children>; + customSettingComponents(): ItemList<(attributes: CommonFieldOptions) => Mithril.Children>; setting(key: string): Stream; submit(readOnly: boolean): void; isDirty(): boolean; diff --git a/extensions/package-manager/js/dist/admin.js b/extensions/package-manager/js/dist/admin.js index a07b2022b..eda56557a 100755 --- a/extensions/package-manager/js/dist/admin.js +++ b/extensions/package-manager/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var t={647:function(t){t.exports=function(){"use strict";var t,e,a=1e3,n=6e4,s=36e5,r=864e5,o=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,i=31536e6,l=2592e6,m=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,u={years:i,months:l,days:r,hours:s,minutes:n,seconds:a,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof b},d=function(t,e,a){return new b(t,a,e.$l)},g=function(t){return e.p(t)+"s"},p=function(t){return t<0},h=function(t){return p(t)?Math.ceil(t):Math.floor(t)},f=function(t){return Math.abs(t)},x=function(t,e){return t?p(t)?{negative:!0,format:""+f(t)+e}:{negative:!1,format:""+t+e}:{negative:!1,format:""}},b=function(){function p(t,e,a){var n=this;if(this.$d={},this.$l=a,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),e)return d(t*u[g(e)],this);if("number"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if("object"==typeof t)return Object.keys(t).forEach((function(e){n.$d[g(e)]=t[e]})),this.calMilliseconds(),this;if("string"==typeof t){var s=t.match(m);if(s){var r=s.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var f=p.prototype;return f.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(e,a){return e+(t.$d[a]||0)*u[a]}),0)},f.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=h(t/i),t%=i,this.$d.months=h(t/l),t%=l,this.$d.days=h(t/r),t%=r,this.$d.hours=h(t/s),t%=s,this.$d.minutes=h(t/n),t%=n,this.$d.seconds=h(t/a),t%=a,this.$d.milliseconds=t},f.toISOString=function(){var t=x(this.$d.years,"Y"),e=x(this.$d.months,"M"),a=+this.$d.days||0;this.$d.weeks&&(a+=7*this.$d.weeks);var n=x(a,"D"),s=x(this.$d.hours,"H"),r=x(this.$d.minutes,"M"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3);var i=x(o,"S"),l=t.negative||e.negative||n.negative||s.negative||r.negative||i.negative,m=s.format||r.format||i.format?"T":"",u=(l?"-":"")+"P"+t.format+e.format+n.format+m+s.format+r.format+i.format;return"P"===u||"-P"===u?"P0D":u},f.toJSON=function(){return this.toISOString()},f.format=function(t){var a=t||"YYYY-MM-DDTHH:mm:ss",n={Y:this.$d.years,YY:e.s(this.$d.years,2,"0"),YYYY:e.s(this.$d.years,4,"0"),M:this.$d.months,MM:e.s(this.$d.months,2,"0"),D:this.$d.days,DD:e.s(this.$d.days,2,"0"),H:this.$d.hours,HH:e.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:e.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:e.s(this.$d.seconds,2,"0"),SSS:e.s(this.$d.milliseconds,3,"0")};return a.replace(o,(function(t,e){return e||String(n[t])}))},f.as=function(t){return this.$ms/u[g(t)]},f.get=function(t){var e=this.$ms,a=g(t);return"milliseconds"===a?e%=1e3:e="weeks"===a?h(e/u[a]):this.$d[a],0===e?0:e},f.add=function(t,e,a){var n;return n=e?t*u[g(e)]:c(t)?t.$ms:d(t,this).$ms,d(this.$ms+n*(a?-1:1),this)},f.subtract=function(t,e){return this.add(t,e,!0)},f.locale=function(t){var e=this.clone();return e.$l=t,e},f.clone=function(){return d(this.$ms,this)},f.humanize=function(e){return t().add(this.$ms,"ms").locale(this.$l).fromNow(!e)},f.milliseconds=function(){return this.get("milliseconds")},f.asMilliseconds=function(){return this.as("milliseconds")},f.seconds=function(){return this.get("seconds")},f.asSeconds=function(){return this.as("seconds")},f.minutes=function(){return this.get("minutes")},f.asMinutes=function(){return this.as("minutes")},f.hours=function(){return this.get("hours")},f.asHours=function(){return this.as("hours")},f.days=function(){return this.get("days")},f.asDays=function(){return this.as("days")},f.weeks=function(){return this.get("weeks")},f.asWeeks=function(){return this.as("weeks")},f.months=function(){return this.get("months")},f.asMonths=function(){return this.as("months")},f.years=function(){return this.get("years")},f.asYears=function(){return this.as("years")},p}();return function(a,n,s){t=s,e=s().$utils(),s.duration=function(t,e){var a=s.locale();return d(t,{$l:a},e)},s.isDuration=c;var r=n.prototype.add,o=n.prototype.subtract;n.prototype.add=function(t,e){return c(t)&&(t=t.asMilliseconds()),r.bind(this)(t,e)},n.prototype.subtract=function(t,e){return c(t)&&(t=t.asMilliseconds()),o.bind(this)(t,e)}}}()}},e={};function a(n){var s=e[n];if(void 0!==s)return s.exports;var r=e[n]={exports:{}};return t[n].call(r.exports,r,r.exports,a),r.exports}a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";a.r(n);const t=flarum.reg.get("core","common/extend"),e=flarum.reg.get("core","admin/app");var s=a.n(e);const r=flarum.reg.get("core","admin/components/ExtensionPage");var o=a.n(r);const i=flarum.reg.get("core","common/components/Button");var l=a.n(i);const u=flarum.reg.get("core","admin/components/LoadingModal");var c=a.n(u);const d=flarum.reg.get("core","admin/utils/isExtensionEnabled");var g=a.n(d);const p=flarum.reg.get("core","common/Component");var h=a.n(p);const f=flarum.reg.get("core","common/components/LoadingIndicator");var x=a.n(f);const b=flarum.reg.get("core","common/components/Tooltip");var y=a.n(b);const v=flarum.reg.get("core","common/components/Icon");var _=a.n(v);const k=flarum.reg.get("core","common/utils/ItemList");var N=a.n(k);const M=flarum.reg.get("core","common/utils/extractText");var w=a.n(M);const E=flarum.reg.get("core","common/components/Link");var S=a.n(E);const U=flarum.reg.get("core","common/utils/classList");var B=a.n(U);class q extends(h()){view(t){const{className:e,type:a,...n}=this.attrs;return m("span",Object.assign({className:B()(["Label","Label--".concat(this.attrs.type),e])},n),t.children)}}flarum.reg.add("flarum-extension-manager","admin/components/Label",q);const j=flarum.reg.get("core","common/components/Modal");var T=a.n(j);class $ extends(T()){className(){return"Modal--large QuickModal"}title(){return s().translator.trans("flarum-extension-manager.admin.sections.queue.operations.".concat(this.attrs.task.operation()))}content(){return m("div",{className:"Modal-body"},m("div",{className:"TaskOutputModal-data"},"failure"===this.attrs.task.status()&&m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.guessed_cause")),m("div",{className:"FormControl TaskOutputModal-data-guessed-cause"},this.attrs.task.guessedCause()&&s().translator.trans("flarum-extension-manager.admin.exceptions.guessed_cause."+this.attrs.task.guessedCause())||s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.cause_unknown"))),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.command")),m("div",{className:"FormControl TaskOutputModal-data-command"},m("code",null,"$ composer ",this.attrs.task.command()))),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.output")),m("div",{className:"FormControl TaskOutputModal-data-output"},m("code",null,m("pre",null,this.attrs.task.output()))))))}}flarum.reg.add("flarum-extension-manager","admin/components/TaskOutputModal",$);var C=a(647),P=a.n(C);function F(t,e){dayjs.extend(P());const a=dayjs(e).diff(t);return dayjs.duration(a).humanize()}flarum.reg.add("flarum-extension-manager","admin/utils/humanDuration",F);class L extends(h()){view(){return m("nav",{className:"Pagination UserListPage-gridPagination"},m(l(),{disabled:!this.attrs.list.hasPrev()||s().extensionManager.control.isLoading(),title:s().translator.trans("core.admin.users.pagination.back_button"),onclick:()=>this.attrs.list.prev(),icon:"fas fa-chevron-left",className:"Button Button--icon UserListPage-backBtn"}),m("span",{className:"UserListPage-pageNumber"},s().translator.trans("core.admin.users.pagination.page_counter",{current:this.attrs.list.pageNumber()+1,total:this.attrs.list.getTotalPages()})),m(l(),{disabled:!this.attrs.list.hasNext()||s().extensionManager.control.isLoading(),title:s().translator.trans("core.admin.users.pagination.next_button"),onclick:()=>this.attrs.list.next(),icon:"fas fa-chevron-right",className:"Button Button--icon UserListPage-nextBtn"}))}}flarum.reg.add("flarum-extension-manager","admin/components/Pagination",L);class O extends(h()){oninit(t){super.oninit(t),s().extensionManager.queue.load()}view(){return m("section",{id:"ExtensionManager-queueSection",className:"ExtensionPage-permissions ExtensionManager-queueSection"},m("div",{className:"ExtensionPage-permissions-header ExtensionManager-queueSection-header"},m("div",{className:"container"},m("h2",{className:"ExtensionTitle"},s().translator.trans("flarum-extension-manager.admin.sections.queue.title")),m(l(),{className:"Button Button--icon",icon:"fas fa-sync-alt",onclick:()=>s().extensionManager.queue.load(),"aria-label":s().translator.trans("flarum-extension-manager.admin.sections.queue.refresh"),disabled:s().extensionManager.control.isLoading()}))),m("div",{className:"container"},this.queueTable()))}columns(){const t=new(N());return t.add("operation",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.operation")),content:t=>m("div",{className:"ExtensionManager-queueTable-operation"},m("span",{className:"ExtensionManager-queueTable-operation-icon"},this.operationIcon(t.operation())),m("span",{className:"ExtensionManager-queueTable-operation-name"},s().translator.trans("flarum-extension-manager.admin.sections.queue.operations.".concat(t.operation()))))},80),t.add("package",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.package")),content:t=>{var e;const a=s().data.extensions[null==(e=t.package())?void 0:e.replace(/(\/flarum-|\/flarum-ext-|\/)/g,"-")];return a?m(S(),{className:"ExtensionManager-queueTable-package",href:s().route("extension",{id:a.id})},m("div",{className:"ExtensionManager-queueTable-package-icon ExtensionIcon",style:a.icon},!!a.icon&&m(_(),{name:a.icon.name})),m("div",{className:"ExtensionManager-queueTable-package-details"},m("span",{className:"ExtensionManager-queueTable-package-title"},a.extra["flarum-extension"].title),m("span",{className:"ExtensionManager-queueTable-package-name"},t.package()))):t.package()}},75),t.add("status",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.status")),content:t=>m("[",null,m(q,{className:"ExtensionManager-queueTable-status",type:{running:"neutral",failure:"error",pending:"warning",success:"success"}[t.status()]},s().translator.trans("flarum-extension-manager.admin.sections.queue.statuses.".concat(t.status()))),["pending","running"].includes(t.status())&&m(x(),{size:"small",display:"inline"}))},70),t.add("elapsedTime",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.elapsed_time")),content:t=>t.startedAt()&&t.finishedAt()?m(y(),{text:"".concat(dayjs(t.startedAt()).format("LL LTS")," ").concat(dayjs(t.finishedAt()).format("LL LTS"))},m("span",null,F(t.startedAt(),t.finishedAt()))):s().translator.trans("flarum-extension-manager.admin.sections.queue.task_just_started")},65),t.add("memoryUsed",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.peak_memory_used")),content:t=>m("span",null,t.peakMemoryUsed())},60),t.add("details",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.details")),content:t=>m(l(),{className:"Button Button--icon Table-controls-item",icon:"fas fa-file-alt","aria-label":s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.details"),onclick:()=>s().modal.show($,{task:t}),disabled:["pending","running"].includes(t.status())}),className:"Table-controls"},55),t}queueTable(){const t=s().extensionManager.queue.getItems();if(!t)return m(x(),null);if(t&&!t.length)return m("h3",{className:"ExtensionPage-subHeader"},s().translator.trans("flarum-extension-manager.admin.sections.queue.none"));const e=this.columns();return m("[",null,m("table",{className:"Table ExtensionManager-queueTable"},m("thead",null,m("tr",null,e.toArray().map(((t,e)=>m("th",{key:e},t.label))))),m("tbody",null,t.map(((t,a)=>m("tr",{key:a},e.toArray().map(((e,a)=>{const{label:n,content:s,...r}=e;return m("td",Object.assign({key:a},r),s(t))}))))))),m(L,{list:s().extensionManager.queue}))}operationIcon(t){return m(_(),{name:{update_check:"fas fa-sync-alt",update_major:"fas fa-play",update_minor:"fas fa-play",update_global:"fas fa-play",extension_install:"fas fa-download",extension_remove:"fas fa-times",extension_update:"fas fa-arrow-alt-circle-up",why_not:"fas fa-exclamation-circle"}[t]})}}flarum.reg.add("flarum-extension-manager","admin/components/QueueSection",O);const A=flarum.reg.get("core","common/components/Alert");var D=a.n(A);function I(t){return I="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},I(t)}function Y(t,e,a){return(e=function(t){var e=function(t,e){if("object"!==I(t)||null===t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var n=a.call(t,e);if("object"!==I(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===I(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}const R=flarum.reg.get("core","common/utils/Stream");var G=a.n(R);class W extends(h()){constructor(){super(...arguments),Y(this,"packageName",void 0)}oninit(t){super.oninit(t),this.packageName=G()("")}view(){return m("div",{className:"Form-group ExtensionManager-installer"},m("label",{htmlFor:"install-extension"},s().translator.trans("flarum-extension-manager.admin.extensions.install")),m("div",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.extensions.install_help",{extiverse:m("a",{href:"https://extiverse.com"},"extiverse.com"),semantic_link:m("a",{href:"https://devhints.io/semver"}),code:m("code",null)})),m("div",{className:"FormControl-container"},m("input",{className:"FormControl",id:"install-extension",placeholder:"vendor/package-name",bidi:this.packageName}),m(l(),{className:"Button",icon:"fas fa-download",onclick:this.onsubmit.bind(this),loading:s().extensionManager.control.isLoading("extension-install"),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.extensions.proceed"))))}data(){return{package:this.packageName()}}onsubmit(){s().extensionManager.control.requirePackage(this.data())}}flarum.reg.add("flarum-extension-manager","admin/components/Installer",W);const H=flarum.reg.get("core","common/helpers/humanTime");var Q=a.n(H);function J(t){s().extensionManager.control.setLoading(null);const e=t.response.errors[0];if(!["composer_command_failure","extension_already_installed","extension_not_installed"].includes(e.code))throw t;switch(s().alerts.clear(),e.code){case"composer_command_failure":e.guessed_cause?(s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.guessed_cause.".concat(e.guessed_cause))),s().modal.close()):s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.composer_command_failure"));break;case"extension_already_installed":s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.extension_already_installed")),s().modal.close();break;case"extension_not_installed":s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.extension_not_installed")),s().modal.close()}}class V extends(T()){constructor(){super(...arguments),Y(this,"loading",!0),Y(this,"whyNot",null)}className(){return"Modal--large WhyNotModal"}title(){return s().translator.trans("flarum-extension-manager.admin.why_not_modal.title")}oncreate(t){super.oncreate(t),this.requestWhyNot()}content(){return m("div",{className:"Modal-body"},this.loading?m(x(),null):m("pre",{className:"WhyNotModal-contents"},this.whyNot))}requestWhyNot(){s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/why-not"),body:{data:{package:this.attrs.package}}}).then((t=>{this.loading=!1,this.whyNot=t.data.reason,m.redraw()})).catch(J)}}flarum.reg.add("flarum-extension-manager","admin/components/WhyNotModal",V);const Z=flarum.reg.get("core","common/components/Dropdown");var z=a.n(Z);class K extends(h()){view(t){var e;const{extension:a,updates:n,onClickUpdate:r,whyNotWarning:o,isCore:i,isDanger:u}=this.attrs,c=null!=(e=n["latest-minor"])?e:n["latest-major"]&&!i?n["latest-major"]:null;return m("div",{className:B()({"ExtensionManager-extension":!0,"ExtensionManager-extension--core":i,"ExtensionManager-extension--danger":u})},m("div",{className:"ExtensionManager-extension-icon ExtensionIcon",style:a.icon},a.icon?m(_(),{name:a.icon.name}):""),m("div",{className:"ExtensionManager-extension-info"},m("div",{className:"ExtensionManager-extension-name"},a.extra["flarum-extension"].title),m("div",{className:"ExtensionManager-extension-version"},m("span",{className:"ExtensionManager-extension-version-current"},this.version(n.version)),c?m(q,{className:"ExtensionManager-extension-version-latest",type:n["latest-minor"]?"success":"warning"},this.version(c)):null)),m("div",{className:"ExtensionManager-extension-controls"},r&&"function"==typeof r?m(y(),{text:s().translator.trans("flarum-extension-manager.admin.extensions.update")},m(l(),{icon:"fas fa-arrow-alt-circle-up",className:"Button Button--icon Button--flat",onclick:r,"aria-label":s().translator.trans("flarum-extension-manager.admin.extensions.update")})):r?m(z(),{buttonClassName:"Button Button--icon Button--flat",icon:"fas fa-arrow-alt-circle-up",label:s().translator.trans("flarum-extension-manager.admin.extensions.update")},m(l(),{icon:"fas fa-arrow-alt-circle-up",className:"Button",onclick:r.soft},s().translator.trans("flarum-extension-manager.admin.extensions.update_soft_label")),m(l(),{icon:"fas fa-arrow-alt-circle-up",className:"Button",onclick:r.hard,disabled:!n["direct-dependency"]},s().translator.trans("flarum-extension-manager.admin.extensions.update_hard_label"))):null,o?m(y(),{text:s().translator.trans("flarum-extension-manager.admin.extensions.check_why_it_failed_updating")},m(l(),{icon:"fas fa-exclamation-circle",className:"Button Button--icon Button--flat Button--danger",onclick:()=>s().modal.show(V,{package:a.name}),"aria-label":s().translator.trans("flarum-extension-manager.admin.extensions.check_why_it_failed_updating")})):null))}version(t){return"v"===t.charAt(0)?t.substring(1):t}}flarum.reg.add("flarum-extension-manager","admin/components/ExtensionItem",K);class X extends(h()){constructor(){super(...arguments),Y(this,"updateState",void 0)}oninit(t){super.oninit(t),this.updateState=this.attrs.updateState}view(){return m("div",{className:B()("Form-group Form-group--danger ExtensionManager-majorUpdate",{"ExtensionManager-majorUpdate--failed":"failure"===this.updateState.status,"ExtensionManager-majorUpdate--incompatibleExtensions":this.updateState.incompatibleExtensions.length})},m("img",{alt:"flarum logo",src:s().forum.attribute("baseUrl")+"/assets/extensions/flarum-extension-manager/flarum.svg"}),m("label",null,s().translator.trans("flarum-extension-manager.admin.major_updater.title",{version:this.attrs.coreUpdate["latest-major"]})),m("p",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.major_updater.description")),m("div",{className:"ExtensionManager-updaterControls"},m(y(),{text:s().translator.trans("flarum-extension-manager.admin.major_updater.dry_run_help")},m(l(),{className:"Button",icon:"fas fa-vial",onclick:this.update.bind(this,!0),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.major_updater.dry_run"))),m(l(),{className:"Button Button--danger",icon:"fas fa-play",onclick:this.update.bind(this,!1),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.major_updater.update"))),this.updateState.incompatibleExtensions.length?m("div",{className:"ExtensionManager-majorUpdate-incompatibleExtensions ExtensionManager-extensions-grid"},this.updateState.incompatibleExtensions.map((t=>m(K,{extension:s().data.extensions[t.replace("flarum-","").replace("flarum-ext-","").replace("/","-")],updates:{},onClickUpdate:null,isDanger:!0})))):null,"failure"===this.updateState.status?m(D(),{type:"error",className:"ExtensionManager-majorUpdate-failure",dismissible:!1,controls:[m(l(),{className:"Button Button--text ExtensionManager-majorUpdate-failure-details",icon:"fas fa-question-circle",onclick:()=>s().modal.show(V,{package:"flarum/core"})},s().translator.trans("flarum-extension-manager.admin.major_updater.failure.why"))]},m("p",{className:"ExtensionManager-majorUpdate-failure-desc"},s().translator.trans("flarum-extension-manager.admin.major_updater.failure.desc"))):null)}update(t){s().extensionManager.control.majorUpdate({dryRun:t})}}flarum.reg.add("flarum-extension-manager","admin/components/MajorUpdater",X);class tt extends(h()){view(){const t=s().extensionManager.control.coreUpdate;return[m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.updater.updater_title")),m("div",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.updater.updater_help")),this.lastUpdateCheckView(),m("div",{className:"ExtensionManager-updaterControls"},this.controlItems().toArray()),this.availableUpdatesView()),t&&t.package["latest-major"]?m(X,{coreUpdate:t.package,updateState:s().extensionManager.control.lastUpdateRun.major}):null]}lastUpdateCheckView(){var t;return(null==(t=s().extensionManager.control.lastUpdateCheck)?void 0:t.checkedAt)&&m("p",{className:"ExtensionManager-lastUpdatedAt"},m("span",{className:"ExtensionManager-lastUpdatedAt-label"},s().translator.trans("flarum-extension-manager.admin.updater.last_update_checked_at")),m("span",{className:"ExtensionManager-lastUpdatedAt-value"},Q()(s().extensionManager.control.lastUpdateCheck.checkedAt)))||null}availableUpdatesView(){const t=s().extensionManager.control;if(s().extensionManager.control.isLoading("check")||s().extensionManager.control.isLoading("global-update"))return m("div",{className:"ExtensionManager-extensions"},m(x(),null));const e=t.coreUpdate&&t.coreUpdate.package["latest-minor"];return t.extensionUpdates.length||e?m("div",{className:"ExtensionManager-extensions"},m("div",{className:"ExtensionManager-extensions-grid"},e?m(K,{extension:t.coreUpdate.extension,updates:t.coreUpdate.package,isCore:!0,onClickUpdate:()=>t.updateCoreMinor(),whyNotWarning:t.lastUpdateRun.limitedPackages().includes("flarum/core")}):null,t.extensionUpdates.map((e=>m(K,{extension:e,updates:t.packageUpdates[e.id],onClickUpdate:{soft:()=>t.updateExtension(e,"soft"),hard:()=>t.updateExtension(e,"hard")},whyNotWarning:t.lastUpdateRun.limitedPackages().includes(e.name)}))))):m("div",{className:"ExtensionManager-extensions"},m("span",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.updater.up_to_date")))}controlItems(){const t=new(N());return t.add("updateCheck",m(l(),{className:"Button",icon:"fas fa-sync-alt",onclick:()=>s().extensionManager.control.checkForUpdates(),loading:s().extensionManager.control.isLoading("check"),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.updater.check_for_updates")),100),t.add("globalUpdate",m(l(),{className:"Button",icon:"fas fa-play",onclick:()=>s().extensionManager.control.updateGlobally(),loading:s().extensionManager.control.isLoading("global-update"),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.updater.run_global_update"))),t}}flarum.reg.add("flarum-extension-manager","admin/components/Updater",tt);const et=flarum.reg.get("core","common/components/Form");var at=a.n(et);class nt extends(h()){oninit(t){super.oninit(t)}view(){return m("div",{className:"ExtensionPage-permissions ExtensionManager-controlSection"},m("div",{className:"ExtensionPage-permissions-header"},m("div",{className:"container"},m("h2",{className:"ExtensionTitle"},s().translator.trans("flarum-extension-manager.admin.sections.control.title")))),m("div",{className:"container"},s().data["flarum-extension-manager.writable_dirs"]?m(at(),null,m(W,null),m(tt,null)):m("div",{className:"Form-group"},m(D(),{type:"warning",dismissible:!1},s().translator.trans("flarum-extension-manager.admin.file_permissions")))))}}flarum.reg.add("flarum-extension-manager","admin/components/ControlSection",nt);const st=flarum.reg.get("core","admin/components/AdminPage");var rt=a.n(st);class ot extends(h()){constructor(){super(...arguments),Y(this,"settings",{}),Y(this,"initialSettings",null),Y(this,"loading",!1),Y(this,"type",void 0)}oninit(t){super.oninit(t),this.submit(!0)}className(){return""}view(){return m("div",{className:B()("FormSection",this.className())},m("label",null,this.title()),this.content(),m("div",{className:"Form-group Form-controls"},this.submitButton()))}submitButton(){return[m(l(),{className:"Button Button--primary",loading:this.loading,onclick:()=>this.submit(!1),disabled:!this.isDirty()},s().translator.trans("core.admin.settings.submit_button"))]}customSettingComponents(){return rt().prototype.customSettingComponents()}setting(t){var e;return null!=(e=this.settings[t])?e:this.settings[t]=G()()}submit(t){this.loading=!0;const e={};Object.keys(this.settings).forEach((t=>{e[t]=this.settings[t]()})),s().request({method:"POST",url:s().forum.attribute("apiUrl")+"/extension-manager/composer",body:{type:this.type,data:t?null:e}}).then((t=>{let{data:e}=t;Object.keys(e).forEach((t=>{this.settings[t]=G()(e[t])})),this.initialSettings=Array.isArray(e)?{}:e})).finally((()=>{this.loading=!1,m.redraw()}))}isDirty(){return JSON.stringify(this.initialSettings)!==JSON.stringify(this.settings)}}flarum.reg.add("flarum-extension-manager","admin/components/ConfigureJson",ot);const it=flarum.reg.get("core","common/components/Select");var lt=a.n(it);class mt extends(T()){constructor(){super(...arguments),Y(this,"name",void 0),Y(this,"repository",void 0)}oninit(t){super.oninit(t),this.name=G()(this.attrs.name||""),this.repository=G()(this.attrs.repository||{type:"composer",url:""})}className(){return"RepositoryModal Modal--small"}title(){const t=this.attrs.repository?"edit":"add";return s().translator.trans("flarum-extension-manager.admin.composer.".concat(t,"_repository_label"))}content(){const t={composer:s().translator.trans("flarum-extension-manager.admin.composer.repositories.types.composer"),vcs:s().translator.trans("flarum-extension-manager.admin.composer.repositories.types.vcs"),path:s().translator.trans("flarum-extension-manager.admin.composer.repositories.types.path")};return m("div",{className:"Modal-body"},m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.name_label")),m("input",{className:"FormControl",bidi:this.name})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.type_label")),m(lt(),{options:t,value:this.repository().type,onchange:t=>this.repository({...this.repository(),type:t})})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.url")),m("input",{className:"FormControl",onchange:t=>this.repository({...this.repository(),url:t.target.value}),value:this.repository().url})),m("div",{className:"Form-group"},m(l(),{className:"Button Button--primary",onclick:this.submit.bind(this)},s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.submit_button"))))}submit(){this.attrs.onsubmit(this.repository(),this.name()),this.hide()}}flarum.reg.add("flarum-extension-manager","admin/components/RepositoryModal",mt);class ut extends ot{constructor(){super(...arguments),Y(this,"type","composer")}title(){return s().translator.trans("flarum-extension-manager.admin.composer.title")}className(){return"ConfigureComposer"}content(){return m("div",{className:"Form ExtensionManager-SettingsGroups-content"},this.attrs.buildSettingComponent.call(this,{setting:"minimum-stability",label:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.label"),help:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.help"),type:"select",options:{stable:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.stable"),RC:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.rc"),beta:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.beta"),alpha:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.alpha"),dev:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.dev")}}),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.label")),m("div",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.composer.repositories.help")),m("div",{className:"ConfigureComposer-repositories"},Object.keys(this.setting("repositories")()||{}).map((t=>{const e=this.setting("repositories")()[t];return m("div",{className:"ButtonGroup ButtonGroup--full"},m(l(),{className:"Button",icon:{composer:"fas fa-cubes",vcs:"fas fa-code-branch",path:"fas fa-folder"}[e.type],onclick:()=>s().modal.show(mt,{name:t,repository:e,onsubmit:(e,a)=>{const n=this.setting("repositories")();delete n[t],this.setting("repositories")(n),this.onchange(e,a)}})},t," (",e.type,")"),m(l(),{className:"Button Button--icon",icon:"fas fa-trash","aria-label":s().translator.trans("flarum-extension-manager.admin.composer.delete_repository_label"),onclick:()=>{if(confirm(w()(s().translator.trans("flarum-extension-manager.admin.composer.delete_repository_confirmation")))){const e={...this.setting("repositories")()};delete e[t],this.setting("repositories")(e)}}}))})))))}submitButton(){const t=super.submitButton();return t.push(m(l(),{className:"Button",onclick:()=>s().modal.show(mt,{onsubmit:this.onchange.bind(this)})},s().translator.trans("flarum-extension-manager.admin.composer.add_repository_label"))),t}onchange(t,e){this.setting("repositories")({...this.setting("repositories")(),[e]:t})}}flarum.reg.add("flarum-extension-manager","admin/components/ConfigureComposer",ut);const ct=flarum.reg.get("core","common/helpers/listItems");var dt=a.n(ct);class gt extends(T()){constructor(){super(...arguments),Y(this,"type",void 0),Y(this,"host",void 0),Y(this,"token",void 0)}oninit(t){super.oninit(t),this.type=G()(this.attrs.type||"bearer"),this.host=G()(this.attrs.host||""),this.token=G()(this.attrs.token||"")}className(){return"AuthMethodModal Modal--small"}title(){const t=this.attrs.host?"edit":"add";return s().translator.trans("flarum-extension-manager.admin.auth_config.".concat(t,"_label"))}content(){const t={"github-oauth":s().translator.trans("flarum-extension-manager.admin.auth_config.types.github-oauth"),"gitlab-oauth":s().translator.trans("flarum-extension-manager.admin.auth_config.types.gitlab-oauth"),"gitlab-token":s().translator.trans("flarum-extension-manager.admin.auth_config.types.gitlab-token"),bearer:s().translator.trans("flarum-extension-manager.admin.auth_config.types.bearer")};return m("div",{className:"Modal-body"},m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.type_label")),m(lt(),{options:t,value:this.type(),onchange:this.type})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.host_label")),m("input",{className:"FormControl",bidi:this.host,placeholder:s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.host_placeholder")})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.token_label")),m("textarea",{className:"FormControl",oninput:t=>this.token(t.target.value),rows:"6",placeholder:this.token().startsWith("unchanged:")?w()(s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.unchanged_token_placeholder")):""},this.token().startsWith("unchanged:")?"":this.token())),m("div",{className:"Form-group"},m(l(),{className:"Button Button--primary",onclick:this.submit.bind(this)},s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.submit_button"))))}submit(){this.attrs.onsubmit(this.type(),this.host(),this.token()),this.hide()}}flarum.reg.add("flarum-extension-manager","admin/components/AuthMethodModal",gt);class pt extends ot{constructor(){super(...arguments),Y(this,"type","auth")}title(){return s().translator.trans("flarum-extension-manager.admin.auth_config.title")}className(){return"ConfigureAuth"}content(){const t=Object.keys(this.settings),e=t.length&&t.every((t=>{const e=this.settings[t]();return Array.isArray(e)?e.length:Object.keys(e).length}));return m("div",{className:"ExtensionManager-SettingsGroups-content"},e?t.map((t=>{const e=this.settings[t]();return m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.types.".concat(t))),m("div",{className:"ConfigureAuth-hosts"},Object.keys(e).map((a=>{const n=e[a];return m("div",{className:"ButtonGroup ButtonGroup--full"},m(l(),{className:"Button",icon:"fas fa-key",onclick:()=>s().modal.show(gt,{type:t,host:a,token:n,onsubmit:this.onchange.bind(this,a)})},a),m(l(),{className:"Button Button--icon",icon:"fas fa-trash","aria-label":s().translator.trans("flarum-extension-manager.admin.auth_config.delete_label"),onclick:()=>{if(confirm(w()(s().translator.trans("flarum-extension-manager.admin.auth_config.delete_confirmation")))){const e={...this.setting(t)()};delete e[a],Object.keys(e).length?this.setting(t)(e):delete this.settings[t]}}}))}))))})):m("span",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.auth_config.no_auth_methods_configured")))}submitButton(){const t=super.submitButton();return t.push(m(l(),{className:"Button",loading:this.loading,onclick:()=>s().modal.show(gt,{onsubmit:this.onchange.bind(this,null)})},s().translator.trans("flarum-extension-manager.admin.auth_config.add_label"))),t}onchange(t,e,a,n){const s={...this.setting(e)()};t&&delete s[t],s[a]=n,this.setting(e)(s)}}flarum.reg.add("flarum-extension-manager","admin/components/ConfigureAuth",pt);class ht extends(o()){content(){const t=s().extensionData.getSettings(this.extension.id),e=[s().translator.trans("flarum-extension-manager.admin.settings.access_warning")];return s().data.debugEnabled&&e.push(s().translator.trans("flarum-extension-manager.admin.settings.debug_mode_warning")),m("div",{className:"ExtensionPage-settings"},m("div",{className:"container"},m("div",{className:"ExtensionManager-warnings Form-group"},m(D(),{className:"ExtensionManager-primaryWarning",type:"warning",dismissible:!1},m("ul",null,dt()(e)))),t?m("div",{className:"FormSectionGroup ExtensionManager-SettingsGroups"},m("div",{className:"FormSection"},m("label",null,s().translator.trans("flarum-extension-manager.admin.settings.title")),m("div",{className:"Form"},t.map(this.buildSettingComponent.bind(this))),m("div",{className:"Form-group Form--controls"},this.submitButton())),m(ut,{buildSettingComponent:this.buildSettingComponent}),m(pt,{buildSettingComponent:this.buildSettingComponent})):m("h3",{className:"ExtensionPage-subHeader"},s().translator.trans("core.admin.extension.no_settings"))))}sections(t){const e=super.sections(t);return e.setPriority("content",10),e.add("control",m(nt,null),8),"0"!==s().data.settings["flarum-extension-manager.queue_jobs"]&&s().data.settings["flarum-extension-manager.queue_jobs"]&&e.add("queue",m(O,null),5),e.remove("permissions"),e}onsaved(){super.onsaved(),m.redraw()}}flarum.reg.add("flarum-extension-manager","admin/components/SettingsPage",ht);const ft=flarum.reg.get("core","common/Model");var xt=a.n(ft);const bt=["B","kB","MB","GB","TB","PB","EB","ZB","YB"],yt=["B","kiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],vt=["b","kbit","Mbit","Gbit","Tbit","Pbit","Ebit","Zbit","Ybit"],_t=["b","kibit","Mibit","Gibit","Tibit","Pibit","Eibit","Zibit","Yibit"],kt=(t,e,a)=>{let n=t;return"string"==typeof e||Array.isArray(e)?n=t.toLocaleString(e,a):!0!==e&&void 0===a||(n=t.toLocaleString(void 0,a)),n};class Nt extends(xt()){status(){return xt().attribute("status").call(this)}operation(){return xt().attribute("operation").call(this)}command(){return xt().attribute("command").call(this)}package(){return xt().attribute("package").call(this)}output(){return xt().attribute("output").call(this)}guessedCause(){return xt().attribute("guessedCause").call(this)}createdAt(){return xt().attribute("createdAt",xt().transformDate).call(this)}startedAt(){return xt().attribute("startedAt",xt().transformDate).call(this)}finishedAt(){return xt().attribute("finishedAt",xt().transformDate).call(this)}peakMemoryUsed(){return function(t,e){if(!Number.isFinite(t))throw new TypeError("Expected a finite number, got ".concat(typeof t,": ").concat(t));const a=(e={bits:!1,binary:!1,...e}).bits?e.binary?_t:vt:e.binary?yt:bt;if(e.signed&&0===t)return" 0 ".concat(a[0]);const n=t<0,s=n?"-":e.signed?"+":"";let r;if(n&&(t=-t),void 0!==e.minimumFractionDigits&&(r={minimumFractionDigits:e.minimumFractionDigits}),void 0!==e.maximumFractionDigits&&(r={maximumFractionDigits:e.maximumFractionDigits,...r}),t<1)return s+kt(t,e.locale,r)+" "+a[0];const o=Math.min(Math.floor(e.binary?Math.log(t)/Math.log(1024):Math.log10(t)/3),a.length-1);return t/=(e.binary?1024:1e3)**o,r||(t=t.toPrecision(3)),s+kt(Number(t),e.locale,r)+" "+a[o]}(1024*xt().attribute("peakMemoryUsed").call(this))}}function Mt(){s().modal.close(),m.route.set(s().route("extension",{id:"flarum-extension-manager"})),s().extensionManager.queue.load({},!0),setTimeout((()=>{var t;null==(t=document.getElementById("ExtensionManager-queueSection"))||t.scrollIntoView({block:"nearest"})}),200)}flarum.reg.add("flarum-extension-manager","admin/models/Task",Nt),window.jumpToQueue=Mt,flarum.reg.add("flarum-extension-manager","admin/utils/jumpToQueue",Mt);class wt{constructor(){Y(this,"polling",null),Y(this,"tasks",null),Y(this,"limit",20),Y(this,"offset",0),Y(this,"total",0)}load(t,e){var a;return void 0===e&&(e=!1),this.tasks=null,t={page:{limit:this.limit,offset:this.offset,...null==(a=t)?void 0:a.page},...t},s().store.find("extension-manager-tasks",t||{}).then((t=>{var a;return this.tasks=t,this.total=null==(a=t.payload.meta)?void 0:a.total,m.redraw(),(null==t?void 0:t.find((t=>"pending"===t.status()||"running"===t.status())))?this.pollQueue(e):e?(s().extensionManager.control.setLoading(null),window.location.reload()):s().extensionManager.control.isLoading()&&s().extensionManager.control.setLoading(null),t}))}getItems(){return this.tasks}getTotalPages(){return Math.ceil(this.total/this.limit)}pageNumber(){return Math.ceil(this.offset/this.limit)}hasPrev(){return 0!==this.pageNumber()}hasNext(){return this.offset+this.limit{this.load({},t)}),6e3)}hasPending(){var t;return!(null==(t=this.tasks)||!t.find((t=>"pending"===t.status()||"running"===t.status())))}}flarum.reg.add("flarum-extension-manager","admin/states/QueueState",wt);class Et{get lastUpdateRun(){const t=JSON.parse(s().data.settings["flarum-extension-manager.last_update_run"]);return t.limitedPackages=()=>[...t.major.limitedPackages,...t.minor.limitedPackages,...t.global.limitedPackages],t}constructor(){Y(this,"loading",null),Y(this,"packageUpdates",{}),Y(this,"lastUpdateCheck",void 0),Y(this,"extensionUpdates",void 0),Y(this,"coreUpdate",null),this.lastUpdateCheck=JSON.parse(s().data.settings["flarum-extension-manager.last_update_check"]),this.extensionUpdates=this.formatExtensionUpdates(this.lastUpdateCheck),this.coreUpdate=this.formatCoreUpdate(this.lastUpdateCheck)}isLoading(t){return void 0===t&&(t=null),t&&this.loading===t||!t&&null!==this.loading}hasOperationRunning(){return this.isLoading()||s().extensionManager.queue.hasPending()}setLoading(t){this.loading=t}requirePackage(t){s().extensionManager.control.setLoading("extension-install"),s().modal.show(c()),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/extensions"),body:{data:t}}).then((t=>{if(t.processing)Mt();else{const e=t.id;s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.extensions.successful_install",{extension:e})),window.location.href="".concat(s().forum.attribute("adminUrl"),"#/extension/").concat(e),window.location.reload()}})).catch(J).finally((()=>{s().modal.close(),m.redraw()}))}checkForUpdates(){this.setLoading("check"),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/check-for-updates")}).then((t=>{t.processing?Mt():(this.lastUpdateCheck=t,this.extensionUpdates=this.formatExtensionUpdates(t),this.coreUpdate=this.formatCoreUpdate(t),this.setLoading(null),m.redraw())})).catch(J).finally((()=>{m.redraw()}))}updateCoreMinor(){confirm(w()(s().translator.trans("flarum-extension-manager.admin.minor_update_confirmation.content")))&&(s().modal.show(c()),this.setLoading("minor-update"),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/minor-update")}).then((t=>{null!=t&&t.processing?Mt():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.update_successful")),window.location.reload())})).catch(J).finally((()=>{s().modal.close(),m.redraw()})))}updateExtension(t,e){s().modal.show(c()),this.setLoading("extension-update"),s().request({method:"PATCH",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/extensions/").concat(t.id),body:{data:{updateMode:e}}}).then((e=>{null!=e&&e.processing?Mt():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.extensions.successful_update",{extension:t.extra["flarum-extension"].title})),window.location.reload())})).catch(J).finally((()=>{s().modal.close(),m.redraw()}))}updateGlobally(){s().modal.show(c()),this.setLoading("global-update"),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/global-update")}).then((t=>{null!=t&&t.processing?Mt():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.updater.global_update_successful")),window.location.reload())})).catch(J).finally((()=>{s().modal.close(),m.redraw()}))}formatExtensionUpdates(t){var e,a;return this.packageUpdates={},null==t||null==(e=t.updates)||null==(a=e.installed)||a.filter((t=>{const e=t.name.replace("/","-").replace(/(flarum-ext-)|(flarum-)/,""),a=s().data.extensions[e],n=["semver-safe-update","update-possible"].includes(t["latest-status"]);return a&&n&&(this.packageUpdates[a.id]=t),a&&n})),Object.values(s().data.extensions).filter((t=>this.packageUpdates[t.id]))}formatCoreUpdate(t){var e,a;const n=null==t||null==(e=t.updates)||null==(a=e.installed)?void 0:a.filter((t=>"flarum/core"===t.name)).pop();return n?{package:n,extension:{id:"flarum-core",name:"flarum/core",version:s().data.settings.version,icon:{backgroundImage:"url(".concat(s().data.resources[0].attributes.baseUrl,"/assets/extensions/flarum-extension-manager/flarum.svg")},extra:{"flarum-extension":{title:w()(s().translator.trans("flarum-extension-manager.admin.updater.flarum"))}}}}:null}majorUpdate(t){let{dryRun:e}=t;s().extensionManager.control.setLoading(e?"major-update-dry-run":"major-update"),s().modal.show(c());const a=this.lastUpdateRun.major;s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/major-update"),body:{data:{dryRun:e}}}).then((t=>{null!=t&&t.processing?Mt():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.update_successful")),window.location.reload())})).catch(J).catch((t=>{var e,n,r;s().modal.close(),a.status="failure",a.incompatibleExtensions=null==(e=t.response)||null==(n=e.errors)||null==(r=n.pop())?void 0:r.incompatible_extensions})).finally((()=>{m.redraw()}))}}flarum.reg.add("flarum-extension-manager","admin/states/ControlSectionState",Et);class St{constructor(){Y(this,"queue",new wt),Y(this,"control",new Et)}}flarum.reg.add("flarum-extension-manager","admin/states/ExtensionManagerState",St),s().initializers.add("flarum-extension-manager",(e=>{e.store.models["extension-manager-tasks"]=Nt,e.extensionManager=new St,e.data["flarum-extension-manager.using_sync_queue"]&&(e.data.settings["flarum-extension-manager.queue_jobs"]="0"),e.extensionData.for("flarum-extension-manager").registerSetting({setting:"flarum-extension-manager.queue_jobs",label:e.translator.trans("flarum-extension-manager.admin.settings.queue_jobs"),help:m.trust(w()(e.translator.trans("flarum-extension-manager.admin.settings.queue_jobs_help",{basic_impl_link:"https://discuss.flarum.org/d/28151-database-queue-the-simplest-queue-even-for-shared-hosting",adv_impl_link:"https://discuss.flarum.org/d/21873-redis-sessions-cache-queues",php_version:"".concat(e.data.phpVersion,""),folder_perms_link:"https://docs.flarum.org/install#folder-ownership"}))),type:"boolean",disabled:e.data["flarum-extension-manager.using_sync_queue"]}).registerSetting({setting:"flarum-extension-manager.task_retention_days",label:e.translator.trans("flarum-extension-manager.admin.settings.task_retention_days"),help:e.translator.trans("flarum-extension-manager.admin.settings.task_retention_days_help"),type:"number"}).registerPage(ht),(0,t.extend)(o().prototype,"topItems",(function(t){"flarum-extension-manager"===this.extension.id||g()(this.extension.id)||t.add("remove",m(l(),{className:"Button Button--danger",icon:"fas fa-times",onclick:()=>{e.modal.show(c()),e.request({url:"".concat(e.forum.attribute("apiUrl"),"/extension-manager/extensions/").concat(this.extension.id),method:"DELETE"}).then((t=>{null!=t&&t.processing?Mt():(e.alerts.show({type:"success"},e.translator.trans("flarum-extension-manager.admin.extensions.successful_remove")),window.location=e.forum.attribute("adminUrl"))})).finally((()=>{e.modal.close()}))}},e.translator.trans("flarum-extension-manager.admin.extensions.remove")))}))}))})(),module.exports=n})(); +(()=>{var t={647:function(t){t.exports=function(){"use strict";var t,e,a=1e3,n=6e4,s=36e5,r=864e5,o=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,i=31536e6,l=2592e6,m=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,u={years:i,months:l,days:r,hours:s,minutes:n,seconds:a,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof b},d=function(t,e,a){return new b(t,a,e.$l)},g=function(t){return e.p(t)+"s"},p=function(t){return t<0},h=function(t){return p(t)?Math.ceil(t):Math.floor(t)},f=function(t){return Math.abs(t)},x=function(t,e){return t?p(t)?{negative:!0,format:""+f(t)+e}:{negative:!1,format:""+t+e}:{negative:!1,format:""}},b=function(){function p(t,e,a){var n=this;if(this.$d={},this.$l=a,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),e)return d(t*u[g(e)],this);if("number"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if("object"==typeof t)return Object.keys(t).forEach((function(e){n.$d[g(e)]=t[e]})),this.calMilliseconds(),this;if("string"==typeof t){var s=t.match(m);if(s){var r=s.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var f=p.prototype;return f.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(e,a){return e+(t.$d[a]||0)*u[a]}),0)},f.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=h(t/i),t%=i,this.$d.months=h(t/l),t%=l,this.$d.days=h(t/r),t%=r,this.$d.hours=h(t/s),t%=s,this.$d.minutes=h(t/n),t%=n,this.$d.seconds=h(t/a),t%=a,this.$d.milliseconds=t},f.toISOString=function(){var t=x(this.$d.years,"Y"),e=x(this.$d.months,"M"),a=+this.$d.days||0;this.$d.weeks&&(a+=7*this.$d.weeks);var n=x(a,"D"),s=x(this.$d.hours,"H"),r=x(this.$d.minutes,"M"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3);var i=x(o,"S"),l=t.negative||e.negative||n.negative||s.negative||r.negative||i.negative,m=s.format||r.format||i.format?"T":"",u=(l?"-":"")+"P"+t.format+e.format+n.format+m+s.format+r.format+i.format;return"P"===u||"-P"===u?"P0D":u},f.toJSON=function(){return this.toISOString()},f.format=function(t){var a=t||"YYYY-MM-DDTHH:mm:ss",n={Y:this.$d.years,YY:e.s(this.$d.years,2,"0"),YYYY:e.s(this.$d.years,4,"0"),M:this.$d.months,MM:e.s(this.$d.months,2,"0"),D:this.$d.days,DD:e.s(this.$d.days,2,"0"),H:this.$d.hours,HH:e.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:e.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:e.s(this.$d.seconds,2,"0"),SSS:e.s(this.$d.milliseconds,3,"0")};return a.replace(o,(function(t,e){return e||String(n[t])}))},f.as=function(t){return this.$ms/u[g(t)]},f.get=function(t){var e=this.$ms,a=g(t);return"milliseconds"===a?e%=1e3:e="weeks"===a?h(e/u[a]):this.$d[a],0===e?0:e},f.add=function(t,e,a){var n;return n=e?t*u[g(e)]:c(t)?t.$ms:d(t,this).$ms,d(this.$ms+n*(a?-1:1),this)},f.subtract=function(t,e){return this.add(t,e,!0)},f.locale=function(t){var e=this.clone();return e.$l=t,e},f.clone=function(){return d(this.$ms,this)},f.humanize=function(e){return t().add(this.$ms,"ms").locale(this.$l).fromNow(!e)},f.milliseconds=function(){return this.get("milliseconds")},f.asMilliseconds=function(){return this.as("milliseconds")},f.seconds=function(){return this.get("seconds")},f.asSeconds=function(){return this.as("seconds")},f.minutes=function(){return this.get("minutes")},f.asMinutes=function(){return this.as("minutes")},f.hours=function(){return this.get("hours")},f.asHours=function(){return this.as("hours")},f.days=function(){return this.get("days")},f.asDays=function(){return this.as("days")},f.weeks=function(){return this.get("weeks")},f.asWeeks=function(){return this.as("weeks")},f.months=function(){return this.get("months")},f.asMonths=function(){return this.as("months")},f.years=function(){return this.get("years")},f.asYears=function(){return this.as("years")},p}();return function(a,n,s){t=s,e=s().$utils(),s.duration=function(t,e){var a=s.locale();return d(t,{$l:a},e)},s.isDuration=c;var r=n.prototype.add,o=n.prototype.subtract;n.prototype.add=function(t,e){return c(t)&&(t=t.asMilliseconds()),r.bind(this)(t,e)},n.prototype.subtract=function(t,e){return c(t)&&(t=t.asMilliseconds()),o.bind(this)(t,e)}}}()}},e={};function a(n){var s=e[n];if(void 0!==s)return s.exports;var r=e[n]={exports:{}};return t[n].call(r.exports,r,r.exports,a),r.exports}a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";a.r(n);const t=flarum.reg.get("core","common/extend"),e=flarum.reg.get("core","admin/app");var s=a.n(e);const r=flarum.reg.get("core","admin/components/ExtensionPage");var o=a.n(r);const i=flarum.reg.get("core","common/components/Button");var l=a.n(i);const u=flarum.reg.get("core","admin/components/LoadingModal");var c=a.n(u);const d=flarum.reg.get("core","admin/utils/isExtensionEnabled");var g=a.n(d);const p=flarum.reg.get("core","common/Component");var h=a.n(p);const f=flarum.reg.get("core","common/components/LoadingIndicator");var x=a.n(f);const b=flarum.reg.get("core","common/components/Tooltip");var y=a.n(b);const v=flarum.reg.get("core","common/components/Icon");var _=a.n(v);const k=flarum.reg.get("core","common/utils/ItemList");var N=a.n(k);const M=flarum.reg.get("core","common/utils/extractText");var w=a.n(M);const E=flarum.reg.get("core","common/components/Link");var S=a.n(E);const U=flarum.reg.get("core","common/utils/classList");var B=a.n(U);class q extends(h()){view(t){const{className:e,type:a,...n}=this.attrs;return m("span",Object.assign({className:B()(["Label","Label--".concat(this.attrs.type),e])},n),t.children)}}flarum.reg.add("flarum-extension-manager","admin/components/Label",q);const j=flarum.reg.get("core","common/components/Modal");var T=a.n(j);class $ extends(T()){className(){return"Modal--large QuickModal"}title(){return s().translator.trans("flarum-extension-manager.admin.sections.queue.operations.".concat(this.attrs.task.operation()))}content(){return m("div",{className:"Modal-body"},m("div",{className:"TaskOutputModal-data"},"failure"===this.attrs.task.status()&&m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.guessed_cause")),m("div",{className:"FormControl TaskOutputModal-data-guessed-cause"},this.attrs.task.guessedCause()&&s().translator.trans("flarum-extension-manager.admin.exceptions.guessed_cause."+this.attrs.task.guessedCause())||s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.cause_unknown"))),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.command")),m("div",{className:"FormControl TaskOutputModal-data-command"},m("code",null,"$ composer ",this.attrs.task.command()))),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.output")),m("div",{className:"FormControl TaskOutputModal-data-output"},m("code",null,m("pre",null,this.attrs.task.output()))))))}}flarum.reg.add("flarum-extension-manager","admin/components/TaskOutputModal",$);var C=a(647),P=a.n(C);function F(t,e){dayjs.extend(P());const a=dayjs(e).diff(t);return dayjs.duration(a).humanize()}flarum.reg.add("flarum-extension-manager","admin/utils/humanDuration",F);class L extends(h()){view(){return m("nav",{className:"Pagination UserListPage-gridPagination"},m(l(),{disabled:!this.attrs.list.hasPrev()||s().extensionManager.control.isLoading(),title:s().translator.trans("core.admin.users.pagination.back_button"),onclick:()=>this.attrs.list.prev(),icon:"fas fa-chevron-left",className:"Button Button--icon UserListPage-backBtn"}),m("span",{className:"UserListPage-pageNumber"},s().translator.trans("core.admin.users.pagination.page_counter",{current:this.attrs.list.pageNumber()+1,total:this.attrs.list.getTotalPages()})),m(l(),{disabled:!this.attrs.list.hasNext()||s().extensionManager.control.isLoading(),title:s().translator.trans("core.admin.users.pagination.next_button"),onclick:()=>this.attrs.list.next(),icon:"fas fa-chevron-right",className:"Button Button--icon UserListPage-nextBtn"}))}}flarum.reg.add("flarum-extension-manager","admin/components/Pagination",L);class O extends(h()){oninit(t){super.oninit(t),s().extensionManager.queue.load()}view(){return m("section",{id:"ExtensionManager-queueSection",className:"ExtensionPage-permissions ExtensionManager-queueSection"},m("div",{className:"ExtensionPage-permissions-header ExtensionManager-queueSection-header"},m("div",{className:"container"},m("h2",{className:"ExtensionTitle"},s().translator.trans("flarum-extension-manager.admin.sections.queue.title")),m(l(),{className:"Button Button--icon",icon:"fas fa-sync-alt",onclick:()=>s().extensionManager.queue.load(),"aria-label":s().translator.trans("flarum-extension-manager.admin.sections.queue.refresh"),disabled:s().extensionManager.control.isLoading()}))),m("div",{className:"container"},this.queueTable()))}columns(){const t=new(N());return t.add("operation",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.operation")),content:t=>m("div",{className:"ExtensionManager-queueTable-operation"},m("span",{className:"ExtensionManager-queueTable-operation-icon"},this.operationIcon(t.operation())),m("span",{className:"ExtensionManager-queueTable-operation-name"},s().translator.trans("flarum-extension-manager.admin.sections.queue.operations.".concat(t.operation()))))},80),t.add("package",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.package")),content:t=>{var e;const a=s().data.extensions[null==(e=t.package())?void 0:e.replace(/(\/flarum-|\/flarum-ext-|\/)/g,"-")];return a?m(S(),{className:"ExtensionManager-queueTable-package",href:s().route("extension",{id:a.id})},m("div",{className:"ExtensionManager-queueTable-package-icon ExtensionIcon",style:a.icon},!!a.icon&&m(_(),{name:a.icon.name})),m("div",{className:"ExtensionManager-queueTable-package-details"},m("span",{className:"ExtensionManager-queueTable-package-title"},a.extra["flarum-extension"].title),m("span",{className:"ExtensionManager-queueTable-package-name"},t.package()))):t.package()}},75),t.add("status",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.status")),content:t=>m("[",null,m(q,{className:"ExtensionManager-queueTable-status",type:{running:"neutral",failure:"error",pending:"warning",success:"success"}[t.status()]},s().translator.trans("flarum-extension-manager.admin.sections.queue.statuses.".concat(t.status()))),["pending","running"].includes(t.status())&&m(x(),{size:"small",display:"inline"}))},70),t.add("elapsedTime",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.elapsed_time")),content:t=>t.startedAt()&&t.finishedAt()?m(y(),{text:"".concat(dayjs(t.startedAt()).format("LL LTS")," ").concat(dayjs(t.finishedAt()).format("LL LTS"))},m("span",null,F(t.startedAt(),t.finishedAt()))):s().translator.trans("flarum-extension-manager.admin.sections.queue.task_just_started")},65),t.add("memoryUsed",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.peak_memory_used")),content:t=>m("span",null,t.peakMemoryUsed())},60),t.add("details",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.details")),content:t=>m(l(),{className:"Button Button--icon Table-controls-item",icon:"fas fa-file-alt","aria-label":s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.details"),onclick:()=>s().modal.show($,{task:t}),disabled:["pending","running"].includes(t.status())}),className:"Table-controls"},55),t}queueTable(){const t=s().extensionManager.queue.getItems();if(!t)return m(x(),null);if(t&&!t.length)return m("h3",{className:"ExtensionPage-subHeader"},s().translator.trans("flarum-extension-manager.admin.sections.queue.none"));const e=this.columns();return m("[",null,m("table",{className:"Table ExtensionManager-queueTable"},m("thead",null,m("tr",null,e.toArray().map(((t,e)=>m("th",{key:e},t.label))))),m("tbody",null,t.map(((t,a)=>m("tr",{key:a},e.toArray().map(((e,a)=>{const{label:n,content:s,...r}=e;return m("td",Object.assign({key:a},r),s(t))}))))))),m(L,{list:s().extensionManager.queue}))}operationIcon(t){return m(_(),{name:{update_check:"fas fa-sync-alt",update_major:"fas fa-play",update_minor:"fas fa-play",update_global:"fas fa-play",extension_install:"fas fa-download",extension_remove:"fas fa-times",extension_update:"fas fa-arrow-alt-circle-up",why_not:"fas fa-exclamation-circle"}[t]})}}flarum.reg.add("flarum-extension-manager","admin/components/QueueSection",O);const A=flarum.reg.get("core","common/components/Alert");var D=a.n(A);function I(t){return I="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},I(t)}function Y(t,e,a){return(e=function(t){var e=function(t,e){if("object"!==I(t)||null===t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var n=a.call(t,e);if("object"!==I(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===I(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}const R=flarum.reg.get("core","common/utils/Stream");var G=a.n(R);class W extends(h()){constructor(){super(...arguments),Y(this,"packageName",void 0)}oninit(t){super.oninit(t),this.packageName=G()("")}view(){return m("div",{className:"Form-group ExtensionManager-installer"},m("label",{htmlFor:"install-extension"},s().translator.trans("flarum-extension-manager.admin.extensions.install")),m("div",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.extensions.install_help",{extiverse:m("a",{href:"https://extiverse.com"},"extiverse.com"),semantic_link:m("a",{href:"https://devhints.io/semver"}),code:m("code",null)})),m("div",{className:"FormControl-container"},m("input",{className:"FormControl",id:"install-extension",placeholder:"vendor/package-name",bidi:this.packageName}),m(l(),{className:"Button",icon:"fas fa-download",onclick:this.onsubmit.bind(this),loading:s().extensionManager.control.isLoading("extension-install"),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.extensions.proceed"))))}data(){return{package:this.packageName()}}onsubmit(){s().extensionManager.control.requirePackage(this.data())}}flarum.reg.add("flarum-extension-manager","admin/components/Installer",W);const H=flarum.reg.get("core","common/helpers/humanTime");var Q=a.n(H);function J(t){s().extensionManager.control.setLoading(null);const e=t.response.errors[0];if(!["composer_command_failure","extension_already_installed","extension_not_installed"].includes(e.code))throw t;switch(s().alerts.clear(),e.code){case"composer_command_failure":e.guessed_cause?(s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.guessed_cause.".concat(e.guessed_cause))),s().modal.close()):s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.composer_command_failure"));break;case"extension_already_installed":s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.extension_already_installed")),s().modal.close();break;case"extension_not_installed":s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.extension_not_installed")),s().modal.close()}}class V extends(T()){constructor(){super(...arguments),Y(this,"loading",!0),Y(this,"whyNot",null)}className(){return"Modal--large WhyNotModal"}title(){return s().translator.trans("flarum-extension-manager.admin.why_not_modal.title")}oncreate(t){super.oncreate(t),this.requestWhyNot()}content(){return m("div",{className:"Modal-body"},this.loading?m(x(),null):m("pre",{className:"WhyNotModal-contents"},this.whyNot))}requestWhyNot(){s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/why-not"),body:{data:{package:this.attrs.package}}}).then((t=>{this.loading=!1,this.whyNot=t.data.reason,m.redraw()})).catch(J)}}flarum.reg.add("flarum-extension-manager","admin/components/WhyNotModal",V);const Z=flarum.reg.get("core","common/components/Dropdown");var z=a.n(Z);class K extends(h()){view(t){var e;const{extension:a,updates:n,onClickUpdate:r,whyNotWarning:o,isCore:i,isDanger:u}=this.attrs,c=null!=(e=n["latest-minor"])?e:n["latest-major"]&&!i?n["latest-major"]:null;return m("div",{className:B()({"ExtensionManager-extension":!0,"ExtensionManager-extension--core":i,"ExtensionManager-extension--danger":u})},m("div",{className:"ExtensionManager-extension-icon ExtensionIcon",style:a.icon},a.icon?m(_(),{name:a.icon.name}):""),m("div",{className:"ExtensionManager-extension-info"},m("div",{className:"ExtensionManager-extension-name"},a.extra["flarum-extension"].title),m("div",{className:"ExtensionManager-extension-version"},m("span",{className:"ExtensionManager-extension-version-current"},this.version(n.version)),c?m(q,{className:"ExtensionManager-extension-version-latest",type:n["latest-minor"]?"success":"warning"},this.version(c)):null)),m("div",{className:"ExtensionManager-extension-controls"},r&&"function"==typeof r?m(y(),{text:s().translator.trans("flarum-extension-manager.admin.extensions.update")},m(l(),{icon:"fas fa-arrow-alt-circle-up",className:"Button Button--icon Button--flat",onclick:r,"aria-label":s().translator.trans("flarum-extension-manager.admin.extensions.update")})):r?m(z(),{buttonClassName:"Button Button--icon Button--flat",icon:"fas fa-arrow-alt-circle-up",label:s().translator.trans("flarum-extension-manager.admin.extensions.update")},m(l(),{icon:"fas fa-arrow-alt-circle-up",className:"Button",onclick:r.soft},s().translator.trans("flarum-extension-manager.admin.extensions.update_soft_label")),m(l(),{icon:"fas fa-arrow-alt-circle-up",className:"Button",onclick:r.hard,disabled:!n["direct-dependency"]},s().translator.trans("flarum-extension-manager.admin.extensions.update_hard_label"))):null,o?m(y(),{text:s().translator.trans("flarum-extension-manager.admin.extensions.check_why_it_failed_updating")},m(l(),{icon:"fas fa-exclamation-circle",className:"Button Button--icon Button--flat Button--danger",onclick:()=>s().modal.show(V,{package:a.name}),"aria-label":s().translator.trans("flarum-extension-manager.admin.extensions.check_why_it_failed_updating")})):null))}version(t){return"v"===t.charAt(0)?t.substring(1):t}}flarum.reg.add("flarum-extension-manager","admin/components/ExtensionItem",K);class X extends(h()){constructor(){super(...arguments),Y(this,"updateState",void 0)}oninit(t){super.oninit(t),this.updateState=this.attrs.updateState}view(){return m("div",{className:B()("Form-group Form-group--danger ExtensionManager-majorUpdate",{"ExtensionManager-majorUpdate--failed":"failure"===this.updateState.status,"ExtensionManager-majorUpdate--incompatibleExtensions":this.updateState.incompatibleExtensions.length})},m("img",{alt:"flarum logo",src:s().forum.attribute("baseUrl")+"/assets/extensions/flarum-extension-manager/flarum.svg"}),m("label",null,s().translator.trans("flarum-extension-manager.admin.major_updater.title",{version:this.attrs.coreUpdate["latest-major"]})),m("p",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.major_updater.description")),m("div",{className:"ExtensionManager-updaterControls"},m(y(),{text:s().translator.trans("flarum-extension-manager.admin.major_updater.dry_run_help")},m(l(),{className:"Button",icon:"fas fa-vial",onclick:this.update.bind(this,!0),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.major_updater.dry_run"))),m(l(),{className:"Button Button--danger",icon:"fas fa-play",onclick:this.update.bind(this,!1),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.major_updater.update"))),this.updateState.incompatibleExtensions.length?m("div",{className:"ExtensionManager-majorUpdate-incompatibleExtensions ExtensionManager-extensions-grid"},this.updateState.incompatibleExtensions.map((t=>m(K,{extension:s().data.extensions[t.replace("flarum-","").replace("flarum-ext-","").replace("/","-")],updates:{},onClickUpdate:null,isDanger:!0})))):null,"failure"===this.updateState.status?m(D(),{type:"error",className:"ExtensionManager-majorUpdate-failure",dismissible:!1,controls:[m(l(),{className:"Button Button--text ExtensionManager-majorUpdate-failure-details",icon:"fas fa-question-circle",onclick:()=>s().modal.show(V,{package:"flarum/core"})},s().translator.trans("flarum-extension-manager.admin.major_updater.failure.why"))]},m("p",{className:"ExtensionManager-majorUpdate-failure-desc"},s().translator.trans("flarum-extension-manager.admin.major_updater.failure.desc"))):null)}update(t){s().extensionManager.control.majorUpdate({dryRun:t})}}flarum.reg.add("flarum-extension-manager","admin/components/MajorUpdater",X);class tt extends(h()){view(){const t=s().extensionManager.control.coreUpdate;return[m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.updater.updater_title")),m("div",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.updater.updater_help")),this.lastUpdateCheckView(),m("div",{className:"ExtensionManager-updaterControls"},this.controlItems().toArray()),this.availableUpdatesView()),t&&t.package["latest-major"]?m(X,{coreUpdate:t.package,updateState:s().extensionManager.control.lastUpdateRun.major}):null]}lastUpdateCheckView(){var t;return(null==(t=s().extensionManager.control.lastUpdateCheck)?void 0:t.checkedAt)&&m("p",{className:"ExtensionManager-lastUpdatedAt"},m("span",{className:"ExtensionManager-lastUpdatedAt-label"},s().translator.trans("flarum-extension-manager.admin.updater.last_update_checked_at")),m("span",{className:"ExtensionManager-lastUpdatedAt-value"},Q()(s().extensionManager.control.lastUpdateCheck.checkedAt)))||null}availableUpdatesView(){const t=s().extensionManager.control;if(s().extensionManager.control.isLoading("check")||s().extensionManager.control.isLoading("global-update"))return m("div",{className:"ExtensionManager-extensions"},m(x(),null));const e=t.coreUpdate&&t.coreUpdate.package["latest-minor"];return t.extensionUpdates.length||e?m("div",{className:"ExtensionManager-extensions"},m("div",{className:"ExtensionManager-extensions-grid"},e?m(K,{extension:t.coreUpdate.extension,updates:t.coreUpdate.package,isCore:!0,onClickUpdate:()=>t.updateCoreMinor(),whyNotWarning:t.lastUpdateRun.limitedPackages().includes("flarum/core")}):null,t.extensionUpdates.map((e=>m(K,{extension:e,updates:t.packageUpdates[e.id],onClickUpdate:{soft:()=>t.updateExtension(e,"soft"),hard:()=>t.updateExtension(e,"hard")},whyNotWarning:t.lastUpdateRun.limitedPackages().includes(e.name)}))))):m("div",{className:"ExtensionManager-extensions"},m("span",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.updater.up_to_date")))}controlItems(){const t=new(N());return t.add("updateCheck",m(l(),{className:"Button",icon:"fas fa-sync-alt",onclick:()=>s().extensionManager.control.checkForUpdates(),loading:s().extensionManager.control.isLoading("check"),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.updater.check_for_updates")),100),t.add("globalUpdate",m(l(),{className:"Button",icon:"fas fa-play",onclick:()=>s().extensionManager.control.updateGlobally(),loading:s().extensionManager.control.isLoading("global-update"),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.updater.run_global_update"))),t}}flarum.reg.add("flarum-extension-manager","admin/components/Updater",tt);const et=flarum.reg.get("core","common/components/Form");var at=a.n(et);class nt extends(h()){oninit(t){super.oninit(t)}view(){return m("div",{className:"ExtensionPage-permissions ExtensionManager-controlSection"},m("div",{className:"ExtensionPage-permissions-header"},m("div",{className:"container"},m("h2",{className:"ExtensionTitle"},s().translator.trans("flarum-extension-manager.admin.sections.control.title")))),m("div",{className:"container"},s().data["flarum-extension-manager.writable_dirs"]?m(at(),null,m(W,null),m(tt,null)):m("div",{className:"Form-group"},m(D(),{type:"warning",dismissible:!1},s().translator.trans("flarum-extension-manager.admin.file_permissions")))))}}flarum.reg.add("flarum-extension-manager","admin/components/ControlSection",nt);const st=flarum.reg.get("core","common/components/FormGroup");var rt=a.n(st);class ot extends(h()){constructor(){super(...arguments),Y(this,"settings",{}),Y(this,"initialSettings",null),Y(this,"loading",!1),Y(this,"type",void 0)}oninit(t){super.oninit(t),this.submit(!0)}className(){return""}view(){return m("div",{className:B()("FormSection",this.className())},m("label",null,this.title()),this.content(),m("div",{className:"Form-group Form-controls"},this.submitButton()))}submitButton(){return[m(l(),{className:"Button Button--primary",loading:this.loading,onclick:()=>this.submit(!1),disabled:!this.isDirty()},s().translator.trans("core.admin.settings.submit_button"))]}customSettingComponents(){return rt().prototype.customFieldComponents()}setting(t){var e;return null!=(e=this.settings[t])?e:this.settings[t]=G()()}submit(t){this.loading=!0;const e={};Object.keys(this.settings).forEach((t=>{e[t]=this.settings[t]()})),s().request({method:"POST",url:s().forum.attribute("apiUrl")+"/extension-manager/composer",body:{type:this.type,data:t?null:e}}).then((t=>{let{data:e}=t;Object.keys(e).forEach((t=>{this.settings[t]=G()(e[t])})),this.initialSettings=Array.isArray(e)?{}:e})).finally((()=>{this.loading=!1,m.redraw()}))}isDirty(){return JSON.stringify(this.initialSettings)!==JSON.stringify(this.settings)}}flarum.reg.add("flarum-extension-manager","admin/components/ConfigureJson",ot);const it=flarum.reg.get("core","common/components/Select");var lt=a.n(it);class mt extends(T()){constructor(){super(...arguments),Y(this,"name",void 0),Y(this,"repository",void 0)}oninit(t){super.oninit(t),this.name=G()(this.attrs.name||""),this.repository=G()(this.attrs.repository||{type:"composer",url:""})}className(){return"RepositoryModal Modal--small"}title(){const t=this.attrs.repository?"edit":"add";return s().translator.trans("flarum-extension-manager.admin.composer.".concat(t,"_repository_label"))}content(){const t={composer:s().translator.trans("flarum-extension-manager.admin.composer.repositories.types.composer"),vcs:s().translator.trans("flarum-extension-manager.admin.composer.repositories.types.vcs"),path:s().translator.trans("flarum-extension-manager.admin.composer.repositories.types.path")};return m("div",{className:"Modal-body"},m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.name_label")),m("input",{className:"FormControl",bidi:this.name})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.type_label")),m(lt(),{options:t,value:this.repository().type,onchange:t=>this.repository({...this.repository(),type:t})})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.url")),m("input",{className:"FormControl",onchange:t=>this.repository({...this.repository(),url:t.target.value}),value:this.repository().url})),m("div",{className:"Form-group"},m(l(),{className:"Button Button--primary",onclick:this.submit.bind(this)},s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.submit_button"))))}submit(){this.attrs.onsubmit(this.repository(),this.name()),this.hide()}}flarum.reg.add("flarum-extension-manager","admin/components/RepositoryModal",mt);class ut extends ot{constructor(){super(...arguments),Y(this,"type","composer")}title(){return s().translator.trans("flarum-extension-manager.admin.composer.title")}className(){return"ConfigureComposer"}content(){return m("div",{className:"Form ExtensionManager-SettingsGroups-content"},this.attrs.buildSettingComponent.call(this,{setting:"minimum-stability",label:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.label"),help:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.help"),type:"select",options:{stable:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.stable"),RC:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.rc"),beta:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.beta"),alpha:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.alpha"),dev:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.dev")}}),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.label")),m("div",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.composer.repositories.help")),m("div",{className:"ConfigureComposer-repositories"},Object.keys(this.setting("repositories")()||{}).map((t=>{const e=this.setting("repositories")()[t];return m("div",{className:"ButtonGroup ButtonGroup--full"},m(l(),{className:"Button",icon:{composer:"fas fa-cubes",vcs:"fas fa-code-branch",path:"fas fa-folder"}[e.type],onclick:()=>s().modal.show(mt,{name:t,repository:e,onsubmit:(e,a)=>{const n=this.setting("repositories")();delete n[t],this.setting("repositories")(n),this.onchange(e,a)}})},t," (",e.type,")"),m(l(),{className:"Button Button--icon",icon:"fas fa-trash","aria-label":s().translator.trans("flarum-extension-manager.admin.composer.delete_repository_label"),onclick:()=>{if(confirm(w()(s().translator.trans("flarum-extension-manager.admin.composer.delete_repository_confirmation")))){const e={...this.setting("repositories")()};delete e[t],this.setting("repositories")(e)}}}))})))))}submitButton(){const t=super.submitButton();return t.push(m(l(),{className:"Button",onclick:()=>s().modal.show(mt,{onsubmit:this.onchange.bind(this)})},s().translator.trans("flarum-extension-manager.admin.composer.add_repository_label"))),t}onchange(t,e){this.setting("repositories")({...this.setting("repositories")(),[e]:t})}}flarum.reg.add("flarum-extension-manager","admin/components/ConfigureComposer",ut);const ct=flarum.reg.get("core","common/helpers/listItems");var dt=a.n(ct);class gt extends(T()){constructor(){super(...arguments),Y(this,"type",void 0),Y(this,"host",void 0),Y(this,"token",void 0)}oninit(t){super.oninit(t),this.type=G()(this.attrs.type||"bearer"),this.host=G()(this.attrs.host||""),this.token=G()(this.attrs.token||"")}className(){return"AuthMethodModal Modal--small"}title(){const t=this.attrs.host?"edit":"add";return s().translator.trans("flarum-extension-manager.admin.auth_config.".concat(t,"_label"))}content(){const t={"github-oauth":s().translator.trans("flarum-extension-manager.admin.auth_config.types.github-oauth"),"gitlab-oauth":s().translator.trans("flarum-extension-manager.admin.auth_config.types.gitlab-oauth"),"gitlab-token":s().translator.trans("flarum-extension-manager.admin.auth_config.types.gitlab-token"),bearer:s().translator.trans("flarum-extension-manager.admin.auth_config.types.bearer")};return m("div",{className:"Modal-body"},m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.type_label")),m(lt(),{options:t,value:this.type(),onchange:this.type})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.host_label")),m("input",{className:"FormControl",bidi:this.host,placeholder:s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.host_placeholder")})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.token_label")),m("textarea",{className:"FormControl",oninput:t=>this.token(t.target.value),rows:"6",placeholder:this.token().startsWith("unchanged:")?w()(s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.unchanged_token_placeholder")):""},this.token().startsWith("unchanged:")?"":this.token())),m("div",{className:"Form-group"},m(l(),{className:"Button Button--primary",onclick:this.submit.bind(this)},s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.submit_button"))))}submit(){this.attrs.onsubmit(this.type(),this.host(),this.token()),this.hide()}}flarum.reg.add("flarum-extension-manager","admin/components/AuthMethodModal",gt);class pt extends ot{constructor(){super(...arguments),Y(this,"type","auth")}title(){return s().translator.trans("flarum-extension-manager.admin.auth_config.title")}className(){return"ConfigureAuth"}content(){const t=Object.keys(this.settings),e=t.length&&t.every((t=>{const e=this.settings[t]();return Array.isArray(e)?e.length:Object.keys(e).length}));return m("div",{className:"ExtensionManager-SettingsGroups-content"},e?t.map((t=>{const e=this.settings[t]();return m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.types.".concat(t))),m("div",{className:"ConfigureAuth-hosts"},Object.keys(e).map((a=>{const n=e[a];return m("div",{className:"ButtonGroup ButtonGroup--full"},m(l(),{className:"Button",icon:"fas fa-key",onclick:()=>s().modal.show(gt,{type:t,host:a,token:n,onsubmit:this.onchange.bind(this,a)})},a),m(l(),{className:"Button Button--icon",icon:"fas fa-trash","aria-label":s().translator.trans("flarum-extension-manager.admin.auth_config.delete_label"),onclick:()=>{if(confirm(w()(s().translator.trans("flarum-extension-manager.admin.auth_config.delete_confirmation")))){const e={...this.setting(t)()};delete e[a],Object.keys(e).length?this.setting(t)(e):delete this.settings[t]}}}))}))))})):m("span",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.auth_config.no_auth_methods_configured")))}submitButton(){const t=super.submitButton();return t.push(m(l(),{className:"Button",loading:this.loading,onclick:()=>s().modal.show(gt,{onsubmit:this.onchange.bind(this,null)})},s().translator.trans("flarum-extension-manager.admin.auth_config.add_label"))),t}onchange(t,e,a,n){const s={...this.setting(e)()};t&&delete s[t],s[a]=n,this.setting(e)(s)}}flarum.reg.add("flarum-extension-manager","admin/components/ConfigureAuth",pt);class ht extends(o()){content(){const t=s().extensionData.getSettings(this.extension.id),e=[s().translator.trans("flarum-extension-manager.admin.settings.access_warning")];return s().data.debugEnabled&&e.push(s().translator.trans("flarum-extension-manager.admin.settings.debug_mode_warning")),m("div",{className:"ExtensionPage-settings"},m("div",{className:"container"},m("div",{className:"ExtensionManager-warnings Form-group"},m(D(),{className:"ExtensionManager-primaryWarning",type:"warning",dismissible:!1},m("ul",null,dt()(e)))),t?m("div",{className:"FormSectionGroup ExtensionManager-SettingsGroups"},m("div",{className:"FormSection"},m("label",null,s().translator.trans("flarum-extension-manager.admin.settings.title")),m("div",{className:"Form"},t.map(this.buildSettingComponent.bind(this))),m("div",{className:"Form-group Form--controls"},this.submitButton())),m(ut,{buildSettingComponent:this.buildSettingComponent}),m(pt,{buildSettingComponent:this.buildSettingComponent})):m("h3",{className:"ExtensionPage-subHeader"},s().translator.trans("core.admin.extension.no_settings"))))}sections(t){const e=super.sections(t);return e.setPriority("content",10),e.add("control",m(nt,null),8),"0"!==s().data.settings["flarum-extension-manager.queue_jobs"]&&s().data.settings["flarum-extension-manager.queue_jobs"]&&e.add("queue",m(O,null),5),e.remove("permissions"),e}onsaved(){super.onsaved(),m.redraw()}}flarum.reg.add("flarum-extension-manager","admin/components/SettingsPage",ht);const ft=flarum.reg.get("core","common/Model");var xt=a.n(ft);const bt=["B","kB","MB","GB","TB","PB","EB","ZB","YB"],yt=["B","kiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],vt=["b","kbit","Mbit","Gbit","Tbit","Pbit","Ebit","Zbit","Ybit"],_t=["b","kibit","Mibit","Gibit","Tibit","Pibit","Eibit","Zibit","Yibit"],kt=(t,e,a)=>{let n=t;return"string"==typeof e||Array.isArray(e)?n=t.toLocaleString(e,a):!0!==e&&void 0===a||(n=t.toLocaleString(void 0,a)),n};class Nt extends(xt()){status(){return xt().attribute("status").call(this)}operation(){return xt().attribute("operation").call(this)}command(){return xt().attribute("command").call(this)}package(){return xt().attribute("package").call(this)}output(){return xt().attribute("output").call(this)}guessedCause(){return xt().attribute("guessedCause").call(this)}createdAt(){return xt().attribute("createdAt",xt().transformDate).call(this)}startedAt(){return xt().attribute("startedAt",xt().transformDate).call(this)}finishedAt(){return xt().attribute("finishedAt",xt().transformDate).call(this)}peakMemoryUsed(){return function(t,e){if(!Number.isFinite(t))throw new TypeError("Expected a finite number, got ".concat(typeof t,": ").concat(t));const a=(e={bits:!1,binary:!1,...e}).bits?e.binary?_t:vt:e.binary?yt:bt;if(e.signed&&0===t)return" 0 ".concat(a[0]);const n=t<0,s=n?"-":e.signed?"+":"";let r;if(n&&(t=-t),void 0!==e.minimumFractionDigits&&(r={minimumFractionDigits:e.minimumFractionDigits}),void 0!==e.maximumFractionDigits&&(r={maximumFractionDigits:e.maximumFractionDigits,...r}),t<1)return s+kt(t,e.locale,r)+" "+a[0];const o=Math.min(Math.floor(e.binary?Math.log(t)/Math.log(1024):Math.log10(t)/3),a.length-1);return t/=(e.binary?1024:1e3)**o,r||(t=t.toPrecision(3)),s+kt(Number(t),e.locale,r)+" "+a[o]}(1024*xt().attribute("peakMemoryUsed").call(this))}}function Mt(){s().modal.close(),m.route.set(s().route("extension",{id:"flarum-extension-manager"})),s().extensionManager.queue.load({},!0),setTimeout((()=>{var t;null==(t=document.getElementById("ExtensionManager-queueSection"))||t.scrollIntoView({block:"nearest"})}),200)}flarum.reg.add("flarum-extension-manager","admin/models/Task",Nt),window.jumpToQueue=Mt,flarum.reg.add("flarum-extension-manager","admin/utils/jumpToQueue",Mt);class wt{constructor(){Y(this,"polling",null),Y(this,"tasks",null),Y(this,"limit",20),Y(this,"offset",0),Y(this,"total",0)}load(t,e){var a;return void 0===e&&(e=!1),this.tasks=null,t={page:{limit:this.limit,offset:this.offset,...null==(a=t)?void 0:a.page},...t},s().store.find("extension-manager-tasks",t||{}).then((t=>{var a;return this.tasks=t,this.total=(null==(a=t.payload.meta)?void 0:a.total)||0,m.redraw(),(null==t?void 0:t.find((t=>"pending"===t.status()||"running"===t.status())))?this.pollQueue(e):e?(s().extensionManager.control.setLoading(null),window.location.reload()):s().extensionManager.control.isLoading()&&s().extensionManager.control.setLoading(null),t}))}getItems(){return this.tasks}getTotalPages(){return Math.ceil(this.total/this.limit)}pageNumber(){return Math.ceil(this.offset/this.limit)}hasPrev(){return 0!==this.pageNumber()}hasNext(){return this.offset+this.limit{this.load({},t)}),6e3)}hasPending(){var t;return!(null==(t=this.tasks)||!t.find((t=>"pending"===t.status()||"running"===t.status())))}}flarum.reg.add("flarum-extension-manager","admin/states/QueueState",wt);class Et{get lastUpdateRun(){const t=JSON.parse(s().data.settings["flarum-extension-manager.last_update_run"]);return t.limitedPackages=()=>[...t.major.limitedPackages,...t.minor.limitedPackages,...t.global.limitedPackages],t}constructor(){Y(this,"loading",null),Y(this,"packageUpdates",{}),Y(this,"lastUpdateCheck",void 0),Y(this,"extensionUpdates",void 0),Y(this,"coreUpdate",null),this.lastUpdateCheck=JSON.parse(s().data.settings["flarum-extension-manager.last_update_check"]),this.extensionUpdates=this.formatExtensionUpdates(this.lastUpdateCheck),this.coreUpdate=this.formatCoreUpdate(this.lastUpdateCheck)}isLoading(t){return void 0===t&&(t=null),t&&this.loading===t||!t&&null!==this.loading}hasOperationRunning(){return this.isLoading()||s().extensionManager.queue.hasPending()}setLoading(t){this.loading=t}requirePackage(t){s().extensionManager.control.setLoading("extension-install"),s().modal.show(c()),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/extensions"),body:{data:t}}).then((t=>{if(t.processing)Mt();else{const e=t.id;s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.extensions.successful_install",{extension:e})),window.location.href="".concat(s().forum.attribute("adminUrl"),"#/extension/").concat(e),window.location.reload()}})).catch(J).finally((()=>{s().modal.close(),m.redraw()}))}checkForUpdates(){this.setLoading("check"),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/check-for-updates")}).then((t=>{t.processing?Mt():(this.lastUpdateCheck=t,this.extensionUpdates=this.formatExtensionUpdates(t),this.coreUpdate=this.formatCoreUpdate(t),this.setLoading(null),m.redraw())})).catch(J).finally((()=>{m.redraw()}))}updateCoreMinor(){confirm(w()(s().translator.trans("flarum-extension-manager.admin.minor_update_confirmation.content")))&&(s().modal.show(c()),this.setLoading("minor-update"),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/minor-update")}).then((t=>{null!=t&&t.processing?Mt():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.update_successful")),window.location.reload())})).catch(J).finally((()=>{s().modal.close(),m.redraw()})))}updateExtension(t,e){s().modal.show(c()),this.setLoading("extension-update"),s().request({method:"PATCH",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/extensions/").concat(t.id),body:{data:{updateMode:e}}}).then((e=>{null!=e&&e.processing?Mt():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.extensions.successful_update",{extension:t.extra["flarum-extension"].title})),window.location.reload())})).catch(J).finally((()=>{s().modal.close(),m.redraw()}))}updateGlobally(){s().modal.show(c()),this.setLoading("global-update"),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/global-update")}).then((t=>{null!=t&&t.processing?Mt():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.updater.global_update_successful")),window.location.reload())})).catch(J).finally((()=>{s().modal.close(),m.redraw()}))}formatExtensionUpdates(t){var e,a;return this.packageUpdates={},null==t||null==(e=t.updates)||null==(a=e.installed)||a.filter((t=>{const e=t.name.replace("/","-").replace(/(flarum-ext-)|(flarum-)/,""),a=s().data.extensions[e],n=["semver-safe-update","update-possible"].includes(t["latest-status"]);return a&&n&&(this.packageUpdates[a.id]=t),a&&n})),Object.values(s().data.extensions).filter((t=>this.packageUpdates[t.id]))}formatCoreUpdate(t){var e,a;const n=null==t||null==(e=t.updates)||null==(a=e.installed)?void 0:a.filter((t=>"flarum/core"===t.name)).pop();return n?{package:n,extension:{id:"flarum-core",name:"flarum/core",version:s().data.settings.version,icon:{backgroundImage:"url(".concat(s().data.resources[0].attributes.baseUrl,"/assets/extensions/flarum-extension-manager/flarum.svg")},extra:{"flarum-extension":{title:w()(s().translator.trans("flarum-extension-manager.admin.updater.flarum"))}}}}:null}majorUpdate(t){let{dryRun:e}=t;s().extensionManager.control.setLoading(e?"major-update-dry-run":"major-update"),s().modal.show(c());const a=this.lastUpdateRun.major;s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/major-update"),body:{data:{dryRun:e}}}).then((t=>{null!=t&&t.processing?Mt():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.update_successful")),window.location.reload())})).catch(J).catch((t=>{var e,n,r;s().modal.close(),a.status="failure",a.incompatibleExtensions=null==(e=t.response)||null==(n=e.errors)||null==(r=n.pop())?void 0:r.incompatible_extensions})).finally((()=>{m.redraw()}))}}flarum.reg.add("flarum-extension-manager","admin/states/ControlSectionState",Et);class St{constructor(){Y(this,"queue",new wt),Y(this,"control",new Et)}}flarum.reg.add("flarum-extension-manager","admin/states/ExtensionManagerState",St),s().initializers.add("flarum-extension-manager",(e=>{e.store.models["extension-manager-tasks"]=Nt,e.extensionManager=new St,e.data["flarum-extension-manager.using_sync_queue"]&&(e.data.settings["flarum-extension-manager.queue_jobs"]="0"),e.extensionData.for("flarum-extension-manager").registerSetting({setting:"flarum-extension-manager.queue_jobs",label:e.translator.trans("flarum-extension-manager.admin.settings.queue_jobs"),help:m.trust(w()(e.translator.trans("flarum-extension-manager.admin.settings.queue_jobs_help",{basic_impl_link:"https://discuss.flarum.org/d/28151-database-queue-the-simplest-queue-even-for-shared-hosting",adv_impl_link:"https://discuss.flarum.org/d/21873-redis-sessions-cache-queues",php_version:"".concat(e.data.phpVersion,""),folder_perms_link:"https://docs.flarum.org/install#folder-ownership"}))),type:"boolean",disabled:e.data["flarum-extension-manager.using_sync_queue"]}).registerSetting({setting:"flarum-extension-manager.task_retention_days",label:e.translator.trans("flarum-extension-manager.admin.settings.task_retention_days"),help:e.translator.trans("flarum-extension-manager.admin.settings.task_retention_days_help"),type:"number"}).registerPage(ht),(0,t.extend)(o().prototype,"topItems",(function(t){"flarum-extension-manager"===this.extension.id||g()(this.extension.id)||t.add("remove",m(l(),{className:"Button Button--danger",icon:"fas fa-times",onclick:()=>{e.modal.show(c()),e.request({url:"".concat(e.forum.attribute("apiUrl"),"/extension-manager/extensions/").concat(this.extension.id),method:"DELETE"}).then((t=>{null!=t&&t.processing?Mt():(e.alerts.show({type:"success"},e.translator.trans("flarum-extension-manager.admin.extensions.successful_remove")),window.location=e.forum.attribute("adminUrl"))})).finally((()=>{e.modal.close()}))}},e.translator.trans("flarum-extension-manager.admin.extensions.remove")))}))}))})(),module.exports=n})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/package-manager/js/dist/admin.js.map b/extensions/package-manager/js/dist/admin.js.map index 5dc59fdcf..49c419769 100755 --- a/extensions/package-manager/js/dist/admin.js.map +++ b/extensions/package-manager/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/extension-manager/../../../node_modules/dayjs/plugin/duration.js","webpack://@flarum/extension-manager/webpack/bootstrap","webpack://@flarum/extension-manager/webpack/runtime/compat get default export","webpack://@flarum/extension-manager/webpack/runtime/define property getters","webpack://@flarum/extension-manager/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/extension-manager/webpack/runtime/make namespace object","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/components/LoadingModal')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/utils/isExtensionEnabled')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Tooltip')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Icon')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/extension-manager/./src/admin/components/Label.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Modal')\"","webpack://@flarum/extension-manager/./src/admin/components/TaskOutputModal.tsx","webpack://@flarum/extension-manager/./src/admin/utils/humanDuration.ts","webpack://@flarum/extension-manager/./src/admin/components/Pagination.tsx","webpack://@flarum/extension-manager/./src/admin/components/QueueSection.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Alert')\"","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/extension-manager/./src/admin/components/Installer.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/helpers/humanTime')\"","webpack://@flarum/extension-manager/./src/admin/utils/errorHandler.ts","webpack://@flarum/extension-manager/./src/admin/components/WhyNotModal.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Dropdown')\"","webpack://@flarum/extension-manager/./src/admin/components/ExtensionItem.tsx","webpack://@flarum/extension-manager/./src/admin/components/MajorUpdater.tsx","webpack://@flarum/extension-manager/./src/admin/components/Updater.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/extension-manager/./src/admin/components/ControlSection.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/components/AdminPage')\"","webpack://@flarum/extension-manager/./src/admin/components/ConfigureJson.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Select')\"","webpack://@flarum/extension-manager/./src/admin/components/RepositoryModal.tsx","webpack://@flarum/extension-manager/./src/admin/components/ConfigureComposer.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/helpers/listItems')\"","webpack://@flarum/extension-manager/./src/admin/components/AuthMethodModal.tsx","webpack://@flarum/extension-manager/./src/admin/components/ConfigureAuth.tsx","webpack://@flarum/extension-manager/./src/admin/components/SettingsPage.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/extension-manager/../../../node_modules/pretty-bytes/index.js","webpack://@flarum/extension-manager/./src/admin/models/Task.ts","webpack://@flarum/extension-manager/./src/admin/utils/jumpToQueue.ts","webpack://@flarum/extension-manager/./src/admin/states/QueueState.ts","webpack://@flarum/extension-manager/./src/admin/states/ControlSectionState.ts","webpack://@flarum/extension-manager/./src/admin/states/ExtensionManagerState.ts","webpack://@flarum/extension-manager/./src/admin/index.tsx"],"sourcesContent":["!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,h=2592e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,d={years:u,months:h,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof p},f=function(t,s,n){return new p(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},g=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},p=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*d[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*d[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/h),t%=h,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=g(this.$d.years,\"Y\"),s=g(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=g(n,\"D\"),e=g(this.$d.hours,\"H\"),r=g(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3);var u=g(o,\"S\"),h=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",d=(h?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===d||\"-P\"===d?\"P0D\":d},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/d[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/d[n]):this.$d[n],0===s?0:s},y.add=function(t,s,n){var i;return i=s?t*d[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}();return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)&&(t=t.asMilliseconds()),r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)&&(t=t.asMilliseconds()),o.bind(this)(t,s)}}}));","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/LoadingModal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/utils/isExtensionEnabled');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Component');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LoadingIndicator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Tooltip');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Icon');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Link');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/classList');","import Component from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nexport default class Label extends Component {\n view(vnode) {\n const {\n className,\n type,\n ...attrs\n } = this.attrs;\n return m(\"span\", Object.assign({\n className: classList(['Label', \"Label--\".concat(this.attrs.type), className])\n }, attrs), vnode.children);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Label', Label);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Modal');","import app from 'flarum/admin/app';\nimport Modal from 'flarum/common/components/Modal';\nexport default class TaskOutputModal extends Modal {\n className() {\n return 'Modal--large QuickModal';\n }\n title() {\n return app.translator.trans(\"flarum-extension-manager.admin.sections.queue.operations.\".concat(this.attrs.task.operation()));\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TaskOutputModal-data\"\n }, this.attrs.task.status() === 'failure' && m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.guessed_cause')), m(\"div\", {\n className: \"FormControl TaskOutputModal-data-guessed-cause\"\n }, this.attrs.task.guessedCause() && app.translator.trans('flarum-extension-manager.admin.exceptions.guessed_cause.' + this.attrs.task.guessedCause()) || app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.cause_unknown'))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.command')), m(\"div\", {\n className: \"FormControl TaskOutputModal-data-command\"\n }, m(\"code\", null, \"$ composer \", this.attrs.task.command()))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.output')), m(\"div\", {\n className: \"FormControl TaskOutputModal-data-output\"\n }, m(\"code\", null, m(\"pre\", null, this.attrs.task.output()))))));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/TaskOutputModal', TaskOutputModal);","import duration from 'dayjs/plugin/duration';\nexport default function humanDuration(start, end) {\n dayjs.extend(duration);\n const durationTime = dayjs(end).diff(start);\n return dayjs.duration(durationTime).humanize();\n}\nflarum.reg.add('flarum-extension-manager', 'admin/utils/humanDuration', humanDuration);","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\n/**\n * @todo make it abstract in core for reusability.\n */\nexport default class Pagination extends Component {\n view() {\n return m(\"nav\", {\n className: \"Pagination UserListPage-gridPagination\"\n }, m(Button, {\n disabled: !this.attrs.list.hasPrev() || app.extensionManager.control.isLoading(),\n title: app.translator.trans('core.admin.users.pagination.back_button'),\n onclick: () => this.attrs.list.prev(),\n icon: \"fas fa-chevron-left\",\n className: \"Button Button--icon UserListPage-backBtn\"\n }), m(\"span\", {\n className: \"UserListPage-pageNumber\"\n }, app.translator.trans('core.admin.users.pagination.page_counter', {\n current: this.attrs.list.pageNumber() + 1,\n total: this.attrs.list.getTotalPages()\n })), m(Button, {\n disabled: !this.attrs.list.hasNext() || app.extensionManager.control.isLoading(),\n title: app.translator.trans('core.admin.users.pagination.next_button'),\n onclick: () => this.attrs.list.next(),\n icon: \"fas fa-chevron-right\",\n className: \"Button Button--icon UserListPage-nextBtn\"\n }));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Pagination', Pagination);","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Icon from 'flarum/common/components/Icon';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport extractText from 'flarum/common/utils/extractText';\nimport Link from 'flarum/common/components/Link';\nimport Label from './Label';\nimport TaskOutputModal from './TaskOutputModal';\nimport humanDuration from '../utils/humanDuration';\nimport Pagination from './Pagination';\nexport default class QueueSection extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n app.extensionManager.queue.load();\n }\n view() {\n return m(\"section\", {\n id: \"ExtensionManager-queueSection\",\n className: \"ExtensionPage-permissions ExtensionManager-queueSection\"\n }, m(\"div\", {\n className: \"ExtensionPage-permissions-header ExtensionManager-queueSection-header\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"h2\", {\n className: \"ExtensionTitle\"\n }, app.translator.trans('flarum-extension-manager.admin.sections.queue.title')), m(Button, {\n className: \"Button Button--icon\",\n icon: \"fas fa-sync-alt\",\n onclick: () => app.extensionManager.queue.load(),\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.sections.queue.refresh'),\n disabled: app.extensionManager.control.isLoading()\n }))), m(\"div\", {\n className: \"container\"\n }, this.queueTable()));\n }\n columns() {\n const items = new ItemList();\n items.add('operation', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.operation')),\n content: task => m(\"div\", {\n className: \"ExtensionManager-queueTable-operation\"\n }, m(\"span\", {\n className: \"ExtensionManager-queueTable-operation-icon\"\n }, this.operationIcon(task.operation())), m(\"span\", {\n className: \"ExtensionManager-queueTable-operation-name\"\n }, app.translator.trans(\"flarum-extension-manager.admin.sections.queue.operations.\".concat(task.operation()))))\n }, 80);\n items.add('package', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.package')),\n content: task => {\n var _task$package;\n const extension = app.data.extensions[(_task$package = task.package()) == null ? void 0 : _task$package.replace(/(\\/flarum-|\\/flarum-ext-|\\/)/g, '-')];\n return extension ? m(Link, {\n className: \"ExtensionManager-queueTable-package\",\n href: app.route('extension', {\n id: extension.id\n })\n }, m(\"div\", {\n className: \"ExtensionManager-queueTable-package-icon ExtensionIcon\",\n style: extension.icon\n }, !!extension.icon && m(Icon, {\n name: extension.icon.name\n })), m(\"div\", {\n className: \"ExtensionManager-queueTable-package-details\"\n }, m(\"span\", {\n className: \"ExtensionManager-queueTable-package-title\"\n }, extension.extra['flarum-extension'].title), m(\"span\", {\n className: \"ExtensionManager-queueTable-package-name\"\n }, task.package()))) : task.package();\n }\n }, 75);\n items.add('status', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.status')),\n content: task => m('[', null, m(Label, {\n className: \"ExtensionManager-queueTable-status\",\n type: {\n running: 'neutral',\n failure: 'error',\n pending: 'warning',\n success: 'success'\n }[task.status()]\n }, app.translator.trans(\"flarum-extension-manager.admin.sections.queue.statuses.\".concat(task.status()))), ['pending', 'running'].includes(task.status()) && m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }))\n }, 70);\n items.add('elapsedTime', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.elapsed_time')),\n content: task => !task.startedAt() || !task.finishedAt() ? app.translator.trans('flarum-extension-manager.admin.sections.queue.task_just_started') : m(Tooltip, {\n text: \"\".concat(dayjs(task.startedAt()).format('LL LTS'), \" \").concat(dayjs(task.finishedAt()).format('LL LTS'))\n }, m(\"span\", null, humanDuration(task.startedAt(), task.finishedAt())))\n }, 65);\n items.add('memoryUsed', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.peak_memory_used')),\n content: task => m(\"span\", null, task.peakMemoryUsed())\n }, 60);\n items.add('details', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.details')),\n content: task => m(Button, {\n className: \"Button Button--icon Table-controls-item\",\n icon: \"fas fa-file-alt\",\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.details')\n // @todo fix in core\n // @ts-ignore\n ,\n onclick: () => app.modal.show(TaskOutputModal, {\n task\n }),\n disabled: ['pending', 'running'].includes(task.status())\n }),\n className: 'Table-controls'\n }, 55);\n return items;\n }\n queueTable() {\n const tasks = app.extensionManager.queue.getItems();\n if (!tasks) {\n return m(LoadingIndicator, null);\n }\n if (tasks && !tasks.length) {\n return m(\"h3\", {\n className: \"ExtensionPage-subHeader\"\n }, app.translator.trans('flarum-extension-manager.admin.sections.queue.none'));\n }\n const columns = this.columns();\n return m('[', null, m(\"table\", {\n className: \"Table ExtensionManager-queueTable\"\n }, m(\"thead\", null, m(\"tr\", null, columns.toArray().map((item, index) => m(\"th\", {\n key: index\n }, item.label)))), m(\"tbody\", null, tasks.map((task, index) => m(\"tr\", {\n key: index\n }, columns.toArray().map((item, index) => {\n const {\n label,\n content,\n ...attrs\n } = item;\n return m(\"td\", Object.assign({\n key: index\n }, attrs), content(task));\n }))))), m(Pagination, {\n list: app.extensionManager.queue\n }));\n }\n operationIcon(operation) {\n return m(Icon, {\n name: {\n update_check: 'fas fa-sync-alt',\n update_major: 'fas fa-play',\n update_minor: 'fas fa-play',\n update_global: 'fas fa-play',\n extension_install: 'fas fa-download',\n extension_remove: 'fas fa-times',\n extension_update: 'fas fa-arrow-alt-circle-up',\n why_not: 'fas fa-exclamation-circle'\n }[operation]\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/QueueSection', QueueSection);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Alert');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\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 return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/Stream');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport Stream from 'flarum/common/utils/Stream';\nexport default class Installer extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"packageName\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.packageName = Stream('');\n }\n view() {\n return m(\"div\", {\n className: \"Form-group ExtensionManager-installer\"\n }, m(\"label\", {\n htmlFor: \"install-extension\"\n }, app.translator.trans('flarum-extension-manager.admin.extensions.install')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.extensions.install_help', {\n extiverse: m(\"a\", {\n href: \"https://extiverse.com\"\n }, \"extiverse.com\"),\n semantic_link: m(\"a\", {\n href: \"https://devhints.io/semver\"\n }),\n code: m(\"code\", null)\n })), m(\"div\", {\n className: \"FormControl-container\"\n }, m(\"input\", {\n className: \"FormControl\",\n id: \"install-extension\",\n placeholder: \"vendor/package-name\",\n bidi: this.packageName\n }), m(Button, {\n className: \"Button\",\n icon: \"fas fa-download\",\n onclick: this.onsubmit.bind(this),\n loading: app.extensionManager.control.isLoading('extension-install'),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.extensions.proceed'))));\n }\n data() {\n return {\n package: this.packageName()\n };\n }\n onsubmit() {\n app.extensionManager.control.requirePackage(this.data());\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Installer', Installer);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/humanTime');","import app from 'flarum/admin/app';\nexport default function (e) {\n app.extensionManager.control.setLoading(null);\n const error = e.response.errors[0];\n if (!['composer_command_failure', 'extension_already_installed', 'extension_not_installed'].includes(error.code)) {\n throw e;\n }\n app.alerts.clear();\n switch (error.code) {\n case 'composer_command_failure':\n if (error.guessed_cause) {\n app.alerts.show({\n type: 'error'\n }, app.translator.trans(\"flarum-extension-manager.admin.exceptions.guessed_cause.\".concat(error.guessed_cause)));\n app.modal.close();\n } else {\n app.alerts.show({\n type: 'error'\n }, app.translator.trans('flarum-extension-manager.admin.exceptions.composer_command_failure'));\n }\n break;\n case 'extension_already_installed':\n app.alerts.show({\n type: 'error'\n }, app.translator.trans('flarum-extension-manager.admin.exceptions.extension_already_installed'));\n app.modal.close();\n break;\n case 'extension_not_installed':\n app.alerts.show({\n type: 'error'\n }, app.translator.trans('flarum-extension-manager.admin.exceptions.extension_not_installed'));\n app.modal.close();\n }\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Modal from 'flarum/common/components/Modal';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport errorHandler from '../utils/errorHandler';\nexport default class WhyNotModal extends Modal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"whyNot\", null);\n }\n className() {\n return 'Modal--large WhyNotModal';\n }\n title() {\n return app.translator.trans('flarum-extension-manager.admin.why_not_modal.title');\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.requestWhyNot();\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, this.loading ? m(LoadingIndicator, null) : m(\"pre\", {\n className: \"WhyNotModal-contents\"\n }, this.whyNot));\n }\n requestWhyNot() {\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/why-not\"),\n body: {\n data: {\n package: this.attrs.package\n }\n }\n }).then(response => {\n this.loading = false;\n this.whyNot = response.data.reason;\n m.redraw();\n }).catch(errorHandler);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/WhyNotModal', WhyNotModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Dropdown');","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nimport Icon from 'flarum/common/components/Icon';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Button from 'flarum/common/components/Button';\nimport WhyNotModal from './WhyNotModal';\nimport Label from './Label';\nimport Dropdown from 'flarum/common/components/Dropdown';\nexport default class ExtensionItem extends Component {\n view(vnode) {\n var _updates$latestMinor;\n const {\n extension,\n updates,\n onClickUpdate,\n whyNotWarning,\n isCore,\n isDanger\n } = this.attrs;\n const latestVersion = (_updates$latestMinor = updates['latest-minor']) != null ? _updates$latestMinor : updates['latest-major'] && !isCore ? updates['latest-major'] : null;\n return m(\"div\", {\n className: classList({\n 'ExtensionManager-extension': true,\n 'ExtensionManager-extension--core': isCore,\n 'ExtensionManager-extension--danger': isDanger\n })\n }, m(\"div\", {\n className: \"ExtensionManager-extension-icon ExtensionIcon\",\n style: extension.icon\n }, extension.icon ? m(Icon, {\n name: extension.icon.name\n }) : ''), m(\"div\", {\n className: \"ExtensionManager-extension-info\"\n }, m(\"div\", {\n className: \"ExtensionManager-extension-name\"\n }, extension.extra['flarum-extension'].title), m(\"div\", {\n className: \"ExtensionManager-extension-version\"\n }, m(\"span\", {\n className: \"ExtensionManager-extension-version-current\"\n }, this.version(updates['version'])), latestVersion ? m(Label, {\n className: \"ExtensionManager-extension-version-latest\",\n type: updates['latest-minor'] ? 'success' : 'warning'\n }, this.version(latestVersion)) : null)), m(\"div\", {\n className: \"ExtensionManager-extension-controls\"\n }, onClickUpdate && typeof onClickUpdate === 'function' ? m(Tooltip, {\n text: app.translator.trans('flarum-extension-manager.admin.extensions.update')\n }, m(Button, {\n icon: \"fas fa-arrow-alt-circle-up\",\n className: \"Button Button--icon Button--flat\",\n onclick: onClickUpdate,\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.extensions.update')\n })) : onClickUpdate ? m(Dropdown, {\n buttonClassName: \"Button Button--icon Button--flat\",\n icon: \"fas fa-arrow-alt-circle-up\",\n label: app.translator.trans('flarum-extension-manager.admin.extensions.update')\n }, m(Button, {\n icon: \"fas fa-arrow-alt-circle-up\",\n className: \"Button\",\n onclick: onClickUpdate.soft\n }, app.translator.trans('flarum-extension-manager.admin.extensions.update_soft_label')), m(Button, {\n icon: \"fas fa-arrow-alt-circle-up\",\n className: \"Button\",\n onclick: onClickUpdate.hard,\n disabled: !updates['direct-dependency']\n }, app.translator.trans('flarum-extension-manager.admin.extensions.update_hard_label'))) : null, whyNotWarning ? m(Tooltip, {\n text: app.translator.trans('flarum-extension-manager.admin.extensions.check_why_it_failed_updating')\n }, m(Button, {\n icon: \"fas fa-exclamation-circle\",\n className: \"Button Button--icon Button--flat Button--danger\",\n onclick: () => app.modal.show(WhyNotModal, {\n package: extension.name\n }),\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.extensions.check_why_it_failed_updating')\n })) : null));\n }\n version(v) {\n return v.charAt(0) === 'v' ? v.substring(1) : v;\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ExtensionItem', ExtensionItem);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Alert from 'flarum/common/components/Alert';\nimport WhyNotModal from './WhyNotModal';\nimport ExtensionItem from './ExtensionItem';\nimport classList from 'flarum/common/utils/classList';\nexport default class MajorUpdater extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"updateState\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.updateState = this.attrs.updateState;\n }\n view() {\n // @todo move Form-group--danger class to core for reuse\n return m(\"div\", {\n className: classList('Form-group Form-group--danger ExtensionManager-majorUpdate', {\n 'ExtensionManager-majorUpdate--failed': this.updateState.status === 'failure',\n 'ExtensionManager-majorUpdate--incompatibleExtensions': this.updateState.incompatibleExtensions.length\n })\n }, m(\"img\", {\n alt: \"flarum logo\",\n src: app.forum.attribute('baseUrl') + '/assets/extensions/flarum-extension-manager/flarum.svg'\n }), m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.major_updater.title', {\n version: this.attrs.coreUpdate['latest-major']\n })), m(\"p\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.description')), m(\"div\", {\n className: \"ExtensionManager-updaterControls\"\n }, m(Tooltip, {\n text: app.translator.trans('flarum-extension-manager.admin.major_updater.dry_run_help')\n }, m(Button, {\n className: \"Button\",\n icon: \"fas fa-vial\",\n onclick: this.update.bind(this, true),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.dry_run'))), m(Button, {\n className: \"Button Button--danger\",\n icon: \"fas fa-play\",\n onclick: this.update.bind(this, false),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.update'))), this.updateState.incompatibleExtensions.length ? m(\"div\", {\n className: \"ExtensionManager-majorUpdate-incompatibleExtensions ExtensionManager-extensions-grid\"\n }, this.updateState.incompatibleExtensions.map(extension => m(ExtensionItem, {\n extension: app.data.extensions[extension.replace('flarum-', '').replace('flarum-ext-', '').replace('/', '-')],\n updates: {},\n onClickUpdate: null,\n isDanger: true\n }))) : null, this.updateState.status === 'failure' ? m(Alert, {\n type: \"error\",\n className: \"ExtensionManager-majorUpdate-failure\",\n dismissible: false,\n controls: [m(Button, {\n className: \"Button Button--text ExtensionManager-majorUpdate-failure-details\",\n icon: \"fas fa-question-circle\",\n onclick: () => app.modal.show(WhyNotModal, {\n package: 'flarum/core'\n })\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.failure.why'))]\n }, m(\"p\", {\n className: \"ExtensionManager-majorUpdate-failure-desc\"\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.failure.desc'))) : null);\n }\n update(dryRun) {\n app.extensionManager.control.majorUpdate({\n dryRun\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/MajorUpdater', MajorUpdater);","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport MajorUpdater from './MajorUpdater';\nimport ExtensionItem from './ExtensionItem';\nimport ItemList from 'flarum/common/utils/ItemList';\nexport default class Updater extends Component {\n view() {\n const core = app.extensionManager.control.coreUpdate;\n return [m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.updater.updater_title')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.updater.updater_help')), this.lastUpdateCheckView(), m(\"div\", {\n className: \"ExtensionManager-updaterControls\"\n }, this.controlItems().toArray()), this.availableUpdatesView()), core && core.package['latest-major'] ? m(MajorUpdater, {\n coreUpdate: core.package,\n updateState: app.extensionManager.control.lastUpdateRun.major\n }) : null];\n }\n lastUpdateCheckView() {\n var _app$extensionManager;\n return ((_app$extensionManager = app.extensionManager.control.lastUpdateCheck) == null ? void 0 : _app$extensionManager.checkedAt) && m(\"p\", {\n className: \"ExtensionManager-lastUpdatedAt\"\n }, m(\"span\", {\n className: \"ExtensionManager-lastUpdatedAt-label\"\n }, app.translator.trans('flarum-extension-manager.admin.updater.last_update_checked_at')), m(\"span\", {\n className: \"ExtensionManager-lastUpdatedAt-value\"\n }, humanTime(app.extensionManager.control.lastUpdateCheck.checkedAt))) || null;\n }\n availableUpdatesView() {\n const state = app.extensionManager.control;\n if (app.extensionManager.control.isLoading('check') || app.extensionManager.control.isLoading('global-update')) {\n return m(\"div\", {\n className: \"ExtensionManager-extensions\"\n }, m(LoadingIndicator, null));\n }\n const hasMinorCoreUpdate = state.coreUpdate && state.coreUpdate.package['latest-minor'];\n if (!(state.extensionUpdates.length || hasMinorCoreUpdate)) {\n return m(\"div\", {\n className: \"ExtensionManager-extensions\"\n }, m(\"span\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.updater.up_to_date')));\n }\n return m(\"div\", {\n className: \"ExtensionManager-extensions\"\n }, m(\"div\", {\n className: \"ExtensionManager-extensions-grid\"\n }, hasMinorCoreUpdate ? m(ExtensionItem, {\n extension: state.coreUpdate.extension,\n updates: state.coreUpdate.package,\n isCore: true,\n onClickUpdate: () => state.updateCoreMinor(),\n whyNotWarning: state.lastUpdateRun.limitedPackages().includes('flarum/core')\n }) : null, state.extensionUpdates.map(extension => m(ExtensionItem, {\n extension: extension,\n updates: state.packageUpdates[extension.id],\n onClickUpdate: {\n soft: () => state.updateExtension(extension, 'soft'),\n hard: () => state.updateExtension(extension, 'hard')\n },\n whyNotWarning: state.lastUpdateRun.limitedPackages().includes(extension.name)\n }))));\n }\n controlItems() {\n const items = new ItemList();\n items.add('updateCheck', m(Button, {\n className: \"Button\",\n icon: \"fas fa-sync-alt\",\n onclick: () => app.extensionManager.control.checkForUpdates(),\n loading: app.extensionManager.control.isLoading('check'),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.updater.check_for_updates')), 100);\n items.add('globalUpdate', m(Button, {\n className: \"Button\",\n icon: \"fas fa-play\",\n onclick: () => app.extensionManager.control.updateGlobally(),\n loading: app.extensionManager.control.isLoading('global-update'),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.updater.run_global_update')));\n return items;\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Updater', Updater);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Alert from 'flarum/common/components/Alert';\nimport Installer from './Installer';\nimport Updater from './Updater';\nimport Form from 'flarum/common/components/Form';\nexport default class ControlSection extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view() {\n return m(\"div\", {\n className: \"ExtensionPage-permissions ExtensionManager-controlSection\"\n }, m(\"div\", {\n className: \"ExtensionPage-permissions-header\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"h2\", {\n className: \"ExtensionTitle\"\n }, app.translator.trans('flarum-extension-manager.admin.sections.control.title')))), m(\"div\", {\n className: \"container\"\n }, app.data['flarum-extension-manager.writable_dirs'] ? m(Form, null, m(Installer, null), m(Updater, null)) : m(\"div\", {\n className: \"Form-group\"\n }, m(Alert, {\n type: \"warning\",\n dismissible: false\n }, app.translator.trans('flarum-extension-manager.admin.file_permissions')))));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ControlSection', ControlSection);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/AdminPage');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport AdminPage from 'flarum/admin/components/AdminPage';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nexport default class ConfigureJson extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"settings\", {});\n _defineProperty(this, \"initialSettings\", null);\n _defineProperty(this, \"loading\", false);\n _defineProperty(this, \"type\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.submit(true);\n }\n className() {\n return '';\n }\n view() {\n return m(\"div\", {\n className: classList('FormSection', this.className())\n }, m(\"label\", null, this.title()), this.content(), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, this.submitButton()));\n }\n submitButton() {\n return [m(Button, {\n className: \"Button Button--primary\",\n loading: this.loading,\n onclick: () => this.submit(false),\n disabled: !this.isDirty()\n }, app.translator.trans('core.admin.settings.submit_button'))];\n }\n customSettingComponents() {\n return AdminPage.prototype.customSettingComponents();\n }\n setting(key) {\n var _this$settings$key;\n return (_this$settings$key = this.settings[key]) != null ? _this$settings$key : this.settings[key] = Stream();\n }\n submit(readOnly) {\n this.loading = true;\n const configuration = {};\n Object.keys(this.settings).forEach(key => {\n configuration[key] = this.settings[key]();\n });\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/extension-manager/composer',\n body: {\n type: this.type,\n data: readOnly ? null : configuration\n }\n }).then(_ref => {\n let {\n data\n } = _ref;\n Object.keys(data).forEach(key => {\n this.settings[key] = Stream(data[key]);\n });\n this.initialSettings = Array.isArray(data) ? {} : data;\n }).finally(() => {\n this.loading = false;\n m.redraw();\n });\n }\n isDirty() {\n return JSON.stringify(this.initialSettings) !== JSON.stringify(this.settings);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ConfigureJson', ConfigureJson);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Select');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Modal from 'flarum/common/components/Modal';\nimport app from 'flarum/admin/app';\nimport Select from 'flarum/common/components/Select';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nexport default class RepositoryModal extends Modal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"repository\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.name = Stream(this.attrs.name || '');\n this.repository = Stream(this.attrs.repository || {\n type: 'composer',\n url: ''\n });\n }\n className() {\n return 'RepositoryModal Modal--small';\n }\n title() {\n const context = this.attrs.repository ? 'edit' : 'add';\n return app.translator.trans(\"flarum-extension-manager.admin.composer.\".concat(context, \"_repository_label\"));\n }\n content() {\n const types = {\n composer: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.composer'),\n vcs: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.vcs'),\n path: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.path')\n };\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.name_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.name\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.type_label')), m(Select, {\n options: types,\n value: this.repository().type,\n onchange: value => this.repository({\n ...this.repository(),\n type: value\n })\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.url')), m(\"input\", {\n className: \"FormControl\",\n onchange: e => this.repository({\n ...this.repository(),\n url: e.target.value\n }),\n value: this.repository().url\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(Button, {\n className: \"Button Button--primary\",\n onclick: this.submit.bind(this)\n }, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.submit_button'))));\n }\n submit() {\n this.attrs.onsubmit(this.repository(), this.name());\n this.hide();\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/RepositoryModal', RepositoryModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport ConfigureJson from './ConfigureJson';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\nimport RepositoryModal from './RepositoryModal';\nexport default class ConfigureComposer extends ConfigureJson {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"type\", 'composer');\n }\n title() {\n return app.translator.trans('flarum-extension-manager.admin.composer.title');\n }\n className() {\n return 'ConfigureComposer';\n }\n content() {\n return m(\"div\", {\n className: \"Form ExtensionManager-SettingsGroups-content\"\n }, this.attrs.buildSettingComponent.call(this, {\n setting: 'minimum-stability',\n label: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.label'),\n help: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.help'),\n type: 'select',\n options: {\n stable: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.stable'),\n RC: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.rc'),\n beta: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.beta'),\n alpha: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.alpha'),\n dev: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.dev')\n }\n }), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.label')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.composer.repositories.help')), m(\"div\", {\n className: \"ConfigureComposer-repositories\"\n }, Object.keys(this.setting('repositories')() || {}).map(name => {\n const repository = this.setting('repositories')()[name];\n return m(\"div\", {\n className: \"ButtonGroup ButtonGroup--full\"\n }, m(Button, {\n className: \"Button\",\n icon: {\n composer: 'fas fa-cubes',\n vcs: 'fas fa-code-branch',\n path: 'fas fa-folder'\n }[repository.type],\n onclick: () => app.modal.show(RepositoryModal, {\n name,\n repository,\n onsubmit: (repository, newName) => {\n const repositories = this.setting('repositories')();\n delete repositories[name];\n this.setting('repositories')(repositories);\n this.onchange(repository, newName);\n }\n })\n }, name, \" (\", repository.type, \")\"), m(Button, {\n className: \"Button Button--icon\",\n icon: \"fas fa-trash\",\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.composer.delete_repository_label'),\n onclick: () => {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.composer.delete_repository_confirmation')))) {\n const repositories = {\n ...this.setting('repositories')()\n };\n delete repositories[name];\n this.setting('repositories')(repositories);\n }\n }\n }));\n }))));\n }\n submitButton() {\n const items = super.submitButton();\n items.push(m(Button, {\n className: \"Button\",\n onclick: () => app.modal.show(RepositoryModal, {\n onsubmit: this.onchange.bind(this)\n })\n }, app.translator.trans('flarum-extension-manager.admin.composer.add_repository_label')));\n return items;\n }\n onchange(repository, name) {\n this.setting('repositories')({\n ...this.setting('repositories')(),\n [name]: repository\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ConfigureComposer', ConfigureComposer);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/listItems');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Modal from 'flarum/common/components/Modal';\nimport app from 'flarum/admin/app';\nimport Select from 'flarum/common/components/Select';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\nexport default class AuthMethodModal extends Modal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"type\", void 0);\n _defineProperty(this, \"host\", void 0);\n _defineProperty(this, \"token\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.type = Stream(this.attrs.type || 'bearer');\n this.host = Stream(this.attrs.host || '');\n this.token = Stream(this.attrs.token || '');\n }\n className() {\n return 'AuthMethodModal Modal--small';\n }\n title() {\n const context = this.attrs.host ? 'edit' : 'add';\n return app.translator.trans(\"flarum-extension-manager.admin.auth_config.\".concat(context, \"_label\"));\n }\n content() {\n const types = {\n 'github-oauth': app.translator.trans('flarum-extension-manager.admin.auth_config.types.github-oauth'),\n 'gitlab-oauth': app.translator.trans('flarum-extension-manager.admin.auth_config.types.gitlab-oauth'),\n 'gitlab-token': app.translator.trans('flarum-extension-manager.admin.auth_config.types.gitlab-token'),\n bearer: app.translator.trans('flarum-extension-manager.admin.auth_config.types.bearer')\n };\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.type_label')), m(Select, {\n options: types,\n value: this.type(),\n onchange: this.type\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.host_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.host,\n placeholder: app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.host_placeholder')\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.token_label')), m(\"textarea\", {\n className: \"FormControl\",\n oninput: e => this.token(e.target.value),\n rows: \"6\",\n placeholder: this.token().startsWith('unchanged:') ? extractText(app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.unchanged_token_placeholder')) : ''\n }, this.token().startsWith('unchanged:') ? '' : this.token())), m(\"div\", {\n className: \"Form-group\"\n }, m(Button, {\n className: \"Button Button--primary\",\n onclick: this.submit.bind(this)\n }, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.submit_button'))));\n }\n submit() {\n this.attrs.onsubmit(this.type(), this.host(), this.token());\n this.hide();\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/AuthMethodModal', AuthMethodModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport ConfigureJson from './ConfigureJson';\nimport Button from 'flarum/common/components/Button';\nimport AuthMethodModal from './AuthMethodModal';\nimport extractText from 'flarum/common/utils/extractText';\nexport default class ConfigureAuth extends ConfigureJson {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"type\", 'auth');\n }\n title() {\n return app.translator.trans('flarum-extension-manager.admin.auth_config.title');\n }\n className() {\n return 'ConfigureAuth';\n }\n content() {\n const authSettings = Object.keys(this.settings);\n const hasAuthSettings = authSettings.length && authSettings.every(type => {\n const data = this.settings[type]();\n return Array.isArray(data) ? data.length : Object.keys(data).length;\n });\n return m(\"div\", {\n className: \"ExtensionManager-SettingsGroups-content\"\n }, hasAuthSettings ? authSettings.map(type => {\n const hosts = this.settings[type]();\n return m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans(\"flarum-extension-manager.admin.auth_config.types.\".concat(type))), m(\"div\", {\n className: \"ConfigureAuth-hosts\"\n }, Object.keys(hosts).map(host => {\n const data = hosts[host];\n return m(\"div\", {\n className: \"ButtonGroup ButtonGroup--full\"\n }, m(Button, {\n className: \"Button\",\n icon: \"fas fa-key\",\n onclick: () => app.modal.show(AuthMethodModal, {\n type,\n host,\n token: data,\n onsubmit: this.onchange.bind(this, host)\n })\n }, host), m(Button, {\n className: \"Button Button--icon\",\n icon: \"fas fa-trash\",\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.auth_config.delete_label'),\n onclick: () => {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.auth_config.delete_confirmation')))) {\n const newType = {\n ...this.setting(type)()\n };\n delete newType[host];\n if (Object.keys(newType).length) {\n this.setting(type)(newType);\n } else {\n delete this.settings[type];\n }\n }\n }\n }));\n })));\n }) : m(\"span\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.auth_config.no_auth_methods_configured')));\n }\n submitButton() {\n const items = super.submitButton();\n items.push(m(Button, {\n className: \"Button\",\n loading: this.loading,\n onclick: () => app.modal.show(AuthMethodModal, {\n onsubmit: this.onchange.bind(this, null)\n })\n }, app.translator.trans('flarum-extension-manager.admin.auth_config.add_label')));\n return items;\n }\n onchange(oldHost, type, host, token) {\n const data = {\n ...this.setting(type)()\n };\n if (oldHost) {\n delete data[oldHost];\n }\n data[host] = token;\n this.setting(type)(data);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ConfigureAuth', ConfigureAuth);","import app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport QueueSection from './QueueSection';\nimport ControlSection from './ControlSection';\nimport ConfigureComposer from './ConfigureComposer';\nimport Alert from 'flarum/common/components/Alert';\nimport listItems from 'flarum/common/helpers/listItems';\nimport ConfigureAuth from './ConfigureAuth';\nexport default class SettingsPage extends ExtensionPage {\n content() {\n const settings = app.extensionData.getSettings(this.extension.id);\n const warnings = [app.translator.trans('flarum-extension-manager.admin.settings.access_warning')];\n if (app.data.debugEnabled) warnings.push(app.translator.trans('flarum-extension-manager.admin.settings.debug_mode_warning'));\n return m(\"div\", {\n className: \"ExtensionPage-settings\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"ExtensionManager-warnings Form-group\"\n }, m(Alert, {\n className: \"ExtensionManager-primaryWarning\",\n type: \"warning\",\n dismissible: false\n }, m(\"ul\", null, listItems(warnings)))), settings ? m(\"div\", {\n className: \"FormSectionGroup ExtensionManager-SettingsGroups\"\n }, m(\"div\", {\n className: \"FormSection\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.settings.title')), m(\"div\", {\n className: \"Form\"\n }, settings.map(this.buildSettingComponent.bind(this))), m(\"div\", {\n className: \"Form-group Form--controls\"\n }, this.submitButton())), m(ConfigureComposer, {\n buildSettingComponent: this.buildSettingComponent\n }), m(ConfigureAuth, {\n buildSettingComponent: this.buildSettingComponent\n })) : m(\"h3\", {\n className: \"ExtensionPage-subHeader\"\n }, app.translator.trans('core.admin.extension.no_settings'))));\n }\n sections(vnode) {\n const items = super.sections(vnode);\n items.setPriority('content', 10);\n items.add('control', m(ControlSection, null), 8);\n if (app.data.settings['flarum-extension-manager.queue_jobs'] !== '0' && app.data.settings['flarum-extension-manager.queue_jobs']) {\n items.add('queue', m(QueueSection, null), 5);\n }\n items.remove('permissions');\n return items;\n }\n onsaved() {\n super.onsaved();\n m.redraw();\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/SettingsPage', SettingsPage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","const BYTE_UNITS = [\n\t'B',\n\t'kB',\n\t'MB',\n\t'GB',\n\t'TB',\n\t'PB',\n\t'EB',\n\t'ZB',\n\t'YB',\n];\n\nconst BIBYTE_UNITS = [\n\t'B',\n\t'kiB',\n\t'MiB',\n\t'GiB',\n\t'TiB',\n\t'PiB',\n\t'EiB',\n\t'ZiB',\n\t'YiB',\n];\n\nconst BIT_UNITS = [\n\t'b',\n\t'kbit',\n\t'Mbit',\n\t'Gbit',\n\t'Tbit',\n\t'Pbit',\n\t'Ebit',\n\t'Zbit',\n\t'Ybit',\n];\n\nconst BIBIT_UNITS = [\n\t'b',\n\t'kibit',\n\t'Mibit',\n\t'Gibit',\n\t'Tibit',\n\t'Pibit',\n\t'Eibit',\n\t'Zibit',\n\t'Yibit',\n];\n\n/*\nFormats the given number using `Number#toLocaleString`.\n- If locale is a string, the value is expected to be a locale-key (for example: `de`).\n- If locale is true, the system default locale is used for translation.\n- If no value for locale is specified, the number is returned unmodified.\n*/\nconst toLocaleString = (number, locale, options) => {\n\tlet result = number;\n\tif (typeof locale === 'string' || Array.isArray(locale)) {\n\t\tresult = number.toLocaleString(locale, options);\n\t} else if (locale === true || options !== undefined) {\n\t\tresult = number.toLocaleString(undefined, options);\n\t}\n\n\treturn result;\n};\n\nexport default function prettyBytes(number, options) {\n\tif (!Number.isFinite(number)) {\n\t\tthrow new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);\n\t}\n\n\toptions = {\n\t\tbits: false,\n\t\tbinary: false,\n\t\t...options,\n\t};\n\n\tconst UNITS = options.bits\n\t\t? (options.binary ? BIBIT_UNITS : BIT_UNITS)\n\t\t: (options.binary ? BIBYTE_UNITS : BYTE_UNITS);\n\n\tif (options.signed && number === 0) {\n\t\treturn ` 0 ${UNITS[0]}`;\n\t}\n\n\tconst isNegative = number < 0;\n\tconst prefix = isNegative ? '-' : (options.signed ? '+' : '');\n\n\tif (isNegative) {\n\t\tnumber = -number;\n\t}\n\n\tlet localeOptions;\n\n\tif (options.minimumFractionDigits !== undefined) {\n\t\tlocaleOptions = {minimumFractionDigits: options.minimumFractionDigits};\n\t}\n\n\tif (options.maximumFractionDigits !== undefined) {\n\t\tlocaleOptions = {maximumFractionDigits: options.maximumFractionDigits, ...localeOptions};\n\t}\n\n\tif (number < 1) {\n\t\tconst numberString = toLocaleString(number, options.locale, localeOptions);\n\t\treturn prefix + numberString + ' ' + UNITS[0];\n\t}\n\n\tconst exponent = Math.min(Math.floor(options.binary ? Math.log(number) / Math.log(1024) : Math.log10(number) / 3), UNITS.length - 1);\n\tnumber /= (options.binary ? 1024 : 1000) ** exponent;\n\n\tif (!localeOptions) {\n\t\tnumber = number.toPrecision(3);\n\t}\n\n\tconst numberString = toLocaleString(Number(number), options.locale, localeOptions);\n\n\tconst unit = UNITS[exponent];\n\n\treturn prefix + numberString + ' ' + unit;\n}\n","import Model from 'flarum/common/Model';\nimport prettyBytes from 'pretty-bytes';\nexport default class Task extends Model {\n status() {\n return Model.attribute('status').call(this);\n }\n operation() {\n return Model.attribute('operation').call(this);\n }\n command() {\n return Model.attribute('command').call(this);\n }\n package() {\n return Model.attribute('package').call(this);\n }\n output() {\n return Model.attribute('output').call(this);\n }\n guessedCause() {\n return Model.attribute('guessedCause').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n startedAt() {\n return Model.attribute('startedAt', Model.transformDate).call(this);\n }\n finishedAt() {\n return Model.attribute('finishedAt', Model.transformDate).call(this);\n }\n peakMemoryUsed() {\n return prettyBytes(Model.attribute('peakMemoryUsed').call(this) * 1024);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/models/Task', Task);","import app from 'flarum/admin/app';\n\n// @ts-ignore\nwindow.jumpToQueue = jumpToQueue;\nexport default function jumpToQueue() {\n app.modal.close();\n m.route.set(app.route('extension', {\n id: 'flarum-extension-manager'\n }));\n app.extensionManager.queue.load({}, true);\n setTimeout(() => {\n var _document$getElementB;\n (_document$getElementB = document.getElementById('ExtensionManager-queueSection')) == null ? void 0 : _document$getElementB.scrollIntoView({\n block: 'nearest'\n });\n }, 200);\n}\nflarum.reg.add('flarum-extension-manager', 'admin/utils/jumpToQueue', jumpToQueue);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nexport default class QueueState {\n constructor() {\n _defineProperty(this, \"polling\", null);\n _defineProperty(this, \"tasks\", null);\n _defineProperty(this, \"limit\", 20);\n _defineProperty(this, \"offset\", 0);\n _defineProperty(this, \"total\", 0);\n }\n load(params, actionTaken) {\n var _params;\n if (actionTaken === void 0) {\n actionTaken = false;\n }\n this.tasks = null;\n params = {\n page: {\n limit: this.limit,\n offset: this.offset,\n ...((_params = params) == null ? void 0 : _params.page)\n },\n ...params\n };\n return app.store.find('extension-manager-tasks', params || {}).then(data => {\n var _data$payload$meta;\n this.tasks = data;\n this.total = (_data$payload$meta = data.payload.meta) == null ? void 0 : _data$payload$meta.total;\n m.redraw();\n\n // Check if there is a pending or running task\n const pendingTask = data == null ? void 0 : data.find(task => task.status() === 'pending' || task.status() === 'running');\n if (pendingTask) {\n this.pollQueue(actionTaken);\n } else if (actionTaken) {\n app.extensionManager.control.setLoading(null);\n\n // Refresh the page\n window.location.reload();\n } else if (app.extensionManager.control.isLoading()) {\n app.extensionManager.control.setLoading(null);\n }\n return data;\n });\n }\n getItems() {\n return this.tasks;\n }\n getTotalPages() {\n return Math.ceil(this.total / this.limit);\n }\n pageNumber() {\n return Math.ceil(this.offset / this.limit);\n }\n hasPrev() {\n return this.pageNumber() !== 0;\n }\n hasNext() {\n return this.offset + this.limit < this.total;\n }\n prev() {\n if (this.hasPrev()) {\n this.offset -= this.limit;\n this.load();\n }\n }\n next() {\n if (this.hasNext()) {\n this.offset += this.limit;\n this.load();\n }\n }\n pollQueue(actionTaken) {\n if (actionTaken === void 0) {\n actionTaken = false;\n }\n if (this.polling) {\n clearTimeout(this.polling);\n }\n this.polling = setTimeout(() => {\n this.load({}, actionTaken);\n }, 6000);\n }\n hasPending() {\n var _this$tasks;\n return !!((_this$tasks = this.tasks) != null && _this$tasks.find(task => task.status() === 'pending' || task.status() === 'running'));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/states/QueueState', QueueState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport errorHandler from '../utils/errorHandler';\nimport jumpToQueue from '../utils/jumpToQueue';\nimport extractText from 'flarum/common/utils/extractText';\nexport default class ControlSectionState {\n get lastUpdateRun() {\n const lastUpdateRun = JSON.parse(app.data.settings['flarum-extension-manager.last_update_run']);\n lastUpdateRun.limitedPackages = () => [...lastUpdateRun.major.limitedPackages, ...lastUpdateRun.minor.limitedPackages, ...lastUpdateRun.global.limitedPackages];\n return lastUpdateRun;\n }\n constructor() {\n _defineProperty(this, \"loading\", null);\n _defineProperty(this, \"packageUpdates\", {});\n _defineProperty(this, \"lastUpdateCheck\", void 0);\n _defineProperty(this, \"extensionUpdates\", void 0);\n _defineProperty(this, \"coreUpdate\", null);\n this.lastUpdateCheck = JSON.parse(app.data.settings['flarum-extension-manager.last_update_check']);\n this.extensionUpdates = this.formatExtensionUpdates(this.lastUpdateCheck);\n this.coreUpdate = this.formatCoreUpdate(this.lastUpdateCheck);\n }\n isLoading(name) {\n if (name === void 0) {\n name = null;\n }\n return name && this.loading === name || !name && this.loading !== null;\n }\n hasOperationRunning() {\n return this.isLoading() || app.extensionManager.queue.hasPending();\n }\n setLoading(name) {\n this.loading = name;\n }\n requirePackage(data) {\n app.extensionManager.control.setLoading('extension-install');\n app.modal.show(LoadingModal);\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/extensions\"),\n body: {\n data\n }\n }).then(response => {\n if (response.processing) {\n jumpToQueue();\n } else {\n const extensionId = response.id;\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_install', {\n extension: extensionId\n }));\n window.location.href = \"\".concat(app.forum.attribute('adminUrl'), \"#/extension/\").concat(extensionId);\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n checkForUpdates() {\n this.setLoading('check');\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/check-for-updates\")\n }).then(response => {\n if (response.processing) {\n jumpToQueue();\n } else {\n this.lastUpdateCheck = response;\n this.extensionUpdates = this.formatExtensionUpdates(response);\n this.coreUpdate = this.formatCoreUpdate(response);\n this.setLoading(null);\n m.redraw();\n }\n }).catch(errorHandler).finally(() => {\n m.redraw();\n });\n }\n updateCoreMinor() {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.minor_update_confirmation.content')))) {\n app.modal.show(LoadingModal);\n this.setLoading('minor-update');\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/minor-update\")\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.update_successful'));\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n }\n updateExtension(extension, updateMode) {\n app.modal.show(LoadingModal);\n this.setLoading('extension-update');\n app.request({\n method: 'PATCH',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/extensions/\").concat(extension.id),\n body: {\n data: {\n updateMode\n }\n }\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_update', {\n extension: extension.extra['flarum-extension'].title\n }));\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n updateGlobally() {\n app.modal.show(LoadingModal);\n this.setLoading('global-update');\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/global-update\")\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.updater.global_update_successful'));\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n formatExtensionUpdates(lastUpdateCheck) {\n var _lastUpdateCheck$upda, _lastUpdateCheck$upda2;\n this.packageUpdates = {};\n lastUpdateCheck == null ? void 0 : (_lastUpdateCheck$upda = lastUpdateCheck.updates) == null ? void 0 : (_lastUpdateCheck$upda2 = _lastUpdateCheck$upda.installed) == null ? void 0 : _lastUpdateCheck$upda2.filter(composerPackage => {\n const id = composerPackage.name.replace('/', '-').replace(/(flarum-ext-)|(flarum-)/, '');\n const extension = app.data.extensions[id];\n const safeToUpdate = ['semver-safe-update', 'update-possible'].includes(composerPackage['latest-status']);\n if (extension && safeToUpdate) {\n this.packageUpdates[extension.id] = composerPackage;\n }\n return extension && safeToUpdate;\n });\n return Object.values(app.data.extensions).filter(extension => this.packageUpdates[extension.id]);\n }\n formatCoreUpdate(lastUpdateCheck) {\n var _lastUpdateCheck$upda3, _lastUpdateCheck$upda4;\n const core = lastUpdateCheck == null ? void 0 : (_lastUpdateCheck$upda3 = lastUpdateCheck.updates) == null ? void 0 : (_lastUpdateCheck$upda4 = _lastUpdateCheck$upda3.installed) == null ? void 0 : _lastUpdateCheck$upda4.filter(composerPackage => composerPackage.name === 'flarum/core').pop();\n if (!core) return null;\n return {\n package: core,\n extension: {\n id: 'flarum-core',\n name: 'flarum/core',\n version: app.data.settings.version,\n icon: {\n // @ts-ignore\n backgroundImage: \"url(\".concat(app.data.resources[0]['attributes']['baseUrl'], \"/assets/extensions/flarum-extension-manager/flarum.svg\")\n },\n extra: {\n 'flarum-extension': {\n title: extractText(app.translator.trans('flarum-extension-manager.admin.updater.flarum'))\n }\n }\n }\n };\n }\n majorUpdate(_ref) {\n let {\n dryRun\n } = _ref;\n app.extensionManager.control.setLoading(dryRun ? 'major-update-dry-run' : 'major-update');\n app.modal.show(LoadingModal);\n const updateState = this.lastUpdateRun.major;\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/major-update\"),\n body: {\n data: {\n dryRun\n }\n }\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.update_successful'));\n window.location.reload();\n }\n }).catch(errorHandler).catch(e => {\n var _e$response, _e$response$errors, _e$response$errors$po;\n app.modal.close();\n updateState.status = 'failure';\n updateState.incompatibleExtensions = (_e$response = e.response) == null ? void 0 : (_e$response$errors = _e$response.errors) == null ? void 0 : (_e$response$errors$po = _e$response$errors.pop()) == null ? void 0 : _e$response$errors$po.incompatible_extensions;\n }).finally(() => {\n m.redraw();\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/states/ControlSectionState', ControlSectionState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport QueueState from './QueueState';\nimport ControlSectionState from './ControlSectionState';\nexport default class ExtensionManagerState {\n constructor() {\n _defineProperty(this, \"queue\", new QueueState());\n _defineProperty(this, \"control\", new ControlSectionState());\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/states/ExtensionManagerState', ExtensionManagerState);","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport isExtensionEnabled from 'flarum/admin/utils/isExtensionEnabled';\nimport SettingsPage from './components/SettingsPage';\nimport Task from './models/Task';\nimport jumpToQueue from './utils/jumpToQueue';\nimport extractText from 'flarum/common/utils/extractText';\nimport ExtensionManagerState from './states/ExtensionManagerState';\napp.initializers.add('flarum-extension-manager', app => {\n app.store.models['extension-manager-tasks'] = Task;\n app.extensionManager = new ExtensionManagerState();\n if (app.data['flarum-extension-manager.using_sync_queue']) {\n app.data.settings['flarum-extension-manager.queue_jobs'] = '0';\n }\n app.extensionData.for('flarum-extension-manager').registerSetting({\n setting: 'flarum-extension-manager.queue_jobs',\n label: app.translator.trans('flarum-extension-manager.admin.settings.queue_jobs'),\n help: m.trust(extractText(app.translator.trans('flarum-extension-manager.admin.settings.queue_jobs_help', {\n basic_impl_link: 'https://discuss.flarum.org/d/28151-database-queue-the-simplest-queue-even-for-shared-hosting',\n adv_impl_link: 'https://discuss.flarum.org/d/21873-redis-sessions-cache-queues',\n php_version: \"\".concat(app.data.phpVersion, \"\"),\n folder_perms_link: 'https://docs.flarum.org/install#folder-ownership'\n }))),\n type: 'boolean',\n disabled: app.data['flarum-extension-manager.using_sync_queue']\n }).registerSetting({\n setting: 'flarum-extension-manager.task_retention_days',\n label: app.translator.trans('flarum-extension-manager.admin.settings.task_retention_days'),\n help: app.translator.trans('flarum-extension-manager.admin.settings.task_retention_days_help'),\n type: 'number'\n }).registerPage(SettingsPage);\n extend(ExtensionPage.prototype, 'topItems', function (items) {\n if (this.extension.id === 'flarum-extension-manager' || isExtensionEnabled(this.extension.id)) {\n return;\n }\n items.add('remove', m(Button, {\n className: \"Button Button--danger\",\n icon: \"fas fa-times\",\n onclick: () => {\n app.modal.show(LoadingModal);\n app.request({\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/extensions/\").concat(this.extension.id),\n method: 'DELETE'\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_remove'));\n window.location = app.forum.attribute('adminUrl');\n }\n }).finally(() => {\n app.modal.close();\n });\n }\n }, app.translator.trans('flarum-extension-manager.admin.extensions.remove')));\n });\n});"],"names":["module","exports","t","s","n","i","e","r","o","u","h","a","d","years","months","days","hours","minutes","seconds","milliseconds","weeks","c","p","f","$l","m","l","$","Math","ceil","floor","y","abs","g","negative","format","this","$d","$ms","parseFromMilliseconds","Object","keys","forEach","calMilliseconds","match","slice","map","Number","prototype","reduce","toISOString","toJSON","Y","YY","YYYY","M","MM","D","DD","H","HH","mm","ss","SSS","replace","String","as","get","add","subtract","locale","clone","humanize","fromNow","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","$utils","duration","isDuration","bind","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","call","getter","__esModule","definition","key","defineProperty","enumerable","obj","prop","hasOwnProperty","Symbol","toStringTag","value","flarum","reg","Label","view","vnode","className","type","attrs","assign","concat","children","TaskOutputModal","title","task","operation","content","status","guessedCause","command","output","humanDuration","start","end","dayjs","extend","durationTime","diff","Pagination","disabled","list","hasPrev","onclick","prev","icon","current","pageNumber","total","getTotalPages","hasNext","next","QueueSection","oninit","super","id","queueTable","columns","items","label","operationIcon","_task$package","extension","package","href","style","name","extra","running","failure","pending","success","includes","size","display","startedAt","finishedAt","text","peakMemoryUsed","tasks","length","toArray","item","index","update_check","update_major","update_minor","update_global","extension_install","extension_remove","extension_update","why_not","_typeof","iterator","constructor","_defineProperty","arg","input","hint","prim","toPrimitive","res","TypeError","toPropertyKey","configurable","writable","Installer","arguments","packageName","htmlFor","extiverse","semantic_link","code","placeholder","bidi","onsubmit","loading","data","error","response","errors","guessed_cause","WhyNotModal","oncreate","requestWhyNot","whyNot","method","url","body","then","reason","redraw","catch","errorHandler","ExtensionItem","_updates$latestMinor","updates","onClickUpdate","whyNotWarning","isCore","isDanger","latestVersion","version","buttonClassName","soft","hard","v","charAt","substring","MajorUpdater","updateState","incompatibleExtensions","alt","src","coreUpdate","update","dismissible","controls","dryRun","Updater","core","lastUpdateCheckView","controlItems","availableUpdatesView","_app$extensionManager","checkedAt","state","hasMinorCoreUpdate","extensionUpdates","updateCoreMinor","lastUpdateRun","limitedPackages","packageUpdates","updateExtension","ControlSection","ConfigureJson","submit","submitButton","isDirty","customSettingComponents","setting","_this$settings$key","settings","readOnly","configuration","_ref","initialSettings","Array","isArray","finally","JSON","stringify","RepositoryModal","repository","context","types","composer","vcs","path","options","onchange","target","hide","ConfigureComposer","buildSettingComponent","help","stable","RC","beta","alpha","dev","newName","repositories","confirm","push","AuthMethodModal","host","token","bearer","oninput","rows","startsWith","ConfigureAuth","authSettings","hasAuthSettings","every","hosts","newType","oldHost","SettingsPage","warnings","sections","setPriority","remove","onsaved","BYTE_UNITS","BIBYTE_UNITS","BIT_UNITS","BIBIT_UNITS","toLocaleString","number","result","Task","createdAt","isFinite","UNITS","bits","binary","signed","isNegative","prefix","localeOptions","minimumFractionDigits","maximumFractionDigits","exponent","min","log","log10","toPrecision","prettyBytes","jumpToQueue","route","set","setTimeout","_document$getElementB","document","getElementById","scrollIntoView","block","window","QueueState","load","params","actionTaken","_params","page","limit","offset","_data$payload$meta","payload","meta","find","pollQueue","location","reload","getItems","polling","clearTimeout","hasPending","_this$tasks","ControlSectionState","parse","major","minor","global","lastUpdateCheck","formatExtensionUpdates","formatCoreUpdate","isLoading","hasOperationRunning","setLoading","requirePackage","processing","extensionId","checkForUpdates","updateMode","updateGlobally","_lastUpdateCheck$upda","_lastUpdateCheck$upda2","installed","filter","composerPackage","safeToUpdate","values","_lastUpdateCheck$upda3","_lastUpdateCheck$upda4","pop","backgroundImage","majorUpdate","_e$response","_e$response$errors","_e$response$errors$po","incompatible_extensions","ExtensionManagerState","app","store","models","extensionManager","extensionData","for","registerSetting","translator","trans","trust","basic_impl_link","adv_impl_link","php_version","phpVersion","folder_perms_link","registerPage","modal","show","request","forum","attribute","alerts","close"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/extension-manager/../../../node_modules/dayjs/plugin/duration.js","webpack://@flarum/extension-manager/webpack/bootstrap","webpack://@flarum/extension-manager/webpack/runtime/compat get default export","webpack://@flarum/extension-manager/webpack/runtime/define property getters","webpack://@flarum/extension-manager/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/extension-manager/webpack/runtime/make namespace object","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/components/LoadingModal')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/utils/isExtensionEnabled')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Tooltip')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Icon')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/extension-manager/./src/admin/components/Label.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Modal')\"","webpack://@flarum/extension-manager/./src/admin/components/TaskOutputModal.tsx","webpack://@flarum/extension-manager/./src/admin/utils/humanDuration.ts","webpack://@flarum/extension-manager/./src/admin/components/Pagination.tsx","webpack://@flarum/extension-manager/./src/admin/components/QueueSection.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Alert')\"","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/extension-manager/./src/admin/components/Installer.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/helpers/humanTime')\"","webpack://@flarum/extension-manager/./src/admin/utils/errorHandler.ts","webpack://@flarum/extension-manager/./src/admin/components/WhyNotModal.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Dropdown')\"","webpack://@flarum/extension-manager/./src/admin/components/ExtensionItem.tsx","webpack://@flarum/extension-manager/./src/admin/components/MajorUpdater.tsx","webpack://@flarum/extension-manager/./src/admin/components/Updater.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/extension-manager/./src/admin/components/ControlSection.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/FormGroup')\"","webpack://@flarum/extension-manager/./src/admin/components/ConfigureJson.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Select')\"","webpack://@flarum/extension-manager/./src/admin/components/RepositoryModal.tsx","webpack://@flarum/extension-manager/./src/admin/components/ConfigureComposer.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/helpers/listItems')\"","webpack://@flarum/extension-manager/./src/admin/components/AuthMethodModal.tsx","webpack://@flarum/extension-manager/./src/admin/components/ConfigureAuth.tsx","webpack://@flarum/extension-manager/./src/admin/components/SettingsPage.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/extension-manager/../../../node_modules/pretty-bytes/index.js","webpack://@flarum/extension-manager/./src/admin/models/Task.ts","webpack://@flarum/extension-manager/./src/admin/utils/jumpToQueue.ts","webpack://@flarum/extension-manager/./src/admin/states/QueueState.ts","webpack://@flarum/extension-manager/./src/admin/states/ControlSectionState.ts","webpack://@flarum/extension-manager/./src/admin/states/ExtensionManagerState.ts","webpack://@flarum/extension-manager/./src/admin/index.tsx"],"sourcesContent":["!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,h=2592e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,d={years:u,months:h,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof p},f=function(t,s,n){return new p(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},g=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},p=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*d[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*d[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/h),t%=h,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=g(this.$d.years,\"Y\"),s=g(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=g(n,\"D\"),e=g(this.$d.hours,\"H\"),r=g(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3);var u=g(o,\"S\"),h=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",d=(h?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===d||\"-P\"===d?\"P0D\":d},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/d[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/d[n]):this.$d[n],0===s?0:s},y.add=function(t,s,n){var i;return i=s?t*d[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}();return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)&&(t=t.asMilliseconds()),r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)&&(t=t.asMilliseconds()),o.bind(this)(t,s)}}}));","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/LoadingModal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/utils/isExtensionEnabled');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Component');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LoadingIndicator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Tooltip');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Icon');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Link');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/classList');","import Component from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nexport default class Label extends Component {\n view(vnode) {\n const {\n className,\n type,\n ...attrs\n } = this.attrs;\n return m(\"span\", Object.assign({\n className: classList(['Label', \"Label--\".concat(this.attrs.type), className])\n }, attrs), vnode.children);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Label', Label);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Modal');","import app from 'flarum/admin/app';\nimport Modal from 'flarum/common/components/Modal';\nexport default class TaskOutputModal extends Modal {\n className() {\n return 'Modal--large QuickModal';\n }\n title() {\n return app.translator.trans(\"flarum-extension-manager.admin.sections.queue.operations.\".concat(this.attrs.task.operation()));\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TaskOutputModal-data\"\n }, this.attrs.task.status() === 'failure' && m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.guessed_cause')), m(\"div\", {\n className: \"FormControl TaskOutputModal-data-guessed-cause\"\n }, this.attrs.task.guessedCause() && app.translator.trans('flarum-extension-manager.admin.exceptions.guessed_cause.' + this.attrs.task.guessedCause()) || app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.cause_unknown'))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.command')), m(\"div\", {\n className: \"FormControl TaskOutputModal-data-command\"\n }, m(\"code\", null, \"$ composer \", this.attrs.task.command()))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.output')), m(\"div\", {\n className: \"FormControl TaskOutputModal-data-output\"\n }, m(\"code\", null, m(\"pre\", null, this.attrs.task.output()))))));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/TaskOutputModal', TaskOutputModal);","import duration from 'dayjs/plugin/duration';\nexport default function humanDuration(start, end) {\n dayjs.extend(duration);\n const durationTime = dayjs(end).diff(start);\n return dayjs.duration(durationTime).humanize();\n}\nflarum.reg.add('flarum-extension-manager', 'admin/utils/humanDuration', humanDuration);","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\n/**\n * @todo make it abstract in core for reusability.\n */\nexport default class Pagination extends Component {\n view() {\n return m(\"nav\", {\n className: \"Pagination UserListPage-gridPagination\"\n }, m(Button, {\n disabled: !this.attrs.list.hasPrev() || app.extensionManager.control.isLoading(),\n title: app.translator.trans('core.admin.users.pagination.back_button'),\n onclick: () => this.attrs.list.prev(),\n icon: \"fas fa-chevron-left\",\n className: \"Button Button--icon UserListPage-backBtn\"\n }), m(\"span\", {\n className: \"UserListPage-pageNumber\"\n }, app.translator.trans('core.admin.users.pagination.page_counter', {\n current: this.attrs.list.pageNumber() + 1,\n total: this.attrs.list.getTotalPages()\n })), m(Button, {\n disabled: !this.attrs.list.hasNext() || app.extensionManager.control.isLoading(),\n title: app.translator.trans('core.admin.users.pagination.next_button'),\n onclick: () => this.attrs.list.next(),\n icon: \"fas fa-chevron-right\",\n className: \"Button Button--icon UserListPage-nextBtn\"\n }));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Pagination', Pagination);","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Icon from 'flarum/common/components/Icon';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport extractText from 'flarum/common/utils/extractText';\nimport Link from 'flarum/common/components/Link';\nimport Label from './Label';\nimport TaskOutputModal from './TaskOutputModal';\nimport humanDuration from '../utils/humanDuration';\nimport Pagination from './Pagination';\nexport default class QueueSection extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n app.extensionManager.queue.load();\n }\n view() {\n return m(\"section\", {\n id: \"ExtensionManager-queueSection\",\n className: \"ExtensionPage-permissions ExtensionManager-queueSection\"\n }, m(\"div\", {\n className: \"ExtensionPage-permissions-header ExtensionManager-queueSection-header\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"h2\", {\n className: \"ExtensionTitle\"\n }, app.translator.trans('flarum-extension-manager.admin.sections.queue.title')), m(Button, {\n className: \"Button Button--icon\",\n icon: \"fas fa-sync-alt\",\n onclick: () => app.extensionManager.queue.load(),\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.sections.queue.refresh'),\n disabled: app.extensionManager.control.isLoading()\n }))), m(\"div\", {\n className: \"container\"\n }, this.queueTable()));\n }\n columns() {\n const items = new ItemList();\n items.add('operation', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.operation')),\n content: task => m(\"div\", {\n className: \"ExtensionManager-queueTable-operation\"\n }, m(\"span\", {\n className: \"ExtensionManager-queueTable-operation-icon\"\n }, this.operationIcon(task.operation())), m(\"span\", {\n className: \"ExtensionManager-queueTable-operation-name\"\n }, app.translator.trans(\"flarum-extension-manager.admin.sections.queue.operations.\".concat(task.operation()))))\n }, 80);\n items.add('package', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.package')),\n content: task => {\n var _task$package;\n const extension = app.data.extensions[(_task$package = task.package()) == null ? void 0 : _task$package.replace(/(\\/flarum-|\\/flarum-ext-|\\/)/g, '-')];\n return extension ? m(Link, {\n className: \"ExtensionManager-queueTable-package\",\n href: app.route('extension', {\n id: extension.id\n })\n }, m(\"div\", {\n className: \"ExtensionManager-queueTable-package-icon ExtensionIcon\",\n style: extension.icon\n }, !!extension.icon && m(Icon, {\n name: extension.icon.name\n })), m(\"div\", {\n className: \"ExtensionManager-queueTable-package-details\"\n }, m(\"span\", {\n className: \"ExtensionManager-queueTable-package-title\"\n }, extension.extra['flarum-extension'].title), m(\"span\", {\n className: \"ExtensionManager-queueTable-package-name\"\n }, task.package()))) : task.package();\n }\n }, 75);\n items.add('status', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.status')),\n content: task => m('[', null, m(Label, {\n className: \"ExtensionManager-queueTable-status\",\n type: {\n running: 'neutral',\n failure: 'error',\n pending: 'warning',\n success: 'success'\n }[task.status()]\n }, app.translator.trans(\"flarum-extension-manager.admin.sections.queue.statuses.\".concat(task.status()))), ['pending', 'running'].includes(task.status()) && m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }))\n }, 70);\n items.add('elapsedTime', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.elapsed_time')),\n content: task => !task.startedAt() || !task.finishedAt() ? app.translator.trans('flarum-extension-manager.admin.sections.queue.task_just_started') : m(Tooltip, {\n text: \"\".concat(dayjs(task.startedAt()).format('LL LTS'), \" \").concat(dayjs(task.finishedAt()).format('LL LTS'))\n }, m(\"span\", null, humanDuration(task.startedAt(), task.finishedAt())))\n }, 65);\n items.add('memoryUsed', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.peak_memory_used')),\n content: task => m(\"span\", null, task.peakMemoryUsed())\n }, 60);\n items.add('details', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.details')),\n content: task => m(Button, {\n className: \"Button Button--icon Table-controls-item\",\n icon: \"fas fa-file-alt\",\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.details')\n // @todo fix in core\n // @ts-ignore\n ,\n onclick: () => app.modal.show(TaskOutputModal, {\n task\n }),\n disabled: ['pending', 'running'].includes(task.status())\n }),\n className: 'Table-controls'\n }, 55);\n return items;\n }\n queueTable() {\n const tasks = app.extensionManager.queue.getItems();\n if (!tasks) {\n return m(LoadingIndicator, null);\n }\n if (tasks && !tasks.length) {\n return m(\"h3\", {\n className: \"ExtensionPage-subHeader\"\n }, app.translator.trans('flarum-extension-manager.admin.sections.queue.none'));\n }\n const columns = this.columns();\n return m('[', null, m(\"table\", {\n className: \"Table ExtensionManager-queueTable\"\n }, m(\"thead\", null, m(\"tr\", null, columns.toArray().map((item, index) => m(\"th\", {\n key: index\n }, item.label)))), m(\"tbody\", null, tasks.map((task, index) => m(\"tr\", {\n key: index\n }, columns.toArray().map((item, index) => {\n const {\n label,\n content,\n ...attrs\n } = item;\n return m(\"td\", Object.assign({\n key: index\n }, attrs), content(task));\n }))))), m(Pagination, {\n list: app.extensionManager.queue\n }));\n }\n operationIcon(operation) {\n return m(Icon, {\n name: {\n update_check: 'fas fa-sync-alt',\n update_major: 'fas fa-play',\n update_minor: 'fas fa-play',\n update_global: 'fas fa-play',\n extension_install: 'fas fa-download',\n extension_remove: 'fas fa-times',\n extension_update: 'fas fa-arrow-alt-circle-up',\n why_not: 'fas fa-exclamation-circle'\n }[operation]\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/QueueSection', QueueSection);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Alert');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\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 return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/Stream');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport Stream from 'flarum/common/utils/Stream';\nexport default class Installer extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"packageName\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.packageName = Stream('');\n }\n view() {\n return m(\"div\", {\n className: \"Form-group ExtensionManager-installer\"\n }, m(\"label\", {\n htmlFor: \"install-extension\"\n }, app.translator.trans('flarum-extension-manager.admin.extensions.install')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.extensions.install_help', {\n extiverse: m(\"a\", {\n href: \"https://extiverse.com\"\n }, \"extiverse.com\"),\n semantic_link: m(\"a\", {\n href: \"https://devhints.io/semver\"\n }),\n code: m(\"code\", null)\n })), m(\"div\", {\n className: \"FormControl-container\"\n }, m(\"input\", {\n className: \"FormControl\",\n id: \"install-extension\",\n placeholder: \"vendor/package-name\",\n bidi: this.packageName\n }), m(Button, {\n className: \"Button\",\n icon: \"fas fa-download\",\n onclick: this.onsubmit.bind(this),\n loading: app.extensionManager.control.isLoading('extension-install'),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.extensions.proceed'))));\n }\n data() {\n return {\n package: this.packageName()\n };\n }\n onsubmit() {\n app.extensionManager.control.requirePackage(this.data());\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Installer', Installer);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/humanTime');","import app from 'flarum/admin/app';\nexport default function (e) {\n app.extensionManager.control.setLoading(null);\n const error = e.response.errors[0];\n if (!['composer_command_failure', 'extension_already_installed', 'extension_not_installed'].includes(error.code)) {\n throw e;\n }\n app.alerts.clear();\n switch (error.code) {\n case 'composer_command_failure':\n if (error.guessed_cause) {\n app.alerts.show({\n type: 'error'\n }, app.translator.trans(\"flarum-extension-manager.admin.exceptions.guessed_cause.\".concat(error.guessed_cause)));\n app.modal.close();\n } else {\n app.alerts.show({\n type: 'error'\n }, app.translator.trans('flarum-extension-manager.admin.exceptions.composer_command_failure'));\n }\n break;\n case 'extension_already_installed':\n app.alerts.show({\n type: 'error'\n }, app.translator.trans('flarum-extension-manager.admin.exceptions.extension_already_installed'));\n app.modal.close();\n break;\n case 'extension_not_installed':\n app.alerts.show({\n type: 'error'\n }, app.translator.trans('flarum-extension-manager.admin.exceptions.extension_not_installed'));\n app.modal.close();\n }\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Modal from 'flarum/common/components/Modal';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport errorHandler from '../utils/errorHandler';\nexport default class WhyNotModal extends Modal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"whyNot\", null);\n }\n className() {\n return 'Modal--large WhyNotModal';\n }\n title() {\n return app.translator.trans('flarum-extension-manager.admin.why_not_modal.title');\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.requestWhyNot();\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, this.loading ? m(LoadingIndicator, null) : m(\"pre\", {\n className: \"WhyNotModal-contents\"\n }, this.whyNot));\n }\n requestWhyNot() {\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/why-not\"),\n body: {\n data: {\n package: this.attrs.package\n }\n }\n }).then(response => {\n this.loading = false;\n this.whyNot = response.data.reason;\n m.redraw();\n }).catch(errorHandler);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/WhyNotModal', WhyNotModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Dropdown');","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nimport Icon from 'flarum/common/components/Icon';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Button from 'flarum/common/components/Button';\nimport WhyNotModal from './WhyNotModal';\nimport Label from './Label';\nimport Dropdown from 'flarum/common/components/Dropdown';\nexport default class ExtensionItem extends Component {\n view(vnode) {\n var _updates$latestMinor;\n const {\n extension,\n updates,\n onClickUpdate,\n whyNotWarning,\n isCore,\n isDanger\n } = this.attrs;\n const latestVersion = (_updates$latestMinor = updates['latest-minor']) != null ? _updates$latestMinor : updates['latest-major'] && !isCore ? updates['latest-major'] : null;\n return m(\"div\", {\n className: classList({\n 'ExtensionManager-extension': true,\n 'ExtensionManager-extension--core': isCore,\n 'ExtensionManager-extension--danger': isDanger\n })\n }, m(\"div\", {\n className: \"ExtensionManager-extension-icon ExtensionIcon\",\n style: extension.icon\n }, extension.icon ? m(Icon, {\n name: extension.icon.name\n }) : ''), m(\"div\", {\n className: \"ExtensionManager-extension-info\"\n }, m(\"div\", {\n className: \"ExtensionManager-extension-name\"\n }, extension.extra['flarum-extension'].title), m(\"div\", {\n className: \"ExtensionManager-extension-version\"\n }, m(\"span\", {\n className: \"ExtensionManager-extension-version-current\"\n }, this.version(updates['version'])), latestVersion ? m(Label, {\n className: \"ExtensionManager-extension-version-latest\",\n type: updates['latest-minor'] ? 'success' : 'warning'\n }, this.version(latestVersion)) : null)), m(\"div\", {\n className: \"ExtensionManager-extension-controls\"\n }, onClickUpdate && typeof onClickUpdate === 'function' ? m(Tooltip, {\n text: app.translator.trans('flarum-extension-manager.admin.extensions.update')\n }, m(Button, {\n icon: \"fas fa-arrow-alt-circle-up\",\n className: \"Button Button--icon Button--flat\",\n onclick: onClickUpdate,\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.extensions.update')\n })) : onClickUpdate ? m(Dropdown, {\n buttonClassName: \"Button Button--icon Button--flat\",\n icon: \"fas fa-arrow-alt-circle-up\",\n label: app.translator.trans('flarum-extension-manager.admin.extensions.update')\n }, m(Button, {\n icon: \"fas fa-arrow-alt-circle-up\",\n className: \"Button\",\n onclick: onClickUpdate.soft\n }, app.translator.trans('flarum-extension-manager.admin.extensions.update_soft_label')), m(Button, {\n icon: \"fas fa-arrow-alt-circle-up\",\n className: \"Button\",\n onclick: onClickUpdate.hard,\n disabled: !updates['direct-dependency']\n }, app.translator.trans('flarum-extension-manager.admin.extensions.update_hard_label'))) : null, whyNotWarning ? m(Tooltip, {\n text: app.translator.trans('flarum-extension-manager.admin.extensions.check_why_it_failed_updating')\n }, m(Button, {\n icon: \"fas fa-exclamation-circle\",\n className: \"Button Button--icon Button--flat Button--danger\",\n onclick: () => app.modal.show(WhyNotModal, {\n package: extension.name\n }),\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.extensions.check_why_it_failed_updating')\n })) : null));\n }\n version(v) {\n return v.charAt(0) === 'v' ? v.substring(1) : v;\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ExtensionItem', ExtensionItem);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Alert from 'flarum/common/components/Alert';\nimport WhyNotModal from './WhyNotModal';\nimport ExtensionItem from './ExtensionItem';\nimport classList from 'flarum/common/utils/classList';\nexport default class MajorUpdater extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"updateState\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.updateState = this.attrs.updateState;\n }\n view() {\n // @todo move Form-group--danger class to core for reuse\n return m(\"div\", {\n className: classList('Form-group Form-group--danger ExtensionManager-majorUpdate', {\n 'ExtensionManager-majorUpdate--failed': this.updateState.status === 'failure',\n 'ExtensionManager-majorUpdate--incompatibleExtensions': this.updateState.incompatibleExtensions.length\n })\n }, m(\"img\", {\n alt: \"flarum logo\",\n src: app.forum.attribute('baseUrl') + '/assets/extensions/flarum-extension-manager/flarum.svg'\n }), m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.major_updater.title', {\n version: this.attrs.coreUpdate['latest-major']\n })), m(\"p\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.description')), m(\"div\", {\n className: \"ExtensionManager-updaterControls\"\n }, m(Tooltip, {\n text: app.translator.trans('flarum-extension-manager.admin.major_updater.dry_run_help')\n }, m(Button, {\n className: \"Button\",\n icon: \"fas fa-vial\",\n onclick: this.update.bind(this, true),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.dry_run'))), m(Button, {\n className: \"Button Button--danger\",\n icon: \"fas fa-play\",\n onclick: this.update.bind(this, false),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.update'))), this.updateState.incompatibleExtensions.length ? m(\"div\", {\n className: \"ExtensionManager-majorUpdate-incompatibleExtensions ExtensionManager-extensions-grid\"\n }, this.updateState.incompatibleExtensions.map(extension => m(ExtensionItem, {\n extension: app.data.extensions[extension.replace('flarum-', '').replace('flarum-ext-', '').replace('/', '-')],\n updates: {},\n onClickUpdate: null,\n isDanger: true\n }))) : null, this.updateState.status === 'failure' ? m(Alert, {\n type: \"error\",\n className: \"ExtensionManager-majorUpdate-failure\",\n dismissible: false,\n controls: [m(Button, {\n className: \"Button Button--text ExtensionManager-majorUpdate-failure-details\",\n icon: \"fas fa-question-circle\",\n onclick: () => app.modal.show(WhyNotModal, {\n package: 'flarum/core'\n })\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.failure.why'))]\n }, m(\"p\", {\n className: \"ExtensionManager-majorUpdate-failure-desc\"\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.failure.desc'))) : null);\n }\n update(dryRun) {\n app.extensionManager.control.majorUpdate({\n dryRun\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/MajorUpdater', MajorUpdater);","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport MajorUpdater from './MajorUpdater';\nimport ExtensionItem from './ExtensionItem';\nimport ItemList from 'flarum/common/utils/ItemList';\nexport default class Updater extends Component {\n view() {\n const core = app.extensionManager.control.coreUpdate;\n return [m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.updater.updater_title')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.updater.updater_help')), this.lastUpdateCheckView(), m(\"div\", {\n className: \"ExtensionManager-updaterControls\"\n }, this.controlItems().toArray()), this.availableUpdatesView()), core && core.package['latest-major'] ? m(MajorUpdater, {\n coreUpdate: core.package,\n updateState: app.extensionManager.control.lastUpdateRun.major\n }) : null];\n }\n lastUpdateCheckView() {\n var _app$extensionManager;\n return ((_app$extensionManager = app.extensionManager.control.lastUpdateCheck) == null ? void 0 : _app$extensionManager.checkedAt) && m(\"p\", {\n className: \"ExtensionManager-lastUpdatedAt\"\n }, m(\"span\", {\n className: \"ExtensionManager-lastUpdatedAt-label\"\n }, app.translator.trans('flarum-extension-manager.admin.updater.last_update_checked_at')), m(\"span\", {\n className: \"ExtensionManager-lastUpdatedAt-value\"\n }, humanTime(app.extensionManager.control.lastUpdateCheck.checkedAt))) || null;\n }\n availableUpdatesView() {\n const state = app.extensionManager.control;\n if (app.extensionManager.control.isLoading('check') || app.extensionManager.control.isLoading('global-update')) {\n return m(\"div\", {\n className: \"ExtensionManager-extensions\"\n }, m(LoadingIndicator, null));\n }\n const hasMinorCoreUpdate = state.coreUpdate && state.coreUpdate.package['latest-minor'];\n if (!(state.extensionUpdates.length || hasMinorCoreUpdate)) {\n return m(\"div\", {\n className: \"ExtensionManager-extensions\"\n }, m(\"span\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.updater.up_to_date')));\n }\n return m(\"div\", {\n className: \"ExtensionManager-extensions\"\n }, m(\"div\", {\n className: \"ExtensionManager-extensions-grid\"\n }, hasMinorCoreUpdate ? m(ExtensionItem, {\n extension: state.coreUpdate.extension,\n updates: state.coreUpdate.package,\n isCore: true,\n onClickUpdate: () => state.updateCoreMinor(),\n whyNotWarning: state.lastUpdateRun.limitedPackages().includes('flarum/core')\n }) : null, state.extensionUpdates.map(extension => m(ExtensionItem, {\n extension: extension,\n updates: state.packageUpdates[extension.id],\n onClickUpdate: {\n soft: () => state.updateExtension(extension, 'soft'),\n hard: () => state.updateExtension(extension, 'hard')\n },\n whyNotWarning: state.lastUpdateRun.limitedPackages().includes(extension.name)\n }))));\n }\n controlItems() {\n const items = new ItemList();\n items.add('updateCheck', m(Button, {\n className: \"Button\",\n icon: \"fas fa-sync-alt\",\n onclick: () => app.extensionManager.control.checkForUpdates(),\n loading: app.extensionManager.control.isLoading('check'),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.updater.check_for_updates')), 100);\n items.add('globalUpdate', m(Button, {\n className: \"Button\",\n icon: \"fas fa-play\",\n onclick: () => app.extensionManager.control.updateGlobally(),\n loading: app.extensionManager.control.isLoading('global-update'),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.updater.run_global_update')));\n return items;\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Updater', Updater);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Alert from 'flarum/common/components/Alert';\nimport Installer from './Installer';\nimport Updater from './Updater';\nimport Form from 'flarum/common/components/Form';\nexport default class ControlSection extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view() {\n return m(\"div\", {\n className: \"ExtensionPage-permissions ExtensionManager-controlSection\"\n }, m(\"div\", {\n className: \"ExtensionPage-permissions-header\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"h2\", {\n className: \"ExtensionTitle\"\n }, app.translator.trans('flarum-extension-manager.admin.sections.control.title')))), m(\"div\", {\n className: \"container\"\n }, app.data['flarum-extension-manager.writable_dirs'] ? m(Form, null, m(Installer, null), m(Updater, null)) : m(\"div\", {\n className: \"Form-group\"\n }, m(Alert, {\n type: \"warning\",\n dismissible: false\n }, app.translator.trans('flarum-extension-manager.admin.file_permissions')))));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ControlSection', ControlSection);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormGroup');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport FormGroup from 'flarum/common/components/FormGroup';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nexport default class ConfigureJson extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"settings\", {});\n _defineProperty(this, \"initialSettings\", null);\n _defineProperty(this, \"loading\", false);\n _defineProperty(this, \"type\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.submit(true);\n }\n className() {\n return '';\n }\n view() {\n return m(\"div\", {\n className: classList('FormSection', this.className())\n }, m(\"label\", null, this.title()), this.content(), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, this.submitButton()));\n }\n submitButton() {\n return [m(Button, {\n className: \"Button Button--primary\",\n loading: this.loading,\n onclick: () => this.submit(false),\n disabled: !this.isDirty()\n }, app.translator.trans('core.admin.settings.submit_button'))];\n }\n customSettingComponents() {\n return FormGroup.prototype.customFieldComponents();\n }\n setting(key) {\n var _this$settings$key;\n return (_this$settings$key = this.settings[key]) != null ? _this$settings$key : this.settings[key] = Stream();\n }\n submit(readOnly) {\n this.loading = true;\n const configuration = {};\n Object.keys(this.settings).forEach(key => {\n configuration[key] = this.settings[key]();\n });\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/extension-manager/composer',\n body: {\n type: this.type,\n data: readOnly ? null : configuration\n }\n }).then(_ref => {\n let {\n data\n } = _ref;\n Object.keys(data).forEach(key => {\n this.settings[key] = Stream(data[key]);\n });\n this.initialSettings = Array.isArray(data) ? {} : data;\n }).finally(() => {\n this.loading = false;\n m.redraw();\n });\n }\n isDirty() {\n return JSON.stringify(this.initialSettings) !== JSON.stringify(this.settings);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ConfigureJson', ConfigureJson);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Select');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Modal from 'flarum/common/components/Modal';\nimport app from 'flarum/admin/app';\nimport Select from 'flarum/common/components/Select';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nexport default class RepositoryModal extends Modal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"repository\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.name = Stream(this.attrs.name || '');\n this.repository = Stream(this.attrs.repository || {\n type: 'composer',\n url: ''\n });\n }\n className() {\n return 'RepositoryModal Modal--small';\n }\n title() {\n const context = this.attrs.repository ? 'edit' : 'add';\n return app.translator.trans(\"flarum-extension-manager.admin.composer.\".concat(context, \"_repository_label\"));\n }\n content() {\n const types = {\n composer: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.composer'),\n vcs: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.vcs'),\n path: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.path')\n };\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.name_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.name\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.type_label')), m(Select, {\n options: types,\n value: this.repository().type,\n onchange: value => this.repository({\n ...this.repository(),\n type: value\n })\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.url')), m(\"input\", {\n className: \"FormControl\",\n onchange: e => this.repository({\n ...this.repository(),\n url: e.target.value\n }),\n value: this.repository().url\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(Button, {\n className: \"Button Button--primary\",\n onclick: this.submit.bind(this)\n }, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.submit_button'))));\n }\n submit() {\n this.attrs.onsubmit(this.repository(), this.name());\n this.hide();\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/RepositoryModal', RepositoryModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport ConfigureJson from './ConfigureJson';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\nimport RepositoryModal from './RepositoryModal';\nexport default class ConfigureComposer extends ConfigureJson {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"type\", 'composer');\n }\n title() {\n return app.translator.trans('flarum-extension-manager.admin.composer.title');\n }\n className() {\n return 'ConfigureComposer';\n }\n content() {\n return m(\"div\", {\n className: \"Form ExtensionManager-SettingsGroups-content\"\n }, this.attrs.buildSettingComponent.call(this, {\n setting: 'minimum-stability',\n label: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.label'),\n help: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.help'),\n type: 'select',\n options: {\n stable: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.stable'),\n RC: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.rc'),\n beta: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.beta'),\n alpha: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.alpha'),\n dev: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.dev')\n }\n }), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.label')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.composer.repositories.help')), m(\"div\", {\n className: \"ConfigureComposer-repositories\"\n }, Object.keys(this.setting('repositories')() || {}).map(name => {\n const repository = this.setting('repositories')()[name];\n return m(\"div\", {\n className: \"ButtonGroup ButtonGroup--full\"\n }, m(Button, {\n className: \"Button\",\n icon: {\n composer: 'fas fa-cubes',\n vcs: 'fas fa-code-branch',\n path: 'fas fa-folder'\n }[repository.type],\n onclick: () => app.modal.show(RepositoryModal, {\n name,\n repository,\n onsubmit: (repository, newName) => {\n const repositories = this.setting('repositories')();\n delete repositories[name];\n this.setting('repositories')(repositories);\n this.onchange(repository, newName);\n }\n })\n }, name, \" (\", repository.type, \")\"), m(Button, {\n className: \"Button Button--icon\",\n icon: \"fas fa-trash\",\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.composer.delete_repository_label'),\n onclick: () => {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.composer.delete_repository_confirmation')))) {\n const repositories = {\n ...this.setting('repositories')()\n };\n delete repositories[name];\n this.setting('repositories')(repositories);\n }\n }\n }));\n }))));\n }\n submitButton() {\n const items = super.submitButton();\n items.push(m(Button, {\n className: \"Button\",\n onclick: () => app.modal.show(RepositoryModal, {\n onsubmit: this.onchange.bind(this)\n })\n }, app.translator.trans('flarum-extension-manager.admin.composer.add_repository_label')));\n return items;\n }\n onchange(repository, name) {\n this.setting('repositories')({\n ...this.setting('repositories')(),\n [name]: repository\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ConfigureComposer', ConfigureComposer);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/listItems');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Modal from 'flarum/common/components/Modal';\nimport app from 'flarum/admin/app';\nimport Select from 'flarum/common/components/Select';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\nexport default class AuthMethodModal extends Modal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"type\", void 0);\n _defineProperty(this, \"host\", void 0);\n _defineProperty(this, \"token\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.type = Stream(this.attrs.type || 'bearer');\n this.host = Stream(this.attrs.host || '');\n this.token = Stream(this.attrs.token || '');\n }\n className() {\n return 'AuthMethodModal Modal--small';\n }\n title() {\n const context = this.attrs.host ? 'edit' : 'add';\n return app.translator.trans(\"flarum-extension-manager.admin.auth_config.\".concat(context, \"_label\"));\n }\n content() {\n const types = {\n 'github-oauth': app.translator.trans('flarum-extension-manager.admin.auth_config.types.github-oauth'),\n 'gitlab-oauth': app.translator.trans('flarum-extension-manager.admin.auth_config.types.gitlab-oauth'),\n 'gitlab-token': app.translator.trans('flarum-extension-manager.admin.auth_config.types.gitlab-token'),\n bearer: app.translator.trans('flarum-extension-manager.admin.auth_config.types.bearer')\n };\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.type_label')), m(Select, {\n options: types,\n value: this.type(),\n onchange: this.type\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.host_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.host,\n placeholder: app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.host_placeholder')\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.token_label')), m(\"textarea\", {\n className: \"FormControl\",\n oninput: e => this.token(e.target.value),\n rows: \"6\",\n placeholder: this.token().startsWith('unchanged:') ? extractText(app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.unchanged_token_placeholder')) : ''\n }, this.token().startsWith('unchanged:') ? '' : this.token())), m(\"div\", {\n className: \"Form-group\"\n }, m(Button, {\n className: \"Button Button--primary\",\n onclick: this.submit.bind(this)\n }, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.submit_button'))));\n }\n submit() {\n this.attrs.onsubmit(this.type(), this.host(), this.token());\n this.hide();\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/AuthMethodModal', AuthMethodModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport ConfigureJson from './ConfigureJson';\nimport Button from 'flarum/common/components/Button';\nimport AuthMethodModal from './AuthMethodModal';\nimport extractText from 'flarum/common/utils/extractText';\nexport default class ConfigureAuth extends ConfigureJson {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"type\", 'auth');\n }\n title() {\n return app.translator.trans('flarum-extension-manager.admin.auth_config.title');\n }\n className() {\n return 'ConfigureAuth';\n }\n content() {\n const authSettings = Object.keys(this.settings);\n const hasAuthSettings = authSettings.length && authSettings.every(type => {\n const data = this.settings[type]();\n return Array.isArray(data) ? data.length : Object.keys(data).length;\n });\n return m(\"div\", {\n className: \"ExtensionManager-SettingsGroups-content\"\n }, hasAuthSettings ? authSettings.map(type => {\n const hosts = this.settings[type]();\n return m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans(\"flarum-extension-manager.admin.auth_config.types.\".concat(type))), m(\"div\", {\n className: \"ConfigureAuth-hosts\"\n }, Object.keys(hosts).map(host => {\n const data = hosts[host];\n return m(\"div\", {\n className: \"ButtonGroup ButtonGroup--full\"\n }, m(Button, {\n className: \"Button\",\n icon: \"fas fa-key\",\n onclick: () => app.modal.show(AuthMethodModal, {\n type,\n host,\n token: data,\n onsubmit: this.onchange.bind(this, host)\n })\n }, host), m(Button, {\n className: \"Button Button--icon\",\n icon: \"fas fa-trash\",\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.auth_config.delete_label'),\n onclick: () => {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.auth_config.delete_confirmation')))) {\n const newType = {\n ...this.setting(type)()\n };\n delete newType[host];\n if (Object.keys(newType).length) {\n this.setting(type)(newType);\n } else {\n delete this.settings[type];\n }\n }\n }\n }));\n })));\n }) : m(\"span\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.auth_config.no_auth_methods_configured')));\n }\n submitButton() {\n const items = super.submitButton();\n items.push(m(Button, {\n className: \"Button\",\n loading: this.loading,\n onclick: () => app.modal.show(AuthMethodModal, {\n onsubmit: this.onchange.bind(this, null)\n })\n }, app.translator.trans('flarum-extension-manager.admin.auth_config.add_label')));\n return items;\n }\n onchange(oldHost, type, host, token) {\n const data = {\n ...this.setting(type)()\n };\n if (oldHost) {\n delete data[oldHost];\n }\n data[host] = token;\n this.setting(type)(data);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ConfigureAuth', ConfigureAuth);","import app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport QueueSection from './QueueSection';\nimport ControlSection from './ControlSection';\nimport ConfigureComposer from './ConfigureComposer';\nimport Alert from 'flarum/common/components/Alert';\nimport listItems from 'flarum/common/helpers/listItems';\nimport ConfigureAuth from './ConfigureAuth';\nexport default class SettingsPage extends ExtensionPage {\n content() {\n const settings = app.extensionData.getSettings(this.extension.id);\n const warnings = [app.translator.trans('flarum-extension-manager.admin.settings.access_warning')];\n if (app.data.debugEnabled) warnings.push(app.translator.trans('flarum-extension-manager.admin.settings.debug_mode_warning'));\n return m(\"div\", {\n className: \"ExtensionPage-settings\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"ExtensionManager-warnings Form-group\"\n }, m(Alert, {\n className: \"ExtensionManager-primaryWarning\",\n type: \"warning\",\n dismissible: false\n }, m(\"ul\", null, listItems(warnings)))), settings ? m(\"div\", {\n className: \"FormSectionGroup ExtensionManager-SettingsGroups\"\n }, m(\"div\", {\n className: \"FormSection\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.settings.title')), m(\"div\", {\n className: \"Form\"\n }, settings.map(this.buildSettingComponent.bind(this))), m(\"div\", {\n className: \"Form-group Form--controls\"\n }, this.submitButton())), m(ConfigureComposer, {\n buildSettingComponent: this.buildSettingComponent\n }), m(ConfigureAuth, {\n buildSettingComponent: this.buildSettingComponent\n })) : m(\"h3\", {\n className: \"ExtensionPage-subHeader\"\n }, app.translator.trans('core.admin.extension.no_settings'))));\n }\n sections(vnode) {\n const items = super.sections(vnode);\n items.setPriority('content', 10);\n items.add('control', m(ControlSection, null), 8);\n if (app.data.settings['flarum-extension-manager.queue_jobs'] !== '0' && app.data.settings['flarum-extension-manager.queue_jobs']) {\n items.add('queue', m(QueueSection, null), 5);\n }\n items.remove('permissions');\n return items;\n }\n onsaved() {\n super.onsaved();\n m.redraw();\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/SettingsPage', SettingsPage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","const BYTE_UNITS = [\n\t'B',\n\t'kB',\n\t'MB',\n\t'GB',\n\t'TB',\n\t'PB',\n\t'EB',\n\t'ZB',\n\t'YB',\n];\n\nconst BIBYTE_UNITS = [\n\t'B',\n\t'kiB',\n\t'MiB',\n\t'GiB',\n\t'TiB',\n\t'PiB',\n\t'EiB',\n\t'ZiB',\n\t'YiB',\n];\n\nconst BIT_UNITS = [\n\t'b',\n\t'kbit',\n\t'Mbit',\n\t'Gbit',\n\t'Tbit',\n\t'Pbit',\n\t'Ebit',\n\t'Zbit',\n\t'Ybit',\n];\n\nconst BIBIT_UNITS = [\n\t'b',\n\t'kibit',\n\t'Mibit',\n\t'Gibit',\n\t'Tibit',\n\t'Pibit',\n\t'Eibit',\n\t'Zibit',\n\t'Yibit',\n];\n\n/*\nFormats the given number using `Number#toLocaleString`.\n- If locale is a string, the value is expected to be a locale-key (for example: `de`).\n- If locale is true, the system default locale is used for translation.\n- If no value for locale is specified, the number is returned unmodified.\n*/\nconst toLocaleString = (number, locale, options) => {\n\tlet result = number;\n\tif (typeof locale === 'string' || Array.isArray(locale)) {\n\t\tresult = number.toLocaleString(locale, options);\n\t} else if (locale === true || options !== undefined) {\n\t\tresult = number.toLocaleString(undefined, options);\n\t}\n\n\treturn result;\n};\n\nexport default function prettyBytes(number, options) {\n\tif (!Number.isFinite(number)) {\n\t\tthrow new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);\n\t}\n\n\toptions = {\n\t\tbits: false,\n\t\tbinary: false,\n\t\t...options,\n\t};\n\n\tconst UNITS = options.bits\n\t\t? (options.binary ? BIBIT_UNITS : BIT_UNITS)\n\t\t: (options.binary ? BIBYTE_UNITS : BYTE_UNITS);\n\n\tif (options.signed && number === 0) {\n\t\treturn ` 0 ${UNITS[0]}`;\n\t}\n\n\tconst isNegative = number < 0;\n\tconst prefix = isNegative ? '-' : (options.signed ? '+' : '');\n\n\tif (isNegative) {\n\t\tnumber = -number;\n\t}\n\n\tlet localeOptions;\n\n\tif (options.minimumFractionDigits !== undefined) {\n\t\tlocaleOptions = {minimumFractionDigits: options.minimumFractionDigits};\n\t}\n\n\tif (options.maximumFractionDigits !== undefined) {\n\t\tlocaleOptions = {maximumFractionDigits: options.maximumFractionDigits, ...localeOptions};\n\t}\n\n\tif (number < 1) {\n\t\tconst numberString = toLocaleString(number, options.locale, localeOptions);\n\t\treturn prefix + numberString + ' ' + UNITS[0];\n\t}\n\n\tconst exponent = Math.min(Math.floor(options.binary ? Math.log(number) / Math.log(1024) : Math.log10(number) / 3), UNITS.length - 1);\n\tnumber /= (options.binary ? 1024 : 1000) ** exponent;\n\n\tif (!localeOptions) {\n\t\tnumber = number.toPrecision(3);\n\t}\n\n\tconst numberString = toLocaleString(Number(number), options.locale, localeOptions);\n\n\tconst unit = UNITS[exponent];\n\n\treturn prefix + numberString + ' ' + unit;\n}\n","import Model from 'flarum/common/Model';\nimport prettyBytes from 'pretty-bytes';\nexport default class Task extends Model {\n status() {\n return Model.attribute('status').call(this);\n }\n operation() {\n return Model.attribute('operation').call(this);\n }\n command() {\n return Model.attribute('command').call(this);\n }\n package() {\n return Model.attribute('package').call(this);\n }\n output() {\n return Model.attribute('output').call(this);\n }\n guessedCause() {\n return Model.attribute('guessedCause').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n startedAt() {\n return Model.attribute('startedAt', Model.transformDate).call(this);\n }\n finishedAt() {\n return Model.attribute('finishedAt', Model.transformDate).call(this);\n }\n peakMemoryUsed() {\n return prettyBytes(Model.attribute('peakMemoryUsed').call(this) * 1024);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/models/Task', Task);","import app from 'flarum/admin/app';\n\n// @ts-ignore\nwindow.jumpToQueue = jumpToQueue;\nexport default function jumpToQueue() {\n app.modal.close();\n m.route.set(app.route('extension', {\n id: 'flarum-extension-manager'\n }));\n app.extensionManager.queue.load({}, true);\n setTimeout(() => {\n var _document$getElementB;\n (_document$getElementB = document.getElementById('ExtensionManager-queueSection')) == null ? void 0 : _document$getElementB.scrollIntoView({\n block: 'nearest'\n });\n }, 200);\n}\nflarum.reg.add('flarum-extension-manager', 'admin/utils/jumpToQueue', jumpToQueue);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nexport default class QueueState {\n constructor() {\n _defineProperty(this, \"polling\", null);\n _defineProperty(this, \"tasks\", null);\n _defineProperty(this, \"limit\", 20);\n _defineProperty(this, \"offset\", 0);\n _defineProperty(this, \"total\", 0);\n }\n load(params, actionTaken) {\n var _params;\n if (actionTaken === void 0) {\n actionTaken = false;\n }\n this.tasks = null;\n params = {\n page: {\n limit: this.limit,\n offset: this.offset,\n ...((_params = params) == null ? void 0 : _params.page)\n },\n ...params\n };\n return app.store.find('extension-manager-tasks', params || {}).then(data => {\n var _data$payload$meta;\n this.tasks = data;\n this.total = ((_data$payload$meta = data.payload.meta) == null ? void 0 : _data$payload$meta.total) || 0;\n m.redraw();\n\n // Check if there is a pending or running task\n const pendingTask = data == null ? void 0 : data.find(task => task.status() === 'pending' || task.status() === 'running');\n if (pendingTask) {\n this.pollQueue(actionTaken);\n } else if (actionTaken) {\n app.extensionManager.control.setLoading(null);\n\n // Refresh the page\n window.location.reload();\n } else if (app.extensionManager.control.isLoading()) {\n app.extensionManager.control.setLoading(null);\n }\n return data;\n });\n }\n getItems() {\n return this.tasks;\n }\n getTotalPages() {\n return Math.ceil(this.total / this.limit);\n }\n pageNumber() {\n return Math.ceil(this.offset / this.limit);\n }\n hasPrev() {\n return this.pageNumber() !== 0;\n }\n hasNext() {\n return this.offset + this.limit < this.total;\n }\n prev() {\n if (this.hasPrev()) {\n this.offset -= this.limit;\n this.load();\n }\n }\n next() {\n if (this.hasNext()) {\n this.offset += this.limit;\n this.load();\n }\n }\n pollQueue(actionTaken) {\n if (actionTaken === void 0) {\n actionTaken = false;\n }\n if (this.polling) {\n clearTimeout(this.polling);\n }\n this.polling = setTimeout(() => {\n this.load({}, actionTaken);\n }, 6000);\n }\n hasPending() {\n var _this$tasks;\n return !!((_this$tasks = this.tasks) != null && _this$tasks.find(task => task.status() === 'pending' || task.status() === 'running'));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/states/QueueState', QueueState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport errorHandler from '../utils/errorHandler';\nimport jumpToQueue from '../utils/jumpToQueue';\nimport extractText from 'flarum/common/utils/extractText';\nexport default class ControlSectionState {\n get lastUpdateRun() {\n const lastUpdateRun = JSON.parse(app.data.settings['flarum-extension-manager.last_update_run']);\n lastUpdateRun.limitedPackages = () => [...lastUpdateRun.major.limitedPackages, ...lastUpdateRun.minor.limitedPackages, ...lastUpdateRun.global.limitedPackages];\n return lastUpdateRun;\n }\n constructor() {\n _defineProperty(this, \"loading\", null);\n _defineProperty(this, \"packageUpdates\", {});\n _defineProperty(this, \"lastUpdateCheck\", void 0);\n _defineProperty(this, \"extensionUpdates\", void 0);\n _defineProperty(this, \"coreUpdate\", null);\n this.lastUpdateCheck = JSON.parse(app.data.settings['flarum-extension-manager.last_update_check']);\n this.extensionUpdates = this.formatExtensionUpdates(this.lastUpdateCheck);\n this.coreUpdate = this.formatCoreUpdate(this.lastUpdateCheck);\n }\n isLoading(name) {\n if (name === void 0) {\n name = null;\n }\n return name && this.loading === name || !name && this.loading !== null;\n }\n hasOperationRunning() {\n return this.isLoading() || app.extensionManager.queue.hasPending();\n }\n setLoading(name) {\n this.loading = name;\n }\n requirePackage(data) {\n app.extensionManager.control.setLoading('extension-install');\n app.modal.show(LoadingModal);\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/extensions\"),\n body: {\n data\n }\n }).then(response => {\n if (response.processing) {\n jumpToQueue();\n } else {\n const extensionId = response.id;\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_install', {\n extension: extensionId\n }));\n window.location.href = \"\".concat(app.forum.attribute('adminUrl'), \"#/extension/\").concat(extensionId);\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n checkForUpdates() {\n this.setLoading('check');\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/check-for-updates\")\n }).then(response => {\n if (response.processing) {\n jumpToQueue();\n } else {\n this.lastUpdateCheck = response;\n this.extensionUpdates = this.formatExtensionUpdates(response);\n this.coreUpdate = this.formatCoreUpdate(response);\n this.setLoading(null);\n m.redraw();\n }\n }).catch(errorHandler).finally(() => {\n m.redraw();\n });\n }\n updateCoreMinor() {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.minor_update_confirmation.content')))) {\n app.modal.show(LoadingModal);\n this.setLoading('minor-update');\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/minor-update\")\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.update_successful'));\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n }\n updateExtension(extension, updateMode) {\n app.modal.show(LoadingModal);\n this.setLoading('extension-update');\n app.request({\n method: 'PATCH',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/extensions/\").concat(extension.id),\n body: {\n data: {\n updateMode\n }\n }\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_update', {\n extension: extension.extra['flarum-extension'].title\n }));\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n updateGlobally() {\n app.modal.show(LoadingModal);\n this.setLoading('global-update');\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/global-update\")\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.updater.global_update_successful'));\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n formatExtensionUpdates(lastUpdateCheck) {\n var _lastUpdateCheck$upda, _lastUpdateCheck$upda2;\n this.packageUpdates = {};\n lastUpdateCheck == null ? void 0 : (_lastUpdateCheck$upda = lastUpdateCheck.updates) == null ? void 0 : (_lastUpdateCheck$upda2 = _lastUpdateCheck$upda.installed) == null ? void 0 : _lastUpdateCheck$upda2.filter(composerPackage => {\n const id = composerPackage.name.replace('/', '-').replace(/(flarum-ext-)|(flarum-)/, '');\n const extension = app.data.extensions[id];\n const safeToUpdate = ['semver-safe-update', 'update-possible'].includes(composerPackage['latest-status']);\n if (extension && safeToUpdate) {\n this.packageUpdates[extension.id] = composerPackage;\n }\n return extension && safeToUpdate;\n });\n return Object.values(app.data.extensions).filter(extension => this.packageUpdates[extension.id]);\n }\n formatCoreUpdate(lastUpdateCheck) {\n var _lastUpdateCheck$upda3, _lastUpdateCheck$upda4;\n const core = lastUpdateCheck == null ? void 0 : (_lastUpdateCheck$upda3 = lastUpdateCheck.updates) == null ? void 0 : (_lastUpdateCheck$upda4 = _lastUpdateCheck$upda3.installed) == null ? void 0 : _lastUpdateCheck$upda4.filter(composerPackage => composerPackage.name === 'flarum/core').pop();\n if (!core) return null;\n return {\n package: core,\n extension: {\n id: 'flarum-core',\n name: 'flarum/core',\n version: app.data.settings.version,\n icon: {\n // @ts-ignore\n backgroundImage: \"url(\".concat(app.data.resources[0]['attributes']['baseUrl'], \"/assets/extensions/flarum-extension-manager/flarum.svg\")\n },\n extra: {\n 'flarum-extension': {\n title: extractText(app.translator.trans('flarum-extension-manager.admin.updater.flarum'))\n }\n }\n }\n };\n }\n majorUpdate(_ref) {\n let {\n dryRun\n } = _ref;\n app.extensionManager.control.setLoading(dryRun ? 'major-update-dry-run' : 'major-update');\n app.modal.show(LoadingModal);\n const updateState = this.lastUpdateRun.major;\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/major-update\"),\n body: {\n data: {\n dryRun\n }\n }\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.update_successful'));\n window.location.reload();\n }\n }).catch(errorHandler).catch(e => {\n var _e$response, _e$response$errors, _e$response$errors$po;\n app.modal.close();\n updateState.status = 'failure';\n updateState.incompatibleExtensions = (_e$response = e.response) == null ? void 0 : (_e$response$errors = _e$response.errors) == null ? void 0 : (_e$response$errors$po = _e$response$errors.pop()) == null ? void 0 : _e$response$errors$po.incompatible_extensions;\n }).finally(() => {\n m.redraw();\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/states/ControlSectionState', ControlSectionState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport QueueState from './QueueState';\nimport ControlSectionState from './ControlSectionState';\nexport default class ExtensionManagerState {\n constructor() {\n _defineProperty(this, \"queue\", new QueueState());\n _defineProperty(this, \"control\", new ControlSectionState());\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/states/ExtensionManagerState', ExtensionManagerState);","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport isExtensionEnabled from 'flarum/admin/utils/isExtensionEnabled';\nimport SettingsPage from './components/SettingsPage';\nimport Task from './models/Task';\nimport jumpToQueue from './utils/jumpToQueue';\nimport extractText from 'flarum/common/utils/extractText';\nimport ExtensionManagerState from './states/ExtensionManagerState';\napp.initializers.add('flarum-extension-manager', app => {\n app.store.models['extension-manager-tasks'] = Task;\n app.extensionManager = new ExtensionManagerState();\n if (app.data['flarum-extension-manager.using_sync_queue']) {\n app.data.settings['flarum-extension-manager.queue_jobs'] = '0';\n }\n app.extensionData.for('flarum-extension-manager').registerSetting({\n setting: 'flarum-extension-manager.queue_jobs',\n label: app.translator.trans('flarum-extension-manager.admin.settings.queue_jobs'),\n help: m.trust(extractText(app.translator.trans('flarum-extension-manager.admin.settings.queue_jobs_help', {\n basic_impl_link: 'https://discuss.flarum.org/d/28151-database-queue-the-simplest-queue-even-for-shared-hosting',\n adv_impl_link: 'https://discuss.flarum.org/d/21873-redis-sessions-cache-queues',\n php_version: \"\".concat(app.data.phpVersion, \"\"),\n folder_perms_link: 'https://docs.flarum.org/install#folder-ownership'\n }))),\n type: 'boolean',\n disabled: app.data['flarum-extension-manager.using_sync_queue']\n }).registerSetting({\n setting: 'flarum-extension-manager.task_retention_days',\n label: app.translator.trans('flarum-extension-manager.admin.settings.task_retention_days'),\n help: app.translator.trans('flarum-extension-manager.admin.settings.task_retention_days_help'),\n type: 'number'\n }).registerPage(SettingsPage);\n extend(ExtensionPage.prototype, 'topItems', function (items) {\n if (this.extension.id === 'flarum-extension-manager' || isExtensionEnabled(this.extension.id)) {\n return;\n }\n items.add('remove', m(Button, {\n className: \"Button Button--danger\",\n icon: \"fas fa-times\",\n onclick: () => {\n app.modal.show(LoadingModal);\n app.request({\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/extensions/\").concat(this.extension.id),\n method: 'DELETE'\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_remove'));\n window.location = app.forum.attribute('adminUrl');\n }\n }).finally(() => {\n app.modal.close();\n });\n }\n }, app.translator.trans('flarum-extension-manager.admin.extensions.remove')));\n });\n});"],"names":["module","exports","t","s","n","i","e","r","o","u","h","a","d","years","months","days","hours","minutes","seconds","milliseconds","weeks","c","p","f","$l","m","l","$","Math","ceil","floor","y","abs","g","negative","format","this","$d","$ms","parseFromMilliseconds","Object","keys","forEach","calMilliseconds","match","slice","map","Number","prototype","reduce","toISOString","toJSON","Y","YY","YYYY","M","MM","D","DD","H","HH","mm","ss","SSS","replace","String","as","get","add","subtract","locale","clone","humanize","fromNow","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","$utils","duration","isDuration","bind","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","call","getter","__esModule","definition","key","defineProperty","enumerable","obj","prop","hasOwnProperty","Symbol","toStringTag","value","flarum","reg","Label","view","vnode","className","type","attrs","assign","concat","children","TaskOutputModal","title","task","operation","content","status","guessedCause","command","output","humanDuration","start","end","dayjs","extend","durationTime","diff","Pagination","disabled","list","hasPrev","onclick","prev","icon","current","pageNumber","total","getTotalPages","hasNext","next","QueueSection","oninit","super","id","queueTable","columns","items","label","operationIcon","_task$package","extension","package","href","style","name","extra","running","failure","pending","success","includes","size","display","startedAt","finishedAt","text","peakMemoryUsed","tasks","length","toArray","item","index","update_check","update_major","update_minor","update_global","extension_install","extension_remove","extension_update","why_not","_typeof","iterator","constructor","_defineProperty","arg","input","hint","prim","toPrimitive","res","TypeError","toPropertyKey","configurable","writable","Installer","arguments","packageName","htmlFor","extiverse","semantic_link","code","placeholder","bidi","onsubmit","loading","data","error","response","errors","guessed_cause","WhyNotModal","oncreate","requestWhyNot","whyNot","method","url","body","then","reason","redraw","catch","errorHandler","ExtensionItem","_updates$latestMinor","updates","onClickUpdate","whyNotWarning","isCore","isDanger","latestVersion","version","buttonClassName","soft","hard","v","charAt","substring","MajorUpdater","updateState","incompatibleExtensions","alt","src","coreUpdate","update","dismissible","controls","dryRun","Updater","core","lastUpdateCheckView","controlItems","availableUpdatesView","_app$extensionManager","checkedAt","state","hasMinorCoreUpdate","extensionUpdates","updateCoreMinor","lastUpdateRun","limitedPackages","packageUpdates","updateExtension","ControlSection","ConfigureJson","submit","submitButton","isDirty","customSettingComponents","setting","_this$settings$key","settings","readOnly","configuration","_ref","initialSettings","Array","isArray","finally","JSON","stringify","RepositoryModal","repository","context","types","composer","vcs","path","options","onchange","target","hide","ConfigureComposer","buildSettingComponent","help","stable","RC","beta","alpha","dev","newName","repositories","confirm","push","AuthMethodModal","host","token","bearer","oninput","rows","startsWith","ConfigureAuth","authSettings","hasAuthSettings","every","hosts","newType","oldHost","SettingsPage","warnings","sections","setPriority","remove","onsaved","BYTE_UNITS","BIBYTE_UNITS","BIT_UNITS","BIBIT_UNITS","toLocaleString","number","result","Task","createdAt","isFinite","UNITS","bits","binary","signed","isNegative","prefix","localeOptions","minimumFractionDigits","maximumFractionDigits","exponent","min","log","log10","toPrecision","prettyBytes","jumpToQueue","route","set","setTimeout","_document$getElementB","document","getElementById","scrollIntoView","block","window","QueueState","load","params","actionTaken","_params","page","limit","offset","_data$payload$meta","payload","meta","find","pollQueue","location","reload","getItems","polling","clearTimeout","hasPending","_this$tasks","ControlSectionState","parse","major","minor","global","lastUpdateCheck","formatExtensionUpdates","formatCoreUpdate","isLoading","hasOperationRunning","setLoading","requirePackage","processing","extensionId","checkForUpdates","updateMode","updateGlobally","_lastUpdateCheck$upda","_lastUpdateCheck$upda2","installed","filter","composerPackage","safeToUpdate","values","_lastUpdateCheck$upda3","_lastUpdateCheck$upda4","pop","backgroundImage","majorUpdate","_e$response","_e$response$errors","_e$response$errors$po","incompatible_extensions","ExtensionManagerState","app","store","models","extensionManager","extensionData","for","registerSetting","translator","trans","trust","basic_impl_link","adv_impl_link","php_version","phpVersion","folder_perms_link","registerPage","modal","show","request","forum","attribute","alerts","close"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/tags/js/dist-typings/admin/components/EditTagModal.d.ts b/extensions/tags/js/dist-typings/admin/components/EditTagModal.d.ts index 2e0bc512f..d20ef17fc 100644 --- a/extensions/tags/js/dist-typings/admin/components/EditTagModal.d.ts +++ b/extensions/tags/js/dist-typings/admin/components/EditTagModal.d.ts @@ -20,7 +20,7 @@ export default class EditTagModal extends FormModal { color: Stream; icon: Stream; isHidden: Stream; - primary: Stream; + isPrimary: Stream; oninit(vnode: Mithril.Vnode): void; className(): string; title(): import("@askvortsov/rich-icu-message-formatter").NestedStringArray | Mithril.Vnode; @@ -33,7 +33,7 @@ export default class EditTagModal extends FormModal { color: string; icon: string; isHidden: boolean; - primary: boolean; + isPrimary: boolean; }; onsubmit(e: SubmitEvent): void; delete(): void; diff --git a/extensions/tags/js/dist-typings/admin/components/SelectTagsSettingComponent.d.ts b/extensions/tags/js/dist-typings/admin/components/SelectTagsSettingComponent.d.ts index 3503d93ac..8268e1dc3 100644 --- a/extensions/tags/js/dist-typings/admin/components/SelectTagsSettingComponent.d.ts +++ b/extensions/tags/js/dist-typings/admin/components/SelectTagsSettingComponent.d.ts @@ -1,10 +1,10 @@ /// import Component from 'flarum/common/Component'; -import type { CommonSettingsItemOptions } from 'flarum/admin/components/AdminPage'; +import type { CommonFieldOptions } from 'flarum/common/components/FormGroup'; import type Stream from 'flarum/common/utils/Stream'; import type { ITagSelectionModalAttrs } from '../../common/components/TagSelectionModal'; import type Tag from '../../common/models/Tag'; -export interface SelectTagsSettingComponentOptions extends CommonSettingsItemOptions { +export interface SelectTagsSettingComponentOptions extends CommonFieldOptions { type: 'flarum-tags.select-tags'; options?: ITagSelectionModalAttrs; } diff --git a/extensions/tags/js/dist-typings/common/models/Tag.d.ts b/extensions/tags/js/dist-typings/common/models/Tag.d.ts index 42e450f74..9d0d21efd 100644 --- a/extensions/tags/js/dist-typings/common/models/Tag.d.ts +++ b/extensions/tags/js/dist-typings/common/models/Tag.d.ts @@ -14,11 +14,12 @@ export default class Tag extends Model { defaultSort(): string | null; isChild(): boolean; isHidden(): boolean; + isPrimary(): boolean; discussionCount(): number; lastPostedAt(): Date | null | undefined; lastPostedDiscussion(): false | Discussion | null; isRestricted(): boolean; canStartDiscussion(): boolean; canAddToDiscussion(): boolean; - isPrimary(): boolean; + isPrimaryParent(): boolean; } diff --git a/extensions/tags/js/dist/admin.js b/extensions/tags/js/dist/admin.js index c640422ad..32e70a2c6 100644 --- a/extensions/tags/js/dist/admin.js +++ b/extensions/tags/js/dist/admin.js @@ -1,3 +1,3 @@ /*! For license information please see admin.js.LICENSE.txt */ -(()=>{var t,e,n={110:(t,e,n)=>{"use strict";n.d(e,{l:()=>Sn});const o=flarum.reg.get("core","admin/app");var r=n.n(o);const a=flarum.reg.get("core","common/extend"),i=flarum.reg.get("core","admin/components/PermissionGrid");var s=n.n(i);const l=flarum.reg.get("core","admin/components/PermissionDropdown");var c=n.n(l);const u=flarum.reg.get("core","common/components/Dropdown");var d=n.n(u),h=n(645),g=n.n(h),p=n(149),f=n.n(p),v=n(924),b=n(974),y=n(648);function w(){app.extensionData.for("flarum-tags").registerPermission({icon:"fas fa-tag",label:app.translator.trans("flarum-tags.admin.permissions.tag_discussions_label"),permission:"discussion.tag"},"moderate",95).registerPermission({icon:"fas fa-tags",label:app.translator.trans("flarum-tags.admin.permissions.bypass_tag_counts_label"),permission:"bypassTagCounts"},"start",89)}const _=flarum.reg.get("core","admin/components/BasicsPage");var T=n.n(_);function S(){(0,a.extend)(T().prototype,"homePageItems",(t=>{t.add("tags",{path:"/tags",label:app.translator.trans("flarum-tags.admin.basics.tags_label")})}))}const E=flarum.reg.get("core","admin/components/SettingDropdown");var D=n.n(E),C=n(905),x=n(433),N=n.n(x),O=(n(780),n(836)),P=n.n(O);function I(t,e){void 0===e&&(e={});const n=[],{link:o,...r}=e;return r.className=P()("TagsLabel",r.className),t?(0,y.Z)(t).forEach((e=>{(e||1===t.length)&&n.push((0,v.Z)(e,{link:o}))})):n.push((0,v.Z)()),m("span",r,n)}flarum.reg.add("flarum-tags","common/helpers/tagsLabel",I);class M extends(N()){constructor(){super(...arguments),(0,C.Z)(this,"tags",[]),(0,C.Z)(this,"loaded",!1)}view(){const t=JSON.parse(this.attrs.settingValue()||"[]");return this.loaded||r().tagList.load(["parent"]).then((e=>{this.tags=e.filter((e=>t.includes(e.id()))),this.loaded=!0,m.redraw()})),m("div",{className:"Form-group SelectTagsSettingComponent"},m("label",null,this.attrs.label),this.attrs.help&&m("p",{className:"helpText"},this.attrs.help),this.loaded?m(g(),{className:"Button Button--text",onclick:()=>r().modal.show((()=>n.e(162).then(n.bind(n,610))),{selectedTags:this.tags,onsubmit:t=>{this.tags=t,this.attrs.settingValue(JSON.stringify(t.map((t=>t.id()))))},...this.attrs.options})},this.tags.length?I(this.tags):m("span",{className:"TagLabel untagged"},r().translator.trans("flarum-tags.admin.settings.button_text"))):m(f(),{size:"small",display:"inline"}))}}flarum.reg.add("flarum-tags","admin/components/SelectTagsSettingComponent",M),flarum.reg.addChunkModule("162","610","flarum-tags","common/components/TagSelectionModal");const A=flarum.reg.get("core","common/components/FormGroup");var k=n.n(A);function F(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function L(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function Y(t){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(t)}var Z=Y(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),H=Y(/Edge/i),G=Y(/firefox/i),W=Y(/safari/i)&&!Y(/chrome/i)&&!Y(/android/i),q=Y(/iP(ad|od|hone)/i),z=Y(/chrome/i)&&Y(/android/i),V={capture:!1,passive:!1};function U(t,e,n){t.addEventListener(e,n,!Z&&V)}function K(t,e,n){t.removeEventListener(e,n,!Z&&V)}function J(t,e){if(e){if(">"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function Q(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function tt(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&J(t,e):J(t,e))||o&&t===n)return t;if(t===n)break}while(t=Q(t))}return null}var et,nt=/\s+/g;function ot(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(nt," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(nt," ")}}function rt(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function at(t,e){var n="";if("string"==typeof t)n=t;else do{var o=rt(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var r=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return r&&new r(n)}function it(t,e,n){if(t){var o=t.getElementsByTagName(e),r=0,a=o.length;if(n)for(;r=a:r<=a))return o;if(o===st())break;o=gt(o,!1)}return!1}function ut(t,e,n,o){for(var r=0,a=0,i=t.children;a2&&void 0!==arguments[2]?arguments[2]:{},o=n.evt,r=X(n,St);Tt.pluginEvent.bind(fe)(t,e,L({dragEl:Ct,parentEl:xt,ghostEl:Nt,rootEl:Ot,nextEl:Pt,lastDownEl:It,cloneEl:Mt,cloneHidden:At,dragStarted:qt,putSortable:jt,activeSortable:fe.active,originalEvent:o,oldIndex:kt,oldDraggableIndex:Lt,newIndex:Ft,newDraggableIndex:Bt,hideGhostForTarget:me,unhideGhostForTarget:he,cloneNowHidden:function(){At=!0},cloneNowShown:function(){At=!1},dispatchSortableEvent:function(t){Dt({sortable:e,name:t,originalEvent:o})}},r))};function Dt(t){!function(t){var e=t.sortable,n=t.rootEl,o=t.name,r=t.targetEl,a=t.cloneEl,i=t.toEl,s=t.fromEl,l=t.oldIndex,c=t.newIndex,u=t.oldDraggableIndex,d=t.newDraggableIndex,m=t.originalEvent,h=t.putSortable,g=t.extraEventProperties;if(e=e||n&&n[yt]){var p,f=e.options,v="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||Z||H?(p=document.createEvent("Event")).initEvent(o,!0,!0):p=new CustomEvent(o,{bubbles:!0,cancelable:!0}),p.to=i||n,p.from=s||n,p.item=r||n,p.clone=a,p.oldIndex=l,p.newIndex=c,p.oldDraggableIndex=u,p.newDraggableIndex=d,p.originalEvent=m,p.pullMode=h?h.lastPutMode:void 0;var b=L(L({},g),Tt.getEventProperties(o,e));for(var y in b)p[y]=b[y];n&&n.dispatchEvent(p),f[v]&&f[v].call(e,p)}}(L({putSortable:jt,cloneEl:Mt,targetEl:Ct,rootEl:Ot,oldIndex:kt,oldDraggableIndex:Lt,newIndex:Ft,newDraggableIndex:Bt},t))}var Ct,xt,Nt,Ot,Pt,It,Mt,At,kt,Ft,Lt,Bt,Rt,jt,Xt,Yt,Zt,Ht,Gt,Wt,qt,zt,Vt,Ut,$t,Kt=!1,Jt=!1,Qt=[],te=!1,ee=!1,ne=[],oe=!1,re=[],ae="undefined"!=typeof document,ie=q,se=H||Z?"cssFloat":"float",le=ae&&!z&&!q&&"draggable"in document.createElement("div"),ce=function(){if(ae){if(Z)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),ue=function(t,e){var n=rt(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),r=ut(t,0,e),a=ut(t,1,e),i=r&&rt(r),s=a&&rt(a),l=i&&parseInt(i.marginLeft)+parseInt(i.marginRight)+lt(r).width,c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+lt(a).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(r&&i.float&&"none"!==i.float){var u="left"===i.float?"left":"right";return!a||"both"!==s.clear&&s.clear!==u?"horizontal":"vertical"}return r&&("block"===i.display||"flex"===i.display||"table"===i.display||"grid"===i.display||l>=o&&"none"===n[se]||a&&"none"===n[se]&&l+c>o)?"vertical":"horizontal"},de=function(t){function e(t,n){return function(o,r,a,i){var s=o.options.group.name&&r.options.group.name&&o.options.group.name===r.options.group.name;if(null==t&&(n||s))return!0;if(null==t||!1===t)return!1;if(n&&"clone"===t)return t;if("function"==typeof t)return e(t(o,r,a,i),n)(o,r,a,i);var l=(n?o:r).options.group.name;return!0===t||"string"==typeof t&&t===l||t.join&&t.indexOf(l)>-1}}var n={},o=t.group;o&&"object"==B(o)||(o={name:o}),n.name=o.name,n.checkPull=e(o.pull,!0),n.checkPut=e(o.put),n.revertClone=o.revertClone,t.group=n},me=function(){!ce&&Nt&&rt(Nt,"display","none")},he=function(){!ce&&Nt&&rt(Nt,"display","")};ae&&!z&&document.addEventListener("click",(function(t){if(Jt)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),Jt=!1,!1}),!0);var ge=function(t){if(Ct){t=t.touches?t.touches[0]:t;var e=(r=t.clientX,a=t.clientY,Qt.some((function(t){var e=t[yt].options.emptyInsertThreshold;if(e&&!dt(t)){var n=lt(t),o=r>=n.left-e&&r<=n.right+e,s=a>=n.top-e&&a<=n.bottom+e;return o&&s?i=t:void 0}})),i);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[yt]._onDragOver(n)}}var r,a,i},pe=function(t){Ct&&Ct.parentNode[yt]._isOutsideThisEl(t.target)};function fe(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=j({},e),t[yt]=this;var n,o,r={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return ue(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==fe.supportPointer&&"PointerEvent"in window&&!W,emptyInsertThreshold:5};for(var a in Tt.initializePlugins(this,t,r),r)!(a in e)&&(e[a]=r[a]);for(var i in de(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&le,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?U(t,"pointerdown",this._onTapStart):(U(t,"mousedown",this._onTapStart),U(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(U(t,"dragover",this),U(t,"dragenter",this)),Qt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),j(this,(o=[],{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach((function(t){if("none"!==rt(t,"display")&&t!==fe.ghost){o.push({target:t,rect:lt(t)});var e=L({},o[o.length-1].rect);if(t.thisAnimationDuration){var n=at(t,!0);n&&(e.top-=n.f,e.left-=n.e)}t.fromRect=e}}))},addAnimationState:function(t){o.push(t)},removeAnimationState:function(t){o.splice(function(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var o in e)if(e.hasOwnProperty(o)&&e[o]===t[n][o])return Number(n);return-1}(o,{target:t}),1)},animateAll:function(t){var e=this;if(!this.options.animation)return clearTimeout(n),void("function"==typeof t&&t());var r=!1,a=0;o.forEach((function(t){var n=0,o=t.target,i=o.fromRect,s=lt(o),l=o.prevFromRect,c=o.prevToRect,u=t.rect,d=at(o,!0);d&&(s.top-=d.f,s.left-=d.e),o.toRect=s,o.thisAnimationDuration&&pt(l,s)&&!pt(i,s)&&(u.top-s.top)/(u.left-s.left)==(i.top-s.top)/(i.left-s.left)&&(n=function(t,e,n,o){return Math.sqrt(Math.pow(e.top-t.top,2)+Math.pow(e.left-t.left,2))/Math.sqrt(Math.pow(e.top-n.top,2)+Math.pow(e.left-n.left,2))*o.animation}(u,l,c,e.options)),pt(s,i)||(o.prevFromRect=i,o.prevToRect=s,n||(n=e.options.animation),e.animate(o,u,s,n)),n&&(r=!0,a=Math.max(a,n),clearTimeout(o.animationResetTimer),o.animationResetTimer=setTimeout((function(){o.animationTime=0,o.prevFromRect=null,o.fromRect=null,o.prevToRect=null,o.thisAnimationDuration=null}),n),o.thisAnimationDuration=n)})),clearTimeout(n),r?n=setTimeout((function(){"function"==typeof t&&t()}),a):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){if(o){rt(t,"transition",""),rt(t,"transform","");var r=at(this.el),a=r&&r.a,i=r&&r.d,s=(e.left-n.left)/(a||1),l=(e.top-n.top)/(i||1);t.animatingX=!!s,t.animatingY=!!l,rt(t,"transform","translate3d("+s+"px,"+l+"px,0)"),this.forRepaintDummy=function(t){return t.offsetWidth}(t),rt(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),rt(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout((function(){rt(t,"transition",""),rt(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1}),o)}}}))}function ve(t,e,n,o,r,a,i,s){var l,c,u=t[yt],d=u.options.onMove;return!window.CustomEvent||Z||H?(l=document.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=e,l.from=t,l.dragged=n,l.draggedRect=o,l.related=r||e,l.relatedRect=a||lt(e),l.willInsertAfter=s,l.originalEvent=i,t.dispatchEvent(l),d&&(c=d.call(u,l,i)),c}function be(t){t.draggable=!1}function ye(){oe=!1}function we(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function _e(t){return setTimeout(t,0)}function Te(t){return clearTimeout(t)}fe.prototype={constructor:fe,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(zt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,Ct):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,o=this.options,r=o.preventOnFilter,a=t.type,i=t.touches&&t.touches[0]||t.pointerType&&"touch"===t.pointerType&&t,s=(i||t).target,l=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||s,c=o.filter;if(function(t){re.length=0;for(var e=t.getElementsByTagName("input"),n=e.length;n--;){var o=e[n];o.checked&&re.push(o)}}(n),!Ct&&!(/mousedown|pointerdown/.test(a)&&0!==t.button||o.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!W||!s||"SELECT"!==s.tagName.toUpperCase())&&!((s=tt(s,o.draggable,n,!1))&&s.animated||It===s)){if(kt=mt(s),Lt=mt(s,o.draggable),"function"==typeof c){if(c.call(this,t,s,this))return Dt({sortable:e,rootEl:l,name:"filter",targetEl:s,toEl:n,fromEl:n}),Et("filter",e,{evt:t}),void(r&&t.cancelable&&t.preventDefault())}else if(c&&(c=c.split(",").some((function(o){if(o=tt(l,o.trim(),n,!1))return Dt({sortable:e,rootEl:o,name:"filter",targetEl:s,fromEl:n,toEl:n}),Et("filter",e,{evt:t}),!0}))))return void(r&&t.cancelable&&t.preventDefault());o.handle&&!tt(l,o.handle,n,!1)||this._prepareDragStart(t,i,s)}}},_prepareDragStart:function(t,e,n){var o,r=this,a=r.el,i=r.options,s=a.ownerDocument;if(n&&!Ct&&n.parentNode===a){var l=lt(n);if(Ot=a,xt=(Ct=n).parentNode,Pt=Ct.nextSibling,It=n,Rt=i.group,fe.dragged=Ct,Xt={target:Ct,clientX:(e||t).clientX,clientY:(e||t).clientY},Gt=Xt.clientX-l.left,Wt=Xt.clientY-l.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,Ct.style["will-change"]="all",o=function(){Et("delayEnded",r,{evt:t}),fe.eventCanceled?r._onDrop():(r._disableDelayedDragEvents(),!G&&r.nativeDraggable&&(Ct.draggable=!0),r._triggerDragStart(t,e),Dt({sortable:r,name:"choose",originalEvent:t}),ot(Ct,i.chosenClass,!0))},i.ignore.split(",").forEach((function(t){it(Ct,t.trim(),be)})),U(s,"dragover",ge),U(s,"mousemove",ge),U(s,"touchmove",ge),U(s,"mouseup",r._onDrop),U(s,"touchend",r._onDrop),U(s,"touchcancel",r._onDrop),G&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Ct.draggable=!0),Et("delayStart",this,{evt:t}),!i.delay||i.delayOnTouchOnly&&!e||this.nativeDraggable&&(H||Z))o();else{if(fe.eventCanceled)return void this._onDrop();U(s,"mouseup",r._disableDelayedDrag),U(s,"touchend",r._disableDelayedDrag),U(s,"touchcancel",r._disableDelayedDrag),U(s,"mousemove",r._delayedDragTouchMoveHandler),U(s,"touchmove",r._delayedDragTouchMoveHandler),i.supportPointer&&U(s,"pointermove",r._delayedDragTouchMoveHandler),r._dragStartTimer=setTimeout(o,i.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Ct&&be(Ct),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;K(t,"mouseup",this._disableDelayedDrag),K(t,"touchend",this._disableDelayedDrag),K(t,"touchcancel",this._disableDelayedDrag),K(t,"mousemove",this._delayedDragTouchMoveHandler),K(t,"touchmove",this._delayedDragTouchMoveHandler),K(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?U(document,"pointermove",this._onTouchMove):U(document,e?"touchmove":"mousemove",this._onTouchMove):(U(Ct,"dragend",this),U(Ot,"dragstart",this._onDragStart));try{document.selection?_e((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(Kt=!1,Ot&&Ct){Et("dragStarted",this,{evt:e}),this.nativeDraggable&&U(document,"dragover",pe);var n=this.options;!t&&ot(Ct,n.dragClass,!1),ot(Ct,n.ghostClass,!0),fe.active=this,t&&this._appendGhost(),Dt({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(Yt){this._lastX=Yt.clientX,this._lastY=Yt.clientY,me();for(var t=document.elementFromPoint(Yt.clientX,Yt.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(Yt.clientX,Yt.clientY))!==e;)e=t;if(Ct.parentNode[yt]._isOutsideThisEl(t),e)do{if(e[yt]&&e[yt]._onDragOver({clientX:Yt.clientX,clientY:Yt.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break;t=e}while(e=e.parentNode);he()}},_onTouchMove:function(t){if(Xt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,r=t.touches?t.touches[0]:t,a=Nt&&at(Nt,!0),i=Nt&&a&&a.a,s=Nt&&a&&a.d,l=ie&&$t&&ht($t),c=(r.clientX-Xt.clientX+o.x)/(i||1)+(l?l[0]-ne[0]:0)/(i||1),u=(r.clientY-Xt.clientY+o.y)/(s||1)+(l?l[1]-ne[1]:0)/(s||1);if(!fe.active&&!Kt){if(n&&Math.max(Math.abs(r.clientX-this._lastX),Math.abs(r.clientY-this._lastY))o.right+10||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+10}(t,r,this)&&!p.animated){if(p===Ct)return I(!1);if(p&&a===t.target&&(i=p),i&&(n=lt(i)),!1!==ve(Ot,a,Ct,e,i,n,t,!!i))return P(),p&&p.nextSibling?a.insertBefore(Ct,p.nextSibling):a.appendChild(Ct),xt=a,M(),I(!0)}else if(p&&function(t,e,n){var o=lt(ut(n.el,0,n.options,!0));return e?t.clientXu+c*a/2:ld-Ut)return-Vt}else if(l>u+c*(1-r)/2&&ld-c*a/2)?l>u+c/2?1:-1:0}(t,i,n,r,_?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,ee,zt===i),0!==v){var D=mt(Ct);do{D-=v,y=xt.children[D]}while(y&&("none"===rt(y,"display")||y===Nt))}if(0===v||y===i)return I(!1);zt=i,Vt=v;var C=i.nextElementSibling,x=!1,N=ve(Ot,a,Ct,e,i,n,t,x=1===v);if(!1!==N)return 1!==N&&-1!==N||(x=1===N),oe=!0,setTimeout(ye,30),P(),x&&!C?a.appendChild(Ct):i.parentNode.insertBefore(Ct,x?C:i),S&&vt(S,0,E-S.scrollTop),xt=Ct.parentNode,void 0===b||ee||(Ut=Math.abs(b-lt(i)[T])),M(),I(!0)}if(a.contains(Ct))return I(!1)}return!1}function O(s,l){Et(s,h,L({evt:t,isOwner:u,axis:r?"vertical":"horizontal",revert:o,dragRect:e,targetRect:n,canSort:d,fromSortable:m,target:i,completed:I,onMove:function(n,o){return ve(Ot,a,Ct,e,n,lt(n),t,o)},changed:M},l))}function P(){O("dragOverAnimationCapture"),h.captureAnimationState(),h!==m&&m.captureAnimationState()}function I(e){return O("dragOverCompleted",{insertion:e}),e&&(u?c._hideClone():c._showClone(h),h!==m&&(ot(Ct,jt?jt.options.ghostClass:c.options.ghostClass,!1),ot(Ct,s.ghostClass,!0)),jt!==h&&h!==fe.active?jt=h:h===fe.active&&jt&&(jt=null),m===h&&(h._ignoreWhileAnimating=i),h.animateAll((function(){O("dragOverAnimationComplete"),h._ignoreWhileAnimating=null})),h!==m&&(m.animateAll(),m._ignoreWhileAnimating=null)),(i===Ct&&!Ct.animated||i===a&&!i.animated)&&(zt=null),s.dragoverBubble||t.rootEl||i===document||(Ct.parentNode[yt]._isOutsideThisEl(t.target),!e&&ge(t)),!s.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),g=!0}function M(){Ft=mt(Ct),Bt=mt(Ct,s.draggable),Dt({sortable:h,name:"change",toEl:a,newIndex:Ft,newDraggableIndex:Bt,originalEvent:t})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){K(document,"mousemove",this._onTouchMove),K(document,"touchmove",this._onTouchMove),K(document,"pointermove",this._onTouchMove),K(document,"dragover",ge),K(document,"mousemove",ge),K(document,"touchmove",ge)},_offUpEvents:function(){var t=this.el.ownerDocument;K(t,"mouseup",this._onDrop),K(t,"touchend",this._onDrop),K(t,"pointerup",this._onDrop),K(t,"touchcancel",this._onDrop),K(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;Ft=mt(Ct),Bt=mt(Ct,n.draggable),Et("drop",this,{evt:t}),xt=Ct&&Ct.parentNode,Ft=mt(Ct),Bt=mt(Ct,n.draggable),fe.eventCanceled||(Kt=!1,ee=!1,te=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Te(this.cloneId),Te(this._dragStartId),this.nativeDraggable&&(K(document,"drop",this),K(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),W&&rt(document.body,"user-select",""),rt(Ct,"transform",""),t&&(qt&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),Nt&&Nt.parentNode&&Nt.parentNode.removeChild(Nt),(Ot===xt||jt&&"clone"!==jt.lastPutMode)&&Mt&&Mt.parentNode&&Mt.parentNode.removeChild(Mt),Ct&&(this.nativeDraggable&&K(Ct,"dragend",this),be(Ct),Ct.style["will-change"]="",qt&&!Kt&&ot(Ct,jt?jt.options.ghostClass:this.options.ghostClass,!1),ot(Ct,this.options.chosenClass,!1),Dt({sortable:this,name:"unchoose",toEl:xt,newIndex:null,newDraggableIndex:null,originalEvent:t}),Ot!==xt?(Ft>=0&&(Dt({rootEl:xt,name:"add",toEl:xt,fromEl:Ot,originalEvent:t}),Dt({sortable:this,name:"remove",toEl:xt,originalEvent:t}),Dt({rootEl:xt,name:"sort",toEl:xt,fromEl:Ot,originalEvent:t}),Dt({sortable:this,name:"sort",toEl:xt,originalEvent:t})),jt&&jt.save()):Ft!==kt&&Ft>=0&&(Dt({sortable:this,name:"update",toEl:xt,originalEvent:t}),Dt({sortable:this,name:"sort",toEl:xt,originalEvent:t})),fe.active&&(null!=Ft&&-1!==Ft||(Ft=kt,Bt=Lt),Dt({sortable:this,name:"end",toEl:xt,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){Et("nulling",this),Ot=Ct=xt=Nt=Pt=Mt=It=At=Xt=Yt=qt=Ft=Bt=kt=Lt=zt=Vt=jt=Rt=fe.dragged=fe.ghost=fe.clone=fe.active=null,re.forEach((function(t){t.checked=!0})),re.length=Zt=Ht=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":Ct&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move"),t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,r=n.length,a=this.options;o{const e=t.target;this.name(e.value),this.slug((0,$e.slug)(e.value))}})),50),t.add("slug",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.slug_label")),m("input",{className:"FormControl",bidi:this.slug})),40),t.add("description",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.description_label")),m("textarea",{className:"FormControl",bidi:this.description})),30),t.add("color",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.color_label")),m(ze(),{className:"FormControl",placeholder:"#aaaaaa",bidi:this.color})),20),t.add("icon",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.icon_label")),m("div",{className:"helpText"},r().translator.trans("flarum-tags.admin.edit_tag.icon_text",{a:m("a",{href:"https://fontawesome.com/icons?m=free",tabindex:"-1"})})),m("input",{className:"FormControl",placeholder:"fas fa-bolt",bidi:this.icon})),10),t.add("hidden",m("div",{className:"Form-group"},m("div",null,m("label",{className:"checkbox"},m("input",{type:"checkbox",bidi:this.isHidden}),r().translator.trans("flarum-tags.admin.edit_tag.hide_label")))),10),t.add("submit",m("div",{className:"Form-group Form-controls"},m(g(),{type:"submit",className:"Button Button--primary EditTagModal-save",loading:this.loading},r().translator.trans("flarum-tags.admin.edit_tag.submit_button")),this.tag.exists&&m("button",{type:"button",className:"Button EditTagModal-delete",onclick:this.delete.bind(this)},r().translator.trans("flarum-tags.admin.edit_tag.delete_tag_button"))),-10),t}submitData(){return{name:this.name(),slug:this.slug(),description:this.description(),color:this.color(),icon:this.icon(),isHidden:this.isHidden(),primary:this.primary()}}onsubmit(t){t.preventDefault(),this.loading=!0,this.tag.save(this.submitData()).then((()=>this.hide()),(()=>this.loading=!1))}delete(){if(confirm(tn()(r().translator.trans("flarum-tags.admin.edit_tag.delete_tag_confirmation")))){const t=r().store.all("tags").filter((t=>t.parent()===this.tag));this.tag.delete().then((()=>{t.forEach((t=>t.pushData({attributes:{isChild:!1},relationships:{parent:null}}))),m.redraw()})),this.hide()}}}flarum.reg.add("flarum-tags","admin/components/EditTagModal",en);class nn{constructor(){(0,C.Z)(this,"element",void 0),(0,C.Z)(this,"attrs",void 0),(0,C.Z)(this,"state",void 0)}oninit(t){this.setAttrs(t.attrs)}oncreate(t){this.element=t.dom}onbeforeupdate(t){this.setAttrs(t.attrs)}onupdate(t){}onbeforeremove(t){}onremove(t){}$(t){const e=$(this.element);return t?e.find(t):e}static component(t,e){void 0===t&&(t={}),void 0===e&&(e=null);const n={...t};return m(this,n,e)}setAttrs(t){if(void 0===t&&(t={}),this.constructor.initAttrs(t),t){if("children"in t)throw new Error("[".concat(this.constructor.name,'] The "children" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute'));if("tag"in t)throw new Error("[".concat(this.constructor.name,'] You cannot use the "tag" attribute name with Mithril 2.'))}this.attrs=t}static initAttrs(t){}}function on(t){var e,n,o="";if("string"==typeof t||"number"==typeof t)o+=t;else if("object"==typeof t)if(Array.isArray(t))for(e=0;er().modal.show(en,{model:t})})),!t.isChild()&&null!==t.position()&&m("ol",{className:"TagListItem-children TagList"},(0,y.Z)(r().store.all("tags")).filter((e=>e.parent()===t)).map(cn)))}flarum.reg.add("flarum-tags","../../../../framework/core/js/src/admin/components/FormSectionGroup",sn);class un extends(je()){oninit(t){super.oninit(t),this.forcedRefreshKey=0,this.loading=!0,r().tagList.load(["parent"]).then((()=>{this.loading=!1,m.redraw()}))}content(){if(this.loading)return m(f(),null);const t=this.setting("flarum-tags.min_primary_tags",0),e=this.setting("flarum-tags.max_primary_tags",0),n=this.setting("flarum-tags.min_secondary_tags",0),o=this.setting("flarum-tags.max_secondary_tags",0),a=(0,y.Z)(r().store.all("tags").filter((t=>!t.parent())));return m("div",{className:"TagsContent"},m("div",{className:"TagsContent-list"},m("div",{className:"container",key:this.forcedRefreshKey,oncreate:this.onListOnCreate.bind(this)},m(sn,null,m(ln,{className:"TagGroup",label:r().translator.trans("flarum-tags.admin.tags.primary_heading")},m("ol",{className:"TagList TagList--primary"},a.filter((t=>null!==t.position()&&!t.isChild())).map(cn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>r().modal.show(en,{primary:!0})},r().translator.trans("flarum-tags.admin.tags.create_primary_tag_button"))),m(ln,{className:"TagGroup TagGroup--secondary",label:r().translator.trans("flarum-tags.admin.tags.secondary_heading")},m("ul",{className:"TagList"},a.filter((t=>null===t.position())).sort(((t,e)=>t.name().localeCompare(e.name()))).map(cn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>r().modal.show(en,{primary:!1})},r().translator.trans("flarum-tags.admin.tags.create_secondary_tag_button"))),m(ln,{label:r().translator.trans("flarum-tags.admin.tags.settings_heading")},m(He(),null,m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.tag_settings.required_primary_heading")),m("div",{className:"helpText"},r().translator.trans("flarum-tags.admin.tag_settings.required_primary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:t(),oninput:Ye()("value",this.setMinTags.bind(this,t,e))}),r().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:t(),bidi:e}))),m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.tag_settings.required_secondary_heading")),m("div",{className:"helpText"},r().translator.trans("flarum-tags.admin.tag_settings.required_secondary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:n(),oninput:Ye()("value",this.setMinTags.bind(this,n,o))}),r().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:n(),bidi:o}))),m("div",{className:"Form-group Form-controls"},this.submitButton())))),m("div",{className:"TagsContent-footer"},m("p",null,r().translator.trans("flarum-tags.admin.tags.about_tags_text"))))))}onListOnCreate(t){this.$(".TagList").get().map((t=>{Be.create(t,{group:"tags",delay:50,delayOnTouchOnly:!0,touchStartThreshold:5,animation:150,swapThreshold:.65,dragClass:"sortable-dragging",ghostClass:"sortable-placeholder",onSort:t=>this.onSortUpdate(t)})}))}setMinTags(t,e,n){t(n),e(Math.max(n,e()))}onSortUpdate(t){t.from instanceof HTMLOListElement&&t.to instanceof HTMLUListElement&&r().store.getById("tags",t.item.getAttribute("data-id")).pushData({attributes:{position:null,isChild:!1},relationships:{parent:null}});const e=this.$(".TagList--primary > li").map((function(){return{id:$(this).data("id"),children:$(this).find("li").map((function(){return $(this).data("id")})).get()}})).get();e.forEach(((t,e)=>{const n=r().store.getById("tags",t.id);n.pushData({attributes:{position:e,isChild:!1},relationships:{parent:null}}),t.children.forEach(((t,e)=>{r().store.getById("tags",t).pushData({attributes:{position:e,isChild:!0},relationships:{parent:n}})}))})),r().request({url:r().forum.attribute("apiUrl")+"/tags/order",method:"POST",body:{order:e}}),this.forcedRefreshKey++,m.redraw()}}flarum.reg.add("flarum-tags","admin/components/TagsPage",un);var dn=n(351),mn=n.n(dn);class hn{constructor(){(0,C.Z)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(mn().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),null!=this.loadedIncludes||(this.loadedIncludes=new Set),mn().store.find("tags",{include:t.join(",")}).then((e=>{const n=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),n}))}}flarum.reg.add("flarum-tags","common/states/TagListState",hn);const gn=flarum.reg.get("core","common/extenders");var pn=n.n(gn);const fn=flarum.reg.get("core","common/utils/computed");var vn=n.n(fn);const bn=flarum.reg.get("core","common/Model");var yn=n.n(bn);class wn extends(yn()){name(){return yn().attribute("name").call(this)}slug(){return yn().attribute("slug").call(this)}description(){return yn().attribute("description").call(this)}color(){return yn().attribute("color").call(this)}backgroundUrl(){return yn().attribute("backgroundUrl").call(this)}backgroundMode(){return yn().attribute("backgroundMode").call(this)}icon(){return yn().attribute("icon").call(this)}position(){return yn().attribute("position").call(this)}parent(){return yn().hasOne("parent").call(this)}children(){return yn().hasMany("children").call(this)}defaultSort(){return yn().attribute("defaultSort").call(this)}isChild(){return yn().attribute("isChild").call(this)}isHidden(){return yn().attribute("isHidden").call(this)}discussionCount(){return yn().attribute("discussionCount").call(this)}lastPostedAt(){return yn().attribute("lastPostedAt",yn().transformDate).call(this)}lastPostedDiscussion(){return yn().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return yn().attribute("isRestricted").call(this)}canStartDiscussion(){return yn().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return yn().attribute("canAddToDiscussion").call(this)}isPrimary(){return vn()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",wn);const _n=flarum.reg.get("core","common/query/IGambit");class Tn extends _n.KeyValueGambit{constructor(){super(...arguments),(0,C.Z)(this,"predicates",!0)}key(){return mn().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return mn().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let n=[];return Array.isArray(t)?(n=t.map((t=>this.fromFilter(t.toString(),e))),n.join(" ")):"".concat(e?"-":"").concat(this.key(),":").concat(this.filterValueToGambitValue(t))}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",Tn);const Sn=[(new(pn().Store)).add("tags",wn),(new(pn().Search)).gambit("discussions",Tn)];r().initializers.add("flarum-tags",(t=>{t.tagList=new hn,t.extensionData.for("flarum-tags").registerPage(un),(0,a.extend)(s().prototype,"oninit",(function(){this.loading=!0})),(0,a.extend)(s().prototype,"oncreate",(function(){r().tagList.load().then((()=>{this.loading=!1,m.redraw()}))})),(0,a.override)(s().prototype,"view",(function(t,e){return this.loading?m(f(),null):t(e)})),(0,a.override)(r(),"getRequiredPermissions",((t,e)=>{const n=e.match(/^tag\d+\./);return n?t(e.substr(n[0].length)).map((t=>n[0]+t)):t(e)})),(0,a.extend)(s().prototype,"scopeItems",(t=>{(0,y.Z)(r().store.all("tags")).filter((t=>t.isRestricted())).forEach((e=>t.add("tag"+e.id(),{label:(0,v.Z)(e),onremove:()=>e.save({isRestricted:!1}),render:t=>"setting"in t?null:"viewForum"===t.permission||"startDiscussion"===t.permission||t.permission.startsWith("discussion.")&&!1!==t.tagScoped||t.tagScoped?m(c(),{permission:"tag".concat(e.id(),".").concat(t.permission),allowGuest:t.allowGuest}):null})))})),(0,a.extend)(s().prototype,"scopeControlItems",(t=>{const e=(0,y.Z)(r().store.all("tags").filter((t=>!t.isRestricted())));e.length&&t.add("tag",m(d(),{className:"Dropdown--restrictByTag",buttonClassName:"Button Button--text",label:r().translator.trans("flarum-tags.admin.permissions.restrict_by_tag_heading"),icon:"fas fa-plus",caretIcon:null},e.map((t=>m(g(),{icon:!0,onclick:()=>t.save({isRestricted:!0})},[(0,b.Z)(t,{className:"Button-icon"})," ",t.name()])))))})),w(),S(),(0,a.extend)(s().prototype,"startItems",(t=>{t.add("allowTagChange",{icon:"fas fa-tag",label:r().translator.trans("flarum-tags.admin.permissions.allow_edit_tags_label"),setting:()=>{const t=parseInt(r().data.settings.allow_tag_change,10);return m(D(),{defaultLabel:t?r().translator.trans("core.admin.permissions_controls.allow_some_minutes_button",{count:t}):r().translator.trans("core.admin.permissions_controls.allow_indefinitely_button"),key:"allow_tag_change",options:[{value:"-1",label:r().translator.trans("core.admin.permissions_controls.allow_indefinitely_button")},{value:"10",label:r().translator.trans("core.admin.permissions_controls.allow_ten_minutes_button")},{value:"reply",label:r().translator.trans("core.admin.permissions_controls.allow_until_reply_button")}]})}},90)})),(0,a.extend)(k().prototype,"customFieldComponents",(function(t){t.add("flarum-tags.select-tags",(t=>m(M,Object.assign({},t,{settingValue:t.bidi}))))}))}))},974:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var o=n(836),r=n.n(o);function a(t,e,n){void 0===e&&(e={}),void 0===n&&(n={});const o=t&&t.icon(),{useColor:a=!0}=n;return e.className=r()([e.className,"icon text-colored",o?t.icon():"TagIcon"]),t&&a?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),o?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",a)},924:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var o=n(780),r=n.n(o),a=n(678),i=n.n(a),s=n(836),l=n.n(s),c=n(679),u=n.n(c),d=n(974);function h(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const n=r()(e,"link"),o=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const o=t.color();o&&(e.style["--tag-bg"]=o,e.className=l()(e.className,"colored",u()(o))),n&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(n?i():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.Z)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},o)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",h)},270:()=>{},648:(t,e,n)=>{"use strict";function o(t){return t.slice(0).sort(((t,e)=>{const n=t.position(),o=e.position();if(null===n&&null===o)return e.discussionCount()-t.discussionCount();if(null===o)return-1;if(null===n)return 1;const r=t.parent(),a=e.parent();return r===a?n-o:r&&a?r.position()-a.position():r?r===e?1:r.position()-o:a?a===t?-1:n-a.position():0}))}n.d(e,{Z:()=>o}),flarum.reg.add("flarum-tags","common/utils/sortTags",o)},433:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},351:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},645:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},44:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},678:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},149:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},291:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},679:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},657:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},636:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},836:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},780:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},596:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},905:(t,e,n)=>{"use strict";function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function r(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e);if("object"!==o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===o(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n.d(e,{Z:()=>r})}},o={};function r(t){var e=o[t];if(void 0!==e)return e.exports;var a=o[t]={exports:{}};return n[t](a,a.exports,r),a.exports}r.m=n,r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.f={},r.e=t=>Promise.all(Object.keys(r.f).reduce(((e,n)=>(r.f[n](t,e),e)),[])),r.u=t=>"common/components/TagSelectionModal.js",r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",r.l=(n,o,a,i)=>{if(t[n])t[n].push(o);else{var s,l;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(h);var r=t[n];if(delete t[n],s.parentNode&&s.parentNode.removeChild(s),r&&r.forEach((t=>t(o))),e)return e(o)},h=setTimeout(m.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=m.bind(null,s.onerror),s.onload=m.bind(null,s.onload),l&&document.head.appendChild(s)}},r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;r.g.importScripts&&(t=r.g.location+"");var e=r.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r.p=t})(),r.f.compat=(t,e)=>{const n=r.l;r.l=flarum.reg.loadChunk.bind(flarum.reg,n)},(()=>{var t={328:0};r.f.j=(e,n)=>{var o=r.o(t,e)?t[e]:void 0;if(0!==o)if(o)n.push(o[2]);else{var a=new Promise(((n,r)=>o=t[e]=[n,r]));n.push(o[2]=a);var i=r.p+r.u(e),s=new Error;r.l(i,(n=>{if(r.o(t,e)&&(0!==(o=t[e])&&(t[e]=void 0),o)){var a=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+e+" failed.\n("+a+": "+i+")",s.name="ChunkLoadError",s.type=a,s.request=i,o[1](s)}}),"chunk-"+e,e)}};var e=(e,n)=>{var o,a,[i,s,l]=n,c=0;if(i.some((e=>0!==t[e]))){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);l&&l(r)}for(e&&e(n);c{"use strict";r.r(a),r.d(a,{extend:()=>n.l});var t=r(270),e={};for(const n in t)"default"!==n&&(e[n]=()=>t[n]);r.d(a,e);var n=r(110)})(),module.exports=a})(); +(()=>{var t,e,n={110:(t,e,n)=>{"use strict";n.d(e,{l:()=>Sn});const o=flarum.reg.get("core","admin/app");var r=n.n(o);const a=flarum.reg.get("core","common/extend"),i=flarum.reg.get("core","admin/components/PermissionGrid");var s=n.n(i);const l=flarum.reg.get("core","admin/components/PermissionDropdown");var c=n.n(l);const u=flarum.reg.get("core","common/components/Dropdown");var d=n.n(u),h=n(645),g=n.n(h),p=n(149),f=n.n(p),v=n(924),b=n(974),y=n(648);function w(){app.extensionData.for("flarum-tags").registerPermission({icon:"fas fa-tag",label:app.translator.trans("flarum-tags.admin.permissions.tag_discussions_label"),permission:"discussion.tag"},"moderate",95).registerPermission({icon:"fas fa-tags",label:app.translator.trans("flarum-tags.admin.permissions.bypass_tag_counts_label"),permission:"bypassTagCounts"},"start",89)}const _=flarum.reg.get("core","admin/components/BasicsPage");var T=n.n(_);function S(){(0,a.extend)(T().prototype,"homePageItems",(t=>{t.add("tags",{path:"/tags",label:app.translator.trans("flarum-tags.admin.basics.tags_label")})}))}const E=flarum.reg.get("core","admin/components/SettingDropdown");var D=n.n(E),C=n(905),x=n(433),N=n.n(x),P=(n(780),n(836)),O=n.n(P);function I(t,e){void 0===e&&(e={});const n=[],{link:o,...r}=e;return r.className=O()("TagsLabel",r.className),t?(0,y.Z)(t).forEach((e=>{(e||1===t.length)&&n.push((0,v.Z)(e,{link:o}))})):n.push((0,v.Z)()),m("span",r,n)}flarum.reg.add("flarum-tags","common/helpers/tagsLabel",I);class M extends(N()){constructor(){super(...arguments),(0,C.Z)(this,"tags",[]),(0,C.Z)(this,"loaded",!1)}view(){const t=JSON.parse(this.attrs.settingValue()||"[]");return this.loaded||r().tagList.load(["parent"]).then((e=>{this.tags=e.filter((e=>t.includes(e.id()))),this.loaded=!0,m.redraw()})),m("div",{className:"Form-group SelectTagsSettingComponent"},m("label",null,this.attrs.label),this.attrs.help&&m("p",{className:"helpText"},this.attrs.help),this.loaded?m(g(),{className:"Button Button--text",onclick:()=>r().modal.show((()=>n.e(162).then(n.bind(n,610))),{selectedTags:this.tags,onsubmit:t=>{this.tags=t,this.attrs.settingValue(JSON.stringify(t.map((t=>t.id()))))},...this.attrs.options})},this.tags.length?I(this.tags):m("span",{className:"TagLabel untagged"},r().translator.trans("flarum-tags.admin.settings.button_text"))):m(f(),{size:"small",display:"inline"}))}}flarum.reg.add("flarum-tags","admin/components/SelectTagsSettingComponent",M),flarum.reg.addChunkModule("162","610","flarum-tags","common/components/TagSelectionModal");const A=flarum.reg.get("core","common/components/FormGroup");var k=n.n(A);function F(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function L(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function Y(t){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(t)}var Z=Y(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),H=Y(/Edge/i),G=Y(/firefox/i),W=Y(/safari/i)&&!Y(/chrome/i)&&!Y(/android/i),q=Y(/iP(ad|od|hone)/i),z=Y(/chrome/i)&&Y(/android/i),V={capture:!1,passive:!1};function U(t,e,n){t.addEventListener(e,n,!Z&&V)}function K(t,e,n){t.removeEventListener(e,n,!Z&&V)}function J(t,e){if(e){if(">"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function Q(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function tt(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&J(t,e):J(t,e))||o&&t===n)return t;if(t===n)break}while(t=Q(t))}return null}var et,nt=/\s+/g;function ot(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(nt," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(nt," ")}}function rt(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function at(t,e){var n="";if("string"==typeof t)n=t;else do{var o=rt(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var r=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return r&&new r(n)}function it(t,e,n){if(t){var o=t.getElementsByTagName(e),r=0,a=o.length;if(n)for(;r=a:r<=a))return o;if(o===st())break;o=gt(o,!1)}return!1}function ut(t,e,n,o){for(var r=0,a=0,i=t.children;a2&&void 0!==arguments[2]?arguments[2]:{},o=n.evt,r=X(n,St);Tt.pluginEvent.bind(fe)(t,e,L({dragEl:Ct,parentEl:xt,ghostEl:Nt,rootEl:Pt,nextEl:Ot,lastDownEl:It,cloneEl:Mt,cloneHidden:At,dragStarted:qt,putSortable:jt,activeSortable:fe.active,originalEvent:o,oldIndex:kt,oldDraggableIndex:Lt,newIndex:Ft,newDraggableIndex:Bt,hideGhostForTarget:me,unhideGhostForTarget:he,cloneNowHidden:function(){At=!0},cloneNowShown:function(){At=!1},dispatchSortableEvent:function(t){Dt({sortable:e,name:t,originalEvent:o})}},r))};function Dt(t){!function(t){var e=t.sortable,n=t.rootEl,o=t.name,r=t.targetEl,a=t.cloneEl,i=t.toEl,s=t.fromEl,l=t.oldIndex,c=t.newIndex,u=t.oldDraggableIndex,d=t.newDraggableIndex,m=t.originalEvent,h=t.putSortable,g=t.extraEventProperties;if(e=e||n&&n[yt]){var p,f=e.options,v="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||Z||H?(p=document.createEvent("Event")).initEvent(o,!0,!0):p=new CustomEvent(o,{bubbles:!0,cancelable:!0}),p.to=i||n,p.from=s||n,p.item=r||n,p.clone=a,p.oldIndex=l,p.newIndex=c,p.oldDraggableIndex=u,p.newDraggableIndex=d,p.originalEvent=m,p.pullMode=h?h.lastPutMode:void 0;var b=L(L({},g),Tt.getEventProperties(o,e));for(var y in b)p[y]=b[y];n&&n.dispatchEvent(p),f[v]&&f[v].call(e,p)}}(L({putSortable:jt,cloneEl:Mt,targetEl:Ct,rootEl:Pt,oldIndex:kt,oldDraggableIndex:Lt,newIndex:Ft,newDraggableIndex:Bt},t))}var Ct,xt,Nt,Pt,Ot,It,Mt,At,kt,Ft,Lt,Bt,Rt,jt,Xt,Yt,Zt,Ht,Gt,Wt,qt,zt,Vt,Ut,$t,Kt=!1,Jt=!1,Qt=[],te=!1,ee=!1,ne=[],oe=!1,re=[],ae="undefined"!=typeof document,ie=q,se=H||Z?"cssFloat":"float",le=ae&&!z&&!q&&"draggable"in document.createElement("div"),ce=function(){if(ae){if(Z)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),ue=function(t,e){var n=rt(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),r=ut(t,0,e),a=ut(t,1,e),i=r&&rt(r),s=a&&rt(a),l=i&&parseInt(i.marginLeft)+parseInt(i.marginRight)+lt(r).width,c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+lt(a).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(r&&i.float&&"none"!==i.float){var u="left"===i.float?"left":"right";return!a||"both"!==s.clear&&s.clear!==u?"horizontal":"vertical"}return r&&("block"===i.display||"flex"===i.display||"table"===i.display||"grid"===i.display||l>=o&&"none"===n[se]||a&&"none"===n[se]&&l+c>o)?"vertical":"horizontal"},de=function(t){function e(t,n){return function(o,r,a,i){var s=o.options.group.name&&r.options.group.name&&o.options.group.name===r.options.group.name;if(null==t&&(n||s))return!0;if(null==t||!1===t)return!1;if(n&&"clone"===t)return t;if("function"==typeof t)return e(t(o,r,a,i),n)(o,r,a,i);var l=(n?o:r).options.group.name;return!0===t||"string"==typeof t&&t===l||t.join&&t.indexOf(l)>-1}}var n={},o=t.group;o&&"object"==B(o)||(o={name:o}),n.name=o.name,n.checkPull=e(o.pull,!0),n.checkPut=e(o.put),n.revertClone=o.revertClone,t.group=n},me=function(){!ce&&Nt&&rt(Nt,"display","none")},he=function(){!ce&&Nt&&rt(Nt,"display","")};ae&&!z&&document.addEventListener("click",(function(t){if(Jt)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),Jt=!1,!1}),!0);var ge=function(t){if(Ct){t=t.touches?t.touches[0]:t;var e=(r=t.clientX,a=t.clientY,Qt.some((function(t){var e=t[yt].options.emptyInsertThreshold;if(e&&!dt(t)){var n=lt(t),o=r>=n.left-e&&r<=n.right+e,s=a>=n.top-e&&a<=n.bottom+e;return o&&s?i=t:void 0}})),i);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[yt]._onDragOver(n)}}var r,a,i},pe=function(t){Ct&&Ct.parentNode[yt]._isOutsideThisEl(t.target)};function fe(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=j({},e),t[yt]=this;var n,o,r={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return ue(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==fe.supportPointer&&"PointerEvent"in window&&!W,emptyInsertThreshold:5};for(var a in Tt.initializePlugins(this,t,r),r)!(a in e)&&(e[a]=r[a]);for(var i in de(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&le,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?U(t,"pointerdown",this._onTapStart):(U(t,"mousedown",this._onTapStart),U(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(U(t,"dragover",this),U(t,"dragenter",this)),Qt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),j(this,(o=[],{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach((function(t){if("none"!==rt(t,"display")&&t!==fe.ghost){o.push({target:t,rect:lt(t)});var e=L({},o[o.length-1].rect);if(t.thisAnimationDuration){var n=at(t,!0);n&&(e.top-=n.f,e.left-=n.e)}t.fromRect=e}}))},addAnimationState:function(t){o.push(t)},removeAnimationState:function(t){o.splice(function(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var o in e)if(e.hasOwnProperty(o)&&e[o]===t[n][o])return Number(n);return-1}(o,{target:t}),1)},animateAll:function(t){var e=this;if(!this.options.animation)return clearTimeout(n),void("function"==typeof t&&t());var r=!1,a=0;o.forEach((function(t){var n=0,o=t.target,i=o.fromRect,s=lt(o),l=o.prevFromRect,c=o.prevToRect,u=t.rect,d=at(o,!0);d&&(s.top-=d.f,s.left-=d.e),o.toRect=s,o.thisAnimationDuration&&pt(l,s)&&!pt(i,s)&&(u.top-s.top)/(u.left-s.left)==(i.top-s.top)/(i.left-s.left)&&(n=function(t,e,n,o){return Math.sqrt(Math.pow(e.top-t.top,2)+Math.pow(e.left-t.left,2))/Math.sqrt(Math.pow(e.top-n.top,2)+Math.pow(e.left-n.left,2))*o.animation}(u,l,c,e.options)),pt(s,i)||(o.prevFromRect=i,o.prevToRect=s,n||(n=e.options.animation),e.animate(o,u,s,n)),n&&(r=!0,a=Math.max(a,n),clearTimeout(o.animationResetTimer),o.animationResetTimer=setTimeout((function(){o.animationTime=0,o.prevFromRect=null,o.fromRect=null,o.prevToRect=null,o.thisAnimationDuration=null}),n),o.thisAnimationDuration=n)})),clearTimeout(n),r?n=setTimeout((function(){"function"==typeof t&&t()}),a):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){if(o){rt(t,"transition",""),rt(t,"transform","");var r=at(this.el),a=r&&r.a,i=r&&r.d,s=(e.left-n.left)/(a||1),l=(e.top-n.top)/(i||1);t.animatingX=!!s,t.animatingY=!!l,rt(t,"transform","translate3d("+s+"px,"+l+"px,0)"),this.forRepaintDummy=function(t){return t.offsetWidth}(t),rt(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),rt(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout((function(){rt(t,"transition",""),rt(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1}),o)}}}))}function ve(t,e,n,o,r,a,i,s){var l,c,u=t[yt],d=u.options.onMove;return!window.CustomEvent||Z||H?(l=document.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=e,l.from=t,l.dragged=n,l.draggedRect=o,l.related=r||e,l.relatedRect=a||lt(e),l.willInsertAfter=s,l.originalEvent=i,t.dispatchEvent(l),d&&(c=d.call(u,l,i)),c}function be(t){t.draggable=!1}function ye(){oe=!1}function we(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function _e(t){return setTimeout(t,0)}function Te(t){return clearTimeout(t)}fe.prototype={constructor:fe,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(zt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,Ct):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,o=this.options,r=o.preventOnFilter,a=t.type,i=t.touches&&t.touches[0]||t.pointerType&&"touch"===t.pointerType&&t,s=(i||t).target,l=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||s,c=o.filter;if(function(t){re.length=0;for(var e=t.getElementsByTagName("input"),n=e.length;n--;){var o=e[n];o.checked&&re.push(o)}}(n),!Ct&&!(/mousedown|pointerdown/.test(a)&&0!==t.button||o.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!W||!s||"SELECT"!==s.tagName.toUpperCase())&&!((s=tt(s,o.draggable,n,!1))&&s.animated||It===s)){if(kt=mt(s),Lt=mt(s,o.draggable),"function"==typeof c){if(c.call(this,t,s,this))return Dt({sortable:e,rootEl:l,name:"filter",targetEl:s,toEl:n,fromEl:n}),Et("filter",e,{evt:t}),void(r&&t.cancelable&&t.preventDefault())}else if(c&&(c=c.split(",").some((function(o){if(o=tt(l,o.trim(),n,!1))return Dt({sortable:e,rootEl:o,name:"filter",targetEl:s,fromEl:n,toEl:n}),Et("filter",e,{evt:t}),!0}))))return void(r&&t.cancelable&&t.preventDefault());o.handle&&!tt(l,o.handle,n,!1)||this._prepareDragStart(t,i,s)}}},_prepareDragStart:function(t,e,n){var o,r=this,a=r.el,i=r.options,s=a.ownerDocument;if(n&&!Ct&&n.parentNode===a){var l=lt(n);if(Pt=a,xt=(Ct=n).parentNode,Ot=Ct.nextSibling,It=n,Rt=i.group,fe.dragged=Ct,Xt={target:Ct,clientX:(e||t).clientX,clientY:(e||t).clientY},Gt=Xt.clientX-l.left,Wt=Xt.clientY-l.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,Ct.style["will-change"]="all",o=function(){Et("delayEnded",r,{evt:t}),fe.eventCanceled?r._onDrop():(r._disableDelayedDragEvents(),!G&&r.nativeDraggable&&(Ct.draggable=!0),r._triggerDragStart(t,e),Dt({sortable:r,name:"choose",originalEvent:t}),ot(Ct,i.chosenClass,!0))},i.ignore.split(",").forEach((function(t){it(Ct,t.trim(),be)})),U(s,"dragover",ge),U(s,"mousemove",ge),U(s,"touchmove",ge),U(s,"mouseup",r._onDrop),U(s,"touchend",r._onDrop),U(s,"touchcancel",r._onDrop),G&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Ct.draggable=!0),Et("delayStart",this,{evt:t}),!i.delay||i.delayOnTouchOnly&&!e||this.nativeDraggable&&(H||Z))o();else{if(fe.eventCanceled)return void this._onDrop();U(s,"mouseup",r._disableDelayedDrag),U(s,"touchend",r._disableDelayedDrag),U(s,"touchcancel",r._disableDelayedDrag),U(s,"mousemove",r._delayedDragTouchMoveHandler),U(s,"touchmove",r._delayedDragTouchMoveHandler),i.supportPointer&&U(s,"pointermove",r._delayedDragTouchMoveHandler),r._dragStartTimer=setTimeout(o,i.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Ct&&be(Ct),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;K(t,"mouseup",this._disableDelayedDrag),K(t,"touchend",this._disableDelayedDrag),K(t,"touchcancel",this._disableDelayedDrag),K(t,"mousemove",this._delayedDragTouchMoveHandler),K(t,"touchmove",this._delayedDragTouchMoveHandler),K(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?U(document,"pointermove",this._onTouchMove):U(document,e?"touchmove":"mousemove",this._onTouchMove):(U(Ct,"dragend",this),U(Pt,"dragstart",this._onDragStart));try{document.selection?_e((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(Kt=!1,Pt&&Ct){Et("dragStarted",this,{evt:e}),this.nativeDraggable&&U(document,"dragover",pe);var n=this.options;!t&&ot(Ct,n.dragClass,!1),ot(Ct,n.ghostClass,!0),fe.active=this,t&&this._appendGhost(),Dt({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(Yt){this._lastX=Yt.clientX,this._lastY=Yt.clientY,me();for(var t=document.elementFromPoint(Yt.clientX,Yt.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(Yt.clientX,Yt.clientY))!==e;)e=t;if(Ct.parentNode[yt]._isOutsideThisEl(t),e)do{if(e[yt]&&e[yt]._onDragOver({clientX:Yt.clientX,clientY:Yt.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break;t=e}while(e=e.parentNode);he()}},_onTouchMove:function(t){if(Xt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,r=t.touches?t.touches[0]:t,a=Nt&&at(Nt,!0),i=Nt&&a&&a.a,s=Nt&&a&&a.d,l=ie&&$t&&ht($t),c=(r.clientX-Xt.clientX+o.x)/(i||1)+(l?l[0]-ne[0]:0)/(i||1),u=(r.clientY-Xt.clientY+o.y)/(s||1)+(l?l[1]-ne[1]:0)/(s||1);if(!fe.active&&!Kt){if(n&&Math.max(Math.abs(r.clientX-this._lastX),Math.abs(r.clientY-this._lastY))o.right+10||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+10}(t,r,this)&&!p.animated){if(p===Ct)return I(!1);if(p&&a===t.target&&(i=p),i&&(n=lt(i)),!1!==ve(Pt,a,Ct,e,i,n,t,!!i))return O(),p&&p.nextSibling?a.insertBefore(Ct,p.nextSibling):a.appendChild(Ct),xt=a,M(),I(!0)}else if(p&&function(t,e,n){var o=lt(ut(n.el,0,n.options,!0));return e?t.clientXu+c*a/2:ld-Ut)return-Vt}else if(l>u+c*(1-r)/2&&ld-c*a/2)?l>u+c/2?1:-1:0}(t,i,n,r,_?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,ee,zt===i),0!==v){var D=mt(Ct);do{D-=v,y=xt.children[D]}while(y&&("none"===rt(y,"display")||y===Nt))}if(0===v||y===i)return I(!1);zt=i,Vt=v;var C=i.nextElementSibling,x=!1,N=ve(Pt,a,Ct,e,i,n,t,x=1===v);if(!1!==N)return 1!==N&&-1!==N||(x=1===N),oe=!0,setTimeout(ye,30),O(),x&&!C?a.appendChild(Ct):i.parentNode.insertBefore(Ct,x?C:i),S&&vt(S,0,E-S.scrollTop),xt=Ct.parentNode,void 0===b||ee||(Ut=Math.abs(b-lt(i)[T])),M(),I(!0)}if(a.contains(Ct))return I(!1)}return!1}function P(s,l){Et(s,h,L({evt:t,isOwner:u,axis:r?"vertical":"horizontal",revert:o,dragRect:e,targetRect:n,canSort:d,fromSortable:m,target:i,completed:I,onMove:function(n,o){return ve(Pt,a,Ct,e,n,lt(n),t,o)},changed:M},l))}function O(){P("dragOverAnimationCapture"),h.captureAnimationState(),h!==m&&m.captureAnimationState()}function I(e){return P("dragOverCompleted",{insertion:e}),e&&(u?c._hideClone():c._showClone(h),h!==m&&(ot(Ct,jt?jt.options.ghostClass:c.options.ghostClass,!1),ot(Ct,s.ghostClass,!0)),jt!==h&&h!==fe.active?jt=h:h===fe.active&&jt&&(jt=null),m===h&&(h._ignoreWhileAnimating=i),h.animateAll((function(){P("dragOverAnimationComplete"),h._ignoreWhileAnimating=null})),h!==m&&(m.animateAll(),m._ignoreWhileAnimating=null)),(i===Ct&&!Ct.animated||i===a&&!i.animated)&&(zt=null),s.dragoverBubble||t.rootEl||i===document||(Ct.parentNode[yt]._isOutsideThisEl(t.target),!e&&ge(t)),!s.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),g=!0}function M(){Ft=mt(Ct),Bt=mt(Ct,s.draggable),Dt({sortable:h,name:"change",toEl:a,newIndex:Ft,newDraggableIndex:Bt,originalEvent:t})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){K(document,"mousemove",this._onTouchMove),K(document,"touchmove",this._onTouchMove),K(document,"pointermove",this._onTouchMove),K(document,"dragover",ge),K(document,"mousemove",ge),K(document,"touchmove",ge)},_offUpEvents:function(){var t=this.el.ownerDocument;K(t,"mouseup",this._onDrop),K(t,"touchend",this._onDrop),K(t,"pointerup",this._onDrop),K(t,"touchcancel",this._onDrop),K(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;Ft=mt(Ct),Bt=mt(Ct,n.draggable),Et("drop",this,{evt:t}),xt=Ct&&Ct.parentNode,Ft=mt(Ct),Bt=mt(Ct,n.draggable),fe.eventCanceled||(Kt=!1,ee=!1,te=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Te(this.cloneId),Te(this._dragStartId),this.nativeDraggable&&(K(document,"drop",this),K(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),W&&rt(document.body,"user-select",""),rt(Ct,"transform",""),t&&(qt&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),Nt&&Nt.parentNode&&Nt.parentNode.removeChild(Nt),(Pt===xt||jt&&"clone"!==jt.lastPutMode)&&Mt&&Mt.parentNode&&Mt.parentNode.removeChild(Mt),Ct&&(this.nativeDraggable&&K(Ct,"dragend",this),be(Ct),Ct.style["will-change"]="",qt&&!Kt&&ot(Ct,jt?jt.options.ghostClass:this.options.ghostClass,!1),ot(Ct,this.options.chosenClass,!1),Dt({sortable:this,name:"unchoose",toEl:xt,newIndex:null,newDraggableIndex:null,originalEvent:t}),Pt!==xt?(Ft>=0&&(Dt({rootEl:xt,name:"add",toEl:xt,fromEl:Pt,originalEvent:t}),Dt({sortable:this,name:"remove",toEl:xt,originalEvent:t}),Dt({rootEl:xt,name:"sort",toEl:xt,fromEl:Pt,originalEvent:t}),Dt({sortable:this,name:"sort",toEl:xt,originalEvent:t})),jt&&jt.save()):Ft!==kt&&Ft>=0&&(Dt({sortable:this,name:"update",toEl:xt,originalEvent:t}),Dt({sortable:this,name:"sort",toEl:xt,originalEvent:t})),fe.active&&(null!=Ft&&-1!==Ft||(Ft=kt,Bt=Lt),Dt({sortable:this,name:"end",toEl:xt,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){Et("nulling",this),Pt=Ct=xt=Nt=Ot=Mt=It=At=Xt=Yt=qt=Ft=Bt=kt=Lt=zt=Vt=jt=Rt=fe.dragged=fe.ghost=fe.clone=fe.active=null,re.forEach((function(t){t.checked=!0})),re.length=Zt=Ht=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":Ct&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move"),t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,r=n.length,a=this.options;o{const e=t.target;this.name(e.value),this.slug((0,$e.slug)(e.value))}})),50),t.add("slug",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.slug_label")),m("input",{className:"FormControl",bidi:this.slug})),40),t.add("description",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.description_label")),m("textarea",{className:"FormControl",bidi:this.description})),30),t.add("color",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.color_label")),m(ze(),{className:"FormControl",placeholder:"#aaaaaa",bidi:this.color})),20),t.add("icon",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.edit_tag.icon_label")),m("div",{className:"helpText"},r().translator.trans("flarum-tags.admin.edit_tag.icon_text",{a:m("a",{href:"https://fontawesome.com/icons?m=free",tabindex:"-1"})})),m("input",{className:"FormControl",placeholder:"fas fa-bolt",bidi:this.icon})),10),t.add("hidden",m("div",{className:"Form-group"},m("div",null,m("label",{className:"checkbox"},m("input",{type:"checkbox",bidi:this.isHidden}),r().translator.trans("flarum-tags.admin.edit_tag.hide_label")))),10),t.add("submit",m("div",{className:"Form-group Form-controls"},m(g(),{type:"submit",className:"Button Button--primary EditTagModal-save",loading:this.loading},r().translator.trans("flarum-tags.admin.edit_tag.submit_button")),this.tag.exists&&m("button",{type:"button",className:"Button EditTagModal-delete",onclick:this.delete.bind(this)},r().translator.trans("flarum-tags.admin.edit_tag.delete_tag_button"))),-10),t}submitData(){return{name:this.name(),slug:this.slug(),description:this.description(),color:this.color(),icon:this.icon(),isHidden:this.isHidden(),isPrimary:this.isPrimary()}}onsubmit(t){t.preventDefault(),this.loading=!0,this.tag.save(this.submitData()).then((()=>this.hide()),(()=>this.loading=!1))}delete(){if(confirm(tn()(r().translator.trans("flarum-tags.admin.edit_tag.delete_tag_confirmation")))){const t=r().store.all("tags").filter((t=>t.parent()===this.tag));this.tag.delete().then((()=>{t.forEach((t=>t.pushData({attributes:{isChild:!1}}))),m.redraw()})),this.hide()}}}flarum.reg.add("flarum-tags","admin/components/EditTagModal",en);class nn{constructor(){(0,C.Z)(this,"element",void 0),(0,C.Z)(this,"attrs",void 0),(0,C.Z)(this,"state",void 0)}oninit(t){this.setAttrs(t.attrs)}oncreate(t){this.element=t.dom}onbeforeupdate(t){this.setAttrs(t.attrs)}onupdate(t){}onbeforeremove(t){}onremove(t){}$(t){const e=$(this.element);return t?e.find(t):e}static component(t,e){void 0===t&&(t={}),void 0===e&&(e=null);const n={...t};return m(this,n,e)}setAttrs(t){if(void 0===t&&(t={}),this.constructor.initAttrs(t),t){if("children"in t)throw new Error("[".concat(this.constructor.name,'] The "children" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute'));if("tag"in t)throw new Error("[".concat(this.constructor.name,'] You cannot use the "tag" attribute name with Mithril 2.'))}this.attrs=t}static initAttrs(t){}}function on(t){var e,n,o="";if("string"==typeof t||"number"==typeof t)o+=t;else if("object"==typeof t)if(Array.isArray(t))for(e=0;er().modal.show(en,{model:t})})),!t.isChild()&&null!==t.position()&&m("ol",{className:"TagListItem-children TagList"},(0,y.Z)(r().store.all("tags")).filter((e=>e.parent()===t)).map(cn)))}flarum.reg.add("flarum-tags","../../../../framework/core/js/src/admin/components/FormSectionGroup",sn);class un extends(je()){oninit(t){super.oninit(t),this.forcedRefreshKey=0,this.loading=!0,r().tagList.load(["parent"]).then((()=>{this.loading=!1,m.redraw()}))}content(){if(this.loading)return m(f(),null);const t=this.setting("flarum-tags.min_primary_tags",0),e=this.setting("flarum-tags.max_primary_tags",0),n=this.setting("flarum-tags.min_secondary_tags",0),o=this.setting("flarum-tags.max_secondary_tags",0),a=(0,y.Z)(r().store.all("tags").filter((t=>!t.parent())));return m("div",{className:"TagsContent"},m("div",{className:"TagsContent-list"},m("div",{className:"container",key:this.forcedRefreshKey,oncreate:this.onListOnCreate.bind(this)},m(sn,null,m(ln,{className:"TagGroup",label:r().translator.trans("flarum-tags.admin.tags.primary_heading")},m("ol",{className:"TagList TagList--primary"},a.filter((t=>null!==t.position()&&!t.isChild())).map(cn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>r().modal.show(en,{primary:!0})},r().translator.trans("flarum-tags.admin.tags.create_primary_tag_button"))),m(ln,{className:"TagGroup TagGroup--secondary",label:r().translator.trans("flarum-tags.admin.tags.secondary_heading")},m("ul",{className:"TagList"},a.filter((t=>null===t.position())).sort(((t,e)=>t.name().localeCompare(e.name()))).map(cn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>r().modal.show(en,{primary:!1})},r().translator.trans("flarum-tags.admin.tags.create_secondary_tag_button"))),m(ln,{label:r().translator.trans("flarum-tags.admin.tags.settings_heading")},m(He(),null,m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.tag_settings.required_primary_heading")),m("div",{className:"helpText"},r().translator.trans("flarum-tags.admin.tag_settings.required_primary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:t(),oninput:Ye()("value",this.setMinTags.bind(this,t,e))}),r().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:t(),bidi:e}))),m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-tags.admin.tag_settings.required_secondary_heading")),m("div",{className:"helpText"},r().translator.trans("flarum-tags.admin.tag_settings.required_secondary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:n(),oninput:Ye()("value",this.setMinTags.bind(this,n,o))}),r().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:n(),bidi:o}))),m("div",{className:"Form-group Form-controls"},this.submitButton())))),m("div",{className:"TagsContent-footer"},m("p",null,r().translator.trans("flarum-tags.admin.tags.about_tags_text"))))))}onListOnCreate(t){this.$(".TagList").get().map((t=>{Be.create(t,{group:"tags",delay:50,delayOnTouchOnly:!0,touchStartThreshold:5,animation:150,swapThreshold:.65,dragClass:"sortable-dragging",ghostClass:"sortable-placeholder",onSort:t=>this.onSortUpdate(t)})}))}setMinTags(t,e,n){t(n),e(Math.max(n,e()))}onSortUpdate(t){t.from instanceof HTMLOListElement&&t.to instanceof HTMLUListElement&&r().store.getById("tags",t.item.getAttribute("data-id")).pushData({attributes:{position:null,isChild:!1},relationships:{parent:null}});const e=this.$(".TagList--primary > li").map((function(){return{id:$(this).data("id"),children:$(this).find("li").map((function(){return $(this).data("id")})).get()}})).get();e.forEach(((t,e)=>{const n=r().store.getById("tags",t.id);n.pushData({attributes:{position:e,isChild:!1},relationships:{parent:null}}),t.children.forEach(((t,e)=>{r().store.getById("tags",t).pushData({attributes:{position:e,isChild:!0},relationships:{parent:n}})}))})),r().request({url:r().forum.attribute("apiUrl")+"/tags/order",method:"POST",body:{order:e}}),this.forcedRefreshKey++,m.redraw()}}flarum.reg.add("flarum-tags","admin/components/TagsPage",un);var dn=n(351),mn=n.n(dn);class hn{constructor(){(0,C.Z)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(mn().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),null!=this.loadedIncludes||(this.loadedIncludes=new Set),mn().store.find("tags",{include:t.join(",")}).then((e=>{const n=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),n}))}}flarum.reg.add("flarum-tags","common/states/TagListState",hn);const gn=flarum.reg.get("core","common/extenders");var pn=n.n(gn);const fn=flarum.reg.get("core","common/utils/computed");var vn=n.n(fn);const bn=flarum.reg.get("core","common/Model");var yn=n.n(bn);class wn extends(yn()){name(){return yn().attribute("name").call(this)}slug(){return yn().attribute("slug").call(this)}description(){return yn().attribute("description").call(this)}color(){return yn().attribute("color").call(this)}backgroundUrl(){return yn().attribute("backgroundUrl").call(this)}backgroundMode(){return yn().attribute("backgroundMode").call(this)}icon(){return yn().attribute("icon").call(this)}position(){return yn().attribute("position").call(this)}parent(){return yn().hasOne("parent").call(this)}children(){return yn().hasMany("children").call(this)}defaultSort(){return yn().attribute("defaultSort").call(this)}isChild(){return yn().attribute("isChild").call(this)}isHidden(){return yn().attribute("isHidden").call(this)}isPrimary(){return yn().attribute("isPrimary").call(this)}discussionCount(){return yn().attribute("discussionCount").call(this)}lastPostedAt(){return yn().attribute("lastPostedAt",yn().transformDate).call(this)}lastPostedDiscussion(){return yn().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return yn().attribute("isRestricted").call(this)}canStartDiscussion(){return yn().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return yn().attribute("canAddToDiscussion").call(this)}isPrimaryParent(){return vn()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",wn);const _n=flarum.reg.get("core","common/query/IGambit");class Tn extends _n.KeyValueGambit{constructor(){super(...arguments),(0,C.Z)(this,"predicates",!0)}key(){return mn().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return mn().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let n=[];return Array.isArray(t)?(n=t.map((t=>this.fromFilter(t.toString(),e))),n.join(" ")):"".concat(e?"-":"").concat(this.key(),":").concat(this.filterValueToGambitValue(t))}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",Tn);const Sn=[(new(pn().Store)).add("tags",wn),(new(pn().Search)).gambit("discussions",Tn)];r().initializers.add("flarum-tags",(t=>{t.tagList=new hn,t.extensionData.for("flarum-tags").registerPage(un),(0,a.extend)(s().prototype,"oninit",(function(){this.loading=!0})),(0,a.extend)(s().prototype,"oncreate",(function(){r().tagList.load().then((()=>{this.loading=!1,m.redraw()}))})),(0,a.override)(s().prototype,"view",(function(t,e){return this.loading?m(f(),null):t(e)})),(0,a.override)(r(),"getRequiredPermissions",((t,e)=>{const n=e.match(/^tag\d+\./);return n?t(e.substr(n[0].length)).map((t=>n[0]+t)):t(e)})),(0,a.extend)(s().prototype,"scopeItems",(t=>{(0,y.Z)(r().store.all("tags")).filter((t=>t.isRestricted())).forEach((e=>t.add("tag"+e.id(),{label:(0,v.Z)(e),onremove:()=>e.save({isRestricted:!1}),render:t=>"setting"in t?null:"viewForum"===t.permission||"startDiscussion"===t.permission||t.permission.startsWith("discussion.")&&!1!==t.tagScoped||t.tagScoped?m(c(),{permission:"tag".concat(e.id(),".").concat(t.permission),allowGuest:t.allowGuest}):null})))})),(0,a.extend)(s().prototype,"scopeControlItems",(t=>{const e=(0,y.Z)(r().store.all("tags").filter((t=>!t.isRestricted())));e.length&&t.add("tag",m(d(),{className:"Dropdown--restrictByTag",buttonClassName:"Button Button--text",label:r().translator.trans("flarum-tags.admin.permissions.restrict_by_tag_heading"),icon:"fas fa-plus",caretIcon:null},e.map((t=>m(g(),{icon:!0,onclick:()=>t.save({isRestricted:!0})},[(0,b.Z)(t,{className:"Button-icon"})," ",t.name()])))))})),w(),S(),(0,a.extend)(s().prototype,"startItems",(t=>{t.add("allowTagChange",{icon:"fas fa-tag",label:r().translator.trans("flarum-tags.admin.permissions.allow_edit_tags_label"),setting:()=>{const t=parseInt(r().data.settings.allow_tag_change,10);return m(D(),{defaultLabel:t?r().translator.trans("core.admin.permissions_controls.allow_some_minutes_button",{count:t}):r().translator.trans("core.admin.permissions_controls.allow_indefinitely_button"),key:"allow_tag_change",options:[{value:"-1",label:r().translator.trans("core.admin.permissions_controls.allow_indefinitely_button")},{value:"10",label:r().translator.trans("core.admin.permissions_controls.allow_ten_minutes_button")},{value:"reply",label:r().translator.trans("core.admin.permissions_controls.allow_until_reply_button")}]})}},90)})),(0,a.extend)(k().prototype,"customFieldComponents",(function(t){t.add("flarum-tags.select-tags",(t=>m(M,Object.assign({},t,{settingValue:t.bidi}))))}))}))},974:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var o=n(836),r=n.n(o);function a(t,e,n){void 0===e&&(e={}),void 0===n&&(n={});const o=t&&t.icon(),{useColor:a=!0}=n;return e.className=r()([e.className,"icon text-colored",o?t.icon():"TagIcon"]),t&&a?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),o?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",a)},924:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var o=n(780),r=n.n(o),a=n(678),i=n.n(a),s=n(836),l=n.n(s),c=n(679),u=n.n(c),d=n(974);function h(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const n=r()(e,"link"),o=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const o=t.color();o&&(e.style["--tag-bg"]=o,e.className=l()(e.className,"colored",u()(o))),n&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(n?i():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.Z)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},o)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",h)},270:()=>{},648:(t,e,n)=>{"use strict";function o(t){return t.slice(0).sort(((t,e)=>{const n=t.position(),o=e.position();if(null===n&&null===o)return e.discussionCount()-t.discussionCount();if(null===o)return-1;if(null===n)return 1;const r=t.parent(),a=e.parent();return r===a?n-o:r&&a?r.position()-a.position():r?r===e?1:r.position()-o:a?a===t?-1:n-a.position():0}))}n.d(e,{Z:()=>o}),flarum.reg.add("flarum-tags","common/utils/sortTags",o)},433:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},351:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},645:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},44:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},678:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},149:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},291:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},679:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},657:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},636:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},836:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},780:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},596:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},905:(t,e,n)=>{"use strict";function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function r(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e);if("object"!==o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===o(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n.d(e,{Z:()=>r})}},o={};function r(t){var e=o[t];if(void 0!==e)return e.exports;var a=o[t]={exports:{}};return n[t](a,a.exports,r),a.exports}r.m=n,r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.f={},r.e=t=>Promise.all(Object.keys(r.f).reduce(((e,n)=>(r.f[n](t,e),e)),[])),r.u=t=>"common/components/TagSelectionModal.js",r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",r.l=(n,o,a,i)=>{if(t[n])t[n].push(o);else{var s,l;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(h);var r=t[n];if(delete t[n],s.parentNode&&s.parentNode.removeChild(s),r&&r.forEach((t=>t(o))),e)return e(o)},h=setTimeout(m.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=m.bind(null,s.onerror),s.onload=m.bind(null,s.onload),l&&document.head.appendChild(s)}},r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;r.g.importScripts&&(t=r.g.location+"");var e=r.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r.p=t})(),r.f.compat=(t,e)=>{const n=r.l;r.l=flarum.reg.loadChunk.bind(flarum.reg,n)},(()=>{var t={328:0};r.f.j=(e,n)=>{var o=r.o(t,e)?t[e]:void 0;if(0!==o)if(o)n.push(o[2]);else{var a=new Promise(((n,r)=>o=t[e]=[n,r]));n.push(o[2]=a);var i=r.p+r.u(e),s=new Error;r.l(i,(n=>{if(r.o(t,e)&&(0!==(o=t[e])&&(t[e]=void 0),o)){var a=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+e+" failed.\n("+a+": "+i+")",s.name="ChunkLoadError",s.type=a,s.request=i,o[1](s)}}),"chunk-"+e,e)}};var e=(e,n)=>{var o,a,[i,s,l]=n,c=0;if(i.some((e=>0!==t[e]))){for(o in s)r.o(s,o)&&(r.m[o]=s[o]);l&&l(r)}for(e&&e(n);c{"use strict";r.r(a),r.d(a,{extend:()=>n.l});var t=r(270),e={};for(const n in t)"default"!==n&&(e[n]=()=>t[n]);r.d(a,e);var n=r(110)})(),module.exports=a})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/tags/js/dist/admin.js.map b/extensions/tags/js/dist/admin.js.map index 23f12dbac..9728354b4 100644 --- a/extensions/tags/js/dist/admin.js.map +++ b/extensions/tags/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionGrid')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionDropdown')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Dropdown')\"","webpack://@flarum/tags/./src/admin/addTagPermission.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/BasicsPage')\"","webpack://@flarum/tags/./src/admin/addTagsHomePageOption.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/SettingDropdown')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/./src/admin/components/SelectTagsSettingComponent.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormGroup')\"","webpack://@flarum/tags/../../../node_modules/sortablejs/modular/sortable.esm.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/withAttr')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/ColorPreviewInput')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/string')\"","webpack://@flarum/tags/./src/admin/components/EditTagModal.tsx","webpack://@flarum/tags/../../../framework/core/js/src/common/Component.ts","webpack://@flarum/tags/../../../node_modules/clsx/dist/clsx.m.js","webpack://@flarum/tags/../../../framework/core/js/src/common/utils/classList.ts","webpack://@flarum/tags/../../../framework/core/js/src/admin/components/FormSectionGroup.tsx","webpack://@flarum/tags/./src/admin/components/TagsPage.js","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/./src/admin/index.ts","webpack://@flarum/tags/./src/admin/addTagsPermissionScope.tsx","webpack://@flarum/tags/./src/admin/addTagChangePermission.js","webpack://@flarum/tags/./src/admin/addTagSelectionSettingComponent.tsx","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionGrid');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Dropdown');","export default function () {\n app.extensionData.for('flarum-tags').registerPermission({\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.tag_discussions_label'),\n permission: 'discussion.tag'\n }, 'moderate', 95).registerPermission({\n icon: 'fas fa-tags',\n label: app.translator.trans('flarum-tags.admin.permissions.bypass_tag_counts_label'),\n permission: 'bypassTagCounts'\n }, 'start', 89);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/BasicsPage');","import { extend } from 'flarum/common/extend';\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\nexport default function () {\n extend(BasicsPage.prototype, 'homePageItems', items => {\n items.add('tags', {\n path: '/tags',\n label: app.translator.trans('flarum-tags.admin.basics.tags_label')\n });\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/SettingDropdown');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class SelectTagsSettingComponent extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", []);\n _defineProperty(this, \"loaded\", false);\n }\n view() {\n const value = JSON.parse(this.attrs.settingValue() || '[]');\n if (!this.loaded) {\n app.tagList.load(['parent']).then(tags => {\n this.tags = tags.filter(tag => value.includes(tag.id()));\n this.loaded = true;\n m.redraw();\n });\n }\n return m(\"div\", {\n className: \"Form-group SelectTagsSettingComponent\"\n }, m(\"label\", null, this.attrs.label), this.attrs.help && m(\"p\", {\n className: \"helpText\"\n }, this.attrs.help), !this.loaded ? m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }) : m(Button, {\n className: \"Button Button--text\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'common/components/TagSelectionModal', webpackMode: 'lazy-once' */ '../../common/components/TagSelectionModal'), {\n selectedTags: this.tags,\n onsubmit: tags => {\n this.tags = tags;\n this.attrs.settingValue(JSON.stringify(tags.map(tag => tag.id())));\n },\n ...this.attrs.options\n })\n }, !!this.tags.length ? tagsLabel(this.tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.admin.settings.button_text'))));\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/SelectTagsSettingComponent', SelectTagsSettingComponent);flarum.reg.addChunkModule('162', '610', 'flarum-tags', 'common/components/TagSelectionModal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormGroup');","/**!\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","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/ColorPreviewInput');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/string');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Button from 'flarum/common/components/Button';\nimport ColorPreviewInput from 'flarum/common/components/ColorPreviewInput';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport { slug } from 'flarum/common/utils/string';\nimport Stream from 'flarum/common/utils/Stream';\nimport extractText from 'flarum/common/utils/extractText';\nimport Form from 'flarum/common/components/Form';\nimport tagLabel from '../../common/helpers/tagLabel';\n/**\n * The `EditTagModal` component shows a modal dialog which allows the user\n * to create or edit a tag.\n */\nexport default class EditTagModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tag\", void 0);\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"slug\", void 0);\n _defineProperty(this, \"description\", void 0);\n _defineProperty(this, \"color\", void 0);\n _defineProperty(this, \"icon\", void 0);\n _defineProperty(this, \"isHidden\", void 0);\n _defineProperty(this, \"primary\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.tag = this.attrs.model || app.store.createRecord('tags');\n this.name = Stream(this.tag.name() || '');\n this.slug = Stream(this.tag.slug() || '');\n this.description = Stream(this.tag.description() || '');\n this.color = Stream(this.tag.color() || '');\n this.icon = Stream(this.tag.icon() || '');\n this.isHidden = Stream(this.tag.isHidden() || false);\n this.primary = Stream(this.attrs.primary || false);\n }\n className() {\n return 'EditTagModal Modal--small';\n }\n title() {\n return this.name() ? tagLabel(app.store.createRecord('tags', {\n attributes: this.submitData()\n })) : app.translator.trans('flarum-tags.admin.edit_tag.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, null, this.fields().toArray()));\n }\n fields() {\n const items = new ItemList();\n items.add('name', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.name_label')), m(\"input\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-tags.admin.edit_tag.name_placeholder'),\n value: this.name(),\n oninput: e => {\n const target = e.target;\n this.name(target.value);\n this.slug(slug(target.value));\n }\n })), 50);\n items.add('slug', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.slug_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.slug\n })), 40);\n items.add('description', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.description_label')), m(\"textarea\", {\n className: \"FormControl\",\n bidi: this.description\n })), 30);\n items.add('color', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.color_label')), m(ColorPreviewInput, {\n className: \"FormControl\",\n placeholder: \"#aaaaaa\",\n bidi: this.color\n })), 20);\n items.add('icon', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.icon_label')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.edit_tag.icon_text', {\n a: m(\"a\", {\n href: \"https://fontawesome.com/icons?m=free\",\n tabindex: \"-1\"\n })\n })), m(\"input\", {\n className: \"FormControl\",\n placeholder: \"fas fa-bolt\",\n bidi: this.icon\n })), 10);\n items.add('hidden', m(\"div\", {\n className: \"Form-group\"\n }, m(\"div\", null, m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"checkbox\",\n bidi: this.isHidden\n }), app.translator.trans('flarum-tags.admin.edit_tag.hide_label')))), 10);\n items.add('submit', m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary EditTagModal-save\",\n loading: this.loading\n }, app.translator.trans('flarum-tags.admin.edit_tag.submit_button')), this.tag.exists && m(\"button\", {\n type: \"button\",\n className: \"Button EditTagModal-delete\",\n onclick: this.delete.bind(this)\n }, app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_button'))), -10);\n return items;\n }\n submitData() {\n return {\n name: this.name(),\n slug: this.slug(),\n description: this.description(),\n color: this.color(),\n icon: this.icon(),\n isHidden: this.isHidden(),\n primary: this.primary()\n };\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n\n // Errors aren't passed to the modal onerror handler here.\n // This is done for better error visibility on smaller screen heights.\n this.tag.save(this.submitData()).then(() => this.hide(), () => this.loading = false);\n }\n delete() {\n if (confirm(extractText(app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_confirmation')))) {\n const children = app.store.all('tags').filter(tag => tag.parent() === this.tag);\n this.tag.delete().then(() => {\n children.forEach(tag => tag.pushData({\n attributes: {\n isChild: false\n },\n // @deprecated. Temporary hack for type safety, remove before v1.3.\n relationships: {\n parent: null\n }\n }));\n m.redraw();\n });\n this.hide();\n }\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/EditTagModal', EditTagModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * The `Component` class defines a user interface 'building block'. A component\n * generates a virtual DOM to be rendered on each redraw.\n *\n * Essentially, this is a wrapper for Mithril's components that adds several useful features:\n *\n * - In the `oninit` and `onbeforeupdate` lifecycle hooks, we store vnode attrs in `this.attrs.\n * This allows us to use attrs across components without having to pass the vnode to every single\n * method.\n * - The static `initAttrs` method allows a convenient way to provide defaults (or to otherwise modify)\n * the attrs that have been passed into a component.\n * - When the component is created in the DOM, we store its DOM element under `this.element`; this lets\n * us use jQuery to modify child DOM state from internal methods via the `this.$()` method.\n * - A convenience `component` method, which serves as an alternative to hyperscript and JSX.\n *\n * As with other Mithril components, components extending Component can be initialized\n * and nested using JSX, hyperscript, or a combination of both. The `component` method can also\n * be used.\n *\n * @example\n * return m('div',

Hello World

);\n *\n * @example\n * return m('div', MyComponent.component({foo: 'bar'), m('p', 'Hello World!'));\n *\n * @see https://mithril.js.org/components.html\n */\nexport default class Component {\n constructor() {\n /**\n * The root DOM element for the component.\n */\n _defineProperty(this, \"element\", void 0);\n /**\n * The attributes passed into the component.\n *\n * @see https://mithril.js.org/components.html#passing-data-to-components\n */\n _defineProperty(this, \"attrs\", void 0);\n /**\n * Class component state that is persisted between redraws.\n *\n * Updating this will **not** automatically trigger a redraw, unlike\n * other frameworks.\n *\n * This is different to Vnode state, which is always an instance of your\n * class component.\n *\n * This is `undefined` by default.\n */\n _defineProperty(this, \"state\", void 0);\n }\n /**\n * @inheritdoc\n */\n /**\n * @inheritdoc\n */\n oninit(vnode) {\n this.setAttrs(vnode.attrs);\n }\n\n /**\n * @inheritdoc\n */\n oncreate(vnode) {\n this.element = vnode.dom;\n }\n\n /**\n * @inheritdoc\n */\n onbeforeupdate(vnode) {\n this.setAttrs(vnode.attrs);\n }\n\n /**\n * @inheritdoc\n */\n onupdate(vnode) {}\n\n /**\n * @inheritdoc\n */\n onbeforeremove(vnode) {}\n\n /**\n * @inheritdoc\n */\n onremove(vnode) {}\n\n /**\n * Returns a jQuery object for this component's element. If you pass in a\n * selector string, this method will return a jQuery object, using the current\n * element as its buffer.\n *\n * For example, calling `component.$('li')` will return a jQuery object\n * containing all of the `li` elements inside the DOM element of this\n * component.\n *\n * @param [selector] a jQuery-compatible selector string\n * @returns the jQuery object for the DOM node\n * @final\n */\n $(selector) {\n const $element = $(this.element);\n return selector ? $element.find(selector) : $element;\n }\n\n /**\n * Convenience method to attach a component without JSX.\n * Has the same effect as calling `m(THIS_CLASS, attrs, children)`.\n *\n * @see https://mithril.js.org/hyperscript.html#mselector,-attributes,-children\n */\n static component(attrs, children) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (children === void 0) {\n children = null;\n }\n const componentAttrs = {\n ...attrs\n };\n return m(this, componentAttrs, children);\n }\n\n /**\n * Saves a reference to the vnode attrs after running them through initAttrs,\n * and checking for common issues.\n */\n setAttrs(attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n this.constructor.initAttrs(attrs);\n if (attrs) {\n if ('children' in attrs) {\n throw new Error(\"[\".concat(this.constructor.name, \"] The \\\"children\\\" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute\"));\n }\n if ('tag' in attrs) {\n throw new Error(\"[\".concat(this.constructor.name, \"] You cannot use the \\\"tag\\\" attribute name with Mithril 2.\"));\n }\n }\n this.attrs = attrs;\n }\n\n /**\n * Initialize the component's attrs.\n *\n * This can be used to assign default values for missing, optional attrs.\n */\n static initAttrs(attrs) {}\n}\nflarum.reg.add('flarum-tags', '../../../../framework/core/js/src/common/Component', Component);","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t app.modal.show(EditTagModal, {\n model: tag\n })\n })), !tag.isChild() && tag.position() !== null && m(\"ol\", {\n className: \"TagListItem-children TagList\"\n }, sortTags(app.store.all('tags')).filter(child => child.parent() === tag).map(tagItem)));\n}\nexport default class TagsPage extends ExtensionPage {\n oninit(vnode) {\n super.oninit(vnode);\n\n // A regular redraw won't work here, because sortable has mucked around\n // with the DOM which will confuse Mithril's diffing algorithm. Instead\n // we force a full reconstruction of the DOM by changing the key, which\n // makes mithril completely re-render the component on redraw.\n this.forcedRefreshKey = 0;\n this.loading = true;\n app.tagList.load(['parent']).then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n content() {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n const minPrimaryTags = this.setting('flarum-tags.min_primary_tags', 0);\n const maxPrimaryTags = this.setting('flarum-tags.max_primary_tags', 0);\n const minSecondaryTags = this.setting('flarum-tags.min_secondary_tags', 0);\n const maxSecondaryTags = this.setting('flarum-tags.max_secondary_tags', 0);\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.parent()));\n return m(\"div\", {\n className: \"TagsContent\"\n }, m(\"div\", {\n className: \"TagsContent-list\"\n }, m(\"div\", {\n className: \"container\",\n key: this.forcedRefreshKey,\n oncreate: this.onListOnCreate.bind(this)\n }, m(FormSectionGroup, null, m(FormSection, {\n className: \"TagGroup\",\n label: app.translator.trans('flarum-tags.admin.tags.primary_heading')\n }, m(\"ol\", {\n className: \"TagList TagList--primary\"\n }, tags.filter(tag => tag.position() !== null && !tag.isChild()).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: true\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_primary_tag_button'))), m(FormSection, {\n className: \"TagGroup TagGroup--secondary\",\n label: app.translator.trans('flarum-tags.admin.tags.secondary_heading')\n }, m(\"ul\", {\n className: \"TagList\"\n }, tags.filter(tag => tag.position() === null).sort((a, b) => a.name().localeCompare(b.name())).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: false\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_secondary_tag_button'))), m(FormSection, {\n label: app.translator.trans('flarum-tags.admin.tags.settings_heading')\n }, m(Form, null, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minPrimaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minPrimaryTags, maxPrimaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minPrimaryTags(),\n bidi: maxPrimaryTags\n }))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minSecondaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minSecondaryTags, maxSecondaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minSecondaryTags(),\n bidi: maxSecondaryTags\n }))), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, this.submitButton())))), m(\"div\", {\n className: \"TagsContent-footer\"\n }, m(\"p\", null, app.translator.trans('flarum-tags.admin.tags.about_tags_text'))))));\n }\n onListOnCreate(vnode) {\n this.$('.TagList').get().map(e => {\n sortable.create(e, {\n group: 'tags',\n delay: 50,\n delayOnTouchOnly: true,\n touchStartThreshold: 5,\n animation: 150,\n swapThreshold: 0.65,\n dragClass: 'sortable-dragging',\n ghostClass: 'sortable-placeholder',\n onSort: e => this.onSortUpdate(e)\n });\n });\n }\n setMinTags(minTags, maxTags, value) {\n minTags(value);\n maxTags(Math.max(value, maxTags()));\n }\n onSortUpdate(e) {\n // If we've moved a tag from 'primary' to 'secondary', then we'll update\n // its attributes in our local store so that when we redraw the change\n // will be made.\n if (e.from instanceof HTMLOListElement && e.to instanceof HTMLUListElement) {\n app.store.getById('tags', e.item.getAttribute('data-id')).pushData({\n attributes: {\n position: null,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n }\n\n // Construct an array of primary tag IDs and their children, in the same\n // order that they have been arranged in.\n const order = this.$('.TagList--primary > li').map(function () {\n return {\n id: $(this).data('id'),\n children: $(this).find('li').map(function () {\n return $(this).data('id');\n }).get()\n };\n }).get();\n\n // Now that we have an accurate representation of the order which the\n // primary tags are in, we will update the tag attributes in our local\n // store to reflect this order.\n order.forEach((tag, i) => {\n const parent = app.store.getById('tags', tag.id);\n parent.pushData({\n attributes: {\n position: i,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n tag.children.forEach((child, j) => {\n app.store.getById('tags', child).pushData({\n attributes: {\n position: j,\n isChild: true\n },\n relationships: {\n parent\n }\n });\n });\n });\n app.request({\n url: app.forum.attribute('apiUrl') + '/tags/order',\n method: 'POST',\n body: {\n order\n }\n });\n this.forcedRefreshKey++;\n m.redraw();\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/TagsPage', TagsPage);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n var _this$loadedIncludes;\n if (includes === void 0) {\n includes = [];\n }\n (_this$loadedIncludes = this.loadedIncludes) != null ? _this$loadedIncludes : this.loadedIncludes = new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimary() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return \"\".concat(negate ? '-' : '').concat(this.key(), \":\").concat(this.filterValueToGambitValue(value));\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","import app from 'flarum/admin/app';\nimport addTagsPermissionScope from './addTagsPermissionScope';\nimport addTagPermission from './addTagPermission';\nimport addTagsHomePageOption from './addTagsHomePageOption';\nimport addTagChangePermission from './addTagChangePermission';\nimport addTagSelectionSettingComponent from './addTagSelectionSettingComponent';\nimport TagsPage from './components/TagsPage';\nimport TagListState from '../common/states/TagListState';\nexport { default as extend } from '../common/extend';\napp.initializers.add('flarum-tags', app => {\n app.tagList = new TagListState();\n app.extensionData.for('flarum-tags').registerPage(TagsPage);\n addTagsPermissionScope();\n addTagPermission();\n addTagsHomePageOption();\n addTagChangePermission();\n addTagSelectionSettingComponent();\n});\nimport './admin';","import app from 'flarum/admin/app';\nimport { extend, override } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport PermissionDropdown from 'flarum/admin/components/PermissionDropdown';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagLabel from '../common/helpers/tagLabel';\nimport tagIcon from '../common/helpers/tagIcon';\nimport sortTags from '../common/utils/sortTags';\nexport default function () {\n extend(PermissionGrid.prototype, 'oninit', function () {\n this.loading = true;\n });\n extend(PermissionGrid.prototype, 'oncreate', function () {\n app.tagList.load().then(() => {\n this.loading = false;\n m.redraw();\n });\n });\n override(PermissionGrid.prototype, 'view', function (original, vnode) {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n return original(vnode);\n });\n override(app, 'getRequiredPermissions', (original, permission) => {\n const tagPrefix = permission.match(/^tag\\d+\\./);\n if (tagPrefix) {\n const globalPermission = permission.substr(tagPrefix[0].length);\n const required = original(globalPermission);\n return required.map(required => tagPrefix[0] + required);\n }\n return original(permission);\n });\n extend(PermissionGrid.prototype, 'scopeItems', items => {\n sortTags(app.store.all('tags')).filter(tag => tag.isRestricted()).forEach(tag => items.add('tag' + tag.id(), {\n label: tagLabel(tag),\n onremove: () => tag.save({\n isRestricted: false\n }),\n render: item => {\n if ('setting' in item) return null;\n if (item.permission === 'viewForum' || item.permission === 'startDiscussion' || item.permission.startsWith('discussion.') && item.tagScoped !== false || item.tagScoped) {\n return m(PermissionDropdown, {\n permission: \"tag\".concat(tag.id(), \".\").concat(item.permission),\n allowGuest: item.allowGuest\n });\n }\n return null;\n }\n }));\n });\n extend(PermissionGrid.prototype, 'scopeControlItems', items => {\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.isRestricted()));\n if (tags.length) {\n items.add('tag', m(Dropdown, {\n className: \"Dropdown--restrictByTag\",\n buttonClassName: \"Button Button--text\",\n label: app.translator.trans('flarum-tags.admin.permissions.restrict_by_tag_heading'),\n icon: \"fas fa-plus\",\n caretIcon: null\n }, tags.map(tag => m(Button, {\n icon: true,\n onclick: () => tag.save({\n isRestricted: true\n })\n }, [tagIcon(tag, {\n className: 'Button-icon'\n }), ' ', tag.name()]))));\n }\n });\n}","import app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport SettingDropdown from 'flarum/admin/components/SettingDropdown';\nexport default function () {\n extend(PermissionGrid.prototype, 'startItems', items => {\n items.add('allowTagChange', {\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.allow_edit_tags_label'),\n setting: () => {\n const minutes = parseInt(app.data.settings.allow_tag_change, 10);\n return m(SettingDropdown, {\n defaultLabel: minutes ? app.translator.trans('core.admin.permissions_controls.allow_some_minutes_button', {\n count: minutes\n }) : app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button'),\n key: \"allow_tag_change\",\n options: [{\n value: '-1',\n label: app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button')\n }, {\n value: '10',\n label: app.translator.trans('core.admin.permissions_controls.allow_ten_minutes_button')\n }, {\n value: 'reply',\n label: app.translator.trans('core.admin.permissions_controls.allow_until_reply_button')\n }]\n });\n }\n }, 90);\n });\n}","import { extend } from 'flarum/common/extend';\nimport SelectTagsSettingComponent from './components/SelectTagsSettingComponent';\nimport FormGroup from 'flarum/common/components/FormGroup';\nexport default function () {\n extend(FormGroup.prototype, 'customFieldComponents', function (items) {\n items.add('flarum-tags.select-tags', attrs => {\n return m(SelectTagsSettingComponent, Object.assign({}, attrs, {\n settingValue: attrs.bidi\n }));\n });\n });\n}","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\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 return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"common/components/TagSelectionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t328: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","flarum","reg","get","app","extensionData","for","registerPermission","icon","label","translator","trans","permission","extend","items","add","path","tagsLabel","tags","attrs","children","link","otherAttrs","className","sortTags","forEach","tag","length","push","tagLabel","m","SelectTagsSettingComponent","constructor","super","arguments","this","view","value","JSON","parse","settingValue","loaded","then","filter","includes","id","redraw","help","onclick","selectedTags","onsubmit","stringify","map","options","size","display","addChunkModule","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread2","target","i","source","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","iterator","prototype","configurable","writable","_extends","assign","hasOwnProperty","call","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","userAgent","pattern","window","navigator","match","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","on","el","event","fn","addEventListener","off","removeEventListener","matches","selector","substring","msMatchesSelector","webkitMatchesSelector","_","getParentOrHost","host","document","nodeType","parentNode","closest","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","name","state","classList","replace","css","prop","val","style","defaultView","getComputedStyle","currentStyle","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","find","tagName","list","getElementsByTagName","n","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","getBoundingClientRect","elRect","top","left","bottom","right","height","width","innerHeight","innerWidth","containerRect","parseInt","elMatrix","scaleX","a","scaleY","d","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","index","nodeName","toUpperCase","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","body","isRectEqual","rect1","rect2","Math","round","throttle","callback","ms","args","_this","setTimeout","scrollBy","x","y","Polymer","$","jQuery","Zepto","dom","cloneNode","expando","Date","getTime","plugins","defaults","initializeByDefault","PluginManager","mount","plugin","option","p","pluginName","concat","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_excluded","_ref","undefined","originalEvent","data","bind","dragEl","parentEl","ghostEl","rootEl","nextEl","lastDownEl","cloneEl","cloneHidden","dragStarted","moved","putSortable","activeSortable","active","oldIndex","oldDraggableIndex","newIndex","newDraggableIndex","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","targetEl","toEl","fromEl","extraEventProperties","onName","charAt","substr","CustomEvent","createEvent","initEvent","bubbles","cancelable","to","from","item","pullMode","lastPutMode","allEventProperties","dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","split","touchingSideChild2","clear","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","join","originalGroup","checkPull","checkPut","put","revertClone","preventDefault","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","some","threshold","emptyInsertThreshold","rect","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","toString","animationCallbackId","animationStates","sort","disabled","store","handle","test","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","animation","easing","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","Number","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","captureAnimationState","slice","child","fromRect","thisAnimationDuration","childMatrix","f","e","addAnimationState","removeAnimationState","splice","arr","indexOfObject","animateAll","clearTimeout","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","pow","calculateRealTime","animate","max","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","offsetWidth","repaint","animated","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","str","src","href","sum","charCodeAt","_nextTick","_cancelNextTick","contains","_getDirection","type","touch","pointerType","originalTarget","shadowRoot","composedPath","root","inputs","idx","checked","_saveInputCheckedState","button","isContentEditable","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","err","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","b","c","cssMatrix","appendChild","removeAttribute","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","_ghostIsLast","changed","_ghostIsFirst","firstChild","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","removeChild","save","handleEvent","dropEffect","_globalDragOver","toArray","order","getAttribute","useAnimation","set","destroy","Array","querySelectorAll","utils","is","dst","nextTick","cancelNextTick","detectDirection","element","_len","_key","create","version","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref2","_ref3","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","EditTagModal","oninit","vnode","model","slug","description","color","isHidden","primary","title","attributes","submitData","content","fields","placeholder","oninput","bidi","tabindex","loading","exists","delete","hide","confirm","pushData","isChild","relationships","Component","setAttrs","oncreate","onbeforeupdate","onupdate","onbeforeremove","onremove","$element","static","componentAttrs","initAttrs","Error","r","t","isArray","FormSectionGroup","FormSection","tagItem","tagIcon","position","TagsPage","forcedRefreshKey","minPrimaryTags","setting","maxPrimaryTags","minSecondaryTags","maxSecondaryTags","onListOnCreate","localeCompare","min","setMinTags","submitButton","onSort","onSortUpdate","minTags","maxTags","HTMLOListElement","HTMLUListElement","j","url","method","TagListState","async","loadedIncludes","query","unloadedIncludes","include","has","Promise","resolve","Set","Tag","backgroundUrl","backgroundMode","defaultSort","discussionCount","lastPostedAt","lastPostedDiscussion","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimary","TagGambit","KeyValueGambit","hint","filterKey","gambitValueToFilterValue","fromFilter","negate","gambits","filterValueToGambitValue","gambit","tagList","registerPage","override","original","tagPrefix","required","render","startsWith","tagScoped","allowGuest","buttonClassName","caretIcon","addTagPermission","addTagsHomePageOption","minutes","defaultLabel","count","settings","hasIcon","useColor","tagText","route","aPos","bPos","aParent","bParent","module","exports","arg","input","prim","toPrimitive","res","TypeError","String","toPropertyKey","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","o","chunkId","all","reduce","promises","u","g","globalThis","Function","l","done","script","needAttach","scripts","s","charset","timeout","nc","setAttribute","onScriptComplete","prev","onerror","onload","doneFns","head","toStringTag","scriptUrl","importScripts","location","currentScript","compat","originalLoadChunk","loadChunk","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionGrid')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionDropdown')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Dropdown')\"","webpack://@flarum/tags/./src/admin/addTagPermission.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/BasicsPage')\"","webpack://@flarum/tags/./src/admin/addTagsHomePageOption.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/SettingDropdown')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/./src/admin/components/SelectTagsSettingComponent.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormGroup')\"","webpack://@flarum/tags/../../../node_modules/sortablejs/modular/sortable.esm.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/withAttr')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/ColorPreviewInput')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/string')\"","webpack://@flarum/tags/./src/admin/components/EditTagModal.tsx","webpack://@flarum/tags/../../../framework/core/js/src/common/Component.ts","webpack://@flarum/tags/../../../node_modules/clsx/dist/clsx.m.js","webpack://@flarum/tags/../../../framework/core/js/src/common/utils/classList.ts","webpack://@flarum/tags/../../../framework/core/js/src/admin/components/FormSectionGroup.tsx","webpack://@flarum/tags/./src/admin/components/TagsPage.js","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/./src/admin/index.ts","webpack://@flarum/tags/./src/admin/addTagsPermissionScope.tsx","webpack://@flarum/tags/./src/admin/addTagChangePermission.js","webpack://@flarum/tags/./src/admin/addTagSelectionSettingComponent.tsx","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionGrid');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Dropdown');","export default function () {\n app.extensionData.for('flarum-tags').registerPermission({\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.tag_discussions_label'),\n permission: 'discussion.tag'\n }, 'moderate', 95).registerPermission({\n icon: 'fas fa-tags',\n label: app.translator.trans('flarum-tags.admin.permissions.bypass_tag_counts_label'),\n permission: 'bypassTagCounts'\n }, 'start', 89);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/BasicsPage');","import { extend } from 'flarum/common/extend';\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\nexport default function () {\n extend(BasicsPage.prototype, 'homePageItems', items => {\n items.add('tags', {\n path: '/tags',\n label: app.translator.trans('flarum-tags.admin.basics.tags_label')\n });\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/SettingDropdown');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class SelectTagsSettingComponent extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", []);\n _defineProperty(this, \"loaded\", false);\n }\n view() {\n const value = JSON.parse(this.attrs.settingValue() || '[]');\n if (!this.loaded) {\n app.tagList.load(['parent']).then(tags => {\n this.tags = tags.filter(tag => value.includes(tag.id()));\n this.loaded = true;\n m.redraw();\n });\n }\n return m(\"div\", {\n className: \"Form-group SelectTagsSettingComponent\"\n }, m(\"label\", null, this.attrs.label), this.attrs.help && m(\"p\", {\n className: \"helpText\"\n }, this.attrs.help), !this.loaded ? m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }) : m(Button, {\n className: \"Button Button--text\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'common/components/TagSelectionModal', webpackMode: 'lazy-once' */ '../../common/components/TagSelectionModal'), {\n selectedTags: this.tags,\n onsubmit: tags => {\n this.tags = tags;\n this.attrs.settingValue(JSON.stringify(tags.map(tag => tag.id())));\n },\n ...this.attrs.options\n })\n }, !!this.tags.length ? tagsLabel(this.tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.admin.settings.button_text'))));\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/SelectTagsSettingComponent', SelectTagsSettingComponent);flarum.reg.addChunkModule('162', '610', 'flarum-tags', 'common/components/TagSelectionModal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormGroup');","/**!\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","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/ColorPreviewInput');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/string');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Button from 'flarum/common/components/Button';\nimport ColorPreviewInput from 'flarum/common/components/ColorPreviewInput';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport { slug } from 'flarum/common/utils/string';\nimport Stream from 'flarum/common/utils/Stream';\nimport extractText from 'flarum/common/utils/extractText';\nimport Form from 'flarum/common/components/Form';\nimport tagLabel from '../../common/helpers/tagLabel';\n/**\n * The `EditTagModal` component shows a modal dialog which allows the user\n * to create or edit a tag.\n */\nexport default class EditTagModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tag\", void 0);\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"slug\", void 0);\n _defineProperty(this, \"description\", void 0);\n _defineProperty(this, \"color\", void 0);\n _defineProperty(this, \"icon\", void 0);\n _defineProperty(this, \"isHidden\", void 0);\n _defineProperty(this, \"isPrimary\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.tag = this.attrs.model || app.store.createRecord('tags');\n this.name = Stream(this.tag.name() || '');\n this.slug = Stream(this.tag.slug() || '');\n this.description = Stream(this.tag.description() || '');\n this.color = Stream(this.tag.color() || '');\n this.icon = Stream(this.tag.icon() || '');\n this.isHidden = Stream(this.tag.isHidden() || false);\n this.isPrimary = Stream(this.attrs.primary || false);\n }\n className() {\n return 'EditTagModal Modal--small';\n }\n title() {\n return this.name() ? tagLabel(app.store.createRecord('tags', {\n attributes: this.submitData()\n })) : app.translator.trans('flarum-tags.admin.edit_tag.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, null, this.fields().toArray()));\n }\n fields() {\n const items = new ItemList();\n items.add('name', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.name_label')), m(\"input\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-tags.admin.edit_tag.name_placeholder'),\n value: this.name(),\n oninput: e => {\n const target = e.target;\n this.name(target.value);\n this.slug(slug(target.value));\n }\n })), 50);\n items.add('slug', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.slug_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.slug\n })), 40);\n items.add('description', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.description_label')), m(\"textarea\", {\n className: \"FormControl\",\n bidi: this.description\n })), 30);\n items.add('color', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.color_label')), m(ColorPreviewInput, {\n className: \"FormControl\",\n placeholder: \"#aaaaaa\",\n bidi: this.color\n })), 20);\n items.add('icon', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.icon_label')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.edit_tag.icon_text', {\n a: m(\"a\", {\n href: \"https://fontawesome.com/icons?m=free\",\n tabindex: \"-1\"\n })\n })), m(\"input\", {\n className: \"FormControl\",\n placeholder: \"fas fa-bolt\",\n bidi: this.icon\n })), 10);\n items.add('hidden', m(\"div\", {\n className: \"Form-group\"\n }, m(\"div\", null, m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"checkbox\",\n bidi: this.isHidden\n }), app.translator.trans('flarum-tags.admin.edit_tag.hide_label')))), 10);\n items.add('submit', m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary EditTagModal-save\",\n loading: this.loading\n }, app.translator.trans('flarum-tags.admin.edit_tag.submit_button')), this.tag.exists && m(\"button\", {\n type: \"button\",\n className: \"Button EditTagModal-delete\",\n onclick: this.delete.bind(this)\n }, app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_button'))), -10);\n return items;\n }\n submitData() {\n return {\n name: this.name(),\n slug: this.slug(),\n description: this.description(),\n color: this.color(),\n icon: this.icon(),\n isHidden: this.isHidden(),\n isPrimary: this.isPrimary()\n };\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n\n // Errors aren't passed to the modal onerror handler here.\n // This is done for better error visibility on smaller screen heights.\n this.tag.save(this.submitData()).then(() => this.hide(), () => this.loading = false);\n }\n delete() {\n if (confirm(extractText(app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_confirmation')))) {\n const children = app.store.all('tags').filter(tag => tag.parent() === this.tag);\n this.tag.delete().then(() => {\n children.forEach(tag => tag.pushData({\n attributes: {\n isChild: false\n }\n }));\n m.redraw();\n });\n this.hide();\n }\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/EditTagModal', EditTagModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * The `Component` class defines a user interface 'building block'. A component\n * generates a virtual DOM to be rendered on each redraw.\n *\n * Essentially, this is a wrapper for Mithril's components that adds several useful features:\n *\n * - In the `oninit` and `onbeforeupdate` lifecycle hooks, we store vnode attrs in `this.attrs.\n * This allows us to use attrs across components without having to pass the vnode to every single\n * method.\n * - The static `initAttrs` method allows a convenient way to provide defaults (or to otherwise modify)\n * the attrs that have been passed into a component.\n * - When the component is created in the DOM, we store its DOM element under `this.element`; this lets\n * us use jQuery to modify child DOM state from internal methods via the `this.$()` method.\n * - A convenience `component` method, which serves as an alternative to hyperscript and JSX.\n *\n * As with other Mithril components, components extending Component can be initialized\n * and nested using JSX, hyperscript, or a combination of both. The `component` method can also\n * be used.\n *\n * @example\n * return m('div',

Hello World

);\n *\n * @example\n * return m('div', MyComponent.component({foo: 'bar'), m('p', 'Hello World!'));\n *\n * @see https://mithril.js.org/components.html\n */\nexport default class Component {\n constructor() {\n /**\n * The root DOM element for the component.\n */\n _defineProperty(this, \"element\", void 0);\n /**\n * The attributes passed into the component.\n *\n * @see https://mithril.js.org/components.html#passing-data-to-components\n */\n _defineProperty(this, \"attrs\", void 0);\n /**\n * Class component state that is persisted between redraws.\n *\n * Updating this will **not** automatically trigger a redraw, unlike\n * other frameworks.\n *\n * This is different to Vnode state, which is always an instance of your\n * class component.\n *\n * This is `undefined` by default.\n */\n _defineProperty(this, \"state\", void 0);\n }\n /**\n * @inheritdoc\n */\n /**\n * @inheritdoc\n */\n oninit(vnode) {\n this.setAttrs(vnode.attrs);\n }\n\n /**\n * @inheritdoc\n */\n oncreate(vnode) {\n this.element = vnode.dom;\n }\n\n /**\n * @inheritdoc\n */\n onbeforeupdate(vnode) {\n this.setAttrs(vnode.attrs);\n }\n\n /**\n * @inheritdoc\n */\n onupdate(vnode) {}\n\n /**\n * @inheritdoc\n */\n onbeforeremove(vnode) {}\n\n /**\n * @inheritdoc\n */\n onremove(vnode) {}\n\n /**\n * Returns a jQuery object for this component's element. If you pass in a\n * selector string, this method will return a jQuery object, using the current\n * element as its buffer.\n *\n * For example, calling `component.$('li')` will return a jQuery object\n * containing all of the `li` elements inside the DOM element of this\n * component.\n *\n * @param [selector] a jQuery-compatible selector string\n * @returns the jQuery object for the DOM node\n * @final\n */\n $(selector) {\n const $element = $(this.element);\n return selector ? $element.find(selector) : $element;\n }\n\n /**\n * Convenience method to attach a component without JSX.\n * Has the same effect as calling `m(THIS_CLASS, attrs, children)`.\n *\n * @see https://mithril.js.org/hyperscript.html#mselector,-attributes,-children\n */\n static component(attrs, children) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (children === void 0) {\n children = null;\n }\n const componentAttrs = {\n ...attrs\n };\n return m(this, componentAttrs, children);\n }\n\n /**\n * Saves a reference to the vnode attrs after running them through initAttrs,\n * and checking for common issues.\n */\n setAttrs(attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n this.constructor.initAttrs(attrs);\n if (attrs) {\n if ('children' in attrs) {\n throw new Error(\"[\".concat(this.constructor.name, \"] The \\\"children\\\" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute\"));\n }\n if ('tag' in attrs) {\n throw new Error(\"[\".concat(this.constructor.name, \"] You cannot use the \\\"tag\\\" attribute name with Mithril 2.\"));\n }\n }\n this.attrs = attrs;\n }\n\n /**\n * Initialize the component's attrs.\n *\n * This can be used to assign default values for missing, optional attrs.\n */\n static initAttrs(attrs) {}\n}\nflarum.reg.add('flarum-tags', '../../../../framework/core/js/src/common/Component', Component);","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t app.modal.show(EditTagModal, {\n model: tag\n })\n })), !tag.isChild() && tag.position() !== null && m(\"ol\", {\n className: \"TagListItem-children TagList\"\n }, sortTags(app.store.all('tags')).filter(child => child.parent() === tag).map(tagItem)));\n}\nexport default class TagsPage extends ExtensionPage {\n oninit(vnode) {\n super.oninit(vnode);\n\n // A regular redraw won't work here, because sortable has mucked around\n // with the DOM which will confuse Mithril's diffing algorithm. Instead\n // we force a full reconstruction of the DOM by changing the key, which\n // makes mithril completely re-render the component on redraw.\n this.forcedRefreshKey = 0;\n this.loading = true;\n app.tagList.load(['parent']).then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n content() {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n const minPrimaryTags = this.setting('flarum-tags.min_primary_tags', 0);\n const maxPrimaryTags = this.setting('flarum-tags.max_primary_tags', 0);\n const minSecondaryTags = this.setting('flarum-tags.min_secondary_tags', 0);\n const maxSecondaryTags = this.setting('flarum-tags.max_secondary_tags', 0);\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.parent()));\n return m(\"div\", {\n className: \"TagsContent\"\n }, m(\"div\", {\n className: \"TagsContent-list\"\n }, m(\"div\", {\n className: \"container\",\n key: this.forcedRefreshKey,\n oncreate: this.onListOnCreate.bind(this)\n }, m(FormSectionGroup, null, m(FormSection, {\n className: \"TagGroup\",\n label: app.translator.trans('flarum-tags.admin.tags.primary_heading')\n }, m(\"ol\", {\n className: \"TagList TagList--primary\"\n }, tags.filter(tag => tag.position() !== null && !tag.isChild()).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: true\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_primary_tag_button'))), m(FormSection, {\n className: \"TagGroup TagGroup--secondary\",\n label: app.translator.trans('flarum-tags.admin.tags.secondary_heading')\n }, m(\"ul\", {\n className: \"TagList\"\n }, tags.filter(tag => tag.position() === null).sort((a, b) => a.name().localeCompare(b.name())).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: false\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_secondary_tag_button'))), m(FormSection, {\n label: app.translator.trans('flarum-tags.admin.tags.settings_heading')\n }, m(Form, null, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minPrimaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minPrimaryTags, maxPrimaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minPrimaryTags(),\n bidi: maxPrimaryTags\n }))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minSecondaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minSecondaryTags, maxSecondaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minSecondaryTags(),\n bidi: maxSecondaryTags\n }))), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, this.submitButton())))), m(\"div\", {\n className: \"TagsContent-footer\"\n }, m(\"p\", null, app.translator.trans('flarum-tags.admin.tags.about_tags_text'))))));\n }\n onListOnCreate(vnode) {\n this.$('.TagList').get().map(e => {\n sortable.create(e, {\n group: 'tags',\n delay: 50,\n delayOnTouchOnly: true,\n touchStartThreshold: 5,\n animation: 150,\n swapThreshold: 0.65,\n dragClass: 'sortable-dragging',\n ghostClass: 'sortable-placeholder',\n onSort: e => this.onSortUpdate(e)\n });\n });\n }\n setMinTags(minTags, maxTags, value) {\n minTags(value);\n maxTags(Math.max(value, maxTags()));\n }\n onSortUpdate(e) {\n // If we've moved a tag from 'primary' to 'secondary', then we'll update\n // its attributes in our local store so that when we redraw the change\n // will be made.\n if (e.from instanceof HTMLOListElement && e.to instanceof HTMLUListElement) {\n app.store.getById('tags', e.item.getAttribute('data-id')).pushData({\n attributes: {\n position: null,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n }\n\n // Construct an array of primary tag IDs and their children, in the same\n // order that they have been arranged in.\n const order = this.$('.TagList--primary > li').map(function () {\n return {\n id: $(this).data('id'),\n children: $(this).find('li').map(function () {\n return $(this).data('id');\n }).get()\n };\n }).get();\n\n // Now that we have an accurate representation of the order which the\n // primary tags are in, we will update the tag attributes in our local\n // store to reflect this order.\n order.forEach((tag, i) => {\n const parent = app.store.getById('tags', tag.id);\n parent.pushData({\n attributes: {\n position: i,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n tag.children.forEach((child, j) => {\n app.store.getById('tags', child).pushData({\n attributes: {\n position: j,\n isChild: true\n },\n relationships: {\n parent\n }\n });\n });\n });\n app.request({\n url: app.forum.attribute('apiUrl') + '/tags/order',\n method: 'POST',\n body: {\n order\n }\n });\n this.forcedRefreshKey++;\n m.redraw();\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/TagsPage', TagsPage);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n var _this$loadedIncludes;\n if (includes === void 0) {\n includes = [];\n }\n (_this$loadedIncludes = this.loadedIncludes) != null ? _this$loadedIncludes : this.loadedIncludes = new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n isPrimary() {\n return Model.attribute('isPrimary').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimaryParent() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return \"\".concat(negate ? '-' : '').concat(this.key(), \":\").concat(this.filterValueToGambitValue(value));\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","import app from 'flarum/admin/app';\nimport addTagsPermissionScope from './addTagsPermissionScope';\nimport addTagPermission from './addTagPermission';\nimport addTagsHomePageOption from './addTagsHomePageOption';\nimport addTagChangePermission from './addTagChangePermission';\nimport addTagSelectionSettingComponent from './addTagSelectionSettingComponent';\nimport TagsPage from './components/TagsPage';\nimport TagListState from '../common/states/TagListState';\nexport { default as extend } from '../common/extend';\napp.initializers.add('flarum-tags', app => {\n app.tagList = new TagListState();\n app.extensionData.for('flarum-tags').registerPage(TagsPage);\n addTagsPermissionScope();\n addTagPermission();\n addTagsHomePageOption();\n addTagChangePermission();\n addTagSelectionSettingComponent();\n});\nimport './admin';","import app from 'flarum/admin/app';\nimport { extend, override } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport PermissionDropdown from 'flarum/admin/components/PermissionDropdown';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagLabel from '../common/helpers/tagLabel';\nimport tagIcon from '../common/helpers/tagIcon';\nimport sortTags from '../common/utils/sortTags';\nexport default function () {\n extend(PermissionGrid.prototype, 'oninit', function () {\n this.loading = true;\n });\n extend(PermissionGrid.prototype, 'oncreate', function () {\n app.tagList.load().then(() => {\n this.loading = false;\n m.redraw();\n });\n });\n override(PermissionGrid.prototype, 'view', function (original, vnode) {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n return original(vnode);\n });\n override(app, 'getRequiredPermissions', (original, permission) => {\n const tagPrefix = permission.match(/^tag\\d+\\./);\n if (tagPrefix) {\n const globalPermission = permission.substr(tagPrefix[0].length);\n const required = original(globalPermission);\n return required.map(required => tagPrefix[0] + required);\n }\n return original(permission);\n });\n extend(PermissionGrid.prototype, 'scopeItems', items => {\n sortTags(app.store.all('tags')).filter(tag => tag.isRestricted()).forEach(tag => items.add('tag' + tag.id(), {\n label: tagLabel(tag),\n onremove: () => tag.save({\n isRestricted: false\n }),\n render: item => {\n if ('setting' in item) return null;\n if (item.permission === 'viewForum' || item.permission === 'startDiscussion' || item.permission.startsWith('discussion.') && item.tagScoped !== false || item.tagScoped) {\n return m(PermissionDropdown, {\n permission: \"tag\".concat(tag.id(), \".\").concat(item.permission),\n allowGuest: item.allowGuest\n });\n }\n return null;\n }\n }));\n });\n extend(PermissionGrid.prototype, 'scopeControlItems', items => {\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.isRestricted()));\n if (tags.length) {\n items.add('tag', m(Dropdown, {\n className: \"Dropdown--restrictByTag\",\n buttonClassName: \"Button Button--text\",\n label: app.translator.trans('flarum-tags.admin.permissions.restrict_by_tag_heading'),\n icon: \"fas fa-plus\",\n caretIcon: null\n }, tags.map(tag => m(Button, {\n icon: true,\n onclick: () => tag.save({\n isRestricted: true\n })\n }, [tagIcon(tag, {\n className: 'Button-icon'\n }), ' ', tag.name()]))));\n }\n });\n}","import app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport SettingDropdown from 'flarum/admin/components/SettingDropdown';\nexport default function () {\n extend(PermissionGrid.prototype, 'startItems', items => {\n items.add('allowTagChange', {\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.allow_edit_tags_label'),\n setting: () => {\n const minutes = parseInt(app.data.settings.allow_tag_change, 10);\n return m(SettingDropdown, {\n defaultLabel: minutes ? app.translator.trans('core.admin.permissions_controls.allow_some_minutes_button', {\n count: minutes\n }) : app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button'),\n key: \"allow_tag_change\",\n options: [{\n value: '-1',\n label: app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button')\n }, {\n value: '10',\n label: app.translator.trans('core.admin.permissions_controls.allow_ten_minutes_button')\n }, {\n value: 'reply',\n label: app.translator.trans('core.admin.permissions_controls.allow_until_reply_button')\n }]\n });\n }\n }, 90);\n });\n}","import { extend } from 'flarum/common/extend';\nimport SelectTagsSettingComponent from './components/SelectTagsSettingComponent';\nimport FormGroup from 'flarum/common/components/FormGroup';\nexport default function () {\n extend(FormGroup.prototype, 'customFieldComponents', function (items) {\n items.add('flarum-tags.select-tags', attrs => {\n return m(SelectTagsSettingComponent, Object.assign({}, attrs, {\n settingValue: attrs.bidi\n }));\n });\n });\n}","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\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 return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"common/components/TagSelectionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t328: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","flarum","reg","get","app","extensionData","for","registerPermission","icon","label","translator","trans","permission","extend","items","add","path","tagsLabel","tags","attrs","children","link","otherAttrs","className","sortTags","forEach","tag","length","push","tagLabel","m","SelectTagsSettingComponent","constructor","super","arguments","this","view","value","JSON","parse","settingValue","loaded","then","filter","includes","id","redraw","help","onclick","selectedTags","onsubmit","stringify","map","options","size","display","addChunkModule","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread2","target","i","source","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","iterator","prototype","configurable","writable","_extends","assign","hasOwnProperty","call","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","userAgent","pattern","window","navigator","match","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","on","el","event","fn","addEventListener","off","removeEventListener","matches","selector","substring","msMatchesSelector","webkitMatchesSelector","_","getParentOrHost","host","document","nodeType","parentNode","closest","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","name","state","classList","replace","css","prop","val","style","defaultView","getComputedStyle","currentStyle","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","find","tagName","list","getElementsByTagName","n","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","getBoundingClientRect","elRect","top","left","bottom","right","height","width","innerHeight","innerWidth","containerRect","parseInt","elMatrix","scaleX","a","scaleY","d","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","index","nodeName","toUpperCase","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","body","isRectEqual","rect1","rect2","Math","round","throttle","callback","ms","args","_this","setTimeout","scrollBy","x","y","Polymer","$","jQuery","Zepto","dom","cloneNode","expando","Date","getTime","plugins","defaults","initializeByDefault","PluginManager","mount","plugin","option","p","pluginName","concat","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_excluded","_ref","undefined","originalEvent","data","bind","dragEl","parentEl","ghostEl","rootEl","nextEl","lastDownEl","cloneEl","cloneHidden","dragStarted","moved","putSortable","activeSortable","active","oldIndex","oldDraggableIndex","newIndex","newDraggableIndex","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","targetEl","toEl","fromEl","extraEventProperties","onName","charAt","substr","CustomEvent","createEvent","initEvent","bubbles","cancelable","to","from","item","pullMode","lastPutMode","allEventProperties","dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","split","touchingSideChild2","clear","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","join","originalGroup","checkPull","checkPut","put","revertClone","preventDefault","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","some","threshold","emptyInsertThreshold","rect","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","toString","animationCallbackId","animationStates","sort","disabled","store","handle","test","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","animation","easing","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","Number","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","captureAnimationState","slice","child","fromRect","thisAnimationDuration","childMatrix","f","e","addAnimationState","removeAnimationState","splice","arr","indexOfObject","animateAll","clearTimeout","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","pow","calculateRealTime","animate","max","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","offsetWidth","repaint","animated","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","str","src","href","sum","charCodeAt","_nextTick","_cancelNextTick","contains","_getDirection","type","touch","pointerType","originalTarget","shadowRoot","composedPath","root","inputs","idx","checked","_saveInputCheckedState","button","isContentEditable","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","err","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","b","c","cssMatrix","appendChild","removeAttribute","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","_ghostIsLast","changed","_ghostIsFirst","firstChild","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","removeChild","save","handleEvent","dropEffect","_globalDragOver","toArray","order","getAttribute","useAnimation","set","destroy","Array","querySelectorAll","utils","is","dst","nextTick","cancelNextTick","detectDirection","element","_len","_key","create","version","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref2","_ref3","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","EditTagModal","oninit","vnode","model","slug","description","color","isHidden","isPrimary","primary","title","attributes","submitData","content","fields","placeholder","oninput","bidi","tabindex","loading","exists","delete","hide","confirm","pushData","isChild","Component","setAttrs","oncreate","onbeforeupdate","onupdate","onbeforeremove","onremove","$element","static","componentAttrs","initAttrs","Error","r","t","isArray","FormSectionGroup","FormSection","tagItem","tagIcon","position","TagsPage","forcedRefreshKey","minPrimaryTags","setting","maxPrimaryTags","minSecondaryTags","maxSecondaryTags","onListOnCreate","localeCompare","min","setMinTags","submitButton","onSort","onSortUpdate","minTags","maxTags","HTMLOListElement","HTMLUListElement","relationships","j","url","method","TagListState","async","loadedIncludes","query","unloadedIncludes","include","has","Promise","resolve","Set","Tag","backgroundUrl","backgroundMode","defaultSort","discussionCount","lastPostedAt","lastPostedDiscussion","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimaryParent","TagGambit","KeyValueGambit","hint","filterKey","gambitValueToFilterValue","fromFilter","negate","gambits","filterValueToGambitValue","gambit","tagList","registerPage","override","original","tagPrefix","required","render","startsWith","tagScoped","allowGuest","buttonClassName","caretIcon","addTagPermission","addTagsHomePageOption","minutes","defaultLabel","count","settings","hasIcon","useColor","tagText","route","aPos","bPos","aParent","bParent","module","exports","arg","input","prim","toPrimitive","res","TypeError","String","toPropertyKey","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","o","chunkId","all","reduce","promises","u","g","globalThis","Function","l","done","script","needAttach","scripts","s","charset","timeout","nc","setAttribute","onScriptComplete","prev","onerror","onload","doneFns","head","toStringTag","scriptUrl","importScripts","location","currentScript","compat","originalLoadChunk","loadChunk","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/tags/js/dist/common/components/TagSelectionModal.js b/extensions/tags/js/dist/common/components/TagSelectionModal.js index 4cd46c506..9923f68dd 100644 --- a/extensions/tags/js/dist/common/components/TagSelectionModal.js +++ b/extensions/tags/js/dist/common/components/TagSelectionModal.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[162],{610:(t,e,s)=>{s.r(e),s.d(e,{default:()=>C});var i=s(905),a=s(351),n=s.n(a),l=s(645),r=s.n(l),o=s(836),c=s.n(o),d=s(596),h=s.n(d),u=s(291),g=s.n(u),p=s(657),f=s.n(p),y=s(149),T=s.n(y),b=s(44),x=s.n(b),w=s(636),v=s.n(w),I=s(648),N=s(924),_=s(974),S=s(997);class C extends(x()){constructor(){super(...arguments),(0,i.Z)(this,"loading",!0),(0,i.Z)(this,"tags",void 0),(0,i.Z)(this,"selected",[]),(0,i.Z)(this,"bypassReqs",!1),(0,i.Z)(this,"filter",v()("")),(0,i.Z)(this,"focused",!1),(0,i.Z)(this,"navigator",new(f())),(0,i.Z)(this,"indexTag",void 0)}static initAttrs(t){var e,s,i,a,l,r,o,m,c,d,u,g,p,f,y,T,b,x;super.initAttrs(t),t.title||(t.title=h()(n().translator.trans("flarum-tags.lib.tag_selection_modal.title"))),t.canSelect||(t.canSelect=()=>!0),null!=t.allowResetting||(t.allowResetting=!0),t.limits={min:{total:null!=(e=null==(s=t.limits)||null==(i=s.min)?void 0:i.total)?e:-1/0,primary:null!=(a=null==(l=t.limits)||null==(r=l.min)?void 0:r.primary)?a:-1/0,secondary:null!=(o=null==(m=t.limits)||null==(c=m.min)?void 0:c.secondary)?o:-1/0},max:{total:null!=(d=null==(u=t.limits)||null==(g=u.max)?void 0:g.total)?d:1/0,primary:null!=(p=null==(f=t.limits)||null==(y=f.max)?void 0:y.primary)?p:1/0,secondary:null!=(T=null==(b=t.limits)||null==(x=b.max)?void 0:x.secondary)?T:1/0}},function(t){if(t.min.primary>t.max.primary)throw new Error("The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.");if(t.min.secondary>t.max.secondary)throw new Error("The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.");if(t.min.total>t.max.primary+t.max.secondary)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.");if(t.max.totalt.max.total)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of tags allowed.")}(t.limits)}oninit(t){super.oninit(t),this.navigator.onUp((()=>this.setIndex(this.getCurrentNumericIndex()-1,!0))).onDown((()=>this.setIndex(this.getCurrentNumericIndex()+1,!0))).onSelect(this.select.bind(this)).onRemove((()=>this.selected.splice(this.selected.length-1,1))),n().tagList.load(["parent"]).then((t=>{this.loading=!1,this.attrs.selectableTags&&(t=this.attrs.selectableTags(t)),this.tags=(0,I.Z)(t),this.attrs.selectedTags&&this.attrs.selectedTags.map(this.addTag.bind(this)),this.indexTag=t[0],m.redraw()}))}className(){return c()("TagSelectionModal",this.attrs.className)}title(){return this.attrs.title}content(){if(this.loading||!this.tags)return m(T(),null);const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount(),i=this.getFilteredTags(),a=Math.max(h()(this.getInstruction(e,s)).length,this.filter().length);return[m("div",{className:"Modal-body"},m("div",{className:"TagSelectionModal-form"},m("div",{className:"TagSelectionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:()=>this.$(".TagsInput input").focus()},m("span",{className:"TagsInput-selected"},this.selected.map((t=>m("span",{className:"TagsInput-tag",onclick:()=>{this.removeTag(t),this.onready()}},(0,N.Z)(t))))),m("input",{className:"FormControl",placeholder:h()(this.getInstruction(e,s)),bidi:this.filter,style:{width:a+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:()=>this.focused=!0,onblur:()=>this.focused=!1}))),m("div",{className:"TagSelectionModal-form-submit App-primaryControl"},m(r(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(e,s),icon:"fas fa-check"},n().translator.trans("flarum-tags.lib.tag_selection_modal.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagSelectionModal-list SelectTagList"},i.map((e=>m("li",{"data-index":e.id(),className:c()("SelectTagListItem",{pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:this.selected.includes(e),active:this.indexTag===e}),style:{color:e.color()},onmouseover:()=>this.indexTag=e,onclick:this.toggleTag.bind(this,e)},m("i",{className:"SelectTagListItem-icon"},(0,_.Z)(e,{className:"SelectTagListItem-tagIcon"}),m("i",{className:"icon TagIcon fas fa-check SelectTagListItem-checkIcon"})),m("span",{className:"SelectTagListItem-name"},g()(e.name(),t)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")))),this.attrs.limits.allowBypassing&&m("div",{className:"TagSelectionModal-controls"},m(S.Z,{className:"Button",onclick:()=>this.bypassReqs=!this.bypassReqs,isToggled:this.bypassReqs},n().translator.trans("flarum-tags.lib.tag_selection_modal.bypass_requirements"))))]}getFilteredTags(){const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount();let i=this.tags;return this.attrs.requireParentTag&&(i=i.filter((t=>{const e=t.parent();return null!==e&&(!1===e||this.selected.includes(e))}))),this.bypassReqs||(this.selected.length>=this.attrs.limits.max.total?i=i.filter((t=>this.selected.includes(t))):(e>=this.attrs.limits.max.primary&&(i=i.filter((t=>!t.isPrimary()||this.selected.includes(t)))),s>=this.attrs.limits.max.secondary&&(i=i.filter((t=>t.isPrimary()||this.selected.includes(t)))))),t&&(i=i.filter((e=>e.name().toLowerCase().includes(t)))),this.indexTag&&i.includes(this.indexTag)||(this.indexTag=i[0]),i}primaryCount(){return this.selected.filter((t=>t.isPrimary())).length}secondaryCount(){return this.selected.filter((t=>!t.isPrimary())).length}meetsRequirements(t,e){return!!(this.bypassReqs||this.attrs.allowResetting&&0===this.selected.length)||!(this.selected.length=this.attrs.limits.min.primary&&e>=this.attrs.limits.min.secondary}addTag(t){if(t&&this.attrs.canSelect(t)){if(this.attrs.onSelect&&this.attrs.onSelect(t,this.selected),this.attrs.requireParentTag){const e=t.parent();e&&!this.selected.includes(e)&&this.selected.push(e)}this.selected.includes(t)||this.selected.push(t)}}removeTag(t){const e=this.selected.indexOf(t);-1!==e&&(this.selected.splice(e,1),this.attrs.requireParentTag&&this.selected.filter((e=>e.parent()===t)).forEach(this.removeTag.bind(this)),this.attrs.onDeselect&&this.attrs.onDeselect(t,this.selected))}toggleTag(t){this.tags&&(this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.indexTag=this.tags[0]),this.onready())}getInstruction(t,e){if(this.bypassReqs)return"";if(t li")}getCurrentNumericIndex(){return this.indexTag?this.selectableItems().index(this.getItem(this.indexTag)):-1}getItem(t){return this.selectableItems().filter('[data-index="'.concat(t.id(),'"]'))}setIndex(t,e){const s=this.selectableItems(),i=s.parent();t<0?t=s.length-1:t>=s.length&&(t=0);const a=s.eq(t);if(this.indexTag=n().store.getById("tags",a.attr("data-index")),m.redraw(),e&&this.indexTag){const t=i.scrollTop(),e=i.offset().top,s=e+i.outerHeight(),n=a.offset().top,l=n+a.outerHeight();let r;ns&&(r=t-s+l+parseInt(i.css("padding-bottom"),10)),void 0!==r&&i.stop(!0).animate({scrollTop:r},100)}}}flarum.reg.add("flarum-tags","common/components/TagSelectionModal",C)},997:(t,e,s)=>{s.d(e,{Z:()=>c});var i=s(433),a=s.n(i),n=s(645),l=s.n(n),r=s(836),o=s.n(r);class c extends(a()){view(t){const{className:e,isToggled:s,...i}=this.attrs,a=s?"far fa-check-circle":"far fa-circle";return m(l(),Object.assign({},i,{icon:a,className:o()([e,s&&"Button--toggled"])}),t.children)}}flarum.reg.add("flarum-tags","forum/components/ToggleButton",c)}}]); +"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[162],{610:(t,e,s)=>{s.r(e),s.d(e,{default:()=>C});var i=s(905),a=s(351),n=s.n(a),l=s(645),r=s.n(l),o=s(836),c=s.n(o),d=s(596),h=s.n(d),u=s(291),g=s.n(u),p=s(657),f=s.n(p),y=s(149),T=s.n(y),b=s(44),x=s.n(b),w=s(636),v=s.n(w),I=s(648),N=s(924),_=s(974),S=s(997);class C extends(x()){constructor(){super(...arguments),(0,i.Z)(this,"loading",!0),(0,i.Z)(this,"tags",void 0),(0,i.Z)(this,"selected",[]),(0,i.Z)(this,"bypassReqs",!1),(0,i.Z)(this,"filter",v()("")),(0,i.Z)(this,"focused",!1),(0,i.Z)(this,"navigator",new(f())),(0,i.Z)(this,"indexTag",void 0)}static initAttrs(t){var e,s,i,a,l,r,o,m,c,d,u,g,p,f,y,T,b,x;super.initAttrs(t),t.title||(t.title=h()(n().translator.trans("flarum-tags.lib.tag_selection_modal.title"))),t.canSelect||(t.canSelect=()=>!0),null!=t.allowResetting||(t.allowResetting=!0),t.limits={min:{total:null!=(e=null==(s=t.limits)||null==(i=s.min)?void 0:i.total)?e:-1/0,primary:null!=(a=null==(l=t.limits)||null==(r=l.min)?void 0:r.primary)?a:-1/0,secondary:null!=(o=null==(m=t.limits)||null==(c=m.min)?void 0:c.secondary)?o:-1/0},max:{total:null!=(d=null==(u=t.limits)||null==(g=u.max)?void 0:g.total)?d:1/0,primary:null!=(p=null==(f=t.limits)||null==(y=f.max)?void 0:y.primary)?p:1/0,secondary:null!=(T=null==(b=t.limits)||null==(x=b.max)?void 0:x.secondary)?T:1/0}},function(t){if(t.min.primary>t.max.primary)throw new Error("The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.");if(t.min.secondary>t.max.secondary)throw new Error("The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.");if(t.min.total>t.max.primary+t.max.secondary)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.");if(t.max.totalt.max.total)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of tags allowed.")}(t.limits)}oninit(t){super.oninit(t),this.navigator.onUp((()=>this.setIndex(this.getCurrentNumericIndex()-1,!0))).onDown((()=>this.setIndex(this.getCurrentNumericIndex()+1,!0))).onSelect(this.select.bind(this)).onRemove((()=>this.selected.splice(this.selected.length-1,1))),n().tagList.load(["parent"]).then((t=>{this.loading=!1,this.attrs.selectableTags&&(t=this.attrs.selectableTags(t)),this.tags=(0,I.Z)(t),this.attrs.selectedTags&&this.attrs.selectedTags.map(this.addTag.bind(this)),this.indexTag=t[0],m.redraw()}))}className(){return c()("TagSelectionModal",this.attrs.className)}title(){return this.attrs.title}content(){if(this.loading||!this.tags)return m(T(),null);const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount(),i=this.getFilteredTags(),a=Math.max(h()(this.getInstruction(e,s)).length,this.filter().length);return[m("div",{className:"Modal-body"},m("div",{className:"TagSelectionModal-form"},m("div",{className:"TagSelectionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:()=>this.$(".TagsInput input").focus()},m("span",{className:"TagsInput-selected"},this.selected.map((t=>m("span",{className:"TagsInput-tag",onclick:()=>{this.removeTag(t),this.onready()}},(0,N.Z)(t))))),m("input",{className:"FormControl",placeholder:h()(this.getInstruction(e,s)),bidi:this.filter,style:{width:a+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:()=>this.focused=!0,onblur:()=>this.focused=!1}))),m("div",{className:"TagSelectionModal-form-submit App-primaryControl"},m(r(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(e,s),icon:"fas fa-check"},n().translator.trans("flarum-tags.lib.tag_selection_modal.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagSelectionModal-list SelectTagList"},i.map((e=>m("li",{"data-index":e.id(),className:c()("SelectTagListItem",{pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:this.selected.includes(e),active:this.indexTag===e}),style:{color:e.color()},onmouseover:()=>this.indexTag=e,onclick:this.toggleTag.bind(this,e)},m("i",{className:"SelectTagListItem-icon"},(0,_.Z)(e,{className:"SelectTagListItem-tagIcon"}),m("i",{className:"icon TagIcon fas fa-check SelectTagListItem-checkIcon"})),m("span",{className:"SelectTagListItem-name"},g()(e.name(),t)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")))),this.attrs.limits.allowBypassing&&m("div",{className:"TagSelectionModal-controls"},m(S.Z,{className:"Button",onclick:()=>this.bypassReqs=!this.bypassReqs,isToggled:this.bypassReqs},n().translator.trans("flarum-tags.lib.tag_selection_modal.bypass_requirements"))))]}getFilteredTags(){const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount();let i=this.tags;return this.attrs.requireParentTag&&(i=i.filter((t=>{const e=t.parent();return null!==e&&(!1===e||this.selected.includes(e))}))),this.bypassReqs||(this.selected.length>=this.attrs.limits.max.total?i=i.filter((t=>this.selected.includes(t))):(e>=this.attrs.limits.max.primary&&(i=i.filter((t=>!t.isPrimaryParent()||this.selected.includes(t)))),s>=this.attrs.limits.max.secondary&&(i=i.filter((t=>t.isPrimaryParent()||this.selected.includes(t)))))),t&&(i=i.filter((e=>e.name().toLowerCase().includes(t)))),this.indexTag&&i.includes(this.indexTag)||(this.indexTag=i[0]),i}primaryCount(){return this.selected.filter((t=>t.isPrimaryParent())).length}secondaryCount(){return this.selected.filter((t=>!t.isPrimaryParent())).length}meetsRequirements(t,e){return!!(this.bypassReqs||this.attrs.allowResetting&&0===this.selected.length)||!(this.selected.length=this.attrs.limits.min.primary&&e>=this.attrs.limits.min.secondary}addTag(t){if(t&&this.attrs.canSelect(t)){if(this.attrs.onSelect&&this.attrs.onSelect(t,this.selected),this.attrs.requireParentTag){const e=t.parent();e&&!this.selected.includes(e)&&this.selected.push(e)}this.selected.includes(t)||this.selected.push(t)}}removeTag(t){const e=this.selected.indexOf(t);-1!==e&&(this.selected.splice(e,1),this.attrs.requireParentTag&&this.selected.filter((e=>e.parent()===t)).forEach(this.removeTag.bind(this)),this.attrs.onDeselect&&this.attrs.onDeselect(t,this.selected))}toggleTag(t){this.tags&&(this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.indexTag=this.tags[0]),this.onready())}getInstruction(t,e){if(this.bypassReqs)return"";if(t li")}getCurrentNumericIndex(){return this.indexTag?this.selectableItems().index(this.getItem(this.indexTag)):-1}getItem(t){return this.selectableItems().filter('[data-index="'.concat(t.id(),'"]'))}setIndex(t,e){const s=this.selectableItems(),i=s.parent();t<0?t=s.length-1:t>=s.length&&(t=0);const a=s.eq(t);if(this.indexTag=n().store.getById("tags",a.attr("data-index")),m.redraw(),e&&this.indexTag){const t=i.scrollTop(),e=i.offset().top,s=e+i.outerHeight(),n=a.offset().top,l=n+a.outerHeight();let r;ns&&(r=t-s+l+parseInt(i.css("padding-bottom"),10)),void 0!==r&&i.stop(!0).animate({scrollTop:r},100)}}}flarum.reg.add("flarum-tags","common/components/TagSelectionModal",C)},997:(t,e,s)=>{s.d(e,{Z:()=>c});var i=s(433),a=s.n(i),n=s(645),l=s.n(n),r=s(836),o=s.n(r);class c extends(a()){view(t){const{className:e,isToggled:s,...i}=this.attrs,a=s?"far fa-check-circle":"far fa-circle";return m(l(),Object.assign({},i,{icon:a,className:o()([e,s&&"Button--toggled"])}),t.children)}}flarum.reg.add("flarum-tags","forum/components/ToggleButton",c)}}]); //# sourceMappingURL=TagSelectionModal.js.map \ No newline at end of file diff --git a/extensions/tags/js/dist/common/components/TagSelectionModal.js.map b/extensions/tags/js/dist/common/components/TagSelectionModal.js.map index cf131e3d2..e4b446bea 100644 --- a/extensions/tags/js/dist/common/components/TagSelectionModal.js.map +++ b/extensions/tags/js/dist/common/components/TagSelectionModal.js.map @@ -1 +1 @@ -{"version":3,"file":"common/components/TagSelectionModal.js","mappings":"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","sources":["webpack://@flarum/tags/./src/common/components/TagSelectionModal.tsx","webpack://@flarum/tags/./src/forum/components/ToggleButton.js"],"sourcesContent":["import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport highlight from 'flarum/common/helpers/highlight';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Stream from 'flarum/common/utils/Stream';\nimport sortTags from '../utils/sortTags';\nimport tagLabel from '../helpers/tagLabel';\nimport tagIcon from '../helpers/tagIcon';\nimport ToggleButton from '../../forum/components/ToggleButton';\nexport default class TagSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"selected\", []);\n _defineProperty(this, \"bypassReqs\", false);\n _defineProperty(this, \"filter\", Stream(''));\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"navigator\", new KeyboardNavigatable());\n _defineProperty(this, \"indexTag\", void 0);\n }\n static initAttrs(attrs) {\n var _attrs$allowResetting, _attrs$limits$min$tot, _attrs$limits, _attrs$limits$min, _attrs$limits$min$pri, _attrs$limits2, _attrs$limits2$min, _attrs$limits$min$sec, _attrs$limits3, _attrs$limits3$min, _attrs$limits$max$tot, _attrs$limits4, _attrs$limits4$max, _attrs$limits$max$pri, _attrs$limits5, _attrs$limits5$max, _attrs$limits$max$sec, _attrs$limits6, _attrs$limits6$max;\n super.initAttrs(attrs);\n\n // Default values for optional attributes.\n attrs.title || (attrs.title = extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.title')));\n attrs.canSelect || (attrs.canSelect = () => true);\n (_attrs$allowResetting = attrs.allowResetting) != null ? _attrs$allowResetting : attrs.allowResetting = true;\n attrs.limits = {\n min: {\n total: (_attrs$limits$min$tot = (_attrs$limits = attrs.limits) == null ? void 0 : (_attrs$limits$min = _attrs$limits.min) == null ? void 0 : _attrs$limits$min.total) != null ? _attrs$limits$min$tot : -Infinity,\n primary: (_attrs$limits$min$pri = (_attrs$limits2 = attrs.limits) == null ? void 0 : (_attrs$limits2$min = _attrs$limits2.min) == null ? void 0 : _attrs$limits2$min.primary) != null ? _attrs$limits$min$pri : -Infinity,\n secondary: (_attrs$limits$min$sec = (_attrs$limits3 = attrs.limits) == null ? void 0 : (_attrs$limits3$min = _attrs$limits3.min) == null ? void 0 : _attrs$limits3$min.secondary) != null ? _attrs$limits$min$sec : -Infinity\n },\n max: {\n total: (_attrs$limits$max$tot = (_attrs$limits4 = attrs.limits) == null ? void 0 : (_attrs$limits4$max = _attrs$limits4.max) == null ? void 0 : _attrs$limits4$max.total) != null ? _attrs$limits$max$tot : Infinity,\n primary: (_attrs$limits$max$pri = (_attrs$limits5 = attrs.limits) == null ? void 0 : (_attrs$limits5$max = _attrs$limits5.max) == null ? void 0 : _attrs$limits5$max.primary) != null ? _attrs$limits$max$pri : Infinity,\n secondary: (_attrs$limits$max$sec = (_attrs$limits6 = attrs.limits) == null ? void 0 : (_attrs$limits6$max = _attrs$limits6.max) == null ? void 0 : _attrs$limits6$max.secondary) != null ? _attrs$limits$max$sec : Infinity\n }\n };\n\n // Prevent illogical limits from being provided.\n catchInvalidLimits(attrs.limits);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.select.bind(this)).onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n app.tagList.load(['parent']).then(tags => {\n this.loading = false;\n if (this.attrs.selectableTags) {\n tags = this.attrs.selectableTags(tags);\n }\n this.tags = sortTags(tags);\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n }\n this.indexTag = tags[0];\n m.redraw();\n });\n }\n className() {\n return classList('TagSelectionModal', this.attrs.className);\n }\n title() {\n return this.attrs.title;\n }\n content() {\n if (this.loading || !this.tags) {\n return m(LoadingIndicator, null);\n }\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n const tags = this.getFilteredTags();\n const inputWidth = Math.max(extractText(this.getInstruction(primaryCount, secondaryCount)).length, this.filter().length);\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form-input\"\n }, m(\"div\", {\n className: 'TagsInput FormControl ' + (this.focused ? 'focus' : ''),\n onclick: () => this.$('.TagsInput input').focus()\n }, m(\"span\", {\n className: \"TagsInput-selected\"\n }, this.selected.map(tag => m(\"span\", {\n className: \"TagsInput-tag\",\n onclick: () => {\n this.removeTag(tag);\n this.onready();\n }\n }, tagLabel(tag)))), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(this.getInstruction(primaryCount, secondaryCount)),\n bidi: this.filter,\n style: {\n width: inputWidth + 'ch'\n },\n onkeydown: this.navigator.navigate.bind(this.navigator),\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false\n }))), m(\"div\", {\n className: \"TagSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(primaryCount, secondaryCount),\n icon: \"fas fa-check\"\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.submit_button'))))), m(\"div\", {\n className: \"Modal-footer\"\n }, m(\"ul\", {\n className: \"TagSelectionModal-list SelectTagList\"\n }, tags.map(tag => m(\"li\", {\n \"data-index\": tag.id(),\n className: classList('SelectTagListItem', {\n pinned: tag.position() !== null,\n child: !!tag.parent(),\n colored: !!tag.color(),\n selected: this.selected.includes(tag),\n active: this.indexTag === tag\n }),\n style: {\n color: tag.color()\n },\n onmouseover: () => this.indexTag = tag,\n onclick: this.toggleTag.bind(this, tag)\n }, m(\"i\", {\n className: \"SelectTagListItem-icon\"\n }, tagIcon(tag, {\n className: 'SelectTagListItem-tagIcon'\n }), m(\"i\", {\n className: \"icon TagIcon fas fa-check SelectTagListItem-checkIcon\"\n })), m(\"span\", {\n className: \"SelectTagListItem-name\"\n }, highlight(tag.name(), filter)), tag.description() ? m(\"span\", {\n className: \"SelectTagListItem-description\"\n }, tag.description()) : ''))), this.attrs.limits.allowBypassing && m(\"div\", {\n className: \"TagSelectionModal-controls\"\n }, m(ToggleButton, {\n className: \"Button\",\n onclick: () => this.bypassReqs = !this.bypassReqs,\n isToggled: this.bypassReqs\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.bypass_requirements'))))];\n }\n\n /**\n * Filters the available tags on every state change.\n */\n getFilteredTags() {\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n let tags = this.tags;\n if (this.attrs.requireParentTag) {\n // Filter out all child tags whose parents have not been selected. This\n // makes it impossible to select a child if its parent hasn't been selected.\n tags = tags.filter(tag => {\n const parent = tag.parent();\n return parent !== null && (parent === false || this.selected.includes(parent));\n });\n }\n if (!this.bypassReqs) {\n // If we reached the total maximum number of tags, we can't select anymore.\n if (this.selected.length >= this.attrs.limits.max.total) {\n tags = tags.filter(tag => this.selected.includes(tag));\n }\n // If the number of selected primary/secondary tags is at the maximum, then\n // we'll filter out all other tags of that type.\n else {\n if (primaryCount >= this.attrs.limits.max.primary) {\n tags = tags.filter(tag => !tag.isPrimary() || this.selected.includes(tag));\n }\n if (secondaryCount >= this.attrs.limits.max.secondary) {\n tags = tags.filter(tag => tag.isPrimary() || this.selected.includes(tag));\n }\n }\n }\n\n // If the user has entered text in the filter input, then filter by tags\n // whose name matches what they've entered.\n if (filter) {\n tags = tags.filter(tag => tag.name().toLowerCase().includes(filter));\n }\n if (!this.indexTag || !tags.includes(this.indexTag)) this.indexTag = tags[0];\n return tags;\n }\n\n /**\n * Counts the number of selected primary tags.\n */\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimary()).length;\n }\n\n /**\n * Counts the number of selected secondary tags.\n */\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimary()).length;\n }\n\n /**\n * Validates the number of selected primary/secondary tags against the set min max limits.\n */\n meetsRequirements(primaryCount, secondaryCount) {\n if (this.bypassReqs || this.attrs.allowResetting && this.selected.length === 0) {\n return true;\n }\n if (this.selected.length < this.attrs.limits.min.total) {\n return false;\n }\n return primaryCount >= this.attrs.limits.min.primary && secondaryCount >= this.attrs.limits.min.secondary;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n */\n addTag(tag) {\n if (!tag || !this.attrs.canSelect(tag)) return;\n if (this.attrs.onSelect) {\n this.attrs.onSelect(tag, this.selected);\n }\n\n // If this tag has a parent, we'll also need to add the parent tag to the\n // selected list if it's not already in there.\n if (this.attrs.requireParentTag) {\n const parent = tag.parent();\n if (parent && !this.selected.includes(parent)) {\n this.selected.push(parent);\n }\n }\n if (!this.selected.includes(tag)) {\n this.selected.push(tag);\n }\n }\n\n /**\n * Remove the given tag from the list of selected tags.\n */\n removeTag(tag) {\n const index = this.selected.indexOf(tag);\n if (index !== -1) {\n this.selected.splice(index, 1);\n\n // Look through the list of selected tags for any tags which have the tag\n // we just removed as their parent. We'll need to remove them too.\n if (this.attrs.requireParentTag) {\n this.selected.filter(t => t.parent() === tag).forEach(this.removeTag.bind(this));\n }\n if (this.attrs.onDeselect) {\n this.attrs.onDeselect(tag, this.selected);\n }\n }\n }\n toggleTag(tag) {\n // Won't happen, needed for type safety.\n if (!this.tags) return;\n if (this.selected.includes(tag)) {\n this.removeTag(tag);\n } else {\n this.addTag(tag);\n }\n if (this.filter()) {\n this.filter('');\n this.indexTag = this.tags[0];\n }\n this.onready();\n }\n\n /**\n * Gives human text instructions based on the current number of selected tags and set limits.\n */\n getInstruction(primaryCount, secondaryCount) {\n if (this.bypassReqs) {\n return '';\n }\n if (primaryCount < this.attrs.limits.min.primary) {\n const remaining = this.attrs.limits.min.primary - primaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_primary_placeholder', {\n count: remaining\n }));\n } else if (secondaryCount < this.attrs.limits.min.secondary) {\n const remaining = this.attrs.limits.min.secondary - secondaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_secondary_placeholder', {\n count: remaining\n }));\n } else if (this.selected.length < this.attrs.limits.min.total) {\n const remaining = this.attrs.limits.min.total - this.selected.length;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_tags_placeholder', {\n count: remaining\n }));\n }\n return '';\n }\n\n /**\n * Submit tag selection.\n */\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected);\n this.hide();\n }\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.indexTag && this.selected.includes(this.indexTag)) {\n if (this.selected.length) {\n // The DOM submit method doesn't emit a `submit event, so we\n // simulate a manual submission so our `onsubmit` logic is run.\n this.$('button[type=\"submit\"]').click();\n }\n } else if (this.indexTag) {\n this.getItem(this.indexTag)[0].dispatchEvent(new Event('click'));\n }\n }\n selectableItems() {\n return this.$('.TagSelectionModal-list > li');\n }\n getCurrentNumericIndex() {\n if (!this.indexTag) return -1;\n return this.selectableItems().index(this.getItem(this.indexTag));\n }\n getItem(selectedTag) {\n return this.selectableItems().filter(\"[data-index=\\\"\".concat(selectedTag.id(), \"\\\"]\"));\n }\n setIndex(index, scrollToItem) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n if (index < 0) {\n index = $items.length - 1;\n } else if (index >= $items.length) {\n index = 0;\n }\n const $item = $items.eq(index);\n this.indexTag = app.store.getById('tags', $item.attr('data-index'));\n m.redraw();\n if (scrollToItem && this.indexTag) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\n\n/**\n * Catch invalid limits provided to the tag selection modal.\n */\nfunction catchInvalidLimits(limits) {\n if (limits.min.primary > limits.max.primary) {\n throw new Error('The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.');\n }\n if (limits.min.secondary > limits.max.secondary) {\n throw new Error('The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.');\n }\n if (limits.min.total > limits.max.primary + limits.max.secondary) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.');\n }\n if (limits.max.total < limits.min.primary + limits.min.secondary) {\n throw new Error('The maximum number of tags allowed cannot be less than the minimum number of primary and secondary tags allowed together.');\n }\n if (limits.min.total > limits.max.total) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of tags allowed.');\n }\n}\nflarum.reg.add('flarum-tags', 'common/components/TagSelectionModal', TagSelectionModal);","import Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\n/**\n * @TODO move to core\n */\nexport default class ToggleButton extends Component {\n view(vnode) {\n const {\n className,\n isToggled,\n ...attrs\n } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n return m(Button, Object.assign({}, attrs, {\n icon: icon,\n className: classList([className, isToggled && 'Button--toggled'])\n }), vnode.children);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/ToggleButton', ToggleButton);"],"names":["TagSelectionModal","constructor","super","arguments","this","static","attrs","_attrs$limits$min$tot","_attrs$limits","_attrs$limits$min","_attrs$limits$min$pri","_attrs$limits2","_attrs$limits2$min","_attrs$limits$min$sec","_attrs$limits3","_attrs$limits3$min","_attrs$limits$max$tot","_attrs$limits4","_attrs$limits4$max","_attrs$limits$max$pri","_attrs$limits5","_attrs$limits5$max","_attrs$limits$max$sec","_attrs$limits6","_attrs$limits6$max","initAttrs","title","canSelect","allowResetting","limits","min","total","primary","secondary","max","Infinity","Error","catchInvalidLimits","oninit","vnode","navigator","onUp","setIndex","getCurrentNumericIndex","onDown","onSelect","select","bind","onRemove","selected","splice","length","then","tags","loading","selectableTags","selectedTags","map","addTag","indexTag","m","redraw","className","content","filter","toLowerCase","primaryCount","secondaryCount","getFilteredTags","inputWidth","Math","getInstruction","focused","onclick","$","focus","tag","removeTag","onready","placeholder","bidi","style","width","onkeydown","navigate","onfocus","onblur","type","disabled","meetsRequirements","icon","id","pinned","position","child","parent","colored","color","includes","active","onmouseover","toggleTag","name","description","allowBypassing","bypassReqs","isToggled","requireParentTag","isPrimary","push","index","indexOf","t","forEach","onDeselect","remaining","count","onsubmit","e","preventDefault","hide","metaKey","ctrlKey","click","getItem","dispatchEvent","Event","selectableItems","selectedTag","concat","scrollToItem","$items","$dropdown","$item","eq","attr","dropdownScroll","scrollTop","dropdownTop","offset","top","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","css","stop","animate","flarum","reg","add","ToggleButton","view","Object","assign","children"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"common/components/TagSelectionModal.js","mappings":"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","sources":["webpack://@flarum/tags/./src/common/components/TagSelectionModal.tsx","webpack://@flarum/tags/./src/forum/components/ToggleButton.js"],"sourcesContent":["import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport highlight from 'flarum/common/helpers/highlight';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Stream from 'flarum/common/utils/Stream';\nimport sortTags from '../utils/sortTags';\nimport tagLabel from '../helpers/tagLabel';\nimport tagIcon from '../helpers/tagIcon';\nimport ToggleButton from '../../forum/components/ToggleButton';\nexport default class TagSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"selected\", []);\n _defineProperty(this, \"bypassReqs\", false);\n _defineProperty(this, \"filter\", Stream(''));\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"navigator\", new KeyboardNavigatable());\n _defineProperty(this, \"indexTag\", void 0);\n }\n static initAttrs(attrs) {\n var _attrs$allowResetting, _attrs$limits$min$tot, _attrs$limits, _attrs$limits$min, _attrs$limits$min$pri, _attrs$limits2, _attrs$limits2$min, _attrs$limits$min$sec, _attrs$limits3, _attrs$limits3$min, _attrs$limits$max$tot, _attrs$limits4, _attrs$limits4$max, _attrs$limits$max$pri, _attrs$limits5, _attrs$limits5$max, _attrs$limits$max$sec, _attrs$limits6, _attrs$limits6$max;\n super.initAttrs(attrs);\n\n // Default values for optional attributes.\n attrs.title || (attrs.title = extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.title')));\n attrs.canSelect || (attrs.canSelect = () => true);\n (_attrs$allowResetting = attrs.allowResetting) != null ? _attrs$allowResetting : attrs.allowResetting = true;\n attrs.limits = {\n min: {\n total: (_attrs$limits$min$tot = (_attrs$limits = attrs.limits) == null ? void 0 : (_attrs$limits$min = _attrs$limits.min) == null ? void 0 : _attrs$limits$min.total) != null ? _attrs$limits$min$tot : -Infinity,\n primary: (_attrs$limits$min$pri = (_attrs$limits2 = attrs.limits) == null ? void 0 : (_attrs$limits2$min = _attrs$limits2.min) == null ? void 0 : _attrs$limits2$min.primary) != null ? _attrs$limits$min$pri : -Infinity,\n secondary: (_attrs$limits$min$sec = (_attrs$limits3 = attrs.limits) == null ? void 0 : (_attrs$limits3$min = _attrs$limits3.min) == null ? void 0 : _attrs$limits3$min.secondary) != null ? _attrs$limits$min$sec : -Infinity\n },\n max: {\n total: (_attrs$limits$max$tot = (_attrs$limits4 = attrs.limits) == null ? void 0 : (_attrs$limits4$max = _attrs$limits4.max) == null ? void 0 : _attrs$limits4$max.total) != null ? _attrs$limits$max$tot : Infinity,\n primary: (_attrs$limits$max$pri = (_attrs$limits5 = attrs.limits) == null ? void 0 : (_attrs$limits5$max = _attrs$limits5.max) == null ? void 0 : _attrs$limits5$max.primary) != null ? _attrs$limits$max$pri : Infinity,\n secondary: (_attrs$limits$max$sec = (_attrs$limits6 = attrs.limits) == null ? void 0 : (_attrs$limits6$max = _attrs$limits6.max) == null ? void 0 : _attrs$limits6$max.secondary) != null ? _attrs$limits$max$sec : Infinity\n }\n };\n\n // Prevent illogical limits from being provided.\n catchInvalidLimits(attrs.limits);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.select.bind(this)).onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n app.tagList.load(['parent']).then(tags => {\n this.loading = false;\n if (this.attrs.selectableTags) {\n tags = this.attrs.selectableTags(tags);\n }\n this.tags = sortTags(tags);\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n }\n this.indexTag = tags[0];\n m.redraw();\n });\n }\n className() {\n return classList('TagSelectionModal', this.attrs.className);\n }\n title() {\n return this.attrs.title;\n }\n content() {\n if (this.loading || !this.tags) {\n return m(LoadingIndicator, null);\n }\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n const tags = this.getFilteredTags();\n const inputWidth = Math.max(extractText(this.getInstruction(primaryCount, secondaryCount)).length, this.filter().length);\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form-input\"\n }, m(\"div\", {\n className: 'TagsInput FormControl ' + (this.focused ? 'focus' : ''),\n onclick: () => this.$('.TagsInput input').focus()\n }, m(\"span\", {\n className: \"TagsInput-selected\"\n }, this.selected.map(tag => m(\"span\", {\n className: \"TagsInput-tag\",\n onclick: () => {\n this.removeTag(tag);\n this.onready();\n }\n }, tagLabel(tag)))), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(this.getInstruction(primaryCount, secondaryCount)),\n bidi: this.filter,\n style: {\n width: inputWidth + 'ch'\n },\n onkeydown: this.navigator.navigate.bind(this.navigator),\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false\n }))), m(\"div\", {\n className: \"TagSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(primaryCount, secondaryCount),\n icon: \"fas fa-check\"\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.submit_button'))))), m(\"div\", {\n className: \"Modal-footer\"\n }, m(\"ul\", {\n className: \"TagSelectionModal-list SelectTagList\"\n }, tags.map(tag => m(\"li\", {\n \"data-index\": tag.id(),\n className: classList('SelectTagListItem', {\n pinned: tag.position() !== null,\n child: !!tag.parent(),\n colored: !!tag.color(),\n selected: this.selected.includes(tag),\n active: this.indexTag === tag\n }),\n style: {\n color: tag.color()\n },\n onmouseover: () => this.indexTag = tag,\n onclick: this.toggleTag.bind(this, tag)\n }, m(\"i\", {\n className: \"SelectTagListItem-icon\"\n }, tagIcon(tag, {\n className: 'SelectTagListItem-tagIcon'\n }), m(\"i\", {\n className: \"icon TagIcon fas fa-check SelectTagListItem-checkIcon\"\n })), m(\"span\", {\n className: \"SelectTagListItem-name\"\n }, highlight(tag.name(), filter)), tag.description() ? m(\"span\", {\n className: \"SelectTagListItem-description\"\n }, tag.description()) : ''))), this.attrs.limits.allowBypassing && m(\"div\", {\n className: \"TagSelectionModal-controls\"\n }, m(ToggleButton, {\n className: \"Button\",\n onclick: () => this.bypassReqs = !this.bypassReqs,\n isToggled: this.bypassReqs\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.bypass_requirements'))))];\n }\n\n /**\n * Filters the available tags on every state change.\n */\n getFilteredTags() {\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n let tags = this.tags;\n if (this.attrs.requireParentTag) {\n // Filter out all child tags whose parents have not been selected. This\n // makes it impossible to select a child if its parent hasn't been selected.\n tags = tags.filter(tag => {\n const parent = tag.parent();\n return parent !== null && (parent === false || this.selected.includes(parent));\n });\n }\n if (!this.bypassReqs) {\n // If we reached the total maximum number of tags, we can't select anymore.\n if (this.selected.length >= this.attrs.limits.max.total) {\n tags = tags.filter(tag => this.selected.includes(tag));\n }\n // If the number of selected primary/secondary tags is at the maximum, then\n // we'll filter out all other tags of that type.\n else {\n if (primaryCount >= this.attrs.limits.max.primary) {\n tags = tags.filter(tag => !tag.isPrimaryParent() || this.selected.includes(tag));\n }\n if (secondaryCount >= this.attrs.limits.max.secondary) {\n tags = tags.filter(tag => tag.isPrimaryParent() || this.selected.includes(tag));\n }\n }\n }\n\n // If the user has entered text in the filter input, then filter by tags\n // whose name matches what they've entered.\n if (filter) {\n tags = tags.filter(tag => tag.name().toLowerCase().includes(filter));\n }\n if (!this.indexTag || !tags.includes(this.indexTag)) this.indexTag = tags[0];\n return tags;\n }\n\n /**\n * Counts the number of selected primary tags.\n */\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimaryParent()).length;\n }\n\n /**\n * Counts the number of selected secondary tags.\n */\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimaryParent()).length;\n }\n\n /**\n * Validates the number of selected primary/secondary tags against the set min max limits.\n */\n meetsRequirements(primaryCount, secondaryCount) {\n if (this.bypassReqs || this.attrs.allowResetting && this.selected.length === 0) {\n return true;\n }\n if (this.selected.length < this.attrs.limits.min.total) {\n return false;\n }\n return primaryCount >= this.attrs.limits.min.primary && secondaryCount >= this.attrs.limits.min.secondary;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n */\n addTag(tag) {\n if (!tag || !this.attrs.canSelect(tag)) return;\n if (this.attrs.onSelect) {\n this.attrs.onSelect(tag, this.selected);\n }\n\n // If this tag has a parent, we'll also need to add the parent tag to the\n // selected list if it's not already in there.\n if (this.attrs.requireParentTag) {\n const parent = tag.parent();\n if (parent && !this.selected.includes(parent)) {\n this.selected.push(parent);\n }\n }\n if (!this.selected.includes(tag)) {\n this.selected.push(tag);\n }\n }\n\n /**\n * Remove the given tag from the list of selected tags.\n */\n removeTag(tag) {\n const index = this.selected.indexOf(tag);\n if (index !== -1) {\n this.selected.splice(index, 1);\n\n // Look through the list of selected tags for any tags which have the tag\n // we just removed as their parent. We'll need to remove them too.\n if (this.attrs.requireParentTag) {\n this.selected.filter(t => t.parent() === tag).forEach(this.removeTag.bind(this));\n }\n if (this.attrs.onDeselect) {\n this.attrs.onDeselect(tag, this.selected);\n }\n }\n }\n toggleTag(tag) {\n // Won't happen, needed for type safety.\n if (!this.tags) return;\n if (this.selected.includes(tag)) {\n this.removeTag(tag);\n } else {\n this.addTag(tag);\n }\n if (this.filter()) {\n this.filter('');\n this.indexTag = this.tags[0];\n }\n this.onready();\n }\n\n /**\n * Gives human text instructions based on the current number of selected tags and set limits.\n */\n getInstruction(primaryCount, secondaryCount) {\n if (this.bypassReqs) {\n return '';\n }\n if (primaryCount < this.attrs.limits.min.primary) {\n const remaining = this.attrs.limits.min.primary - primaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_primary_placeholder', {\n count: remaining\n }));\n } else if (secondaryCount < this.attrs.limits.min.secondary) {\n const remaining = this.attrs.limits.min.secondary - secondaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_secondary_placeholder', {\n count: remaining\n }));\n } else if (this.selected.length < this.attrs.limits.min.total) {\n const remaining = this.attrs.limits.min.total - this.selected.length;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_tags_placeholder', {\n count: remaining\n }));\n }\n return '';\n }\n\n /**\n * Submit tag selection.\n */\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected);\n this.hide();\n }\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.indexTag && this.selected.includes(this.indexTag)) {\n if (this.selected.length) {\n // The DOM submit method doesn't emit a `submit event, so we\n // simulate a manual submission so our `onsubmit` logic is run.\n this.$('button[type=\"submit\"]').click();\n }\n } else if (this.indexTag) {\n this.getItem(this.indexTag)[0].dispatchEvent(new Event('click'));\n }\n }\n selectableItems() {\n return this.$('.TagSelectionModal-list > li');\n }\n getCurrentNumericIndex() {\n if (!this.indexTag) return -1;\n return this.selectableItems().index(this.getItem(this.indexTag));\n }\n getItem(selectedTag) {\n return this.selectableItems().filter(\"[data-index=\\\"\".concat(selectedTag.id(), \"\\\"]\"));\n }\n setIndex(index, scrollToItem) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n if (index < 0) {\n index = $items.length - 1;\n } else if (index >= $items.length) {\n index = 0;\n }\n const $item = $items.eq(index);\n this.indexTag = app.store.getById('tags', $item.attr('data-index'));\n m.redraw();\n if (scrollToItem && this.indexTag) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\n\n/**\n * Catch invalid limits provided to the tag selection modal.\n */\nfunction catchInvalidLimits(limits) {\n if (limits.min.primary > limits.max.primary) {\n throw new Error('The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.');\n }\n if (limits.min.secondary > limits.max.secondary) {\n throw new Error('The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.');\n }\n if (limits.min.total > limits.max.primary + limits.max.secondary) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.');\n }\n if (limits.max.total < limits.min.primary + limits.min.secondary) {\n throw new Error('The maximum number of tags allowed cannot be less than the minimum number of primary and secondary tags allowed together.');\n }\n if (limits.min.total > limits.max.total) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of tags allowed.');\n }\n}\nflarum.reg.add('flarum-tags', 'common/components/TagSelectionModal', TagSelectionModal);","import Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\n/**\n * @TODO move to core\n */\nexport default class ToggleButton extends Component {\n view(vnode) {\n const {\n className,\n isToggled,\n ...attrs\n } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n return m(Button, Object.assign({}, attrs, {\n icon: icon,\n className: classList([className, isToggled && 'Button--toggled'])\n }), vnode.children);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/ToggleButton', ToggleButton);"],"names":["TagSelectionModal","constructor","super","arguments","this","static","attrs","_attrs$limits$min$tot","_attrs$limits","_attrs$limits$min","_attrs$limits$min$pri","_attrs$limits2","_attrs$limits2$min","_attrs$limits$min$sec","_attrs$limits3","_attrs$limits3$min","_attrs$limits$max$tot","_attrs$limits4","_attrs$limits4$max","_attrs$limits$max$pri","_attrs$limits5","_attrs$limits5$max","_attrs$limits$max$sec","_attrs$limits6","_attrs$limits6$max","initAttrs","title","canSelect","allowResetting","limits","min","total","primary","secondary","max","Infinity","Error","catchInvalidLimits","oninit","vnode","navigator","onUp","setIndex","getCurrentNumericIndex","onDown","onSelect","select","bind","onRemove","selected","splice","length","then","tags","loading","selectableTags","selectedTags","map","addTag","indexTag","m","redraw","className","content","filter","toLowerCase","primaryCount","secondaryCount","getFilteredTags","inputWidth","Math","getInstruction","focused","onclick","$","focus","tag","removeTag","onready","placeholder","bidi","style","width","onkeydown","navigate","onfocus","onblur","type","disabled","meetsRequirements","icon","id","pinned","position","child","parent","colored","color","includes","active","onmouseover","toggleTag","name","description","allowBypassing","bypassReqs","isToggled","requireParentTag","isPrimaryParent","push","index","indexOf","t","forEach","onDeselect","remaining","count","onsubmit","e","preventDefault","hide","metaKey","ctrlKey","click","getItem","dispatchEvent","Event","selectableItems","selectedTag","concat","scrollToItem","$items","$dropdown","$item","eq","attr","dropdownScroll","scrollTop","dropdownTop","offset","top","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","css","stop","animate","flarum","reg","add","ToggleButton","view","Object","assign","children"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/tags/js/dist/forum.js b/extensions/tags/js/dist/forum.js index 87cb9afce..f1eec812e 100644 --- a/extensions/tags/js/dist/forum.js +++ b/extensions/tags/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var t,e,s={974:(t,e,s)=>{"use strict";s.d(e,{Z:()=>o});var r=s(836),a=s.n(r);function o(t,e,s){void 0===e&&(e={}),void 0===s&&(s={});const r=t&&t.icon(),{useColor:o=!0}=s;return e.className=a()([e.className,"icon text-colored",r?t.icon():"TagIcon"]),t&&o?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),r?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",o)},924:(t,e,s)=>{"use strict";s.d(e,{Z:()=>g});var r=s(780),a=s.n(r),o=s(678),n=s.n(o),i=s(836),l=s.n(i),c=s(679),u=s.n(c),d=s(974);function g(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const s=a()(e,"link"),r=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const r=t.color();r&&(e.style["--tag-bg"]=r,e.className=l()(e.className,"colored",u()(r))),s&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(s?n():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.Z)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},r)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",g)},270:()=>{},648:(t,e,s)=>{"use strict";function r(t){return t.slice(0).sort(((t,e)=>{const s=t.position(),r=e.position();if(null===s&&null===r)return e.discussionCount()-t.discussionCount();if(null===r)return-1;if(null===s)return 1;const a=t.parent(),o=e.parent();return a===o?s-r:a&&o?a.position()-o.position():a?a===e?1:a.position()-r:o?o===t?-1:s-o.position():0}))}s.d(e,{Z:()=>r}),flarum.reg.add("flarum-tags","common/utils/sortTags",r)},664:(t,e,s)=>{"use strict";s.d(e,{l:()=>wt});var r=s(892),a=s.n(r),o=s(905),n=s(351),i=s.n(n);class l{constructor(){(0,o.Z)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(i().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),null!=this.loadedIncludes||(this.loadedIncludes=new Set),i().store.find("tags",{include:t.join(",")}).then((e=>{const s=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),s}))}}flarum.reg.add("flarum-tags","common/states/TagListState",l);const c=flarum.reg.get("core","common/extend"),u=flarum.reg.get("core","forum/components/IndexSidebar");var d=s.n(u);const g=flarum.reg.get("core","common/components/Separator");var f=s.n(g);const p=flarum.reg.get("core","common/components/LinkButton");var h=s.n(p),b=s(678),v=s.n(b),T=s(836),y=s.n(T),x=s(974);class w extends(h()){view(t){const e=this.attrs.model,s=e&&e.description(),r=y()("TagLinkButton hasIcon",{child:e.isChild()},this.attrs.className);return m(v(),{className:r,href:this.attrs.route,style:e?{"--color":e.color()}:void 0,title:s||void 0},(0,x.Z)(e,{className:"Button-icon"}),m("span",{className:"Button-label"},e?e.name():app.translator.trans("flarum-tags.forum.index.untagged_link")))}static initAttrs(t){super.initAttrs(t);const e=t.model;t.params.tags=e?e.slug():"untagged",t.route=app.route("tag",t.params)}}flarum.reg.add("flarum-tags","forum/components/TagLinkButton",w);const k=flarum.reg.get("core","common/components/Page");var N=s.n(k);const C=flarum.reg.get("core","forum/components/PageStructure");var _=s.n(C);const S=flarum.reg.get("core","forum/components/WelcomeHero");var P=s.n(S),D=s(149),A=s.n(D);const L=flarum.reg.get("core","common/utils/ItemList");var I=s.n(L);const Z=flarum.reg.get("core","common/helpers/humanTime");var j=s.n(Z),M=s(679),E=s.n(M),V=s(596),B=s.n(V),H=s(924),O=s(648);class R extends(N()){constructor(){super(...arguments),(0,o.Z)(this,"tags",void 0),(0,o.Z)(this,"loading",void 0)}oninit(t){super.oninit(t),a().history.push("tags",B()(a().translator.trans("flarum-tags.forum.header.back_to_tags_tooltip"))),this.tags=[];const e=a().preloadedApiDocument();e?this.tags=(0,O.Z)(e.filter((t=>!t.isChild()))):(this.loading=!0,a().tagList.load(["children","lastPostedDiscussion","parent"]).then((()=>{this.tags=(0,O.Z)(a().store.all("tags").filter((t=>!t.isChild()))),this.loading=!1,m.redraw()})))}oncreate(t){super.oncreate(t),a().setTitle(B()(a().translator.trans("flarum-tags.forum.all_tags.meta_title_text"))),a().setTitleCount(0)}view(){return m(_(),{className:"TagsPage",hero:this.hero.bind(this),sidebar:this.sidebar.bind(this)},this.contentItems().toArray())}contentItems(){const t=new(I());if(this.loading)t.add("loading",m(A(),null));else{const e=this.tags.filter((t=>null!==t.position())),s=this.tags.filter((t=>null===t.position()));t.add("tagTiles",this.tagTileListView(e),100),s.length&&t.add("cloud",this.cloudView(s),10)}return t}hero(){return m(P(),null)}sidebar(){return m(d(),null)}tagTileListView(t){return m("ul",{className:"TagTiles"},t.map(this.tagTileView.bind(this)))}tagTileView(t){const e=t.lastPostedDiscussion(),s=(0,O.Z)(t.children()||[]);return m("li",{className:y()("TagTile",{colored:t.color()},E()(t.color())),style:{"--tag-bg":t.color()}},m(v(),{className:"TagTile-info",href:a().route.tag(t)},m("div",{className:"TagTile-heading"},t.icon()&&(0,x.Z)(t,{},{useColor:!1}),m("h3",{className:"TagTile-name"},t.name())),m("p",{className:"TagTile-description"},t.description()),!!s&&m("div",{className:"TagTile-children"},s.map((t=>[m(v(),{href:a().route.tag(t)},t.name())," "])))),e?m(v(),{className:"TagTile-lastPostedDiscussion",href:a().route.discussion(e,e.lastPostNumber())},m("span",{className:"TagTile-lastPostedDiscussion-title"},e.title()),j()(e.lastPostedAt())):m("span",{className:"TagTile-lastPostedDiscussion"}))}cloudView(t){return m("div",{className:"TagCloud"},t.map((t=>[(0,H.Z)(t,{link:!0})," "])))}}flarum.reg.add("flarum-tags","forum/components/TagsPage",R);const q=flarum.reg.get("core","forum/components/IndexPage");var G=s.n(q);const F=flarum.reg.get("core","forum/states/DiscussionListState");var K=s.n(F);const $=flarum.reg.get("core","forum/states/GlobalSearchState");var U=s.n($),z=s(433),W=s.n(z);class J extends(W()){view(){const t=this.attrs.model,e=t.color();return m("header",{className:y()("Hero","TagHero",{"TagHero--colored":e,[E()(e)]:e}),style:e?{"--hero-bg":e}:void 0},m("div",{className:"container"},m("div",{className:"containerNarrow"},m("h1",{className:"Hero-title"},t.icon()&&(0,x.Z)(t,{},{useColor:!1})," ",t.name()),m("div",{className:"Hero-subtitle"},t.description()))))}}flarum.reg.add("flarum-tags","forum/components/TagHero",J);const Q=t=>a().store.all("tags").find((e=>0===e.slug().localeCompare(t,void 0,{sensitivity:"base"}))),X=flarum.reg.get("core","forum/components/DiscussionListItem");var Y=s.n(X);const tt=flarum.reg.get("core","forum/components/DiscussionHero");var et=s.n(tt);function st(t,e){void 0===e&&(e={});const s=[],{link:r,...a}=e;return a.className=y()("TagsLabel",a.className),t?(0,O.Z)(t).forEach((e=>{(e||1===t.length)&&s.push((0,H.Z)(e,{link:r}))})):s.push((0,H.Z)()),m("span",a,s)}s(780),flarum.reg.add("flarum-tags","common/helpers/tagsLabel",st);const rt=flarum.reg.get("core","forum/utils/DiscussionControls");var at=s.n(rt),ot=s(645),nt=s.n(ot);flarum.reg.addChunkModule("642","884","flarum-tags","forum/components/TagDiscussionModal"),flarum.reg.addChunkModule("642","884","flarum-tags","/home/runner/work/framework/framework/extensions/tags/js/src/forum/components/TagDiscussionModal.tsx"),flarum.reg.addChunkModule("642","884","flarum-tags","/home/runner/work/framework/framework/extensions/tags/js/src/common/components/TagSelectionModal.tsx"),flarum.reg.addChunkModule("642","884","flarum-tags","/home/runner/work/framework/framework/extensions/tags/js/src/forum/components/ToggleButton.js");var it=s(490);const lt=flarum.reg.get("core","common/extenders");var ct=s.n(lt);const ut=flarum.reg.get("core","common/models/Discussion");var mt=s.n(ut);const dt=flarum.reg.get("core","forum/components/EventPost");var gt=s.n(dt);class ft extends(gt()){static initAttrs(t){super.initAttrs(t);const e=t.post.content()[0],s=t.post.content()[1];function r(t,e){return t.filter((t=>-1===e.indexOf(t))).map((t=>app.store.getById("tags",t)))}t.tagsAdded=r(s,e),t.tagsRemoved=r(e,s)}icon(){return"fas fa-tag"}descriptionKey(){return this.attrs.tagsAdded.length?this.attrs.tagsRemoved.length?"flarum-tags.forum.post_stream.added_and_removed_tags_text":"flarum-tags.forum.post_stream.added_tags_text":"flarum-tags.forum.post_stream.removed_tags_text"}descriptionData(){const t={};return this.attrs.tagsAdded.length&&(t.tagsAdded=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:st(this.attrs.tagsAdded,{link:!0}),count:this.attrs.tagsAdded.length})),this.attrs.tagsRemoved.length&&(t.tagsRemoved=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:st(this.attrs.tagsRemoved,{link:!0}),count:this.attrs.tagsRemoved.length})),t}}flarum.reg.add("flarum-tags","forum/components/DiscussionTaggedPost",ft);const pt=flarum.reg.get("core","common/utils/computed");var ht=s.n(pt);const bt=flarum.reg.get("core","common/Model");var vt=s.n(bt);class Tt extends(vt()){name(){return vt().attribute("name").call(this)}slug(){return vt().attribute("slug").call(this)}description(){return vt().attribute("description").call(this)}color(){return vt().attribute("color").call(this)}backgroundUrl(){return vt().attribute("backgroundUrl").call(this)}backgroundMode(){return vt().attribute("backgroundMode").call(this)}icon(){return vt().attribute("icon").call(this)}position(){return vt().attribute("position").call(this)}parent(){return vt().hasOne("parent").call(this)}children(){return vt().hasMany("children").call(this)}defaultSort(){return vt().attribute("defaultSort").call(this)}isChild(){return vt().attribute("isChild").call(this)}isHidden(){return vt().attribute("isHidden").call(this)}discussionCount(){return vt().attribute("discussionCount").call(this)}lastPostedAt(){return vt().attribute("lastPostedAt",vt().transformDate).call(this)}lastPostedDiscussion(){return vt().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return vt().attribute("isRestricted").call(this)}canStartDiscussion(){return vt().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return vt().attribute("canAddToDiscussion").call(this)}isPrimary(){return ht()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",Tt);const yt=flarum.reg.get("core","common/query/IGambit");class xt extends yt.KeyValueGambit{constructor(){super(...arguments),(0,o.Z)(this,"predicates",!0)}key(){return i().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return i().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let s=[];return Array.isArray(t)?(s=t.map((t=>this.fromFilter(t.toString(),e))),s.join(" ")):"".concat(e?"-":"").concat(this.key(),":").concat(this.filterValueToGambitValue(t))}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",xt);const wt=[(new(ct().Store)).add("tags",Tt),(new(ct().Search)).gambit("discussions",xt),(new(ct().Routes)).add("tags","/tags",R).add("tag","/t/:tags",G()).helper("tag",(t=>a().route("tag",{tags:t.slug()}))),(new(ct().PostTypes)).add("discussionTagged",ft),new(ct().Model)(mt()).hasMany("tags").attribute("canTag")];a().initializers.add("flarum-tags",(function(){a().tagList=new l,(0,c.extend)(d().prototype,"navItems",(function(t){if(t.add("tags",m(h(),{icon:"fas fa-th-large",href:a().route("tags")},a().translator.trans("flarum-tags.forum.index.tags_link")),-10),a().current.matches(R))return;t.add("separator",m(f(),null),-12);const e=a().search.state.stickyParams(),s=a().store.all("tags"),r=a().currentTag(),o=s=>{let a=r===s;!a&&r&&(a=r.parent()===s),t.add("tag"+s.id(),m(w,{model:s,params:e,active:a},null==s?void 0:s.name()),-14)};(0,O.Z)(s).filter((t=>null!==t.position()&&(!t.isChild()||r&&(t.parent()===r||t.parent()===r.parent())))).forEach(o);const n=s.filter((t=>null===t.position())).sort(((t,e)=>e.discussionCount()-t.discussionCount()));n.splice(0,3).forEach(o),n.length&&t.add("moreTags",m(h(),{href:a().route("tags")},a().translator.trans("flarum-tags.forum.index.more_link")),-16)})),a().currentTag=function(t){if(this.currentActiveTag&&!t)return this.currentActiveTag;const e=this.search.state.params().tags;let s=null;if(e&&(s=Q(e)),e&&!s||s&&!s.isChild()&&!s.children()){if(this.currentTagLoading)return;this.currentTagLoading=!0,this.store.find("tags",e,{include:"children,children.parent,parent,state"}).then((()=>{this.currentActiveTag=Q(e),m.redraw()})).finally((()=>{this.currentTagLoading=!1}))}if(s)return this.currentActiveTag=s,this.currentActiveTag;this.currentActiveTag=void 0},(0,c.extend)(G().prototype,"view",(function(t){a().currentTag(!0)})),(0,c.override)(G().prototype,"hero",(function(t){const e=a().currentTag();return e?m(J,{model:e}):t()})),(0,c.extend)(G().prototype,"view",(function(t){const e=a().currentTag();e&&(t.attrs.className+=" IndexPage--tag"+e.id())})),(0,c.extend)(G().prototype,"setTitle",(function(){const t=a().currentTag();t&&a().setTitle(t.name())})),(0,c.extend)(d().prototype,"items",(function(t){const e=a().currentTag();if(e){const s=e.color(),r=e.canStartDiscussion()||!a().session.user,o=t.get("newDiscussion");s&&(o.attrs.className=y()([o.attrs.className,"Button--tagColored",E()(s)]),o.attrs.style={"--color":s}),o.attrs.disabled=!r,o.children=a().translator.trans(r?"core.forum.index.start_discussion_button":"core.forum.index.cannot_start_discussion_button")}})),(0,c.extend)(U().prototype,"params",(function(t){t.tags=m.route.param("tags")})),(0,c.extend)(K().prototype,"requestParams",(function(t){var e;"string"==typeof t.include?t.include=[t.include]:null==(e=t.include)||e.push("tags","tags.parent"),this.params.tags&&(t.filter||(t.filter={}),t.filter.tag=this.params.tags)})),(0,c.extend)(Y().prototype,"infoItems",(function(t){const e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",st(e),10)})),(0,c.extend)(et().prototype,"view",(function(t){const e=(0,O.Z)(this.attrs.discussion.tags());if(e&&e.length){const s=e[0].color();s&&(t.attrs.style={"--hero-bg":s},t.attrs.className=y()(t.attrs.className,"DiscussionHero--colored",E()(s)))}})),(0,c.extend)(et().prototype,"items",(function(t){const e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",st(e,{link:!0}),5)})),(0,c.extend)(at(),"moderationControls",(function(t,e){e.canTag()&&t.add("tags",m(nt(),{icon:"fas fa-tag",onclick:()=>app.modal.show((()=>s.e(642).then(s.bind(s,884))),{discussion:e})},app.translator.trans("flarum-tags.forum.discussion_controls.edit_tags_button")))})),(0,c.extend)(d().prototype,"newDiscussionAction",(function(t){const e=a().currentTag();if(e){const s=e.parent(),r=s?[s,e]:[e];t.then((t=>t.fields.tags=r))}else a().composer.fields.tags=[]})),(0,c.extend)("flarum/forum/components/DiscussionComposer","oninit",(function(){a().tagList.load(["parent"]).then((()=>m.redraw())),this.constructor.prototype.chooseTags=function(){(0,it.Z)().length&&a().modal.show((()=>s.e(642).then(s.bind(s,884))),{selectedTags:(this.composer.fields.tags||[]).slice(0),onsubmit:t=>{this.composer.fields.tags=t,this.$("textarea").focus()}})}})),(0,c.extend)("flarum/forum/components/DiscussionComposer","headerItems",(function(t){const e=this.composer.fields.tags||[],s=(0,it.Z)();t.add("tags",m("a",{className:y()(["DiscussionComposer-changeTags",!s.length&&"disabled"]),onclick:this.chooseTags.bind(this)},e.length?st(e):m("span",{className:"TagLabel untagged"},a().translator.trans("flarum-tags.forum.composer_discussion.choose_tags_link"))),10)})),(0,c.override)("flarum/forum/components/DiscussionComposer","onsubmit",(function(t){const e=this.composer.fields.tags||[],r=e.filter((t=>null!==t.position()&&!t.isChild())),o=e.filter((t=>null===t.position())),n=(0,it.Z)(),i=parseInt(a().forum.attribute("minPrimaryTags")),l=parseInt(a().forum.attribute("minSecondaryTags")),c=parseInt(a().forum.attribute("maxPrimaryTags")),u=parseInt(a().forum.attribute("maxSecondaryTags"));(!e.length&&0!==c&&0!==u||r.lengths.e(642).then(s.bind(s,884))),{selectedTags:e,onsubmit:e=>{this.composer.fields.tags=e,t()}}):t()})),(0,c.extend)("flarum/forum/components/DiscussionComposer","data",(function(t){t.relationships=t.relationships||{},t.relationships.tags=this.composer.fields.tags}))}))},490:(t,e,s)=>{"use strict";function r(t){let e=app.store.all("tags");if(t){const s=t.tags()||[];e=e.filter((t=>t.canAddToDiscussion()||s.includes(t)))}else e=e.filter((t=>t.canStartDiscussion()));return e}s.d(e,{Z:()=>r}),flarum.reg.add("flarum-tags","forum/utils/getSelectableTags",r)},433:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},351:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},645:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},44:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},678:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},149:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},291:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},679:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},657:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},636:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},836:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},780:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},596:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},892:t=>{"use strict";t.exports=flarum.reg.get("core","forum/app")},232:t=>{"use strict";t.exports=flarum.reg.get("core","forum/components/DiscussionPage")},905:(t,e,s)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function a(t,e,s){return(e=function(t){var e=function(t,e){if("object"!==r(t)||null===t)return t;var s=t[Symbol.toPrimitive];if(void 0!==s){var a=s.call(t,e);if("object"!==r(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===r(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}s.d(e,{Z:()=>a})}},r={};function a(t){var e=r[t];if(void 0!==e)return e.exports;var o=r[t]={exports:{}};return s[t](o,o.exports,a),o.exports}a.m=s,a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var s in e)a.o(e,s)&&!a.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},a.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,s)=>(a.f[s](t,e),e)),[])),a.u=t=>"forum/components/TagDiscussionModal.js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",a.l=(s,r,o,n)=>{if(t[s])t[s].push(r);else{var i,l;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u{i.onerror=i.onload=null,clearTimeout(g);var a=t[s];if(delete t[s],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach((t=>t(r))),e)return e(r)},g=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),l&&document.head.appendChild(i)}},a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var s=e.getElementsByTagName("script");s.length&&(t=s[s.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t})(),a.f.compat=(t,e)=>{const s=a.l;a.l=flarum.reg.loadChunk.bind(flarum.reg,s)},(()=>{var t={315:0};a.f.j=(e,s)=>{var r=a.o(t,e)?t[e]:void 0;if(0!==r)if(r)s.push(r[2]);else{var o=new Promise(((s,a)=>r=t[e]=[s,a]));s.push(r[2]=o);var n=a.p+a.u(e),i=new Error;a.l(n,(s=>{if(a.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var o=s&&("load"===s.type?"missing":s.type),n=s&&s.target&&s.target.src;i.message="Loading chunk "+e+" failed.\n("+o+": "+n+")",i.name="ChunkLoadError",i.type=o,i.request=n,r[1](i)}}),"chunk-"+e,e)}};var e=(e,s)=>{var r,o,[n,i,l]=s,c=0;if(n.some((e=>0!==t[e]))){for(r in i)a.o(i,r)&&(a.m[r]=i[r]);l&&l(a)}for(e&&e(s);c{"use strict";a.r(o),a.d(o,{extend:()=>s.l});var t=a(270),e={};for(const s in t)"default"!==s&&(e[s]=()=>t[s]);a.d(o,e);var s=a(664)})(),module.exports=o})(); +(()=>{var t,e,s={974:(t,e,s)=>{"use strict";s.d(e,{Z:()=>o});var r=s(836),a=s.n(r);function o(t,e,s){void 0===e&&(e={}),void 0===s&&(s={});const r=t&&t.icon(),{useColor:o=!0}=s;return e.className=a()([e.className,"icon text-colored",r?t.icon():"TagIcon"]),t&&o?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),r?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",o)},924:(t,e,s)=>{"use strict";s.d(e,{Z:()=>g});var r=s(780),a=s.n(r),o=s(678),n=s.n(o),i=s(836),l=s.n(i),c=s(679),u=s.n(c),d=s(974);function g(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const s=a()(e,"link"),r=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const r=t.color();r&&(e.style["--tag-bg"]=r,e.className=l()(e.className,"colored",u()(r))),s&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(s?n():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.Z)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},r)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",g)},270:()=>{},648:(t,e,s)=>{"use strict";function r(t){return t.slice(0).sort(((t,e)=>{const s=t.position(),r=e.position();if(null===s&&null===r)return e.discussionCount()-t.discussionCount();if(null===r)return-1;if(null===s)return 1;const a=t.parent(),o=e.parent();return a===o?s-r:a&&o?a.position()-o.position():a?a===e?1:a.position()-r:o?o===t?-1:s-o.position():0}))}s.d(e,{Z:()=>r}),flarum.reg.add("flarum-tags","common/utils/sortTags",r)},664:(t,e,s)=>{"use strict";s.d(e,{l:()=>wt});var r=s(892),a=s.n(r),o=s(905),n=s(351),i=s.n(n);class l{constructor(){(0,o.Z)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(i().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),null!=this.loadedIncludes||(this.loadedIncludes=new Set),i().store.find("tags",{include:t.join(",")}).then((e=>{const s=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),s}))}}flarum.reg.add("flarum-tags","common/states/TagListState",l);const c=flarum.reg.get("core","common/extend"),u=flarum.reg.get("core","forum/components/IndexSidebar");var d=s.n(u);const g=flarum.reg.get("core","common/components/Separator");var f=s.n(g);const p=flarum.reg.get("core","common/components/LinkButton");var h=s.n(p),b=s(678),v=s.n(b),T=s(836),y=s.n(T),x=s(974);class w extends(h()){view(t){const e=this.attrs.model,s=e&&e.description(),r=y()("TagLinkButton hasIcon",{child:e.isChild()},this.attrs.className);return m(v(),{className:r,href:this.attrs.route,style:e?{"--color":e.color()}:void 0,title:s||void 0},(0,x.Z)(e,{className:"Button-icon"}),m("span",{className:"Button-label"},e?e.name():app.translator.trans("flarum-tags.forum.index.untagged_link")))}static initAttrs(t){super.initAttrs(t);const e=t.model;t.params.tags=e?e.slug():"untagged",t.route=app.route("tag",t.params)}}flarum.reg.add("flarum-tags","forum/components/TagLinkButton",w);const k=flarum.reg.get("core","common/components/Page");var N=s.n(k);const C=flarum.reg.get("core","forum/components/PageStructure");var _=s.n(C);const P=flarum.reg.get("core","forum/components/WelcomeHero");var S=s.n(P),D=s(149),A=s.n(D);const L=flarum.reg.get("core","common/utils/ItemList");var I=s.n(L);const Z=flarum.reg.get("core","common/helpers/humanTime");var j=s.n(Z),M=s(679),E=s.n(M),V=s(596),B=s.n(V),H=s(924),O=s(648);class R extends(N()){constructor(){super(...arguments),(0,o.Z)(this,"tags",void 0),(0,o.Z)(this,"loading",void 0)}oninit(t){super.oninit(t),a().history.push("tags",B()(a().translator.trans("flarum-tags.forum.header.back_to_tags_tooltip"))),this.tags=[];const e=a().preloadedApiDocument();e?this.tags=(0,O.Z)(e.filter((t=>!t.isChild()))):(this.loading=!0,a().tagList.load(["children","lastPostedDiscussion","parent"]).then((()=>{this.tags=(0,O.Z)(a().store.all("tags").filter((t=>!t.isChild()))),this.loading=!1,m.redraw()})))}oncreate(t){super.oncreate(t),a().setTitle(B()(a().translator.trans("flarum-tags.forum.all_tags.meta_title_text"))),a().setTitleCount(0)}view(){return m(_(),{className:"TagsPage",hero:this.hero.bind(this),sidebar:this.sidebar.bind(this)},this.contentItems().toArray())}contentItems(){const t=new(I());if(this.loading)t.add("loading",m(A(),null));else{const e=this.tags.filter((t=>null!==t.position())),s=this.tags.filter((t=>null===t.position()));t.add("tagTiles",this.tagTileListView(e),100),s.length&&t.add("cloud",this.cloudView(s),10)}return t}hero(){return m(S(),null)}sidebar(){return m(d(),null)}tagTileListView(t){return m("ul",{className:"TagTiles"},t.map(this.tagTileView.bind(this)))}tagTileView(t){const e=t.lastPostedDiscussion(),s=(0,O.Z)(t.children()||[]);return m("li",{className:y()("TagTile",{colored:t.color()},E()(t.color())),style:{"--tag-bg":t.color()}},m(v(),{className:"TagTile-info",href:a().route.tag(t)},m("div",{className:"TagTile-heading"},t.icon()&&(0,x.Z)(t,{},{useColor:!1}),m("h3",{className:"TagTile-name"},t.name())),m("p",{className:"TagTile-description"},t.description()),!!s&&m("div",{className:"TagTile-children"},s.map((t=>[m(v(),{href:a().route.tag(t)},t.name())," "])))),e?m(v(),{className:"TagTile-lastPostedDiscussion",href:a().route.discussion(e,e.lastPostNumber())},m("span",{className:"TagTile-lastPostedDiscussion-title"},e.title()),j()(e.lastPostedAt())):m("span",{className:"TagTile-lastPostedDiscussion"}))}cloudView(t){return m("div",{className:"TagCloud"},t.map((t=>[(0,H.Z)(t,{link:!0})," "])))}}flarum.reg.add("flarum-tags","forum/components/TagsPage",R);const q=flarum.reg.get("core","forum/components/IndexPage");var G=s.n(q);const F=flarum.reg.get("core","forum/states/DiscussionListState");var K=s.n(F);const $=flarum.reg.get("core","forum/states/GlobalSearchState");var U=s.n($),z=s(433),W=s.n(z);class J extends(W()){view(){const t=this.attrs.model,e=t.color();return m("header",{className:y()("Hero","TagHero",{"TagHero--colored":e,[E()(e)]:e}),style:e?{"--hero-bg":e}:void 0},m("div",{className:"container"},m("div",{className:"containerNarrow"},m("h1",{className:"Hero-title"},t.icon()&&(0,x.Z)(t,{},{useColor:!1})," ",t.name()),m("div",{className:"Hero-subtitle"},t.description()))))}}flarum.reg.add("flarum-tags","forum/components/TagHero",J);const Q=t=>a().store.all("tags").find((e=>0===e.slug().localeCompare(t,void 0,{sensitivity:"base"}))),X=flarum.reg.get("core","forum/components/DiscussionListItem");var Y=s.n(X);const tt=flarum.reg.get("core","forum/components/DiscussionHero");var et=s.n(tt);function st(t,e){void 0===e&&(e={});const s=[],{link:r,...a}=e;return a.className=y()("TagsLabel",a.className),t?(0,O.Z)(t).forEach((e=>{(e||1===t.length)&&s.push((0,H.Z)(e,{link:r}))})):s.push((0,H.Z)()),m("span",a,s)}s(780),flarum.reg.add("flarum-tags","common/helpers/tagsLabel",st);const rt=flarum.reg.get("core","forum/utils/DiscussionControls");var at=s.n(rt),ot=s(645),nt=s.n(ot);flarum.reg.addChunkModule("642","884","flarum-tags","forum/components/TagDiscussionModal"),flarum.reg.addChunkModule("642","884","flarum-tags","/home/runner/work/framework/framework/extensions/tags/js/src/forum/components/TagDiscussionModal.tsx"),flarum.reg.addChunkModule("642","884","flarum-tags","/home/runner/work/framework/framework/extensions/tags/js/src/common/components/TagSelectionModal.tsx"),flarum.reg.addChunkModule("642","884","flarum-tags","/home/runner/work/framework/framework/extensions/tags/js/src/forum/components/ToggleButton.js");var it=s(490);const lt=flarum.reg.get("core","common/extenders");var ct=s.n(lt);const ut=flarum.reg.get("core","common/models/Discussion");var mt=s.n(ut);const dt=flarum.reg.get("core","forum/components/EventPost");var gt=s.n(dt);class ft extends(gt()){static initAttrs(t){super.initAttrs(t);const e=t.post.content()[0],s=t.post.content()[1];function r(t,e){return t.filter((t=>-1===e.indexOf(t))).map((t=>app.store.getById("tags",t)))}t.tagsAdded=r(s,e),t.tagsRemoved=r(e,s)}icon(){return"fas fa-tag"}descriptionKey(){return this.attrs.tagsAdded.length?this.attrs.tagsRemoved.length?"flarum-tags.forum.post_stream.added_and_removed_tags_text":"flarum-tags.forum.post_stream.added_tags_text":"flarum-tags.forum.post_stream.removed_tags_text"}descriptionData(){const t={};return this.attrs.tagsAdded.length&&(t.tagsAdded=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:st(this.attrs.tagsAdded,{link:!0}),count:this.attrs.tagsAdded.length})),this.attrs.tagsRemoved.length&&(t.tagsRemoved=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:st(this.attrs.tagsRemoved,{link:!0}),count:this.attrs.tagsRemoved.length})),t}}flarum.reg.add("flarum-tags","forum/components/DiscussionTaggedPost",ft);const pt=flarum.reg.get("core","common/utils/computed");var ht=s.n(pt);const bt=flarum.reg.get("core","common/Model");var vt=s.n(bt);class Tt extends(vt()){name(){return vt().attribute("name").call(this)}slug(){return vt().attribute("slug").call(this)}description(){return vt().attribute("description").call(this)}color(){return vt().attribute("color").call(this)}backgroundUrl(){return vt().attribute("backgroundUrl").call(this)}backgroundMode(){return vt().attribute("backgroundMode").call(this)}icon(){return vt().attribute("icon").call(this)}position(){return vt().attribute("position").call(this)}parent(){return vt().hasOne("parent").call(this)}children(){return vt().hasMany("children").call(this)}defaultSort(){return vt().attribute("defaultSort").call(this)}isChild(){return vt().attribute("isChild").call(this)}isHidden(){return vt().attribute("isHidden").call(this)}isPrimary(){return vt().attribute("isPrimary").call(this)}discussionCount(){return vt().attribute("discussionCount").call(this)}lastPostedAt(){return vt().attribute("lastPostedAt",vt().transformDate).call(this)}lastPostedDiscussion(){return vt().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return vt().attribute("isRestricted").call(this)}canStartDiscussion(){return vt().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return vt().attribute("canAddToDiscussion").call(this)}isPrimaryParent(){return ht()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",Tt);const yt=flarum.reg.get("core","common/query/IGambit");class xt extends yt.KeyValueGambit{constructor(){super(...arguments),(0,o.Z)(this,"predicates",!0)}key(){return i().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return i().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let s=[];return Array.isArray(t)?(s=t.map((t=>this.fromFilter(t.toString(),e))),s.join(" ")):"".concat(e?"-":"").concat(this.key(),":").concat(this.filterValueToGambitValue(t))}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",xt);const wt=[(new(ct().Store)).add("tags",Tt),(new(ct().Search)).gambit("discussions",xt),(new(ct().Routes)).add("tags","/tags",R).add("tag","/t/:tags",G()).helper("tag",(t=>a().route("tag",{tags:t.slug()}))),(new(ct().PostTypes)).add("discussionTagged",ft),new(ct().Model)(mt()).hasMany("tags").attribute("canTag")];a().initializers.add("flarum-tags",(function(){a().tagList=new l,(0,c.extend)(d().prototype,"navItems",(function(t){if(t.add("tags",m(h(),{icon:"fas fa-th-large",href:a().route("tags")},a().translator.trans("flarum-tags.forum.index.tags_link")),-10),a().current.matches(R))return;t.add("separator",m(f(),null),-12);const e=a().search.state.stickyParams(),s=a().store.all("tags"),r=a().currentTag(),o=s=>{let a=r===s;!a&&r&&(a=r.parent()===s),t.add("tag"+s.id(),m(w,{model:s,params:e,active:a},null==s?void 0:s.name()),-14)};(0,O.Z)(s).filter((t=>null!==t.position()&&(!t.isChild()||r&&(t.parent()===r||t.parent()===r.parent())))).forEach(o);const n=s.filter((t=>null===t.position())).sort(((t,e)=>e.discussionCount()-t.discussionCount()));n.splice(0,3).forEach(o),n.length&&t.add("moreTags",m(h(),{href:a().route("tags")},a().translator.trans("flarum-tags.forum.index.more_link")),-16)})),a().currentTag=function(t){if(this.currentActiveTag&&!t)return this.currentActiveTag;const e=this.search.state.params().tags;let s=null;if(e&&(s=Q(e)),e&&!s||s&&!s.isChild()&&!s.children()){if(this.currentTagLoading)return;this.currentTagLoading=!0,this.store.find("tags",e,{include:"children,children.parent,parent"}).then((()=>{this.currentActiveTag=Q(e),m.redraw()})).finally((()=>{this.currentTagLoading=!1}))}if(s)return this.currentActiveTag=s,this.currentActiveTag;this.currentActiveTag=void 0},(0,c.extend)(G().prototype,"view",(function(t){a().currentTag(!0)})),(0,c.override)(G().prototype,"hero",(function(t){const e=a().currentTag();return e?m(J,{model:e}):t()})),(0,c.extend)(G().prototype,"view",(function(t){const e=a().currentTag();e&&(t.attrs.className+=" IndexPage--tag"+e.id())})),(0,c.extend)(G().prototype,"setTitle",(function(){const t=a().currentTag();t&&a().setTitle(t.name())})),(0,c.extend)(d().prototype,"items",(function(t){const e=a().currentTag();if(e){const s=e.color(),r=e.canStartDiscussion()||!a().session.user,o=t.get("newDiscussion");s&&(o.attrs.className=y()([o.attrs.className,"Button--tagColored",E()(s)]),o.attrs.style={"--color":s}),o.attrs.disabled=!r,o.children=a().translator.trans(r?"core.forum.index.start_discussion_button":"core.forum.index.cannot_start_discussion_button")}})),(0,c.extend)(U().prototype,"params",(function(t){t.tags=m.route.param("tags")})),(0,c.extend)(K().prototype,"requestParams",(function(t){var e;"string"==typeof t.include?t.include=[t.include]:null==(e=t.include)||e.push("tags","tags.parent"),this.params.tags&&(t.filter||(t.filter={}),t.filter.tag=this.params.tags)})),(0,c.extend)(Y().prototype,"infoItems",(function(t){const e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",st(e),10)})),(0,c.extend)(et().prototype,"view",(function(t){const e=(0,O.Z)(this.attrs.discussion.tags());if(e&&e.length){const s=e[0].color();s&&(t.attrs.style={"--hero-bg":s},t.attrs.className=y()(t.attrs.className,"DiscussionHero--colored",E()(s)))}})),(0,c.extend)(et().prototype,"items",(function(t){const e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",st(e,{link:!0}),5)})),(0,c.extend)(at(),"moderationControls",(function(t,e){e.canTag()&&t.add("tags",m(nt(),{icon:"fas fa-tag",onclick:()=>app.modal.show((()=>s.e(642).then(s.bind(s,884))),{discussion:e})},app.translator.trans("flarum-tags.forum.discussion_controls.edit_tags_button")))})),(0,c.extend)(d().prototype,"newDiscussionAction",(function(t){const e=a().currentTag();if(e){const s=e.parent(),r=s?[s,e]:[e];t.then((t=>t.fields.tags=r))}else a().composer.fields.tags=[]})),(0,c.extend)("flarum/forum/components/DiscussionComposer","oninit",(function(){a().tagList.load(["parent"]).then((()=>m.redraw())),this.constructor.prototype.chooseTags=function(){(0,it.Z)().length&&a().modal.show((()=>s.e(642).then(s.bind(s,884))),{selectedTags:(this.composer.fields.tags||[]).slice(0),onsubmit:t=>{this.composer.fields.tags=t,this.$("textarea").focus()}})}})),(0,c.extend)("flarum/forum/components/DiscussionComposer","headerItems",(function(t){const e=this.composer.fields.tags||[],s=(0,it.Z)();t.add("tags",m("a",{className:y()(["DiscussionComposer-changeTags",!s.length&&"disabled"]),onclick:this.chooseTags.bind(this)},e.length?st(e):m("span",{className:"TagLabel untagged"},a().translator.trans("flarum-tags.forum.composer_discussion.choose_tags_link"))),10)})),(0,c.override)("flarum/forum/components/DiscussionComposer","onsubmit",(function(t){const e=this.composer.fields.tags||[],r=e.filter((t=>null!==t.position()&&!t.isChild())),o=e.filter((t=>null===t.position())),n=(0,it.Z)(),i=parseInt(a().forum.attribute("minPrimaryTags")),l=parseInt(a().forum.attribute("minSecondaryTags")),c=parseInt(a().forum.attribute("maxPrimaryTags")),u=parseInt(a().forum.attribute("maxSecondaryTags"));(!e.length&&0!==c&&0!==u||r.lengths.e(642).then(s.bind(s,884))),{selectedTags:e,onsubmit:e=>{this.composer.fields.tags=e,t()}}):t()})),(0,c.extend)("flarum/forum/components/DiscussionComposer","data",(function(t){t.relationships=t.relationships||{},t.relationships.tags=this.composer.fields.tags}))}))},490:(t,e,s)=>{"use strict";function r(t){let e=app.store.all("tags");if(t){const s=t.tags()||[];e=e.filter((t=>t.canAddToDiscussion()||s.includes(t)))}else e=e.filter((t=>t.canStartDiscussion()));return e}s.d(e,{Z:()=>r}),flarum.reg.add("flarum-tags","forum/utils/getSelectableTags",r)},433:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},351:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},645:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},44:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},678:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},149:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},291:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},679:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},657:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},636:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},836:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},780:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},596:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},892:t=>{"use strict";t.exports=flarum.reg.get("core","forum/app")},232:t=>{"use strict";t.exports=flarum.reg.get("core","forum/components/DiscussionPage")},905:(t,e,s)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function a(t,e,s){return(e=function(t){var e=function(t,e){if("object"!==r(t)||null===t)return t;var s=t[Symbol.toPrimitive];if(void 0!==s){var a=s.call(t,e);if("object"!==r(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===r(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}s.d(e,{Z:()=>a})}},r={};function a(t){var e=r[t];if(void 0!==e)return e.exports;var o=r[t]={exports:{}};return s[t](o,o.exports,a),o.exports}a.m=s,a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var s in e)a.o(e,s)&&!a.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},a.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,s)=>(a.f[s](t,e),e)),[])),a.u=t=>"forum/components/TagDiscussionModal.js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",a.l=(s,r,o,n)=>{if(t[s])t[s].push(r);else{var i,l;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u{i.onerror=i.onload=null,clearTimeout(g);var a=t[s];if(delete t[s],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach((t=>t(r))),e)return e(r)},g=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),l&&document.head.appendChild(i)}},a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var s=e.getElementsByTagName("script");s.length&&(t=s[s.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t})(),a.f.compat=(t,e)=>{const s=a.l;a.l=flarum.reg.loadChunk.bind(flarum.reg,s)},(()=>{var t={315:0};a.f.j=(e,s)=>{var r=a.o(t,e)?t[e]:void 0;if(0!==r)if(r)s.push(r[2]);else{var o=new Promise(((s,a)=>r=t[e]=[s,a]));s.push(r[2]=o);var n=a.p+a.u(e),i=new Error;a.l(n,(s=>{if(a.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var o=s&&("load"===s.type?"missing":s.type),n=s&&s.target&&s.target.src;i.message="Loading chunk "+e+" failed.\n("+o+": "+n+")",i.name="ChunkLoadError",i.type=o,i.request=n,r[1](i)}}),"chunk-"+e,e)}};var e=(e,s)=>{var r,o,[n,i,l]=s,c=0;if(n.some((e=>0!==t[e]))){for(r in i)a.o(i,r)&&(a.m[r]=i[r]);l&&l(a)}for(e&&e(s);c{"use strict";a.r(o),a.d(o,{extend:()=>s.l});var t=a(270),e={};for(const s in t)"default"!==s&&(e[s]=()=>t[s]);a.d(o,e);var s=a(664)})(),module.exports=o})(); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/extensions/tags/js/dist/forum.js.map b/extensions/tags/js/dist/forum.js.map index e31cb97fd..cd35ca514 100644 --- a/extensions/tags/js/dist/forum.js.map +++ b/extensions/tags/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"UAAIA,EACAC,E,qECAW,SAASC,EAAQC,EAAKC,EAAOC,QAC5B,IAAVD,IACFA,EAAQ,CAAC,QAEM,IAAbC,IACFA,EAAW,CAAC,GAEd,MAAMC,EAAUH,GAAOA,EAAII,QACrB,SACJC,GAAW,GACTH,EAQJ,OAPAD,EAAMK,UAAY,IAAU,CAACL,EAAMK,UAAW,oBAAqBH,EAAUH,EAAII,OAAS,YACtFJ,GAAOK,GACTJ,EAAMM,MAAQN,EAAMM,OAAS,CAAC,EAC9BN,EAAMM,MAAM,WAAaP,EAAIQ,SACnBR,IACVC,EAAMK,WAAa,aAEdH,EAAUM,EAAE,IAAKR,GAASQ,EAAE,OAAQR,EAC7C,CACAS,OAAOC,IAAIC,IAAI,cAAe,yBAA0Bb,E,mIChBzC,SAASc,EAASb,EAAKC,QACtB,IAAVA,IACFA,EAAQ,CAAC,GAEXA,EAAMM,MAAQN,EAAMM,OAAS,CAAC,EAC9BN,EAAMK,UAAY,aAAeL,EAAMK,WAAa,IACpD,MAAMQ,EAAO,IAAQb,EAAO,QACtBc,EAAUf,EAAMA,EAAIgB,OAASC,IAAIC,WAAWC,MAAM,oCACxD,GAAInB,EAAK,CACP,MAAMQ,EAAQR,EAAIQ,QACdA,IACFP,EAAMM,MAAM,YAAcC,EAC1BP,EAAMK,UAAY,IAAUL,EAAMK,UAAW,UAAW,IAAkBE,KAExEM,IACFb,EAAMmB,MAAQpB,EAAIqB,eAAiB,GACnCpB,EAAMqB,KAAOL,IAAIM,MAAM,MAAO,CAC5BC,KAAMxB,EAAIyB,UAGVzB,EAAI0B,YACNzB,EAAMK,WAAa,mBAEvB,MACEL,EAAMK,WAAa,YAErB,OAAOG,EAAEK,EAAO,IAAO,OAAQb,EAAOQ,EAAE,OAAQ,CAC9CH,UAAW,iBACVN,GAAOA,EAAII,SAAU,OAAQJ,EAAK,CACnCM,UAAW,iBACV,CACDD,UAAU,IACRI,EAAE,OAAQ,CACZH,UAAW,iBACVS,IACL,CACAL,OAAOC,IAAIC,IAAI,cAAe,0BAA2BC,E,wCCzC1C,SAASc,EAASH,GAC/B,OAAOA,EAAKI,MAAM,GAAGC,MAAK,CAACC,EAAGC,KAC5B,MAAMC,EAAOF,EAAEG,WACTC,EAAOH,EAAEE,WAIf,GAAa,OAATD,GAA0B,OAATE,EAAe,OAAOH,EAAEI,kBAAoBL,EAAEK,kBAInE,GAAa,OAATD,EAAe,OAAQ,EAC3B,GAAa,OAATF,EAAe,OAAO,EAI1B,MAAMI,EAAUN,EAAEO,SACZC,EAAUP,EAAEM,SAIlB,OAAID,IAAYE,EAAgBN,EAAOE,EAG9BE,GAAWE,EAAgBF,EAAQH,WAAaK,EAAQL,WAIxDG,EAAgBA,IAAYL,EAAI,EAAIK,EAAQH,WAAaC,EAAcI,EAAgBA,IAAYR,GAAK,EAAIE,EAAOM,EAAQL,WAC7H,CAAC,GAEZ,C,iBACAvB,OAAOC,IAAIC,IAAI,cAAe,wBAAyBe,E,gGC9BxC,MAAMY,EACnBC,eACE,OAAgBC,KAAM,sBAAkB,EAC1C,CACAC,WAAWC,GAIT,QAHiB,IAAbA,IACFA,EAAW,KAERF,KAAKG,eACR,OAAOH,KAAKI,MAAMF,GAEpB,MAAMG,EAAmBH,EAASI,QAAOC,IAAYP,KAAKG,eAAeK,IAAID,KAC7E,OAAgC,IAA5BF,EAAiBI,OACZC,QAAQC,QAAQ,cAAc,SAEhCX,KAAKI,MAAMC,EACpB,CACAJ,YAAYC,GAMV,YAJiB,IAAbA,IACFA,EAAW,IAEmC,MAAxBF,KAAKG,iBAAiDH,KAAKG,eAAiB,IAAIS,KACjG,eAAe,OAAQ,CAC5BL,QAASL,EAASW,KAAK,OACtBC,MAAKC,IACN,MAAMhC,EAAOiC,MAAMC,QAAQF,GAAOA,EAAM,CAACA,GAEzC,OADAb,EAASgB,SAAQX,GAAWP,KAAKG,eAAehC,IAAIoC,KAC7CxB,CAAI,GAEf,EAEFd,OAAOC,IAAIC,IAAI,cAAe,6BAA8B2B,GClC5D,MAAM,EAA+B7B,OAAOC,IAAIiD,IAAI,OAAQ,iBCAtD,EAA+BlD,OAAOC,IAAIiD,IAAI,OAAQ,iC,aCA5D,MAAM,EAA+BlD,OAAOC,IAAIiD,IAAI,OAAQ,+B,aCA5D,MAAM,EAA+BlD,OAAOC,IAAIiD,IAAI,OAAQ,gC,0DCI7C,MAAMC,UAAsB,KACzCC,KAAKC,GACH,MAAM/D,EAAMyC,KAAKxC,MAAM+D,MACjB3C,EAAcrB,GAAOA,EAAIqB,cACzBf,EAAY,IAAU,wBAAyB,CACnD2D,MAAOjE,EAAI0B,WACVe,KAAKxC,MAAMK,WACd,OAAOG,EAAE,IAAM,CACbH,UAAWA,EACXgB,KAAMmB,KAAKxC,MAAMsB,MACjBhB,MAAOP,EAAM,CACX,UAAWA,EAAIQ,cACb0D,EACJ9C,MAAOC,QAAe6C,IACrB,EAAAnE,EAAA,GAAQC,EAAK,CACdM,UAAW,gBACTG,EAAE,OAAQ,CACZH,UAAW,gBACVN,EAAMA,EAAIgB,OAASC,IAAIC,WAAWC,MAAM,0CAC7C,CACAgD,iBAAiBlE,GACfmE,MAAMC,UAAUpE,GAChB,MAAMD,EAAMC,EAAM+D,MAClB/D,EAAMqE,OAAO9C,KAAOxB,EAAMA,EAAIyB,OAAS,WACvCxB,EAAMsB,MAAQN,IAAIM,MAAM,MAAOtB,EAAMqE,OACvC,EAEF5D,OAAOC,IAAIC,IAAI,cAAe,iCAAkCiD,GC/BhE,MAAM,EAA+BnD,OAAOC,IAAIiD,IAAI,OAAQ,0B,aCA5D,MAAM,EAA+BlD,OAAOC,IAAIiD,IAAI,OAAQ,kC,aCA5D,MAAM,EAA+BlD,OAAOC,IAAIiD,IAAI,OAAQ,gC,+BCA5D,MAAM,EAA+BlD,OAAOC,IAAIiD,IAAI,OAAQ,yB,aCA5D,MAAM,EAA+BlD,OAAOC,IAAIiD,IAAI,OAAQ,4B,mECgB7C,MAAMW,UAAiB,KACpC/B,cACE4B,SAASI,YACT,OAAgB/B,KAAM,YAAQ,IAC9B,OAAgBA,KAAM,eAAW,EACnC,CACAgC,OAAOV,GACLK,MAAMK,OAAOV,GACb,iBAAiB,OAAQ,IAAY,qBAAqB,mDAC1DtB,KAAKjB,KAAO,GACZ,MAAMkD,EAAY,2BACdA,EACFjC,KAAKjB,MAAO,EAAAG,EAAA,GAAS+C,EAAU3B,QAAO/C,IAAQA,EAAI0B,cAGpDe,KAAKkC,SAAU,EACf,iBAAiB,CAAC,WAAY,uBAAwB,WAAWpB,MAAK,KACpEd,KAAKjB,MAAO,EAAAG,EAAA,GAAS,cAAc,QAAQoB,QAAO/C,IAAQA,EAAI0B,aAC9De,KAAKkC,SAAU,EACflE,EAAEmE,QAAQ,IAEd,CACAC,SAASd,GACPK,MAAMS,SAASd,GACf,aAAa,IAAY,qBAAqB,gDAC9C,kBAAkB,EACpB,CACAD,OACE,OAAOrD,EAAE,IAAe,CACtBH,UAAW,WACXwE,KAAMrC,KAAKqC,KAAKC,KAAKtC,MACrBuC,QAASvC,KAAKuC,QAAQD,KAAKtC,OAC1BA,KAAKwC,eAAeC,UACzB,CACAD,eACE,MAAME,EAAQ,IAAI,KAClB,GAAI1C,KAAKkC,QACPQ,EAAMvE,IAAI,UAAWH,EAAE,IAAkB,WACpC,CACL,MAAM2E,EAAS3C,KAAKjB,KAAKuB,QAAO/C,GAA0B,OAAnBA,EAAIiC,aACrCoD,EAAQ5C,KAAKjB,KAAKuB,QAAO/C,GAA0B,OAAnBA,EAAIiC,aAC1CkD,EAAMvE,IAAI,WAAY6B,KAAK6C,gBAAgBF,GAAS,KAChDC,EAAMnC,QACRiC,EAAMvE,IAAI,QAAS6B,KAAK8C,UAAUF,GAAQ,GAE9C,CACA,OAAOF,CACT,CACAL,OACE,OAAOrE,EAAE,IAAa,KACxB,CACAuE,UACE,OAAOvE,EAAE,IAAc,KACzB,CACA6E,gBAAgBF,GACd,OAAO3E,EAAE,KAAM,CACbH,UAAW,YACV8E,EAAOI,IAAI/C,KAAKgD,YAAYV,KAAKtC,OACtC,CACAgD,YAAYzF,GACV,MAAM0F,EAAuB1F,EAAI0F,uBAC3BC,GAAW,EAAAhE,EAAA,GAAS3B,EAAI2F,YAAc,IAC5C,OAAOlF,EAAE,KAAM,CACbH,UAAW,IAAU,UAAW,CAC9BsF,QAAS5F,EAAIQ,SACZ,IAAkBR,EAAIQ,UACzBD,MAAO,CACL,WAAYP,EAAIQ,UAEjBC,EAAE,IAAM,CACTH,UAAW,eACXgB,KAAM,cAActB,IACnBS,EAAE,MAAO,CACVH,UAAW,mBACVN,EAAII,SAAU,EAAAL,EAAA,GAAQC,EAAK,CAAC,EAAG,CAChCK,UAAU,IACRI,EAAE,KAAM,CACVH,UAAW,gBACVN,EAAIgB,SAAUP,EAAE,IAAK,CACtBH,UAAW,uBACVN,EAAIqB,iBAAkBsE,GAAYlF,EAAE,MAAO,CAC5CH,UAAW,oBACVqF,EAASH,KAAIvB,GAAS,CAACxD,EAAE,IAAM,CAChCa,KAAM,cAAc2C,IACnBA,EAAMjD,QAAS,SAAS0E,EAAuBjF,EAAE,IAAM,CACxDH,UAAW,+BACXgB,KAAM,qBAAqBoE,EAAsBA,EAAqBG,mBACrEpF,EAAE,OAAQ,CACXH,UAAW,sCACVoF,EAAqBtE,SAAU,IAAUsE,EAAqBI,iBAAmBrF,EAAE,OAAQ,CAC5FH,UAAW,iCAEf,CACAiF,UAAUF,GACR,OAAO5E,EAAE,MAAO,CACdH,UAAW,YACV+E,EAAMG,KAAIxF,GAAO,EAAC,EAAAa,EAAA,GAASb,EAAK,CACjCc,MAAM,IACJ,OACN,EAEFJ,OAAOC,IAAIC,IAAI,cAAe,4BAA6B2D,GCrH3D,MAAM,EAA+B7D,OAAOC,IAAIiD,IAAI,OAAQ,8B,aCA5D,MAAM,EAA+BlD,OAAOC,IAAIiD,IAAI,OAAQ,oC,aCA5D,MAAM,EAA+BlD,OAAOC,IAAIiD,IAAI,OAAQ,kC,+BCI7C,MAAMmC,UAAgB,KACnCjC,OACE,MAAM9D,EAAMyC,KAAKxC,MAAM+D,MACjBxD,EAAQR,EAAIQ,QAClB,OAAOC,EAAE,SAAU,CACjBH,UAAW,IAAU,OAAQ,UAAW,CACtC,mBAAoBE,EACpB,CAAC,IAAkBA,IAASA,IAE9BD,MAAOC,EAAQ,CACb,YAAaA,QACX0D,GACHzD,EAAE,MAAO,CACVH,UAAW,aACVG,EAAE,MAAO,CACVH,UAAW,mBACVG,EAAE,KAAM,CACTH,UAAW,cACVN,EAAII,SAAU,EAAAL,EAAA,GAAQC,EAAK,CAAC,EAAG,CAChCK,UAAU,IACR,IAAKL,EAAIgB,QAASP,EAAE,MAAO,CAC7BH,UAAW,iBACVN,EAAIqB,iBACT,EAEFX,OAAOC,IAAIC,IAAI,cAAe,2BAA4BmF,GCpB1D,MAAMC,EAAUvE,GAAQ,cAAc,QAAQwE,MAAKjG,GAE5C,IAFmDA,EAAIyB,OAAOyE,cAAczE,OAAMyC,EAAW,CAClGiC,YAAa,WCVT,EAA+BzF,OAAOC,IAAIiD,IAAI,OAAQ,uC,aCA5D,MAAM,GAA+BlD,OAAOC,IAAIiD,IAAI,OAAQ,mC,eCI7C,SAASwC,GAAU5E,EAAMvB,QACxB,IAAVA,IACFA,EAAQ,CAAC,GAEX,MAAM0F,EAAW,IACX,KACJ7E,KACGuF,GACDpG,EAaJ,OAZAoG,EAAW/F,UAAY,IAAU,YAAa+F,EAAW/F,WACrDkB,GACF,EAAAG,EAAA,GAASH,GAAMmC,SAAQ3D,KACjBA,GAAuB,IAAhBwB,EAAK0B,SACdyC,EAASW,MAAK,EAAAzF,EAAA,GAASb,EAAK,CAC1Bc,SAEJ,IAGF6E,EAASW,MAAK,EAAAzF,EAAA,MAETJ,EAAE,OAAQ4F,EAAYV,EAC/B,C,OACAjF,OAAOC,IAAIC,IAAI,cAAe,2BAA4BwF,IC3B1D,MAAM,GAA+B1F,OAAOC,IAAIiD,IAAI,OAAQ,kC,oCCe3DlD,OAAOC,IAAI4F,eAAe,MAAO,MAAO,cAAe,uCACxD7F,OAAOC,IAAI4F,eAAe,MAAO,MAAO,cAAe,wGACvD7F,OAAOC,IAAI4F,eAAe,MAAO,MAAO,cAAe,wGACvD7F,OAAOC,IAAI4F,eAAe,MAAO,MAAO,cAAe,iG,cClBvD,MAAM,GAA+B7F,OAAOC,IAAIiD,IAAI,OAAQ,oB,eCA5D,MAAM,GAA+BlD,OAAOC,IAAIiD,IAAI,OAAQ,4B,eCA5D,MAAM,GAA+BlD,OAAOC,IAAIiD,IAAI,OAAQ,8B,eCE7C,MAAM4C,WAA6B,MAChDrC,iBAAiBlE,GACfmE,MAAMC,UAAUpE,GAChB,MAAMwG,EAAUxG,EAAMyG,KAAKC,UAAU,GAC/BC,EAAU3G,EAAMyG,KAAKC,UAAU,GACrC,SAASE,EAASC,EAAOC,GACvB,OAAOD,EAAM/D,QAAO/C,IAA+B,IAAxB+G,EAAMC,QAAQhH,KAAawF,KAAIyB,GAAMhG,IAAIiG,MAAMC,QAAQ,OAAQF,IAC5F,CACAhH,EAAMmH,UAAYP,EAASD,EAASH,GACpCxG,EAAMoH,YAAcR,EAASJ,EAASG,EACxC,CACAxG,OACE,MAAO,YACT,CACAkH,iBACE,OAAI7E,KAAKxC,MAAMmH,UAAUlE,OACnBT,KAAKxC,MAAMoH,YAAYnE,OAClB,4DAEF,gDAEF,iDACT,CACAqE,kBACE,MAAMC,EAAO,CAAC,EAiBd,OAhBI/E,KAAKxC,MAAMmH,UAAUlE,SACvBsE,EAAKJ,UAAYnG,IAAIC,WAAWC,MAAM,0CAA2C,CAC/EK,KAAM4E,GAAU3D,KAAKxC,MAAMmH,UAAW,CACpCtG,MAAM,IAER2G,MAAOhF,KAAKxC,MAAMmH,UAAUlE,UAG5BT,KAAKxC,MAAMoH,YAAYnE,SACzBsE,EAAKH,YAAcpG,IAAIC,WAAWC,MAAM,0CAA2C,CACjFK,KAAM4E,GAAU3D,KAAKxC,MAAMoH,YAAa,CACtCvG,MAAM,IAER2G,MAAOhF,KAAKxC,MAAMoH,YAAYnE,UAG3BsE,CACT,EAEF9G,OAAOC,IAAIC,IAAI,cAAe,wCAAyC4F,IC9CvE,MAAM,GAA+B9F,OAAOC,IAAIiD,IAAI,OAAQ,yB,eCA5D,MAAM,GAA+BlD,OAAOC,IAAIiD,IAAI,OAAQ,gB,eCE7C,MAAM8D,WAAY,MAC/B1G,OACE,OAAO,eAAgB,QAAQ2G,KAAKlF,KACtC,CACAhB,OACE,OAAO,eAAgB,QAAQkG,KAAKlF,KACtC,CACApB,cACE,OAAO,eAAgB,eAAesG,KAAKlF,KAC7C,CACAjC,QACE,OAAO,eAAgB,SAASmH,KAAKlF,KACvC,CACAmF,gBACE,OAAO,eAAgB,iBAAiBD,KAAKlF,KAC/C,CACAoF,iBACE,OAAO,eAAgB,kBAAkBF,KAAKlF,KAChD,CACArC,OACE,OAAO,eAAgB,QAAQuH,KAAKlF,KACtC,CACAR,WACE,OAAO,eAAgB,YAAY0F,KAAKlF,KAC1C,CACAJ,SACE,OAAO,YAAa,UAAUsF,KAAKlF,KACrC,CACAkD,WACE,OAAO,aAAc,YAAYgC,KAAKlF,KACxC,CACAqF,cACE,OAAO,eAAgB,eAAeH,KAAKlF,KAC7C,CACAf,UACE,OAAO,eAAgB,WAAWiG,KAAKlF,KACzC,CACAsF,WACE,OAAO,eAAgB,YAAYJ,KAAKlF,KAC1C,CACAN,kBACE,OAAO,eAAgB,mBAAmBwF,KAAKlF,KACjD,CACAqD,eACE,OAAO,eAAgB,eAAgB,oBAAqB6B,KAAKlF,KACnE,CACAiD,uBACE,OAAO,YAAa,wBAAwBiC,KAAKlF,KACnD,CACAuF,eACE,OAAO,eAAgB,gBAAgBL,KAAKlF,KAC9C,CACAwF,qBACE,OAAO,eAAgB,sBAAsBN,KAAKlF,KACpD,CACAyF,qBACE,OAAO,eAAgB,sBAAsBP,KAAKlF,KACpD,CACA0F,YACE,OAAO,KAAS,WAAY,UAAU,CAAClG,EAAUI,IAAwB,OAAbJ,IAAgC,IAAXI,IAAkBsF,KAAKlF,KAC1G,EAEF/B,OAAOC,IAAIC,IAAI,cAAe,oBAAqB8G,IChEnD,MAAM,GAA+BhH,OAAOC,IAAIiD,IAAI,OAAQ,wBCG7C,MAAMwE,WAAkB,GAAAC,eACrC7F,cACE4B,SAASI,YACT,OAAgB/B,KAAM,cAAc,EACtC,CACA6F,MACE,OAAO,qBAAqB,8CAA+C,CAAC,GAAG,EACjF,CACAC,OACE,OAAO,qBAAqB,+CAAgD,CAAC,GAAG,EAClF,CACAC,YACE,MAAO,KACT,CACAC,yBAAyBC,GACvB,MAAO,CAACA,EACV,CACAC,WAAWD,EAAOE,GAChB,IAAIC,EAAU,GACd,OAAIpF,MAAMC,QAAQgF,IAChBG,EAAUH,EAAMlD,KAAIkD,GAASjG,KAAKkG,WAAWD,EAAMI,WAAYF,KAI1DC,EAAQvF,KAAK,MAFX,GAAGyF,OAAOH,EAAS,IAAM,IAAIG,OAAOtG,KAAK6F,MAAO,KAAKS,OAAOtG,KAAKuG,yBAAyBN,GAGrG,CACAM,yBAAyBN,GACvB,OAAOA,CACT,EAEFhI,OAAOC,IAAIC,IAAI,cAAe,qCAAsCwH,IC9BpE,MCIA,KDJgB,IAAI,aACnBxH,IAAI,OAAQ8G,KAAM,IAAI,cACtBuB,OAAO,cAAeb,KCEU,IAAI,cACpCxH,IAAI,OAAQ,QAAS2D,GACrB3D,IAAI,MAAO,WAAY,KACvBsI,OAAO,OAAOlJ,GAAO,UAAU,MAAO,CACrCwB,KAAMxB,EAAIyB,YACP,IAAI,iBACRb,IAAI,mBAAoB4F,IAAuB,IAAI,YAAa,MAChE2C,QAAQ,QACRC,UAAU,WCPX,qBAAqB,eAAe,WAClC,YAAc,IAAI7G,GCElB,IAAA8G,QAAO,cAAwB,YAAY,SAAUlE,GAKnD,GAJAA,EAAMvE,IAAI,OAAQH,EAAE,IAAY,CAC9BL,KAAM,kBACNkB,KAAM,UAAU,SACf,qBAAqB,uCAAwC,IAC5D,oBAAoBiD,GAAW,OACnCY,EAAMvE,IAAI,YAAaH,EAAE,IAAW,OAAQ,IAC5C,MAAM6D,EAAS,gCACT9C,EAAO,cAAc,QACrB8H,EAAa,iBACbC,EAASvJ,IACb,IAAIwJ,EAASF,IAAetJ,GACvBwJ,GAAUF,IACbE,EAASF,EAAWjH,WAAarC,GAQnCmF,EAAMvE,IAAI,MAAQZ,EAAIiH,KAAMxG,EAAEoD,EAAe,CAC3CG,MAAOhE,EACPsE,OAAQA,EACRkF,OAAQA,GACA,MAAPxJ,OAAc,EAASA,EAAIgB,SAAU,GAAG,GAE7C,EAAAW,EAAA,GAASH,GAAMuB,QAAO/C,GAA0B,OAAnBA,EAAIiC,cAAyBjC,EAAI0B,WAAa4H,IAAetJ,EAAIqC,WAAaiH,GAActJ,EAAIqC,WAAaiH,EAAWjH,aAAYsB,QAAQ4F,GACzK,MAAME,EAAOjI,EAAKuB,QAAO/C,GAA0B,OAAnBA,EAAIiC,aAAqBJ,MAAK,CAACC,EAAGC,IAAMA,EAAEI,kBAAoBL,EAAEK,oBAChGsH,EAAKC,OAAO,EAAG,GAAG/F,QAAQ4F,GACtBE,EAAKvG,QACPiC,EAAMvE,IAAI,WAAYH,EAAE,IAAY,CAClCa,KAAM,UAAU,SACf,qBAAqB,uCAAwC,GAEpE,IlBjCA,eAAiB,SAAUqI,GACzB,GAAIlH,KAAKmH,mBAAqBD,EAC5B,OAAOlH,KAAKmH,iBAEd,MAAMnI,EAAOgB,KAAKoH,OAAOC,MAAMxF,SAAS9C,KACxC,IAAIxB,EAAM,KAIV,GAHIyB,IACFzB,EAAMgG,EAAQvE,IAEZA,IAASzB,GAAOA,IAAQA,EAAI0B,YAAc1B,EAAI2F,WAAY,CAC5D,GAAIlD,KAAKsH,kBACP,OAEFtH,KAAKsH,mBAAoB,EAMzBtH,KAAKyE,MAAMjB,KAAK,OAAQxE,EAAM,CAC5BuB,QAAS,0CACRO,MAAK,KACNd,KAAKmH,iBAAmB5D,EAAQvE,GAChChB,EAAEmE,QAAQ,IACToF,SAAQ,KACTvH,KAAKsH,mBAAoB,CAAK,GAElC,CACA,GAAI/J,EAEF,OADAyC,KAAKmH,iBAAmB5J,EACjByC,KAAKmH,iBAEdnH,KAAKmH,sBAAmB1F,CAE1B,GACA,IAAAmF,QAAO,cAAqB,QAAQ,SAAUY,GAC5C,gBAAe,EACjB,KAGA,IAAAC,UAAS,cAAqB,QAAQ,SAAUC,GAC9C,MAAMnK,EAAM,iBACZ,OAAIA,EAAYS,EAAEsF,EAAS,CACzB/B,MAAOhE,IAEFmK,GACT,KACA,IAAAd,QAAO,cAAqB,QAAQ,SAAUY,GAC5C,MAAMjK,EAAM,iBACRA,IAAKiK,EAAKhK,MAAMK,WAAa,kBAAoBN,EAAIiH,KAC3D,KACA,IAAAoC,QAAO,cAAqB,YAAY,WACtC,MAAMrJ,EAAM,iBACRA,GACF,aAAaA,EAAIgB,OAErB,KAIA,IAAAqI,QAAO,cAAwB,SAAS,SAAUlE,GAChD,MAAMnF,EAAM,iBACZ,GAAIA,EAAK,CACP,MAAMQ,EAAQR,EAAIQ,QACZyH,EAAqBjI,EAAIiI,uBAAyB,iBAClDmC,EAAgBjF,EAAMvB,IAAI,iBAC5BpD,IACF4J,EAAcnK,MAAMK,UAAY,IAAU,CAAC8J,EAAcnK,MAAMK,UAAW,qBAAsB,IAAkBE,KAClH4J,EAAcnK,MAAMM,MAAQ,CAC1B,UAAWC,IAGf4J,EAAcnK,MAAMoK,UAAYpC,EAChCmC,EAAczE,SAAW,qBAAqBsC,EAAqB,2CAA6C,kDAClH,CACF,KAIA,IAAAoB,QAAO,cAA6B,UAAU,SAAU/E,GACtDA,EAAO9C,KAAOf,EAAEc,MAAM+I,MAAM,OAC9B,KAGA,IAAAjB,QAAO,cAA+B,iBAAiB,SAAU/E,GAI7D,IAAIiG,EAHwB,iBAAnBjG,EAAOtB,QAChBsB,EAAOtB,QAAU,CAACsB,EAAOtB,SAGa,OAArCuH,EAAkBjG,EAAOtB,UAA4BuH,EAAgBjE,KAAK,OAAQ,eAEjF7D,KAAK6B,OAAO9C,OACd8C,EAAOvB,SAAWuB,EAAOvB,OAAS,CAAC,GACnCuB,EAAOvB,OAAO/C,IAAMyC,KAAK6B,OAAO9C,KAEpC,KmBnGA,IAAA6H,QAAO,cAA8B,aAAa,SAAUlE,GAC1D,MAAM3D,EAAOiB,KAAKxC,MAAMuK,WAAWhJ,OAC/BA,GAAQA,EAAK0B,QACfiC,EAAMvE,IAAI,OAAQwF,GAAU5E,GAAO,GAEvC,KAGA,IAAA6H,QAAO,eAA0B,QAAQ,SAAUvF,GACjD,MAAMtC,GAAO,EAAAG,EAAA,GAASc,KAAKxC,MAAMuK,WAAWhJ,QAC5C,GAAIA,GAAQA,EAAK0B,OAAQ,CACvB,MAAM1C,EAAQgB,EAAK,GAAGhB,QAClBA,IACFsD,EAAK7D,MAAMM,MAAQ,CACjB,YAAaC,GAEfsD,EAAK7D,MAAMK,UAAY,IAAUwD,EAAK7D,MAAMK,UAAW,0BAA2B,IAAkBE,IAExG,CACF,KAIA,IAAA6I,QAAO,eAA0B,SAAS,SAAUlE,GAClD,MAAM3D,EAAOiB,KAAKxC,MAAMuK,WAAWhJ,OAC/BA,GAAQA,EAAK0B,QACfiC,EAAMvE,IAAI,OAAQwF,GAAU5E,EAAM,CAChCV,MAAM,IACJ,EAER,KdlCA,IAAAuI,QAAO,KAAoB,sBAAsB,SAAUlE,EAAOqF,GAC5DA,EAAWC,UACbtF,EAAMvE,IAAI,OAAQH,EAAE,KAAQ,CAC1BL,KAAM,aACNsK,QAAS,IAAMzJ,IAAI0J,MAAMC,MAAK,IAAM,8BAAmI,CACrKJ,gBAEDvJ,IAAIC,WAAWC,MAAM,2DAE5B,KePA,IAAAkI,QAAO,cAAwB,uBAAuB,SAAUwB,GAE9D,MAAM7K,EAAM,iBACZ,GAAIA,EAAK,CACP,MAAMqC,EAASrC,EAAIqC,SACbb,EAAOa,EAAS,CAACA,EAAQrC,GAAO,CAACA,GACvC6K,EAAQtH,MAAKuH,GAAYA,EAASC,OAAOvJ,KAAOA,GAClD,MACE,yBAA2B,EAE/B,KACA,IAAA6H,QAAO,6CAA8C,UAAU,WAC7D,iBAAiB,CAAC,WAAW9F,MAAK,IAAM9C,EAAEmE,WAG1CnC,KAAKD,YAAYwI,UAAUC,WAAa,YACf,EAAAC,GAAA,KACHhI,QACpB,gBAAe,IAAM,8BAAmI,CACtJiI,cAAe1I,KAAKqI,SAASC,OAAOvJ,MAAQ,IAAII,MAAM,GACtDwJ,SAAU5J,IACRiB,KAAKqI,SAASC,OAAOvJ,KAAOA,EAC5BiB,KAAK4I,EAAE,YAAYC,OAAO,GAGhC,CACF,KAIA,IAAAjC,QAAO,6CAA8C,eAAe,SAAUlE,GAC5E,MAAM3D,EAAOiB,KAAKqI,SAASC,OAAOvJ,MAAQ,GACpC+J,GAAiB,EAAAL,GAAA,KACvB/F,EAAMvE,IAAI,OAAQH,EAAE,IAAK,CACvBH,UAAW,IAAU,CAAC,iCAAkCiL,EAAerI,QAAU,aACjFwH,QAASjI,KAAKwI,WAAWlG,KAAKtC,OAC7BjB,EAAK0B,OAASkD,GAAU5E,GAAQf,EAAE,OAAQ,CAC3CH,UAAW,qBACV,qBAAqB,4DAA6D,GACvF,KACA,IAAA4J,UAAS,6CAA8C,YAAY,SAAUC,GAC3E,MAAMqB,EAAa/I,KAAKqI,SAASC,OAAOvJ,MAAQ,GAC1CiK,EAAoBD,EAAWzI,QAAO/C,GAA0B,OAAnBA,EAAIiC,aAAwBjC,EAAI0B,YAC7EgK,EAAsBF,EAAWzI,QAAO/C,GAA0B,OAAnBA,EAAIiC,aACnDsJ,GAAiB,EAAAL,GAAA,KACjBS,EAAiBC,SAAS,oBAAoB,mBAC9CC,EAAmBD,SAAS,oBAAoB,qBAChDE,EAAiBF,SAAS,oBAAoB,mBAC9CG,EAAmBH,SAAS,oBAAoB,uBAChDJ,EAAWtI,QAA6B,IAAnB4I,GAA6C,IAArBC,GAA0BN,EAAkBvI,OAASyI,GAAkBD,EAAoBxI,OAAS2I,IAAqBN,EAAerI,OACzL,gBAAe,IAAM,8BAAmI,CACtJiI,aAAcK,EACdJ,SAAU5J,IACRiB,KAAKqI,SAASC,OAAOvJ,KAAOA,EAC5B2I,GAAU,IAIdA,GAEJ,KAGA,IAAAd,QAAO,6CAA8C,QAAQ,SAAU7B,GACrEA,EAAKwE,cAAgBxE,EAAKwE,eAAiB,CAAC,EAC5CxE,EAAKwE,cAAcxK,KAAOiB,KAAKqI,SAASC,OAAOvJ,IACjD,GH1DF,G,6BIfe,SAAS0J,EAAkBV,GACxC,IAAIhJ,EAAOP,IAAIiG,MAAM+E,IAAI,QACzB,GAAIzB,EAAY,CACd,MAAM0B,EAAiB1B,EAAWhJ,QAAU,GAC5CA,EAAOA,EAAKuB,QAAO/C,GAAOA,EAAIkI,sBAAwBgE,EAAevJ,SAAS3C,IAChF,MACEwB,EAAOA,EAAKuB,QAAO/C,GAAOA,EAAIiI,uBAEhC,OAAOzG,CACT,C,iBACAd,OAAOC,IAAIC,IAAI,cAAe,gCAAiCsK,E,uBCV/DiB,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,mB,uBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,a,uBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,2B,sBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,8B,uBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,yB,uBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,qC,uBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,2B,uBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,mC,uBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,mC,uBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,sB,uBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,yB,uBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,uB,uBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,2B,uBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,Y,uBCAxCuI,EAAOC,QAAU1L,OAAOC,IAAIiD,IAAI,OAAQ,kC,6BCAzB,SAASyI,EAAQC,GAG9B,OAAOD,EAAU,mBAAqBE,QAAU,iBAAmBA,OAAOC,SAAW,SAAUF,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAO,mBAAqBC,QAAUD,EAAI9J,cAAgB+J,QAAUD,IAAQC,OAAOvB,UAAY,gBAAkBsB,CAC1H,EAAGD,EAAQC,EACb,CCPe,SAASG,EAAgBH,EAAKhE,EAAKI,GAYhD,OAXAJ,ECAa,SAAwBoE,GACrC,IAAIpE,ECFS,SAAsBqE,EAAOpE,GAC1C,GAAuB,WAAnB8D,EAAQM,IAAiC,OAAVA,EAAgB,OAAOA,EAC1D,IAAIC,EAAOD,EAAMJ,OAAOM,aACxB,QAAa3I,IAAT0I,EAAoB,CACtB,IAAIE,EAAMF,EAAKjF,KAAKgF,EAAOpE,GAC3B,GAAqB,WAAjB8D,EAAQS,GAAmB,OAAOA,EACtC,MAAM,IAAIC,UAAU,+CACtB,CACA,OAA4BC,OAAiBL,EAC/C,CDPYE,CAAYH,EAAK,UAC3B,MAAwB,WAAjBL,EAAQ/D,GAAoBA,EAAM0E,OAAO1E,EAClD,CDHQ2E,CAAc3E,MACTgE,EACTY,OAAOC,eAAeb,EAAKhE,EAAK,CAC9BI,MAAOA,EACP0E,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZhB,EAAIhE,GAAOI,EAEN4D,CACT,C,mBGbIiB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBvJ,IAAjBwJ,EACH,OAAOA,EAAatB,QAGrB,IAAID,EAASoB,EAAyBE,GAAY,CAGjDrB,QAAS,CAAC,GAOX,OAHAuB,EAAoBF,GAAUtB,EAAQA,EAAOC,QAASoB,GAG/CrB,EAAOC,OACf,CAGAoB,EAAoB/M,EAAIkN,ECxBxBH,EAAoBI,EAAKzB,IACxB,IAAI0B,EAAS1B,GAAUA,EAAO2B,WAC7B,IAAO3B,EAAiB,QACxB,IAAM,EAEP,OADAqB,EAAoBO,EAAEF,EAAQ,CAAE/L,EAAG+L,IAC5BA,CAAM,ECLdL,EAAoBO,EAAI,CAAC3B,EAAS4B,KACjC,IAAI,IAAI1F,KAAO0F,EACXR,EAAoBS,EAAED,EAAY1F,KAASkF,EAAoBS,EAAE7B,EAAS9D,IAC5E4E,OAAOC,eAAef,EAAS9D,EAAK,CAAE8E,YAAY,EAAMxJ,IAAKoK,EAAW1F,IAE1E,ECNDkF,EAAoBU,EAAI,CAAC,EAGzBV,EAAoBW,EAAKC,GACjBjL,QAAQ8I,IAAIiB,OAAOmB,KAAKb,EAAoBU,GAAGI,QAAO,CAACC,EAAUjG,KACvEkF,EAAoBU,EAAE5F,GAAK8F,EAASG,GAC7BA,IACL,KCNJf,EAAoBgB,EAAKJ,GAEjB,yCCHRZ,EAAoBiB,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOjM,MAAQ,IAAIkM,SAAS,cAAb,EAGhB,CAFE,MAAOR,GACR,GAAsB,iBAAXS,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBpB,EAAoBS,EAAI,CAAC3B,EAAKuC,IAAU3B,OAAOlC,UAAU8D,eAAenH,KAAK2E,EAAKuC,GnEA9EhP,EAAa,CAAC,EACdC,EAAoB,kBAExB0N,EAAoBuB,EAAI,CAACC,EAAKC,EAAM3G,EAAK8F,KACxC,GAAGvO,EAAWmP,GAAQnP,EAAWmP,GAAK1I,KAAK2I,OAA3C,CACA,IAAIC,EAAQC,EACZ,QAAWjL,IAARoE,EAEF,IADA,IAAI8G,EAAUC,SAASC,qBAAqB,UACpCC,EAAI,EAAGA,EAAIH,EAAQlM,OAAQqM,IAAK,CACvC,IAAIC,EAAIJ,EAAQG,GAChB,GAAGC,EAAEC,aAAa,QAAUT,GAAOQ,EAAEC,aAAa,iBAAmB3P,EAAoBwI,EAAK,CAAE4G,EAASM,EAAG,KAAO,CACpH,CAEGN,IACHC,GAAa,GACbD,EAASG,SAASK,cAAc,WAEzBC,QAAU,QACjBT,EAAOU,QAAU,IACbpC,EAAoBqC,IACvBX,EAAOY,aAAa,QAAStC,EAAoBqC,IAElDX,EAAOY,aAAa,eAAgBhQ,EAAoBwI,GACxD4G,EAAOa,IAAMf,GAEdnP,EAAWmP,GAAO,CAACC,GACnB,IAAIe,EAAmB,CAACC,EAAMC,KAE7BhB,EAAOiB,QAAUjB,EAAOkB,OAAS,KACjCC,aAAaT,GACb,IAAIU,EAAUzQ,EAAWmP,GAIzB,UAHOnP,EAAWmP,GAClBE,EAAOqB,YAAcrB,EAAOqB,WAAWC,YAAYtB,GACnDoB,GAAWA,EAAQ3M,SAAS8M,GAAQA,EAAGP,KACpCD,EAAM,OAAOA,EAAKC,EAAM,EAExBN,EAAUc,WAAWV,EAAiBjL,KAAK,UAAMb,EAAW,CAAEyM,KAAM,UAAWC,OAAQ1B,IAAW,MACtGA,EAAOiB,QAAUH,EAAiBjL,KAAK,KAAMmK,EAAOiB,SACpDjB,EAAOkB,OAASJ,EAAiBjL,KAAK,KAAMmK,EAAOkB,QACnDjB,GAAcE,SAASwB,KAAKC,YAAY5B,EAnCkB,CAmCX,EoEtChD1B,EAAoBuD,EAAK3E,IACH,oBAAXG,QAA0BA,OAAOyE,aAC1C9D,OAAOC,eAAef,EAASG,OAAOyE,YAAa,CAAEtI,MAAO,WAE7DwE,OAAOC,eAAef,EAAS,aAAc,CAAE1D,OAAO,GAAO,E,MCL9D,IAAIuI,EACAzD,EAAoBiB,EAAEyC,gBAAeD,EAAYzD,EAAoBiB,EAAE0C,SAAW,IACtF,IAAI9B,EAAW7B,EAAoBiB,EAAEY,SACrC,IAAK4B,GAAa5B,IACbA,EAAS+B,gBACZH,EAAY5B,EAAS+B,cAAcrB,MAC/BkB,GAAW,CACf,IAAI7B,EAAUC,EAASC,qBAAqB,UACzCF,EAAQlM,SAAQ+N,EAAY7B,EAAQA,EAAQlM,OAAS,GAAG6M,IAC5D,CAID,IAAKkB,EAAW,MAAM,IAAII,MAAM,yDAChCJ,EAAYA,EAAUK,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpF9D,EAAoB+D,EAAIN,C,KCfxBzD,EAAoBU,EAAEsD,OAAS,CAACpD,EAASG,KAExC,MAAMkD,EAAoBjE,EAAoBuB,EAC9CvB,EAAoBuB,EAAIrO,OAAOC,IAAI+Q,UAAU3M,KAAKrE,OAAOC,IAAK8Q,EAAkB,E,MCEjF,IAAIE,EAAkB,CACrB,IAAK,GAGNnE,EAAoBU,EAAE0D,EAAI,CAACxD,EAASG,KAElC,IAAIsD,EAAqBrE,EAAoBS,EAAE0D,EAAiBvD,GAAWuD,EAAgBvD,QAAWlK,EACtG,GAA0B,IAAvB2N,EAGF,GAAGA,EACFtD,EAASjI,KAAKuL,EAAmB,QAC3B,CAGL,IAAIhH,EAAU,IAAI1H,SAAQ,CAACC,EAAS0O,IAAYD,EAAqBF,EAAgBvD,GAAW,CAAChL,EAAS0O,KAC1GvD,EAASjI,KAAKuL,EAAmB,GAAKhH,GAGtC,IAAImE,EAAMxB,EAAoB+D,EAAI/D,EAAoBgB,EAAEJ,GAEpD2D,EAAQ,IAAIV,MAgBhB7D,EAAoBuB,EAAEC,GAfFkB,IACnB,GAAG1C,EAAoBS,EAAE0D,EAAiBvD,KAEf,KAD1ByD,EAAqBF,EAAgBvD,MACRuD,EAAgBvD,QAAWlK,GACrD2N,GAAoB,CACtB,IAAIG,EAAY9B,IAAyB,SAAfA,EAAMS,KAAkB,UAAYT,EAAMS,MAChEsB,EAAU/B,GAASA,EAAMU,QAAUV,EAAMU,OAAOb,IACpDgC,EAAMG,QAAU,iBAAmB9D,EAAU,cAAgB4D,EAAY,KAAOC,EAAU,IAC1FF,EAAM/Q,KAAO,iBACb+Q,EAAMpB,KAAOqB,EACbD,EAAMI,QAAUF,EAChBJ,EAAmB,GAAGE,EACvB,CACD,GAEwC,SAAW3D,EAASA,EAE/D,CACD,EAcF,IAAIgE,EAAuB,CAACC,EAA4B7K,KACvD,IAGIiG,EAAUW,GAHTkE,EAAUC,EAAaC,GAAWhL,EAGhB+H,EAAI,EAC3B,GAAG+C,EAASG,MAAMxL,GAAgC,IAAxB0K,EAAgB1K,KAAa,CACtD,IAAIwG,KAAY8E,EACZ/E,EAAoBS,EAAEsE,EAAa9E,KACrCD,EAAoB/M,EAAEgN,GAAY8E,EAAY9E,IAG7C+E,GAAsBA,EAAQhF,EAClC,CAEA,IADG6E,GAA4BA,EAA2B7K,GACrD+H,EAAI+C,EAASpP,OAAQqM,IACzBnB,EAAUkE,EAAS/C,GAChB/B,EAAoBS,EAAE0D,EAAiBvD,IAAYuD,EAAgBvD,IACrEuD,EAAgBvD,GAAS,KAE1BuD,EAAgBvD,GAAW,CAC5B,EAIGsE,EAAqBC,KAAiC,2BAAIA,KAAiC,4BAAK,GACpGD,EAAmB/O,QAAQyO,EAAqBrN,KAAK,KAAM,IAC3D2N,EAAmBpM,KAAO8L,EAAqBrN,KAAK,KAAM2N,EAAmBpM,KAAKvB,KAAK2N,G","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/IndexSidebar')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Separator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LinkButton')\"","webpack://@flarum/tags/./src/forum/components/TagLinkButton.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Page')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/PageStructure')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/WelcomeHero')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/humanTime')\"","webpack://@flarum/tags/./src/forum/components/TagsPage.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/IndexPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/states/DiscussionListState')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/states/GlobalSearchState')\"","webpack://@flarum/tags/./src/forum/components/TagHero.js","webpack://@flarum/tags/./src/forum/addTagFilter.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionListItem')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionHero')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/utils/DiscussionControls')\"","webpack://@flarum/tags/./src/forum/addTagControl.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/models/Discussion')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/EventPost')\"","webpack://@flarum/tags/./src/forum/components/DiscussionTaggedPost.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/./src/forum/extend.ts","webpack://@flarum/tags/./src/forum/index.ts","webpack://@flarum/tags/./src/forum/addTagList.js","webpack://@flarum/tags/./src/forum/addTagLabels.js","webpack://@flarum/tags/./src/forum/addTagComposer.js","webpack://@flarum/tags/./src/forum/utils/getSelectableTags.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionPage')\"","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n var _this$loadedIncludes;\n if (includes === void 0) {\n includes = [];\n }\n (_this$loadedIncludes = this.loadedIncludes) != null ? _this$loadedIncludes : this.loadedIncludes = new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/IndexSidebar');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Separator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LinkButton');","import Link from 'flarum/common/components/Link';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport classList from 'flarum/common/utils/classList';\nimport tagIcon from '../../common/helpers/tagIcon';\nexport default class TagLinkButton extends LinkButton {\n view(vnode) {\n const tag = this.attrs.model;\n const description = tag && tag.description();\n const className = classList('TagLinkButton hasIcon', {\n child: tag.isChild()\n }, this.attrs.className);\n return m(Link, {\n className: className,\n href: this.attrs.route,\n style: tag ? {\n '--color': tag.color()\n } : undefined,\n title: description || undefined\n }, tagIcon(tag, {\n className: 'Button-icon'\n }), m(\"span\", {\n className: \"Button-label\"\n }, tag ? tag.name() : app.translator.trans('flarum-tags.forum.index.untagged_link')));\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const tag = attrs.model;\n attrs.params.tags = tag ? tag.slug() : 'untagged';\n attrs.route = app.route('tag', attrs.params);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagLinkButton', TagLinkButton);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Page');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/PageStructure');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/WelcomeHero');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/humanTime');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport PageStructure from 'flarum/forum/components/PageStructure';\nimport WelcomeHero from 'flarum/forum/components/WelcomeHero';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Link from 'flarum/common/components/Link';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport tagLabel from '../../common/helpers/tagLabel';\nimport sortTags from '../../common/utils/sortTags';\nexport default class TagsPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"loading\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n app.history.push('tags', extractText(app.translator.trans('flarum-tags.forum.header.back_to_tags_tooltip')));\n this.tags = [];\n const preloaded = app.preloadedApiDocument();\n if (preloaded) {\n this.tags = sortTags(preloaded.filter(tag => !tag.isChild()));\n return;\n }\n this.loading = true;\n app.tagList.load(['children', 'lastPostedDiscussion', 'parent']).then(() => {\n this.tags = sortTags(app.store.all('tags').filter(tag => !tag.isChild()));\n this.loading = false;\n m.redraw();\n });\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n app.setTitle(extractText(app.translator.trans('flarum-tags.forum.all_tags.meta_title_text')));\n app.setTitleCount(0);\n }\n view() {\n return m(PageStructure, {\n className: \"TagsPage\",\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this)\n }, this.contentItems().toArray());\n }\n contentItems() {\n const items = new ItemList();\n if (this.loading) {\n items.add('loading', m(LoadingIndicator, null));\n } else {\n const pinned = this.tags.filter(tag => tag.position() !== null);\n const cloud = this.tags.filter(tag => tag.position() === null);\n items.add('tagTiles', this.tagTileListView(pinned), 100);\n if (cloud.length) {\n items.add('cloud', this.cloudView(cloud), 10);\n }\n }\n return items;\n }\n hero() {\n return m(WelcomeHero, null);\n }\n sidebar() {\n return m(IndexSidebar, null);\n }\n tagTileListView(pinned) {\n return m(\"ul\", {\n className: \"TagTiles\"\n }, pinned.map(this.tagTileView.bind(this)));\n }\n tagTileView(tag) {\n const lastPostedDiscussion = tag.lastPostedDiscussion();\n const children = sortTags(tag.children() || []);\n return m(\"li\", {\n className: classList('TagTile', {\n colored: tag.color()\n }, textContrastClass(tag.color())),\n style: {\n '--tag-bg': tag.color()\n }\n }, m(Link, {\n className: \"TagTile-info\",\n href: app.route.tag(tag)\n }, m(\"div\", {\n className: \"TagTile-heading\"\n }, tag.icon() && tagIcon(tag, {}, {\n useColor: false\n }), m(\"h3\", {\n className: \"TagTile-name\"\n }, tag.name())), m(\"p\", {\n className: \"TagTile-description\"\n }, tag.description()), !!children && m(\"div\", {\n className: \"TagTile-children\"\n }, children.map(child => [m(Link, {\n href: app.route.tag(child)\n }, child.name()), ' ']))), lastPostedDiscussion ? m(Link, {\n className: \"TagTile-lastPostedDiscussion\",\n href: app.route.discussion(lastPostedDiscussion, lastPostedDiscussion.lastPostNumber())\n }, m(\"span\", {\n className: \"TagTile-lastPostedDiscussion-title\"\n }, lastPostedDiscussion.title()), humanTime(lastPostedDiscussion.lastPostedAt())) : m(\"span\", {\n className: \"TagTile-lastPostedDiscussion\"\n }));\n }\n cloudView(cloud) {\n return m(\"div\", {\n className: \"TagCloud\"\n }, cloud.map(tag => [tagLabel(tag, {\n link: true\n }), ' ']));\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagsPage', TagsPage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/IndexPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/states/DiscussionListState');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/states/GlobalSearchState');","import Component from 'flarum/common/Component';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport classList from 'flarum/common/utils/classList';\nexport default class TagHero extends Component {\n view() {\n const tag = this.attrs.model;\n const color = tag.color();\n return m(\"header\", {\n className: classList('Hero', 'TagHero', {\n 'TagHero--colored': color,\n [textContrastClass(color)]: color\n }),\n style: color ? {\n '--hero-bg': color\n } : undefined\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"containerNarrow\"\n }, m(\"h1\", {\n className: \"Hero-title\"\n }, tag.icon() && tagIcon(tag, {}, {\n useColor: false\n }), \" \", tag.name()), m(\"div\", {\n className: \"Hero-subtitle\"\n }, tag.description()))));\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagHero', TagHero);","import app from 'flarum/forum/app';\nimport { extend, override } from 'flarum/common/extend';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport DiscussionListState from 'flarum/forum/states/DiscussionListState';\nimport GlobalSearchState from 'flarum/forum/states/GlobalSearchState';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport TagHero from './components/TagHero';\nconst findTag = slug => app.store.all('tags').find(tag => tag.slug().localeCompare(slug, undefined, {\n sensitivity: 'base'\n}) === 0);\nexport default function addTagFilter() {\n app.currentTag = function (reload) {\n if (this.currentActiveTag && !reload) {\n return this.currentActiveTag;\n }\n const slug = this.search.state.params().tags;\n let tag = null;\n if (slug) {\n tag = findTag(slug);\n }\n if (slug && !tag || tag && !tag.isChild() && !tag.children()) {\n if (this.currentTagLoading) {\n return;\n }\n this.currentTagLoading = true;\n\n // Unlike the backend, no need to fetch parent.children because if we're on\n // a child tag page, then either:\n // - We loaded in that child tag (and its siblings) in the API document\n // - We first navigated to the current tag's parent, which would have loaded in the current tag's siblings.\n this.store.find('tags', slug, {\n include: 'children,children.parent,parent,state'\n }).then(() => {\n this.currentActiveTag = findTag(slug);\n m.redraw();\n }).finally(() => {\n this.currentTagLoading = false;\n });\n }\n if (tag) {\n this.currentActiveTag = tag;\n return this.currentActiveTag;\n }\n this.currentActiveTag = undefined;\n return;\n };\n extend(IndexPage.prototype, 'view', function (vdom) {\n app.currentTag(true);\n });\n\n // If currently viewing a tag, insert a tag hero at the top of the view.\n override(IndexPage.prototype, 'hero', function (original) {\n const tag = app.currentTag();\n if (tag) return m(TagHero, {\n model: tag\n });\n return original();\n });\n extend(IndexPage.prototype, 'view', function (vdom) {\n const tag = app.currentTag();\n if (tag) vdom.attrs.className += ' IndexPage--tag' + tag.id();\n });\n extend(IndexPage.prototype, 'setTitle', function () {\n const tag = app.currentTag();\n if (tag) {\n app.setTitle(tag.name());\n }\n });\n\n // If currently viewing a tag, restyle the 'new discussion' button to use\n // the tag's color, and disable if the user isn't allowed to edit.\n extend(IndexSidebar.prototype, 'items', function (items) {\n const tag = app.currentTag();\n if (tag) {\n const color = tag.color();\n const canStartDiscussion = tag.canStartDiscussion() || !app.session.user;\n const newDiscussion = items.get('newDiscussion');\n if (color) {\n newDiscussion.attrs.className = classList([newDiscussion.attrs.className, 'Button--tagColored', textContrastClass(color)]);\n newDiscussion.attrs.style = {\n '--color': color\n };\n }\n newDiscussion.attrs.disabled = !canStartDiscussion;\n newDiscussion.children = app.translator.trans(canStartDiscussion ? 'core.forum.index.start_discussion_button' : 'core.forum.index.cannot_start_discussion_button');\n }\n });\n\n // Add a parameter for the global search state to pass on to the\n // DiscussionListState that will let us filter discussions by tag.\n extend(GlobalSearchState.prototype, 'params', function (params) {\n params.tags = m.route.param('tags');\n });\n\n // Translate that parameter into a gambit appended to the search query.\n extend(DiscussionListState.prototype, 'requestParams', function (params) {\n if (typeof params.include === 'string') {\n params.include = [params.include];\n } else {\n var _params$include;\n (_params$include = params.include) == null ? void 0 : _params$include.push('tags', 'tags.parent');\n }\n if (this.params.tags) {\n params.filter || (params.filter = {});\n params.filter.tag = this.params.tags;\n }\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/DiscussionListItem');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/DiscussionHero');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/DiscussionControls');","import { extend } from 'flarum/common/extend';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nimport Button from 'flarum/common/components/Button';\nexport default function addTagControl() {\n // Add a control allowing the discussion to be moved to another category.\n extend(DiscussionControls, 'moderationControls', function (items, discussion) {\n if (discussion.canTag()) {\n items.add('tags', m(Button, {\n icon: \"fas fa-tag\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n discussion\n })\n }, app.translator.trans('flarum-tags.forum.discussion_controls.edit_tags_button')));\n }\n });\n}flarum.reg.addChunkModule('642', '884', 'flarum-tags', 'forum/components/TagDiscussionModal');\nflarum.reg.addChunkModule('642', '884', 'flarum-tags', '/home/runner/work/framework/framework/extensions/tags/js/src/forum/components/TagDiscussionModal.tsx');\nflarum.reg.addChunkModule('642', '884', 'flarum-tags', '/home/runner/work/framework/framework/extensions/tags/js/src/common/components/TagSelectionModal.tsx');\nflarum.reg.addChunkModule('642', '884', 'flarum-tags', '/home/runner/work/framework/framework/extensions/tags/js/src/forum/components/ToggleButton.js');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Discussion');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/EventPost');","import EventPost from 'flarum/forum/components/EventPost';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class DiscussionTaggedPost extends EventPost {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const oldTags = attrs.post.content()[0];\n const newTags = attrs.post.content()[1];\n function diffTags(tags1, tags2) {\n return tags1.filter(tag => tags2.indexOf(tag) === -1).map(id => app.store.getById('tags', id));\n }\n attrs.tagsAdded = diffTags(newTags, oldTags);\n attrs.tagsRemoved = diffTags(oldTags, newTags);\n }\n icon() {\n return 'fas fa-tag';\n }\n descriptionKey() {\n if (this.attrs.tagsAdded.length) {\n if (this.attrs.tagsRemoved.length) {\n return 'flarum-tags.forum.post_stream.added_and_removed_tags_text';\n }\n return 'flarum-tags.forum.post_stream.added_tags_text';\n }\n return 'flarum-tags.forum.post_stream.removed_tags_text';\n }\n descriptionData() {\n const data = {};\n if (this.attrs.tagsAdded.length) {\n data.tagsAdded = app.translator.trans('flarum-tags.forum.post_stream.tags_text', {\n tags: tagsLabel(this.attrs.tagsAdded, {\n link: true\n }),\n count: this.attrs.tagsAdded.length\n });\n }\n if (this.attrs.tagsRemoved.length) {\n data.tagsRemoved = app.translator.trans('flarum-tags.forum.post_stream.tags_text', {\n tags: tagsLabel(this.attrs.tagsRemoved, {\n link: true\n }),\n count: this.attrs.tagsRemoved.length\n });\n }\n return data;\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/DiscussionTaggedPost', DiscussionTaggedPost);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimary() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return \"\".concat(negate ? '-' : '').concat(this.key(), \":\").concat(this.filterValueToGambitValue(value));\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","import app from 'flarum/forum/app';\nimport Extend from 'flarum/common/extenders';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport Discussion from 'flarum/common/models/Discussion';\nimport DiscussionTaggedPost from './components/DiscussionTaggedPost';\nimport TagsPage from './components/TagsPage';\nimport commonExtend from '../common/extend';\nexport default [...commonExtend, new Extend.Routes() //\n.add('tags', '/tags', TagsPage) //\n.add('tag', '/t/:tags', IndexPage) //\n.helper('tag', tag => app.route('tag', {\n tags: tag.slug()\n})), new Extend.PostTypes() //\n.add('discussionTagged', DiscussionTaggedPost), new Extend.Model(Discussion) //\n.hasMany('tags') //\n.attribute('canTag')];","import app from 'flarum/forum/app';\nimport TagListState from '../common/states/TagListState';\nimport addTagList from './addTagList';\nimport addTagFilter from './addTagFilter';\nimport addTagLabels from './addTagLabels';\nimport addTagControl from './addTagControl';\nimport addTagComposer from './addTagComposer';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-tags', function () {\n app.tagList = new TagListState();\n addTagList();\n addTagFilter();\n addTagLabels();\n addTagControl();\n addTagComposer();\n});\nimport './forum';","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Separator from 'flarum/common/components/Separator';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport TagLinkButton from './components/TagLinkButton';\nimport TagsPage from './components/TagsPage';\nimport sortTags from '../common/utils/sortTags';\nexport default function addTagList() {\n // Add a link to the tags page, as well as a list of all the tags,\n // to the index page's sidebar.\n extend(IndexSidebar.prototype, 'navItems', function (items) {\n items.add('tags', m(LinkButton, {\n icon: \"fas fa-th-large\",\n href: app.route('tags')\n }, app.translator.trans('flarum-tags.forum.index.tags_link')), -10);\n if (app.current.matches(TagsPage)) return;\n items.add('separator', m(Separator, null), -12);\n const params = app.search.state.stickyParams();\n const tags = app.store.all('tags');\n const currentTag = app.currentTag();\n const addTag = tag => {\n let active = currentTag === tag;\n if (!active && currentTag) {\n active = currentTag.parent() === tag;\n }\n\n // tag.name() is passed here as children even though it isn't used directly\n // because when we need to get the active child in SelectDropdown, we need to\n // use its children to populate the dropdown. The problem here is that `view`\n // on TagLinkButton is only called AFTER SelectDropdown, so no children are available\n // for SelectDropdown to use at the time.\n items.add('tag' + tag.id(), m(TagLinkButton, {\n model: tag,\n params: params,\n active: active\n }, tag == null ? void 0 : tag.name()), -14);\n };\n sortTags(tags).filter(tag => tag.position() !== null && (!tag.isChild() || currentTag && (tag.parent() === currentTag || tag.parent() === currentTag.parent()))).forEach(addTag);\n const more = tags.filter(tag => tag.position() === null).sort((a, b) => b.discussionCount() - a.discussionCount());\n more.splice(0, 3).forEach(addTag);\n if (more.length) {\n items.add('moreTags', m(LinkButton, {\n href: app.route('tags')\n }, app.translator.trans('flarum-tags.forum.index.more_link')), -16);\n }\n });\n}","import { extend } from 'flarum/common/extend';\nimport DiscussionListItem from 'flarum/forum/components/DiscussionListItem';\nimport DiscussionHero from 'flarum/forum/components/DiscussionHero';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport classList from 'flarum/common/utils/classList';\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport sortTags from '../common/utils/sortTags';\nexport default function addTagLabels() {\n // Add tag labels to each discussion in the discussion list.\n extend(DiscussionListItem.prototype, 'infoItems', function (items) {\n const tags = this.attrs.discussion.tags();\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags), 10);\n }\n });\n\n // Restyle a discussion's hero to use its first tag's color.\n extend(DiscussionHero.prototype, 'view', function (view) {\n const tags = sortTags(this.attrs.discussion.tags());\n if (tags && tags.length) {\n const color = tags[0].color();\n if (color) {\n view.attrs.style = {\n '--hero-bg': color\n };\n view.attrs.className = classList(view.attrs.className, 'DiscussionHero--colored', textContrastClass(color));\n }\n }\n });\n\n // Add a list of a discussion's tags to the discussion hero, displayed\n // before the title. Put the title on its own line.\n extend(DiscussionHero.prototype, 'items', function (items) {\n const tags = this.attrs.discussion.tags();\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags, {\n link: true\n }), 5);\n }\n });\n}","import app from 'flarum/forum/app';\nimport { extend, override } from 'flarum/common/extend';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport classList from 'flarum/common/utils/classList';\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport getSelectableTags from './utils/getSelectableTags';\nexport default function addTagComposer() {\n extend(IndexSidebar.prototype, 'newDiscussionAction', function (promise) {\n // From `addTagFilter\n const tag = app.currentTag();\n if (tag) {\n const parent = tag.parent();\n const tags = parent ? [parent, tag] : [tag];\n promise.then(composer => composer.fields.tags = tags);\n } else {\n app.composer.fields.tags = [];\n }\n });\n extend('flarum/forum/components/DiscussionComposer', 'oninit', function () {\n app.tagList.load(['parent']).then(() => m.redraw());\n\n // Add tag-selection abilities to the discussion composer.\n this.constructor.prototype.chooseTags = function () {\n const selectableTags = getSelectableTags();\n if (!selectableTags.length) return;\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n selectedTags: (this.composer.fields.tags || []).slice(0),\n onsubmit: tags => {\n this.composer.fields.tags = tags;\n this.$('textarea').focus();\n }\n });\n };\n });\n\n // Add a tag-selection menu to the discussion composer's header, after the\n // title.\n extend('flarum/forum/components/DiscussionComposer', 'headerItems', function (items) {\n const tags = this.composer.fields.tags || [];\n const selectableTags = getSelectableTags();\n items.add('tags', m(\"a\", {\n className: classList(['DiscussionComposer-changeTags', !selectableTags.length && 'disabled']),\n onclick: this.chooseTags.bind(this)\n }, tags.length ? tagsLabel(tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.forum.composer_discussion.choose_tags_link'))), 10);\n });\n override('flarum/forum/components/DiscussionComposer', 'onsubmit', function (original) {\n const chosenTags = this.composer.fields.tags || [];\n const chosenPrimaryTags = chosenTags.filter(tag => tag.position() !== null && !tag.isChild());\n const chosenSecondaryTags = chosenTags.filter(tag => tag.position() === null);\n const selectableTags = getSelectableTags();\n const minPrimaryTags = parseInt(app.forum.attribute('minPrimaryTags'));\n const minSecondaryTags = parseInt(app.forum.attribute('minSecondaryTags'));\n const maxPrimaryTags = parseInt(app.forum.attribute('maxPrimaryTags'));\n const maxSecondaryTags = parseInt(app.forum.attribute('maxSecondaryTags'));\n if ((!chosenTags.length && maxPrimaryTags !== 0 && maxSecondaryTags !== 0 || chosenPrimaryTags.length < minPrimaryTags || chosenSecondaryTags.length < minSecondaryTags) && selectableTags.length) {\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n selectedTags: chosenTags,\n onsubmit: tags => {\n this.composer.fields.tags = tags;\n original();\n }\n });\n } else {\n original();\n }\n });\n\n // Add the selected tags as data to submit to the server.\n extend('flarum/forum/components/DiscussionComposer', 'data', function (data) {\n data.relationships = data.relationships || {};\n data.relationships.tags = this.composer.fields.tags;\n });\n}","export default function getSelectableTags(discussion) {\n let tags = app.store.all('tags');\n if (discussion) {\n const discussionTags = discussion.tags() || [];\n tags = tags.filter(tag => tag.canAddToDiscussion() || discussionTags.includes(tag));\n } else {\n tags = tags.filter(tag => tag.canStartDiscussion());\n }\n return tags;\n}\nflarum.reg.add('flarum-tags', 'forum/utils/getSelectableTags', getSelectableTags);","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","module.exports = flarum.reg.get('core', 'forum/app');","module.exports = flarum.reg.get('core', 'forum/components/DiscussionPage');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\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 return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"forum/components/TagDiscussionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t315: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","tagIcon","tag","attrs","settings","hasIcon","icon","useColor","className","style","color","m","flarum","reg","add","tagLabel","link","tagText","name","app","translator","trans","title","description","href","route","tags","slug","isChild","sortTags","slice","sort","a","b","aPos","position","bPos","discussionCount","aParent","parent","bParent","TagListState","constructor","this","async","includes","loadedIncludes","query","unloadedIncludes","filter","include","has","length","Promise","resolve","Set","join","then","val","Array","isArray","forEach","get","TagLinkButton","view","vnode","model","child","undefined","static","super","initAttrs","params","TagsPage","arguments","oninit","preloaded","loading","redraw","oncreate","hero","bind","sidebar","contentItems","toArray","items","pinned","cloud","tagTileListView","cloudView","map","tagTileView","lastPostedDiscussion","children","colored","lastPostNumber","lastPostedAt","TagHero","findTag","find","localeCompare","sensitivity","tagsLabel","otherAttrs","push","addChunkModule","DiscussionTaggedPost","oldTags","post","content","newTags","diffTags","tags1","tags2","indexOf","id","store","getById","tagsAdded","tagsRemoved","descriptionKey","descriptionData","data","count","Tag","call","backgroundUrl","backgroundMode","defaultSort","isHidden","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimary","TagGambit","KeyValueGambit","key","hint","filterKey","gambitValueToFilterValue","value","fromFilter","negate","gambits","toString","concat","filterValueToGambitValue","gambit","helper","hasMany","attribute","extend","currentTag","addTag","active","more","splice","reload","currentActiveTag","search","state","currentTagLoading","finally","vdom","override","original","newDiscussion","disabled","param","_params$include","discussion","canTag","onclick","modal","show","promise","composer","fields","prototype","chooseTags","getSelectableTags","selectedTags","onsubmit","$","focus","selectableTags","chosenTags","chosenPrimaryTags","chosenSecondaryTags","minPrimaryTags","parseInt","minSecondaryTags","maxPrimaryTags","maxSecondaryTags","relationships","all","discussionTags","module","exports","_typeof","obj","Symbol","iterator","_defineProperty","arg","input","prim","toPrimitive","res","TypeError","String","toPropertyKey","Object","defineProperty","enumerable","configurable","writable","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","definition","o","f","e","chunkId","keys","reduce","promises","u","g","globalThis","Function","window","prop","hasOwnProperty","l","url","done","script","needAttach","scripts","document","getElementsByTagName","i","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","fn","setTimeout","type","target","head","appendChild","r","toStringTag","scriptUrl","importScripts","location","currentScript","Error","replace","p","compat","originalLoadChunk","loadChunk","installedChunks","j","installedChunkData","reject","error","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","some","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/IndexSidebar')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Separator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LinkButton')\"","webpack://@flarum/tags/./src/forum/components/TagLinkButton.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Page')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/PageStructure')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/WelcomeHero')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/humanTime')\"","webpack://@flarum/tags/./src/forum/components/TagsPage.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/IndexPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/states/DiscussionListState')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/states/GlobalSearchState')\"","webpack://@flarum/tags/./src/forum/components/TagHero.js","webpack://@flarum/tags/./src/forum/addTagFilter.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionListItem')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionHero')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/utils/DiscussionControls')\"","webpack://@flarum/tags/./src/forum/addTagControl.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/models/Discussion')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/EventPost')\"","webpack://@flarum/tags/./src/forum/components/DiscussionTaggedPost.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/./src/forum/extend.ts","webpack://@flarum/tags/./src/forum/index.ts","webpack://@flarum/tags/./src/forum/addTagList.js","webpack://@flarum/tags/./src/forum/addTagLabels.js","webpack://@flarum/tags/./src/forum/addTagComposer.js","webpack://@flarum/tags/./src/forum/utils/getSelectableTags.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionPage')\"","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n var _this$loadedIncludes;\n if (includes === void 0) {\n includes = [];\n }\n (_this$loadedIncludes = this.loadedIncludes) != null ? _this$loadedIncludes : this.loadedIncludes = new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/IndexSidebar');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Separator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LinkButton');","import Link from 'flarum/common/components/Link';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport classList from 'flarum/common/utils/classList';\nimport tagIcon from '../../common/helpers/tagIcon';\nexport default class TagLinkButton extends LinkButton {\n view(vnode) {\n const tag = this.attrs.model;\n const description = tag && tag.description();\n const className = classList('TagLinkButton hasIcon', {\n child: tag.isChild()\n }, this.attrs.className);\n return m(Link, {\n className: className,\n href: this.attrs.route,\n style: tag ? {\n '--color': tag.color()\n } : undefined,\n title: description || undefined\n }, tagIcon(tag, {\n className: 'Button-icon'\n }), m(\"span\", {\n className: \"Button-label\"\n }, tag ? tag.name() : app.translator.trans('flarum-tags.forum.index.untagged_link')));\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const tag = attrs.model;\n attrs.params.tags = tag ? tag.slug() : 'untagged';\n attrs.route = app.route('tag', attrs.params);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagLinkButton', TagLinkButton);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Page');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/PageStructure');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/WelcomeHero');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/humanTime');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport PageStructure from 'flarum/forum/components/PageStructure';\nimport WelcomeHero from 'flarum/forum/components/WelcomeHero';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Link from 'flarum/common/components/Link';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport tagLabel from '../../common/helpers/tagLabel';\nimport sortTags from '../../common/utils/sortTags';\nexport default class TagsPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"loading\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n app.history.push('tags', extractText(app.translator.trans('flarum-tags.forum.header.back_to_tags_tooltip')));\n this.tags = [];\n const preloaded = app.preloadedApiDocument();\n if (preloaded) {\n this.tags = sortTags(preloaded.filter(tag => !tag.isChild()));\n return;\n }\n this.loading = true;\n app.tagList.load(['children', 'lastPostedDiscussion', 'parent']).then(() => {\n this.tags = sortTags(app.store.all('tags').filter(tag => !tag.isChild()));\n this.loading = false;\n m.redraw();\n });\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n app.setTitle(extractText(app.translator.trans('flarum-tags.forum.all_tags.meta_title_text')));\n app.setTitleCount(0);\n }\n view() {\n return m(PageStructure, {\n className: \"TagsPage\",\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this)\n }, this.contentItems().toArray());\n }\n contentItems() {\n const items = new ItemList();\n if (this.loading) {\n items.add('loading', m(LoadingIndicator, null));\n } else {\n const pinned = this.tags.filter(tag => tag.position() !== null);\n const cloud = this.tags.filter(tag => tag.position() === null);\n items.add('tagTiles', this.tagTileListView(pinned), 100);\n if (cloud.length) {\n items.add('cloud', this.cloudView(cloud), 10);\n }\n }\n return items;\n }\n hero() {\n return m(WelcomeHero, null);\n }\n sidebar() {\n return m(IndexSidebar, null);\n }\n tagTileListView(pinned) {\n return m(\"ul\", {\n className: \"TagTiles\"\n }, pinned.map(this.tagTileView.bind(this)));\n }\n tagTileView(tag) {\n const lastPostedDiscussion = tag.lastPostedDiscussion();\n const children = sortTags(tag.children() || []);\n return m(\"li\", {\n className: classList('TagTile', {\n colored: tag.color()\n }, textContrastClass(tag.color())),\n style: {\n '--tag-bg': tag.color()\n }\n }, m(Link, {\n className: \"TagTile-info\",\n href: app.route.tag(tag)\n }, m(\"div\", {\n className: \"TagTile-heading\"\n }, tag.icon() && tagIcon(tag, {}, {\n useColor: false\n }), m(\"h3\", {\n className: \"TagTile-name\"\n }, tag.name())), m(\"p\", {\n className: \"TagTile-description\"\n }, tag.description()), !!children && m(\"div\", {\n className: \"TagTile-children\"\n }, children.map(child => [m(Link, {\n href: app.route.tag(child)\n }, child.name()), ' ']))), lastPostedDiscussion ? m(Link, {\n className: \"TagTile-lastPostedDiscussion\",\n href: app.route.discussion(lastPostedDiscussion, lastPostedDiscussion.lastPostNumber())\n }, m(\"span\", {\n className: \"TagTile-lastPostedDiscussion-title\"\n }, lastPostedDiscussion.title()), humanTime(lastPostedDiscussion.lastPostedAt())) : m(\"span\", {\n className: \"TagTile-lastPostedDiscussion\"\n }));\n }\n cloudView(cloud) {\n return m(\"div\", {\n className: \"TagCloud\"\n }, cloud.map(tag => [tagLabel(tag, {\n link: true\n }), ' ']));\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagsPage', TagsPage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/IndexPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/states/DiscussionListState');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/states/GlobalSearchState');","import Component from 'flarum/common/Component';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport classList from 'flarum/common/utils/classList';\nexport default class TagHero extends Component {\n view() {\n const tag = this.attrs.model;\n const color = tag.color();\n return m(\"header\", {\n className: classList('Hero', 'TagHero', {\n 'TagHero--colored': color,\n [textContrastClass(color)]: color\n }),\n style: color ? {\n '--hero-bg': color\n } : undefined\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"containerNarrow\"\n }, m(\"h1\", {\n className: \"Hero-title\"\n }, tag.icon() && tagIcon(tag, {}, {\n useColor: false\n }), \" \", tag.name()), m(\"div\", {\n className: \"Hero-subtitle\"\n }, tag.description()))));\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagHero', TagHero);","import app from 'flarum/forum/app';\nimport { extend, override } from 'flarum/common/extend';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport DiscussionListState from 'flarum/forum/states/DiscussionListState';\nimport GlobalSearchState from 'flarum/forum/states/GlobalSearchState';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport TagHero from './components/TagHero';\nconst findTag = slug => app.store.all('tags').find(tag => tag.slug().localeCompare(slug, undefined, {\n sensitivity: 'base'\n}) === 0);\nexport default function addTagFilter() {\n app.currentTag = function (reload) {\n if (this.currentActiveTag && !reload) {\n return this.currentActiveTag;\n }\n const slug = this.search.state.params().tags;\n let tag = null;\n if (slug) {\n tag = findTag(slug);\n }\n if (slug && !tag || tag && !tag.isChild() && !tag.children()) {\n if (this.currentTagLoading) {\n return;\n }\n this.currentTagLoading = true;\n\n // Unlike the backend, no need to fetch parent.children because if we're on\n // a child tag page, then either:\n // - We loaded in that child tag (and its siblings) in the API document\n // - We first navigated to the current tag's parent, which would have loaded in the current tag's siblings.\n this.store.find('tags', slug, {\n include: 'children,children.parent,parent'\n }).then(() => {\n this.currentActiveTag = findTag(slug);\n m.redraw();\n }).finally(() => {\n this.currentTagLoading = false;\n });\n }\n if (tag) {\n this.currentActiveTag = tag;\n return this.currentActiveTag;\n }\n this.currentActiveTag = undefined;\n return;\n };\n extend(IndexPage.prototype, 'view', function (vdom) {\n app.currentTag(true);\n });\n\n // If currently viewing a tag, insert a tag hero at the top of the view.\n override(IndexPage.prototype, 'hero', function (original) {\n const tag = app.currentTag();\n if (tag) return m(TagHero, {\n model: tag\n });\n return original();\n });\n extend(IndexPage.prototype, 'view', function (vdom) {\n const tag = app.currentTag();\n if (tag) vdom.attrs.className += ' IndexPage--tag' + tag.id();\n });\n extend(IndexPage.prototype, 'setTitle', function () {\n const tag = app.currentTag();\n if (tag) {\n app.setTitle(tag.name());\n }\n });\n\n // If currently viewing a tag, restyle the 'new discussion' button to use\n // the tag's color, and disable if the user isn't allowed to edit.\n extend(IndexSidebar.prototype, 'items', function (items) {\n const tag = app.currentTag();\n if (tag) {\n const color = tag.color();\n const canStartDiscussion = tag.canStartDiscussion() || !app.session.user;\n const newDiscussion = items.get('newDiscussion');\n if (color) {\n newDiscussion.attrs.className = classList([newDiscussion.attrs.className, 'Button--tagColored', textContrastClass(color)]);\n newDiscussion.attrs.style = {\n '--color': color\n };\n }\n newDiscussion.attrs.disabled = !canStartDiscussion;\n newDiscussion.children = app.translator.trans(canStartDiscussion ? 'core.forum.index.start_discussion_button' : 'core.forum.index.cannot_start_discussion_button');\n }\n });\n\n // Add a parameter for the global search state to pass on to the\n // DiscussionListState that will let us filter discussions by tag.\n extend(GlobalSearchState.prototype, 'params', function (params) {\n params.tags = m.route.param('tags');\n });\n\n // Translate that parameter into a gambit appended to the search query.\n extend(DiscussionListState.prototype, 'requestParams', function (params) {\n if (typeof params.include === 'string') {\n params.include = [params.include];\n } else {\n var _params$include;\n (_params$include = params.include) == null ? void 0 : _params$include.push('tags', 'tags.parent');\n }\n if (this.params.tags) {\n params.filter || (params.filter = {});\n params.filter.tag = this.params.tags;\n }\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/DiscussionListItem');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/DiscussionHero');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/DiscussionControls');","import { extend } from 'flarum/common/extend';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nimport Button from 'flarum/common/components/Button';\nexport default function addTagControl() {\n // Add a control allowing the discussion to be moved to another category.\n extend(DiscussionControls, 'moderationControls', function (items, discussion) {\n if (discussion.canTag()) {\n items.add('tags', m(Button, {\n icon: \"fas fa-tag\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n discussion\n })\n }, app.translator.trans('flarum-tags.forum.discussion_controls.edit_tags_button')));\n }\n });\n}flarum.reg.addChunkModule('642', '884', 'flarum-tags', 'forum/components/TagDiscussionModal');\nflarum.reg.addChunkModule('642', '884', 'flarum-tags', '/home/runner/work/framework/framework/extensions/tags/js/src/forum/components/TagDiscussionModal.tsx');\nflarum.reg.addChunkModule('642', '884', 'flarum-tags', '/home/runner/work/framework/framework/extensions/tags/js/src/common/components/TagSelectionModal.tsx');\nflarum.reg.addChunkModule('642', '884', 'flarum-tags', '/home/runner/work/framework/framework/extensions/tags/js/src/forum/components/ToggleButton.js');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Discussion');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/EventPost');","import EventPost from 'flarum/forum/components/EventPost';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class DiscussionTaggedPost extends EventPost {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const oldTags = attrs.post.content()[0];\n const newTags = attrs.post.content()[1];\n function diffTags(tags1, tags2) {\n return tags1.filter(tag => tags2.indexOf(tag) === -1).map(id => app.store.getById('tags', id));\n }\n attrs.tagsAdded = diffTags(newTags, oldTags);\n attrs.tagsRemoved = diffTags(oldTags, newTags);\n }\n icon() {\n return 'fas fa-tag';\n }\n descriptionKey() {\n if (this.attrs.tagsAdded.length) {\n if (this.attrs.tagsRemoved.length) {\n return 'flarum-tags.forum.post_stream.added_and_removed_tags_text';\n }\n return 'flarum-tags.forum.post_stream.added_tags_text';\n }\n return 'flarum-tags.forum.post_stream.removed_tags_text';\n }\n descriptionData() {\n const data = {};\n if (this.attrs.tagsAdded.length) {\n data.tagsAdded = app.translator.trans('flarum-tags.forum.post_stream.tags_text', {\n tags: tagsLabel(this.attrs.tagsAdded, {\n link: true\n }),\n count: this.attrs.tagsAdded.length\n });\n }\n if (this.attrs.tagsRemoved.length) {\n data.tagsRemoved = app.translator.trans('flarum-tags.forum.post_stream.tags_text', {\n tags: tagsLabel(this.attrs.tagsRemoved, {\n link: true\n }),\n count: this.attrs.tagsRemoved.length\n });\n }\n return data;\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/DiscussionTaggedPost', DiscussionTaggedPost);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n isPrimary() {\n return Model.attribute('isPrimary').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimaryParent() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return \"\".concat(negate ? '-' : '').concat(this.key(), \":\").concat(this.filterValueToGambitValue(value));\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","import app from 'flarum/forum/app';\nimport Extend from 'flarum/common/extenders';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport Discussion from 'flarum/common/models/Discussion';\nimport DiscussionTaggedPost from './components/DiscussionTaggedPost';\nimport TagsPage from './components/TagsPage';\nimport commonExtend from '../common/extend';\nexport default [...commonExtend, new Extend.Routes() //\n.add('tags', '/tags', TagsPage) //\n.add('tag', '/t/:tags', IndexPage) //\n.helper('tag', tag => app.route('tag', {\n tags: tag.slug()\n})), new Extend.PostTypes() //\n.add('discussionTagged', DiscussionTaggedPost), new Extend.Model(Discussion) //\n.hasMany('tags') //\n.attribute('canTag')];","import app from 'flarum/forum/app';\nimport TagListState from '../common/states/TagListState';\nimport addTagList from './addTagList';\nimport addTagFilter from './addTagFilter';\nimport addTagLabels from './addTagLabels';\nimport addTagControl from './addTagControl';\nimport addTagComposer from './addTagComposer';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-tags', function () {\n app.tagList = new TagListState();\n addTagList();\n addTagFilter();\n addTagLabels();\n addTagControl();\n addTagComposer();\n});\nimport './forum';","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Separator from 'flarum/common/components/Separator';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport TagLinkButton from './components/TagLinkButton';\nimport TagsPage from './components/TagsPage';\nimport sortTags from '../common/utils/sortTags';\nexport default function addTagList() {\n // Add a link to the tags page, as well as a list of all the tags,\n // to the index page's sidebar.\n extend(IndexSidebar.prototype, 'navItems', function (items) {\n items.add('tags', m(LinkButton, {\n icon: \"fas fa-th-large\",\n href: app.route('tags')\n }, app.translator.trans('flarum-tags.forum.index.tags_link')), -10);\n if (app.current.matches(TagsPage)) return;\n items.add('separator', m(Separator, null), -12);\n const params = app.search.state.stickyParams();\n const tags = app.store.all('tags');\n const currentTag = app.currentTag();\n const addTag = tag => {\n let active = currentTag === tag;\n if (!active && currentTag) {\n active = currentTag.parent() === tag;\n }\n\n // tag.name() is passed here as children even though it isn't used directly\n // because when we need to get the active child in SelectDropdown, we need to\n // use its children to populate the dropdown. The problem here is that `view`\n // on TagLinkButton is only called AFTER SelectDropdown, so no children are available\n // for SelectDropdown to use at the time.\n items.add('tag' + tag.id(), m(TagLinkButton, {\n model: tag,\n params: params,\n active: active\n }, tag == null ? void 0 : tag.name()), -14);\n };\n sortTags(tags).filter(tag => tag.position() !== null && (!tag.isChild() || currentTag && (tag.parent() === currentTag || tag.parent() === currentTag.parent()))).forEach(addTag);\n const more = tags.filter(tag => tag.position() === null).sort((a, b) => b.discussionCount() - a.discussionCount());\n more.splice(0, 3).forEach(addTag);\n if (more.length) {\n items.add('moreTags', m(LinkButton, {\n href: app.route('tags')\n }, app.translator.trans('flarum-tags.forum.index.more_link')), -16);\n }\n });\n}","import { extend } from 'flarum/common/extend';\nimport DiscussionListItem from 'flarum/forum/components/DiscussionListItem';\nimport DiscussionHero from 'flarum/forum/components/DiscussionHero';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport classList from 'flarum/common/utils/classList';\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport sortTags from '../common/utils/sortTags';\nexport default function addTagLabels() {\n // Add tag labels to each discussion in the discussion list.\n extend(DiscussionListItem.prototype, 'infoItems', function (items) {\n const tags = this.attrs.discussion.tags();\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags), 10);\n }\n });\n\n // Restyle a discussion's hero to use its first tag's color.\n extend(DiscussionHero.prototype, 'view', function (view) {\n const tags = sortTags(this.attrs.discussion.tags());\n if (tags && tags.length) {\n const color = tags[0].color();\n if (color) {\n view.attrs.style = {\n '--hero-bg': color\n };\n view.attrs.className = classList(view.attrs.className, 'DiscussionHero--colored', textContrastClass(color));\n }\n }\n });\n\n // Add a list of a discussion's tags to the discussion hero, displayed\n // before the title. Put the title on its own line.\n extend(DiscussionHero.prototype, 'items', function (items) {\n const tags = this.attrs.discussion.tags();\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags, {\n link: true\n }), 5);\n }\n });\n}","import app from 'flarum/forum/app';\nimport { extend, override } from 'flarum/common/extend';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport classList from 'flarum/common/utils/classList';\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport getSelectableTags from './utils/getSelectableTags';\nexport default function addTagComposer() {\n extend(IndexSidebar.prototype, 'newDiscussionAction', function (promise) {\n // From `addTagFilter\n const tag = app.currentTag();\n if (tag) {\n const parent = tag.parent();\n const tags = parent ? [parent, tag] : [tag];\n promise.then(composer => composer.fields.tags = tags);\n } else {\n app.composer.fields.tags = [];\n }\n });\n extend('flarum/forum/components/DiscussionComposer', 'oninit', function () {\n app.tagList.load(['parent']).then(() => m.redraw());\n\n // Add tag-selection abilities to the discussion composer.\n this.constructor.prototype.chooseTags = function () {\n const selectableTags = getSelectableTags();\n if (!selectableTags.length) return;\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n selectedTags: (this.composer.fields.tags || []).slice(0),\n onsubmit: tags => {\n this.composer.fields.tags = tags;\n this.$('textarea').focus();\n }\n });\n };\n });\n\n // Add a tag-selection menu to the discussion composer's header, after the\n // title.\n extend('flarum/forum/components/DiscussionComposer', 'headerItems', function (items) {\n const tags = this.composer.fields.tags || [];\n const selectableTags = getSelectableTags();\n items.add('tags', m(\"a\", {\n className: classList(['DiscussionComposer-changeTags', !selectableTags.length && 'disabled']),\n onclick: this.chooseTags.bind(this)\n }, tags.length ? tagsLabel(tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.forum.composer_discussion.choose_tags_link'))), 10);\n });\n override('flarum/forum/components/DiscussionComposer', 'onsubmit', function (original) {\n const chosenTags = this.composer.fields.tags || [];\n const chosenPrimaryTags = chosenTags.filter(tag => tag.position() !== null && !tag.isChild());\n const chosenSecondaryTags = chosenTags.filter(tag => tag.position() === null);\n const selectableTags = getSelectableTags();\n const minPrimaryTags = parseInt(app.forum.attribute('minPrimaryTags'));\n const minSecondaryTags = parseInt(app.forum.attribute('minSecondaryTags'));\n const maxPrimaryTags = parseInt(app.forum.attribute('maxPrimaryTags'));\n const maxSecondaryTags = parseInt(app.forum.attribute('maxSecondaryTags'));\n if ((!chosenTags.length && maxPrimaryTags !== 0 && maxSecondaryTags !== 0 || chosenPrimaryTags.length < minPrimaryTags || chosenSecondaryTags.length < minSecondaryTags) && selectableTags.length) {\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n selectedTags: chosenTags,\n onsubmit: tags => {\n this.composer.fields.tags = tags;\n original();\n }\n });\n } else {\n original();\n }\n });\n\n // Add the selected tags as data to submit to the server.\n extend('flarum/forum/components/DiscussionComposer', 'data', function (data) {\n data.relationships = data.relationships || {};\n data.relationships.tags = this.composer.fields.tags;\n });\n}","export default function getSelectableTags(discussion) {\n let tags = app.store.all('tags');\n if (discussion) {\n const discussionTags = discussion.tags() || [];\n tags = tags.filter(tag => tag.canAddToDiscussion() || discussionTags.includes(tag));\n } else {\n tags = tags.filter(tag => tag.canStartDiscussion());\n }\n return tags;\n}\nflarum.reg.add('flarum-tags', 'forum/utils/getSelectableTags', getSelectableTags);","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","module.exports = flarum.reg.get('core', 'forum/app');","module.exports = flarum.reg.get('core', 'forum/components/DiscussionPage');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\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 return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"forum/components/TagDiscussionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t315: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","tagIcon","tag","attrs","settings","hasIcon","icon","useColor","className","style","color","m","flarum","reg","add","tagLabel","link","tagText","name","app","translator","trans","title","description","href","route","tags","slug","isChild","sortTags","slice","sort","a","b","aPos","position","bPos","discussionCount","aParent","parent","bParent","TagListState","constructor","this","async","includes","loadedIncludes","query","unloadedIncludes","filter","include","has","length","Promise","resolve","Set","join","then","val","Array","isArray","forEach","get","TagLinkButton","view","vnode","model","child","undefined","static","super","initAttrs","params","TagsPage","arguments","oninit","preloaded","loading","redraw","oncreate","hero","bind","sidebar","contentItems","toArray","items","pinned","cloud","tagTileListView","cloudView","map","tagTileView","lastPostedDiscussion","children","colored","lastPostNumber","lastPostedAt","TagHero","findTag","find","localeCompare","sensitivity","tagsLabel","otherAttrs","push","addChunkModule","DiscussionTaggedPost","oldTags","post","content","newTags","diffTags","tags1","tags2","indexOf","id","store","getById","tagsAdded","tagsRemoved","descriptionKey","descriptionData","data","count","Tag","call","backgroundUrl","backgroundMode","defaultSort","isHidden","isPrimary","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimaryParent","TagGambit","KeyValueGambit","key","hint","filterKey","gambitValueToFilterValue","value","fromFilter","negate","gambits","toString","concat","filterValueToGambitValue","gambit","helper","hasMany","attribute","extend","currentTag","addTag","active","more","splice","reload","currentActiveTag","search","state","currentTagLoading","finally","vdom","override","original","newDiscussion","disabled","param","_params$include","discussion","canTag","onclick","modal","show","promise","composer","fields","prototype","chooseTags","getSelectableTags","selectedTags","onsubmit","$","focus","selectableTags","chosenTags","chosenPrimaryTags","chosenSecondaryTags","minPrimaryTags","parseInt","minSecondaryTags","maxPrimaryTags","maxSecondaryTags","relationships","all","discussionTags","module","exports","_typeof","obj","Symbol","iterator","_defineProperty","arg","input","prim","toPrimitive","res","TypeError","String","toPropertyKey","Object","defineProperty","enumerable","configurable","writable","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","definition","o","f","e","chunkId","keys","reduce","promises","u","g","globalThis","Function","window","prop","hasOwnProperty","l","url","done","script","needAttach","scripts","document","getElementsByTagName","i","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","fn","setTimeout","type","target","head","appendChild","r","toStringTag","scriptUrl","importScripts","location","currentScript","Error","replace","p","compat","originalLoadChunk","loadChunk","installedChunks","j","installedChunkData","reject","error","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","some","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/tags/js/dist/forum/components/TagDiscussionModal.js b/extensions/tags/js/dist/forum/components/TagDiscussionModal.js index 3049d85d4..a5f3b4dae 100644 --- a/extensions/tags/js/dist/forum/components/TagDiscussionModal.js +++ b/extensions/tags/js/dist/forum/components/TagDiscussionModal.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[642],{884:(t,e,s)=>{s.r(e),s.d(e,{default:()=>B});var i=s(892),a=s.n(i),n=s(232),l=s.n(n),r=s(836),o=s.n(r),c=s(596),d=s.n(c),h=s(490),u=s(905),g=s(351),p=s.n(g),f=s(645),y=s.n(f),T=s(291),b=s.n(T),x=s(657),w=s.n(x),v=s(149),I=s.n(v),N=s(44),S=s.n(N),_=s(636),C=s.n(_),k=s(648),q=s(924),R=s(974),M=s(433),Z=s.n(M);class L extends(Z()){view(t){const{className:e,isToggled:s,...i}=this.attrs,a=s?"far fa-check-circle":"far fa-circle";return m(y(),Object.assign({},i,{icon:a,className:o()([e,s&&"Button--toggled"])}),t.children)}}flarum.reg.add("flarum-tags","forum/components/ToggleButton",L);class P extends(S()){constructor(){super(...arguments),(0,u.Z)(this,"loading",!0),(0,u.Z)(this,"tags",void 0),(0,u.Z)(this,"selected",[]),(0,u.Z)(this,"bypassReqs",!1),(0,u.Z)(this,"filter",C()("")),(0,u.Z)(this,"focused",!1),(0,u.Z)(this,"navigator",new(w())),(0,u.Z)(this,"indexTag",void 0)}static initAttrs(t){var e,s,i,a,n,l,r,o,m,c,h,u,g,f,y,T,b,x;super.initAttrs(t),t.title||(t.title=d()(p().translator.trans("flarum-tags.lib.tag_selection_modal.title"))),t.canSelect||(t.canSelect=()=>!0),null!=t.allowResetting||(t.allowResetting=!0),t.limits={min:{total:null!=(e=null==(s=t.limits)||null==(i=s.min)?void 0:i.total)?e:-1/0,primary:null!=(a=null==(n=t.limits)||null==(l=n.min)?void 0:l.primary)?a:-1/0,secondary:null!=(r=null==(o=t.limits)||null==(m=o.min)?void 0:m.secondary)?r:-1/0},max:{total:null!=(c=null==(h=t.limits)||null==(u=h.max)?void 0:u.total)?c:1/0,primary:null!=(g=null==(f=t.limits)||null==(y=f.max)?void 0:y.primary)?g:1/0,secondary:null!=(T=null==(b=t.limits)||null==(x=b.max)?void 0:x.secondary)?T:1/0}},function(t){if(t.min.primary>t.max.primary)throw new Error("The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.");if(t.min.secondary>t.max.secondary)throw new Error("The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.");if(t.min.total>t.max.primary+t.max.secondary)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.");if(t.max.totalt.max.total)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of tags allowed.")}(t.limits)}oninit(t){super.oninit(t),this.navigator.onUp((()=>this.setIndex(this.getCurrentNumericIndex()-1,!0))).onDown((()=>this.setIndex(this.getCurrentNumericIndex()+1,!0))).onSelect(this.select.bind(this)).onRemove((()=>this.selected.splice(this.selected.length-1,1))),p().tagList.load(["parent"]).then((t=>{this.loading=!1,this.attrs.selectableTags&&(t=this.attrs.selectableTags(t)),this.tags=(0,k.Z)(t),this.attrs.selectedTags&&this.attrs.selectedTags.map(this.addTag.bind(this)),this.indexTag=t[0],m.redraw()}))}className(){return o()("TagSelectionModal",this.attrs.className)}title(){return this.attrs.title}content(){if(this.loading||!this.tags)return m(I(),null);const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount(),i=this.getFilteredTags(),a=Math.max(d()(this.getInstruction(e,s)).length,this.filter().length);return[m("div",{className:"Modal-body"},m("div",{className:"TagSelectionModal-form"},m("div",{className:"TagSelectionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:()=>this.$(".TagsInput input").focus()},m("span",{className:"TagsInput-selected"},this.selected.map((t=>m("span",{className:"TagsInput-tag",onclick:()=>{this.removeTag(t),this.onready()}},(0,q.Z)(t))))),m("input",{className:"FormControl",placeholder:d()(this.getInstruction(e,s)),bidi:this.filter,style:{width:a+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:()=>this.focused=!0,onblur:()=>this.focused=!1}))),m("div",{className:"TagSelectionModal-form-submit App-primaryControl"},m(y(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(e,s),icon:"fas fa-check"},p().translator.trans("flarum-tags.lib.tag_selection_modal.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagSelectionModal-list SelectTagList"},i.map((e=>m("li",{"data-index":e.id(),className:o()("SelectTagListItem",{pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:this.selected.includes(e),active:this.indexTag===e}),style:{color:e.color()},onmouseover:()=>this.indexTag=e,onclick:this.toggleTag.bind(this,e)},m("i",{className:"SelectTagListItem-icon"},(0,R.Z)(e,{className:"SelectTagListItem-tagIcon"}),m("i",{className:"icon TagIcon fas fa-check SelectTagListItem-checkIcon"})),m("span",{className:"SelectTagListItem-name"},b()(e.name(),t)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")))),this.attrs.limits.allowBypassing&&m("div",{className:"TagSelectionModal-controls"},m(L,{className:"Button",onclick:()=>this.bypassReqs=!this.bypassReqs,isToggled:this.bypassReqs},p().translator.trans("flarum-tags.lib.tag_selection_modal.bypass_requirements"))))]}getFilteredTags(){const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount();let i=this.tags;return this.attrs.requireParentTag&&(i=i.filter((t=>{const e=t.parent();return null!==e&&(!1===e||this.selected.includes(e))}))),this.bypassReqs||(this.selected.length>=this.attrs.limits.max.total?i=i.filter((t=>this.selected.includes(t))):(e>=this.attrs.limits.max.primary&&(i=i.filter((t=>!t.isPrimary()||this.selected.includes(t)))),s>=this.attrs.limits.max.secondary&&(i=i.filter((t=>t.isPrimary()||this.selected.includes(t)))))),t&&(i=i.filter((e=>e.name().toLowerCase().includes(t)))),this.indexTag&&i.includes(this.indexTag)||(this.indexTag=i[0]),i}primaryCount(){return this.selected.filter((t=>t.isPrimary())).length}secondaryCount(){return this.selected.filter((t=>!t.isPrimary())).length}meetsRequirements(t,e){return!!(this.bypassReqs||this.attrs.allowResetting&&0===this.selected.length)||!(this.selected.length=this.attrs.limits.min.primary&&e>=this.attrs.limits.min.secondary}addTag(t){if(t&&this.attrs.canSelect(t)){if(this.attrs.onSelect&&this.attrs.onSelect(t,this.selected),this.attrs.requireParentTag){const e=t.parent();e&&!this.selected.includes(e)&&this.selected.push(e)}this.selected.includes(t)||this.selected.push(t)}}removeTag(t){const e=this.selected.indexOf(t);-1!==e&&(this.selected.splice(e,1),this.attrs.requireParentTag&&this.selected.filter((e=>e.parent()===t)).forEach(this.removeTag.bind(this)),this.attrs.onDeselect&&this.attrs.onDeselect(t,this.selected))}toggleTag(t){this.tags&&(this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.indexTag=this.tags[0]),this.onready())}getInstruction(t,e){if(this.bypassReqs)return"";if(t li")}getCurrentNumericIndex(){return this.indexTag?this.selectableItems().index(this.getItem(this.indexTag)):-1}getItem(t){return this.selectableItems().filter('[data-index="'.concat(t.id(),'"]'))}setIndex(t,e){const s=this.selectableItems(),i=s.parent();t<0?t=s.length-1:t>=s.length&&(t=0);const a=s.eq(t);if(this.indexTag=p().store.getById("tags",a.attr("data-index")),m.redraw(),e&&this.indexTag){const t=i.scrollTop(),e=i.offset().top,s=e+i.outerHeight(),n=a.offset().top,l=n+a.outerHeight();let r;ns&&(r=t-s+l+parseInt(i.css("padding-bottom"),10)),void 0!==r&&i.stop(!0).animate({scrollTop:r},100)}}}flarum.reg.add("flarum-tags","common/components/TagSelectionModal",P);class B extends P{static initAttrs(t){var e;super.initAttrs(t);const s=t.discussion?a().translator.trans("flarum-tags.forum.choose_tags.edit_title",{title:m("em",null,t.discussion.title())}):a().translator.trans("flarum-tags.forum.choose_tags.title");t.className=o()(t.className,"TagDiscussionModal"),t.title=d()(s),t.allowResetting=!!a().forum.attribute("canBypassTagCounts"),t.limits={allowBypassing:t.allowResetting,max:{primary:a().forum.attribute("maxPrimaryTags"),secondary:a().forum.attribute("maxSecondaryTags")},min:{primary:a().forum.attribute("minPrimaryTags"),secondary:a().forum.attribute("minSecondaryTags")}},t.requireParentTag=!0,t.selectableTags=()=>(0,h.Z)(t.discussion),null!=t.selectedTags||(t.selectedTags=(null==(e=t.discussion)?void 0:e.tags())||[]),t.canSelect=t=>t.canStartDiscussion();const i=t.onsubmit||null;t.onsubmit=function(e){const s=t.discussion;s&&s.save({relationships:{tags:e}}).then((()=>{a().current.matches(l())&&a().current.get("stream").update(),m.redraw()})),i&&i(e)}}}flarum.reg.add("flarum-tags","forum/components/TagDiscussionModal",B)}}]); +"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[642],{884:(t,e,s)=>{s.r(e),s.d(e,{default:()=>B});var i=s(892),a=s.n(i),n=s(232),l=s.n(n),r=s(836),o=s.n(r),c=s(596),d=s.n(c),h=s(490),u=s(905),g=s(351),p=s.n(g),f=s(645),y=s.n(f),T=s(291),b=s.n(T),x=s(657),w=s.n(x),v=s(149),I=s.n(v),N=s(44),S=s.n(N),_=s(636),C=s.n(_),k=s(648),q=s(924),R=s(974),P=s(433),M=s.n(P);class Z extends(M()){view(t){const{className:e,isToggled:s,...i}=this.attrs,a=s?"far fa-check-circle":"far fa-circle";return m(y(),Object.assign({},i,{icon:a,className:o()([e,s&&"Button--toggled"])}),t.children)}}flarum.reg.add("flarum-tags","forum/components/ToggleButton",Z);class L extends(S()){constructor(){super(...arguments),(0,u.Z)(this,"loading",!0),(0,u.Z)(this,"tags",void 0),(0,u.Z)(this,"selected",[]),(0,u.Z)(this,"bypassReqs",!1),(0,u.Z)(this,"filter",C()("")),(0,u.Z)(this,"focused",!1),(0,u.Z)(this,"navigator",new(w())),(0,u.Z)(this,"indexTag",void 0)}static initAttrs(t){var e,s,i,a,n,l,r,o,m,c,h,u,g,f,y,T,b,x;super.initAttrs(t),t.title||(t.title=d()(p().translator.trans("flarum-tags.lib.tag_selection_modal.title"))),t.canSelect||(t.canSelect=()=>!0),null!=t.allowResetting||(t.allowResetting=!0),t.limits={min:{total:null!=(e=null==(s=t.limits)||null==(i=s.min)?void 0:i.total)?e:-1/0,primary:null!=(a=null==(n=t.limits)||null==(l=n.min)?void 0:l.primary)?a:-1/0,secondary:null!=(r=null==(o=t.limits)||null==(m=o.min)?void 0:m.secondary)?r:-1/0},max:{total:null!=(c=null==(h=t.limits)||null==(u=h.max)?void 0:u.total)?c:1/0,primary:null!=(g=null==(f=t.limits)||null==(y=f.max)?void 0:y.primary)?g:1/0,secondary:null!=(T=null==(b=t.limits)||null==(x=b.max)?void 0:x.secondary)?T:1/0}},function(t){if(t.min.primary>t.max.primary)throw new Error("The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.");if(t.min.secondary>t.max.secondary)throw new Error("The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.");if(t.min.total>t.max.primary+t.max.secondary)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.");if(t.max.totalt.max.total)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of tags allowed.")}(t.limits)}oninit(t){super.oninit(t),this.navigator.onUp((()=>this.setIndex(this.getCurrentNumericIndex()-1,!0))).onDown((()=>this.setIndex(this.getCurrentNumericIndex()+1,!0))).onSelect(this.select.bind(this)).onRemove((()=>this.selected.splice(this.selected.length-1,1))),p().tagList.load(["parent"]).then((t=>{this.loading=!1,this.attrs.selectableTags&&(t=this.attrs.selectableTags(t)),this.tags=(0,k.Z)(t),this.attrs.selectedTags&&this.attrs.selectedTags.map(this.addTag.bind(this)),this.indexTag=t[0],m.redraw()}))}className(){return o()("TagSelectionModal",this.attrs.className)}title(){return this.attrs.title}content(){if(this.loading||!this.tags)return m(I(),null);const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount(),i=this.getFilteredTags(),a=Math.max(d()(this.getInstruction(e,s)).length,this.filter().length);return[m("div",{className:"Modal-body"},m("div",{className:"TagSelectionModal-form"},m("div",{className:"TagSelectionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:()=>this.$(".TagsInput input").focus()},m("span",{className:"TagsInput-selected"},this.selected.map((t=>m("span",{className:"TagsInput-tag",onclick:()=>{this.removeTag(t),this.onready()}},(0,q.Z)(t))))),m("input",{className:"FormControl",placeholder:d()(this.getInstruction(e,s)),bidi:this.filter,style:{width:a+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:()=>this.focused=!0,onblur:()=>this.focused=!1}))),m("div",{className:"TagSelectionModal-form-submit App-primaryControl"},m(y(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(e,s),icon:"fas fa-check"},p().translator.trans("flarum-tags.lib.tag_selection_modal.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagSelectionModal-list SelectTagList"},i.map((e=>m("li",{"data-index":e.id(),className:o()("SelectTagListItem",{pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:this.selected.includes(e),active:this.indexTag===e}),style:{color:e.color()},onmouseover:()=>this.indexTag=e,onclick:this.toggleTag.bind(this,e)},m("i",{className:"SelectTagListItem-icon"},(0,R.Z)(e,{className:"SelectTagListItem-tagIcon"}),m("i",{className:"icon TagIcon fas fa-check SelectTagListItem-checkIcon"})),m("span",{className:"SelectTagListItem-name"},b()(e.name(),t)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")))),this.attrs.limits.allowBypassing&&m("div",{className:"TagSelectionModal-controls"},m(Z,{className:"Button",onclick:()=>this.bypassReqs=!this.bypassReqs,isToggled:this.bypassReqs},p().translator.trans("flarum-tags.lib.tag_selection_modal.bypass_requirements"))))]}getFilteredTags(){const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount();let i=this.tags;return this.attrs.requireParentTag&&(i=i.filter((t=>{const e=t.parent();return null!==e&&(!1===e||this.selected.includes(e))}))),this.bypassReqs||(this.selected.length>=this.attrs.limits.max.total?i=i.filter((t=>this.selected.includes(t))):(e>=this.attrs.limits.max.primary&&(i=i.filter((t=>!t.isPrimaryParent()||this.selected.includes(t)))),s>=this.attrs.limits.max.secondary&&(i=i.filter((t=>t.isPrimaryParent()||this.selected.includes(t)))))),t&&(i=i.filter((e=>e.name().toLowerCase().includes(t)))),this.indexTag&&i.includes(this.indexTag)||(this.indexTag=i[0]),i}primaryCount(){return this.selected.filter((t=>t.isPrimaryParent())).length}secondaryCount(){return this.selected.filter((t=>!t.isPrimaryParent())).length}meetsRequirements(t,e){return!!(this.bypassReqs||this.attrs.allowResetting&&0===this.selected.length)||!(this.selected.length=this.attrs.limits.min.primary&&e>=this.attrs.limits.min.secondary}addTag(t){if(t&&this.attrs.canSelect(t)){if(this.attrs.onSelect&&this.attrs.onSelect(t,this.selected),this.attrs.requireParentTag){const e=t.parent();e&&!this.selected.includes(e)&&this.selected.push(e)}this.selected.includes(t)||this.selected.push(t)}}removeTag(t){const e=this.selected.indexOf(t);-1!==e&&(this.selected.splice(e,1),this.attrs.requireParentTag&&this.selected.filter((e=>e.parent()===t)).forEach(this.removeTag.bind(this)),this.attrs.onDeselect&&this.attrs.onDeselect(t,this.selected))}toggleTag(t){this.tags&&(this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.indexTag=this.tags[0]),this.onready())}getInstruction(t,e){if(this.bypassReqs)return"";if(t li")}getCurrentNumericIndex(){return this.indexTag?this.selectableItems().index(this.getItem(this.indexTag)):-1}getItem(t){return this.selectableItems().filter('[data-index="'.concat(t.id(),'"]'))}setIndex(t,e){const s=this.selectableItems(),i=s.parent();t<0?t=s.length-1:t>=s.length&&(t=0);const a=s.eq(t);if(this.indexTag=p().store.getById("tags",a.attr("data-index")),m.redraw(),e&&this.indexTag){const t=i.scrollTop(),e=i.offset().top,s=e+i.outerHeight(),n=a.offset().top,l=n+a.outerHeight();let r;ns&&(r=t-s+l+parseInt(i.css("padding-bottom"),10)),void 0!==r&&i.stop(!0).animate({scrollTop:r},100)}}}flarum.reg.add("flarum-tags","common/components/TagSelectionModal",L);class B extends L{static initAttrs(t){var e;super.initAttrs(t);const s=t.discussion?a().translator.trans("flarum-tags.forum.choose_tags.edit_title",{title:m("em",null,t.discussion.title())}):a().translator.trans("flarum-tags.forum.choose_tags.title");t.className=o()(t.className,"TagDiscussionModal"),t.title=d()(s),t.allowResetting=!!a().forum.attribute("canBypassTagCounts"),t.limits={allowBypassing:t.allowResetting,max:{primary:a().forum.attribute("maxPrimaryTags"),secondary:a().forum.attribute("maxSecondaryTags")},min:{primary:a().forum.attribute("minPrimaryTags"),secondary:a().forum.attribute("minSecondaryTags")}},t.requireParentTag=!0,t.selectableTags=()=>(0,h.Z)(t.discussion),null!=t.selectedTags||(t.selectedTags=(null==(e=t.discussion)?void 0:e.tags())||[]),t.canSelect=t=>t.canStartDiscussion();const i=t.onsubmit||null;t.onsubmit=function(e){const s=t.discussion;s&&s.save({relationships:{tags:e}}).then((()=>{a().current.matches(l())&&a().current.get("stream").update(),m.redraw()})),i&&i(e)}}}flarum.reg.add("flarum-tags","forum/components/TagDiscussionModal",B)}}]); //# sourceMappingURL=TagDiscussionModal.js.map \ No newline at end of file diff --git a/extensions/tags/js/dist/forum/components/TagDiscussionModal.js.map b/extensions/tags/js/dist/forum/components/TagDiscussionModal.js.map index c259308dd..293ee5d62 100644 --- a/extensions/tags/js/dist/forum/components/TagDiscussionModal.js.map +++ b/extensions/tags/js/dist/forum/components/TagDiscussionModal.js.map @@ -1 +1 @@ -{"version":3,"file":"forum/components/TagDiscussionModal.js","mappings":"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","sources":["webpack://@flarum/tags/./src/forum/components/ToggleButton.js","webpack://@flarum/tags/./src/common/components/TagSelectionModal.tsx","webpack://@flarum/tags/./src/forum/components/TagDiscussionModal.tsx"],"sourcesContent":["import Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\n/**\n * @TODO move to core\n */\nexport default class ToggleButton extends Component {\n view(vnode) {\n const {\n className,\n isToggled,\n ...attrs\n } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n return m(Button, Object.assign({}, attrs, {\n icon: icon,\n className: classList([className, isToggled && 'Button--toggled'])\n }), vnode.children);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/ToggleButton', ToggleButton);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport highlight from 'flarum/common/helpers/highlight';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Stream from 'flarum/common/utils/Stream';\nimport sortTags from '../utils/sortTags';\nimport tagLabel from '../helpers/tagLabel';\nimport tagIcon from '../helpers/tagIcon';\nimport ToggleButton from '../../forum/components/ToggleButton';\nexport default class TagSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"selected\", []);\n _defineProperty(this, \"bypassReqs\", false);\n _defineProperty(this, \"filter\", Stream(''));\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"navigator\", new KeyboardNavigatable());\n _defineProperty(this, \"indexTag\", void 0);\n }\n static initAttrs(attrs) {\n var _attrs$allowResetting, _attrs$limits$min$tot, _attrs$limits, _attrs$limits$min, _attrs$limits$min$pri, _attrs$limits2, _attrs$limits2$min, _attrs$limits$min$sec, _attrs$limits3, _attrs$limits3$min, _attrs$limits$max$tot, _attrs$limits4, _attrs$limits4$max, _attrs$limits$max$pri, _attrs$limits5, _attrs$limits5$max, _attrs$limits$max$sec, _attrs$limits6, _attrs$limits6$max;\n super.initAttrs(attrs);\n\n // Default values for optional attributes.\n attrs.title || (attrs.title = extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.title')));\n attrs.canSelect || (attrs.canSelect = () => true);\n (_attrs$allowResetting = attrs.allowResetting) != null ? _attrs$allowResetting : attrs.allowResetting = true;\n attrs.limits = {\n min: {\n total: (_attrs$limits$min$tot = (_attrs$limits = attrs.limits) == null ? void 0 : (_attrs$limits$min = _attrs$limits.min) == null ? void 0 : _attrs$limits$min.total) != null ? _attrs$limits$min$tot : -Infinity,\n primary: (_attrs$limits$min$pri = (_attrs$limits2 = attrs.limits) == null ? void 0 : (_attrs$limits2$min = _attrs$limits2.min) == null ? void 0 : _attrs$limits2$min.primary) != null ? _attrs$limits$min$pri : -Infinity,\n secondary: (_attrs$limits$min$sec = (_attrs$limits3 = attrs.limits) == null ? void 0 : (_attrs$limits3$min = _attrs$limits3.min) == null ? void 0 : _attrs$limits3$min.secondary) != null ? _attrs$limits$min$sec : -Infinity\n },\n max: {\n total: (_attrs$limits$max$tot = (_attrs$limits4 = attrs.limits) == null ? void 0 : (_attrs$limits4$max = _attrs$limits4.max) == null ? void 0 : _attrs$limits4$max.total) != null ? _attrs$limits$max$tot : Infinity,\n primary: (_attrs$limits$max$pri = (_attrs$limits5 = attrs.limits) == null ? void 0 : (_attrs$limits5$max = _attrs$limits5.max) == null ? void 0 : _attrs$limits5$max.primary) != null ? _attrs$limits$max$pri : Infinity,\n secondary: (_attrs$limits$max$sec = (_attrs$limits6 = attrs.limits) == null ? void 0 : (_attrs$limits6$max = _attrs$limits6.max) == null ? void 0 : _attrs$limits6$max.secondary) != null ? _attrs$limits$max$sec : Infinity\n }\n };\n\n // Prevent illogical limits from being provided.\n catchInvalidLimits(attrs.limits);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.select.bind(this)).onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n app.tagList.load(['parent']).then(tags => {\n this.loading = false;\n if (this.attrs.selectableTags) {\n tags = this.attrs.selectableTags(tags);\n }\n this.tags = sortTags(tags);\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n }\n this.indexTag = tags[0];\n m.redraw();\n });\n }\n className() {\n return classList('TagSelectionModal', this.attrs.className);\n }\n title() {\n return this.attrs.title;\n }\n content() {\n if (this.loading || !this.tags) {\n return m(LoadingIndicator, null);\n }\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n const tags = this.getFilteredTags();\n const inputWidth = Math.max(extractText(this.getInstruction(primaryCount, secondaryCount)).length, this.filter().length);\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form-input\"\n }, m(\"div\", {\n className: 'TagsInput FormControl ' + (this.focused ? 'focus' : ''),\n onclick: () => this.$('.TagsInput input').focus()\n }, m(\"span\", {\n className: \"TagsInput-selected\"\n }, this.selected.map(tag => m(\"span\", {\n className: \"TagsInput-tag\",\n onclick: () => {\n this.removeTag(tag);\n this.onready();\n }\n }, tagLabel(tag)))), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(this.getInstruction(primaryCount, secondaryCount)),\n bidi: this.filter,\n style: {\n width: inputWidth + 'ch'\n },\n onkeydown: this.navigator.navigate.bind(this.navigator),\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false\n }))), m(\"div\", {\n className: \"TagSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(primaryCount, secondaryCount),\n icon: \"fas fa-check\"\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.submit_button'))))), m(\"div\", {\n className: \"Modal-footer\"\n }, m(\"ul\", {\n className: \"TagSelectionModal-list SelectTagList\"\n }, tags.map(tag => m(\"li\", {\n \"data-index\": tag.id(),\n className: classList('SelectTagListItem', {\n pinned: tag.position() !== null,\n child: !!tag.parent(),\n colored: !!tag.color(),\n selected: this.selected.includes(tag),\n active: this.indexTag === tag\n }),\n style: {\n color: tag.color()\n },\n onmouseover: () => this.indexTag = tag,\n onclick: this.toggleTag.bind(this, tag)\n }, m(\"i\", {\n className: \"SelectTagListItem-icon\"\n }, tagIcon(tag, {\n className: 'SelectTagListItem-tagIcon'\n }), m(\"i\", {\n className: \"icon TagIcon fas fa-check SelectTagListItem-checkIcon\"\n })), m(\"span\", {\n className: \"SelectTagListItem-name\"\n }, highlight(tag.name(), filter)), tag.description() ? m(\"span\", {\n className: \"SelectTagListItem-description\"\n }, tag.description()) : ''))), this.attrs.limits.allowBypassing && m(\"div\", {\n className: \"TagSelectionModal-controls\"\n }, m(ToggleButton, {\n className: \"Button\",\n onclick: () => this.bypassReqs = !this.bypassReqs,\n isToggled: this.bypassReqs\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.bypass_requirements'))))];\n }\n\n /**\n * Filters the available tags on every state change.\n */\n getFilteredTags() {\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n let tags = this.tags;\n if (this.attrs.requireParentTag) {\n // Filter out all child tags whose parents have not been selected. This\n // makes it impossible to select a child if its parent hasn't been selected.\n tags = tags.filter(tag => {\n const parent = tag.parent();\n return parent !== null && (parent === false || this.selected.includes(parent));\n });\n }\n if (!this.bypassReqs) {\n // If we reached the total maximum number of tags, we can't select anymore.\n if (this.selected.length >= this.attrs.limits.max.total) {\n tags = tags.filter(tag => this.selected.includes(tag));\n }\n // If the number of selected primary/secondary tags is at the maximum, then\n // we'll filter out all other tags of that type.\n else {\n if (primaryCount >= this.attrs.limits.max.primary) {\n tags = tags.filter(tag => !tag.isPrimary() || this.selected.includes(tag));\n }\n if (secondaryCount >= this.attrs.limits.max.secondary) {\n tags = tags.filter(tag => tag.isPrimary() || this.selected.includes(tag));\n }\n }\n }\n\n // If the user has entered text in the filter input, then filter by tags\n // whose name matches what they've entered.\n if (filter) {\n tags = tags.filter(tag => tag.name().toLowerCase().includes(filter));\n }\n if (!this.indexTag || !tags.includes(this.indexTag)) this.indexTag = tags[0];\n return tags;\n }\n\n /**\n * Counts the number of selected primary tags.\n */\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimary()).length;\n }\n\n /**\n * Counts the number of selected secondary tags.\n */\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimary()).length;\n }\n\n /**\n * Validates the number of selected primary/secondary tags against the set min max limits.\n */\n meetsRequirements(primaryCount, secondaryCount) {\n if (this.bypassReqs || this.attrs.allowResetting && this.selected.length === 0) {\n return true;\n }\n if (this.selected.length < this.attrs.limits.min.total) {\n return false;\n }\n return primaryCount >= this.attrs.limits.min.primary && secondaryCount >= this.attrs.limits.min.secondary;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n */\n addTag(tag) {\n if (!tag || !this.attrs.canSelect(tag)) return;\n if (this.attrs.onSelect) {\n this.attrs.onSelect(tag, this.selected);\n }\n\n // If this tag has a parent, we'll also need to add the parent tag to the\n // selected list if it's not already in there.\n if (this.attrs.requireParentTag) {\n const parent = tag.parent();\n if (parent && !this.selected.includes(parent)) {\n this.selected.push(parent);\n }\n }\n if (!this.selected.includes(tag)) {\n this.selected.push(tag);\n }\n }\n\n /**\n * Remove the given tag from the list of selected tags.\n */\n removeTag(tag) {\n const index = this.selected.indexOf(tag);\n if (index !== -1) {\n this.selected.splice(index, 1);\n\n // Look through the list of selected tags for any tags which have the tag\n // we just removed as their parent. We'll need to remove them too.\n if (this.attrs.requireParentTag) {\n this.selected.filter(t => t.parent() === tag).forEach(this.removeTag.bind(this));\n }\n if (this.attrs.onDeselect) {\n this.attrs.onDeselect(tag, this.selected);\n }\n }\n }\n toggleTag(tag) {\n // Won't happen, needed for type safety.\n if (!this.tags) return;\n if (this.selected.includes(tag)) {\n this.removeTag(tag);\n } else {\n this.addTag(tag);\n }\n if (this.filter()) {\n this.filter('');\n this.indexTag = this.tags[0];\n }\n this.onready();\n }\n\n /**\n * Gives human text instructions based on the current number of selected tags and set limits.\n */\n getInstruction(primaryCount, secondaryCount) {\n if (this.bypassReqs) {\n return '';\n }\n if (primaryCount < this.attrs.limits.min.primary) {\n const remaining = this.attrs.limits.min.primary - primaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_primary_placeholder', {\n count: remaining\n }));\n } else if (secondaryCount < this.attrs.limits.min.secondary) {\n const remaining = this.attrs.limits.min.secondary - secondaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_secondary_placeholder', {\n count: remaining\n }));\n } else if (this.selected.length < this.attrs.limits.min.total) {\n const remaining = this.attrs.limits.min.total - this.selected.length;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_tags_placeholder', {\n count: remaining\n }));\n }\n return '';\n }\n\n /**\n * Submit tag selection.\n */\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected);\n this.hide();\n }\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.indexTag && this.selected.includes(this.indexTag)) {\n if (this.selected.length) {\n // The DOM submit method doesn't emit a `submit event, so we\n // simulate a manual submission so our `onsubmit` logic is run.\n this.$('button[type=\"submit\"]').click();\n }\n } else if (this.indexTag) {\n this.getItem(this.indexTag)[0].dispatchEvent(new Event('click'));\n }\n }\n selectableItems() {\n return this.$('.TagSelectionModal-list > li');\n }\n getCurrentNumericIndex() {\n if (!this.indexTag) return -1;\n return this.selectableItems().index(this.getItem(this.indexTag));\n }\n getItem(selectedTag) {\n return this.selectableItems().filter(\"[data-index=\\\"\".concat(selectedTag.id(), \"\\\"]\"));\n }\n setIndex(index, scrollToItem) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n if (index < 0) {\n index = $items.length - 1;\n } else if (index >= $items.length) {\n index = 0;\n }\n const $item = $items.eq(index);\n this.indexTag = app.store.getById('tags', $item.attr('data-index'));\n m.redraw();\n if (scrollToItem && this.indexTag) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\n\n/**\n * Catch invalid limits provided to the tag selection modal.\n */\nfunction catchInvalidLimits(limits) {\n if (limits.min.primary > limits.max.primary) {\n throw new Error('The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.');\n }\n if (limits.min.secondary > limits.max.secondary) {\n throw new Error('The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.');\n }\n if (limits.min.total > limits.max.primary + limits.max.secondary) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.');\n }\n if (limits.max.total < limits.min.primary + limits.min.secondary) {\n throw new Error('The maximum number of tags allowed cannot be less than the minimum number of primary and secondary tags allowed together.');\n }\n if (limits.min.total > limits.max.total) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of tags allowed.');\n }\n}\nflarum.reg.add('flarum-tags', 'common/components/TagSelectionModal', TagSelectionModal);","import app from 'flarum/forum/app';\nimport DiscussionPage from 'flarum/forum/components/DiscussionPage';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport getSelectableTags from '../utils/getSelectableTags';\nimport TagSelectionModal from '../../common/components/TagSelectionModal';\nexport default class TagDiscussionModal extends TagSelectionModal {\n static initAttrs(attrs) {\n var _attrs$selectedTags, _attrs$discussion;\n super.initAttrs(attrs);\n const title = attrs.discussion ? app.translator.trans('flarum-tags.forum.choose_tags.edit_title', {\n title: m(\"em\", null, attrs.discussion.title())\n }) : app.translator.trans('flarum-tags.forum.choose_tags.title');\n attrs.className = classList(attrs.className, 'TagDiscussionModal');\n attrs.title = extractText(title);\n attrs.allowResetting = !!app.forum.attribute('canBypassTagCounts');\n attrs.limits = {\n allowBypassing: attrs.allowResetting,\n max: {\n primary: app.forum.attribute('maxPrimaryTags'),\n secondary: app.forum.attribute('maxSecondaryTags')\n },\n min: {\n primary: app.forum.attribute('minPrimaryTags'),\n secondary: app.forum.attribute('minSecondaryTags')\n }\n };\n attrs.requireParentTag = true;\n attrs.selectableTags = () => getSelectableTags(attrs.discussion);\n (_attrs$selectedTags = attrs.selectedTags) != null ? _attrs$selectedTags : attrs.selectedTags = ((_attrs$discussion = attrs.discussion) == null ? void 0 : _attrs$discussion.tags()) || [];\n attrs.canSelect = tag => tag.canStartDiscussion();\n const suppliedOnsubmit = attrs.onsubmit || null;\n\n // Save changes.\n attrs.onsubmit = function (tags) {\n const discussion = attrs.discussion;\n if (discussion) {\n discussion.save({\n relationships: {\n tags\n }\n }).then(() => {\n if (app.current.matches(DiscussionPage)) {\n app.current.get('stream').update();\n }\n m.redraw();\n });\n }\n if (suppliedOnsubmit) suppliedOnsubmit(tags);\n };\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagDiscussionModal', TagDiscussionModal);"],"names":["ToggleButton","view","vnode","className","isToggled","attrs","this","icon","m","Object","assign","children","flarum","reg","add","TagSelectionModal","constructor","super","arguments","static","_attrs$limits$min$tot","_attrs$limits","_attrs$limits$min","_attrs$limits$min$pri","_attrs$limits2","_attrs$limits2$min","_attrs$limits$min$sec","_attrs$limits3","_attrs$limits3$min","_attrs$limits$max$tot","_attrs$limits4","_attrs$limits4$max","_attrs$limits$max$pri","_attrs$limits5","_attrs$limits5$max","_attrs$limits$max$sec","_attrs$limits6","_attrs$limits6$max","initAttrs","title","canSelect","allowResetting","limits","min","total","primary","secondary","max","Infinity","Error","catchInvalidLimits","oninit","navigator","onUp","setIndex","getCurrentNumericIndex","onDown","onSelect","select","bind","onRemove","selected","splice","length","then","tags","loading","selectableTags","sortTags","selectedTags","map","addTag","indexTag","redraw","content","filter","toLowerCase","primaryCount","secondaryCount","getFilteredTags","inputWidth","Math","getInstruction","focused","onclick","$","focus","tag","removeTag","onready","tagLabel","placeholder","bidi","style","width","onkeydown","navigate","onfocus","onblur","type","disabled","meetsRequirements","id","pinned","position","child","parent","colored","color","includes","active","onmouseover","toggleTag","tagIcon","name","description","allowBypassing","bypassReqs","requireParentTag","isPrimary","push","index","indexOf","t","forEach","onDeselect","remaining","count","onsubmit","e","preventDefault","hide","metaKey","ctrlKey","click","getItem","dispatchEvent","Event","selectableItems","selectedTag","concat","scrollToItem","$items","$dropdown","$item","eq","attr","dropdownScroll","scrollTop","dropdownTop","offset","top","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","css","stop","animate","TagDiscussionModal","_attrs$discussion","discussion","getSelectableTags","canStartDiscussion","suppliedOnsubmit","save","relationships","update"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum/components/TagDiscussionModal.js","mappings":"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","sources":["webpack://@flarum/tags/./src/forum/components/ToggleButton.js","webpack://@flarum/tags/./src/common/components/TagSelectionModal.tsx","webpack://@flarum/tags/./src/forum/components/TagDiscussionModal.tsx"],"sourcesContent":["import Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\n/**\n * @TODO move to core\n */\nexport default class ToggleButton extends Component {\n view(vnode) {\n const {\n className,\n isToggled,\n ...attrs\n } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n return m(Button, Object.assign({}, attrs, {\n icon: icon,\n className: classList([className, isToggled && 'Button--toggled'])\n }), vnode.children);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/ToggleButton', ToggleButton);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport highlight from 'flarum/common/helpers/highlight';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Stream from 'flarum/common/utils/Stream';\nimport sortTags from '../utils/sortTags';\nimport tagLabel from '../helpers/tagLabel';\nimport tagIcon from '../helpers/tagIcon';\nimport ToggleButton from '../../forum/components/ToggleButton';\nexport default class TagSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"selected\", []);\n _defineProperty(this, \"bypassReqs\", false);\n _defineProperty(this, \"filter\", Stream(''));\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"navigator\", new KeyboardNavigatable());\n _defineProperty(this, \"indexTag\", void 0);\n }\n static initAttrs(attrs) {\n var _attrs$allowResetting, _attrs$limits$min$tot, _attrs$limits, _attrs$limits$min, _attrs$limits$min$pri, _attrs$limits2, _attrs$limits2$min, _attrs$limits$min$sec, _attrs$limits3, _attrs$limits3$min, _attrs$limits$max$tot, _attrs$limits4, _attrs$limits4$max, _attrs$limits$max$pri, _attrs$limits5, _attrs$limits5$max, _attrs$limits$max$sec, _attrs$limits6, _attrs$limits6$max;\n super.initAttrs(attrs);\n\n // Default values for optional attributes.\n attrs.title || (attrs.title = extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.title')));\n attrs.canSelect || (attrs.canSelect = () => true);\n (_attrs$allowResetting = attrs.allowResetting) != null ? _attrs$allowResetting : attrs.allowResetting = true;\n attrs.limits = {\n min: {\n total: (_attrs$limits$min$tot = (_attrs$limits = attrs.limits) == null ? void 0 : (_attrs$limits$min = _attrs$limits.min) == null ? void 0 : _attrs$limits$min.total) != null ? _attrs$limits$min$tot : -Infinity,\n primary: (_attrs$limits$min$pri = (_attrs$limits2 = attrs.limits) == null ? void 0 : (_attrs$limits2$min = _attrs$limits2.min) == null ? void 0 : _attrs$limits2$min.primary) != null ? _attrs$limits$min$pri : -Infinity,\n secondary: (_attrs$limits$min$sec = (_attrs$limits3 = attrs.limits) == null ? void 0 : (_attrs$limits3$min = _attrs$limits3.min) == null ? void 0 : _attrs$limits3$min.secondary) != null ? _attrs$limits$min$sec : -Infinity\n },\n max: {\n total: (_attrs$limits$max$tot = (_attrs$limits4 = attrs.limits) == null ? void 0 : (_attrs$limits4$max = _attrs$limits4.max) == null ? void 0 : _attrs$limits4$max.total) != null ? _attrs$limits$max$tot : Infinity,\n primary: (_attrs$limits$max$pri = (_attrs$limits5 = attrs.limits) == null ? void 0 : (_attrs$limits5$max = _attrs$limits5.max) == null ? void 0 : _attrs$limits5$max.primary) != null ? _attrs$limits$max$pri : Infinity,\n secondary: (_attrs$limits$max$sec = (_attrs$limits6 = attrs.limits) == null ? void 0 : (_attrs$limits6$max = _attrs$limits6.max) == null ? void 0 : _attrs$limits6$max.secondary) != null ? _attrs$limits$max$sec : Infinity\n }\n };\n\n // Prevent illogical limits from being provided.\n catchInvalidLimits(attrs.limits);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.select.bind(this)).onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n app.tagList.load(['parent']).then(tags => {\n this.loading = false;\n if (this.attrs.selectableTags) {\n tags = this.attrs.selectableTags(tags);\n }\n this.tags = sortTags(tags);\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n }\n this.indexTag = tags[0];\n m.redraw();\n });\n }\n className() {\n return classList('TagSelectionModal', this.attrs.className);\n }\n title() {\n return this.attrs.title;\n }\n content() {\n if (this.loading || !this.tags) {\n return m(LoadingIndicator, null);\n }\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n const tags = this.getFilteredTags();\n const inputWidth = Math.max(extractText(this.getInstruction(primaryCount, secondaryCount)).length, this.filter().length);\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form-input\"\n }, m(\"div\", {\n className: 'TagsInput FormControl ' + (this.focused ? 'focus' : ''),\n onclick: () => this.$('.TagsInput input').focus()\n }, m(\"span\", {\n className: \"TagsInput-selected\"\n }, this.selected.map(tag => m(\"span\", {\n className: \"TagsInput-tag\",\n onclick: () => {\n this.removeTag(tag);\n this.onready();\n }\n }, tagLabel(tag)))), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(this.getInstruction(primaryCount, secondaryCount)),\n bidi: this.filter,\n style: {\n width: inputWidth + 'ch'\n },\n onkeydown: this.navigator.navigate.bind(this.navigator),\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false\n }))), m(\"div\", {\n className: \"TagSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(primaryCount, secondaryCount),\n icon: \"fas fa-check\"\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.submit_button'))))), m(\"div\", {\n className: \"Modal-footer\"\n }, m(\"ul\", {\n className: \"TagSelectionModal-list SelectTagList\"\n }, tags.map(tag => m(\"li\", {\n \"data-index\": tag.id(),\n className: classList('SelectTagListItem', {\n pinned: tag.position() !== null,\n child: !!tag.parent(),\n colored: !!tag.color(),\n selected: this.selected.includes(tag),\n active: this.indexTag === tag\n }),\n style: {\n color: tag.color()\n },\n onmouseover: () => this.indexTag = tag,\n onclick: this.toggleTag.bind(this, tag)\n }, m(\"i\", {\n className: \"SelectTagListItem-icon\"\n }, tagIcon(tag, {\n className: 'SelectTagListItem-tagIcon'\n }), m(\"i\", {\n className: \"icon TagIcon fas fa-check SelectTagListItem-checkIcon\"\n })), m(\"span\", {\n className: \"SelectTagListItem-name\"\n }, highlight(tag.name(), filter)), tag.description() ? m(\"span\", {\n className: \"SelectTagListItem-description\"\n }, tag.description()) : ''))), this.attrs.limits.allowBypassing && m(\"div\", {\n className: \"TagSelectionModal-controls\"\n }, m(ToggleButton, {\n className: \"Button\",\n onclick: () => this.bypassReqs = !this.bypassReqs,\n isToggled: this.bypassReqs\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.bypass_requirements'))))];\n }\n\n /**\n * Filters the available tags on every state change.\n */\n getFilteredTags() {\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n let tags = this.tags;\n if (this.attrs.requireParentTag) {\n // Filter out all child tags whose parents have not been selected. This\n // makes it impossible to select a child if its parent hasn't been selected.\n tags = tags.filter(tag => {\n const parent = tag.parent();\n return parent !== null && (parent === false || this.selected.includes(parent));\n });\n }\n if (!this.bypassReqs) {\n // If we reached the total maximum number of tags, we can't select anymore.\n if (this.selected.length >= this.attrs.limits.max.total) {\n tags = tags.filter(tag => this.selected.includes(tag));\n }\n // If the number of selected primary/secondary tags is at the maximum, then\n // we'll filter out all other tags of that type.\n else {\n if (primaryCount >= this.attrs.limits.max.primary) {\n tags = tags.filter(tag => !tag.isPrimaryParent() || this.selected.includes(tag));\n }\n if (secondaryCount >= this.attrs.limits.max.secondary) {\n tags = tags.filter(tag => tag.isPrimaryParent() || this.selected.includes(tag));\n }\n }\n }\n\n // If the user has entered text in the filter input, then filter by tags\n // whose name matches what they've entered.\n if (filter) {\n tags = tags.filter(tag => tag.name().toLowerCase().includes(filter));\n }\n if (!this.indexTag || !tags.includes(this.indexTag)) this.indexTag = tags[0];\n return tags;\n }\n\n /**\n * Counts the number of selected primary tags.\n */\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimaryParent()).length;\n }\n\n /**\n * Counts the number of selected secondary tags.\n */\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimaryParent()).length;\n }\n\n /**\n * Validates the number of selected primary/secondary tags against the set min max limits.\n */\n meetsRequirements(primaryCount, secondaryCount) {\n if (this.bypassReqs || this.attrs.allowResetting && this.selected.length === 0) {\n return true;\n }\n if (this.selected.length < this.attrs.limits.min.total) {\n return false;\n }\n return primaryCount >= this.attrs.limits.min.primary && secondaryCount >= this.attrs.limits.min.secondary;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n */\n addTag(tag) {\n if (!tag || !this.attrs.canSelect(tag)) return;\n if (this.attrs.onSelect) {\n this.attrs.onSelect(tag, this.selected);\n }\n\n // If this tag has a parent, we'll also need to add the parent tag to the\n // selected list if it's not already in there.\n if (this.attrs.requireParentTag) {\n const parent = tag.parent();\n if (parent && !this.selected.includes(parent)) {\n this.selected.push(parent);\n }\n }\n if (!this.selected.includes(tag)) {\n this.selected.push(tag);\n }\n }\n\n /**\n * Remove the given tag from the list of selected tags.\n */\n removeTag(tag) {\n const index = this.selected.indexOf(tag);\n if (index !== -1) {\n this.selected.splice(index, 1);\n\n // Look through the list of selected tags for any tags which have the tag\n // we just removed as their parent. We'll need to remove them too.\n if (this.attrs.requireParentTag) {\n this.selected.filter(t => t.parent() === tag).forEach(this.removeTag.bind(this));\n }\n if (this.attrs.onDeselect) {\n this.attrs.onDeselect(tag, this.selected);\n }\n }\n }\n toggleTag(tag) {\n // Won't happen, needed for type safety.\n if (!this.tags) return;\n if (this.selected.includes(tag)) {\n this.removeTag(tag);\n } else {\n this.addTag(tag);\n }\n if (this.filter()) {\n this.filter('');\n this.indexTag = this.tags[0];\n }\n this.onready();\n }\n\n /**\n * Gives human text instructions based on the current number of selected tags and set limits.\n */\n getInstruction(primaryCount, secondaryCount) {\n if (this.bypassReqs) {\n return '';\n }\n if (primaryCount < this.attrs.limits.min.primary) {\n const remaining = this.attrs.limits.min.primary - primaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_primary_placeholder', {\n count: remaining\n }));\n } else if (secondaryCount < this.attrs.limits.min.secondary) {\n const remaining = this.attrs.limits.min.secondary - secondaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_secondary_placeholder', {\n count: remaining\n }));\n } else if (this.selected.length < this.attrs.limits.min.total) {\n const remaining = this.attrs.limits.min.total - this.selected.length;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_tags_placeholder', {\n count: remaining\n }));\n }\n return '';\n }\n\n /**\n * Submit tag selection.\n */\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected);\n this.hide();\n }\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.indexTag && this.selected.includes(this.indexTag)) {\n if (this.selected.length) {\n // The DOM submit method doesn't emit a `submit event, so we\n // simulate a manual submission so our `onsubmit` logic is run.\n this.$('button[type=\"submit\"]').click();\n }\n } else if (this.indexTag) {\n this.getItem(this.indexTag)[0].dispatchEvent(new Event('click'));\n }\n }\n selectableItems() {\n return this.$('.TagSelectionModal-list > li');\n }\n getCurrentNumericIndex() {\n if (!this.indexTag) return -1;\n return this.selectableItems().index(this.getItem(this.indexTag));\n }\n getItem(selectedTag) {\n return this.selectableItems().filter(\"[data-index=\\\"\".concat(selectedTag.id(), \"\\\"]\"));\n }\n setIndex(index, scrollToItem) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n if (index < 0) {\n index = $items.length - 1;\n } else if (index >= $items.length) {\n index = 0;\n }\n const $item = $items.eq(index);\n this.indexTag = app.store.getById('tags', $item.attr('data-index'));\n m.redraw();\n if (scrollToItem && this.indexTag) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\n\n/**\n * Catch invalid limits provided to the tag selection modal.\n */\nfunction catchInvalidLimits(limits) {\n if (limits.min.primary > limits.max.primary) {\n throw new Error('The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.');\n }\n if (limits.min.secondary > limits.max.secondary) {\n throw new Error('The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.');\n }\n if (limits.min.total > limits.max.primary + limits.max.secondary) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.');\n }\n if (limits.max.total < limits.min.primary + limits.min.secondary) {\n throw new Error('The maximum number of tags allowed cannot be less than the minimum number of primary and secondary tags allowed together.');\n }\n if (limits.min.total > limits.max.total) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of tags allowed.');\n }\n}\nflarum.reg.add('flarum-tags', 'common/components/TagSelectionModal', TagSelectionModal);","import app from 'flarum/forum/app';\nimport DiscussionPage from 'flarum/forum/components/DiscussionPage';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport getSelectableTags from '../utils/getSelectableTags';\nimport TagSelectionModal from '../../common/components/TagSelectionModal';\nexport default class TagDiscussionModal extends TagSelectionModal {\n static initAttrs(attrs) {\n var _attrs$selectedTags, _attrs$discussion;\n super.initAttrs(attrs);\n const title = attrs.discussion ? app.translator.trans('flarum-tags.forum.choose_tags.edit_title', {\n title: m(\"em\", null, attrs.discussion.title())\n }) : app.translator.trans('flarum-tags.forum.choose_tags.title');\n attrs.className = classList(attrs.className, 'TagDiscussionModal');\n attrs.title = extractText(title);\n attrs.allowResetting = !!app.forum.attribute('canBypassTagCounts');\n attrs.limits = {\n allowBypassing: attrs.allowResetting,\n max: {\n primary: app.forum.attribute('maxPrimaryTags'),\n secondary: app.forum.attribute('maxSecondaryTags')\n },\n min: {\n primary: app.forum.attribute('minPrimaryTags'),\n secondary: app.forum.attribute('minSecondaryTags')\n }\n };\n attrs.requireParentTag = true;\n attrs.selectableTags = () => getSelectableTags(attrs.discussion);\n (_attrs$selectedTags = attrs.selectedTags) != null ? _attrs$selectedTags : attrs.selectedTags = ((_attrs$discussion = attrs.discussion) == null ? void 0 : _attrs$discussion.tags()) || [];\n attrs.canSelect = tag => tag.canStartDiscussion();\n const suppliedOnsubmit = attrs.onsubmit || null;\n\n // Save changes.\n attrs.onsubmit = function (tags) {\n const discussion = attrs.discussion;\n if (discussion) {\n discussion.save({\n relationships: {\n tags\n }\n }).then(() => {\n if (app.current.matches(DiscussionPage)) {\n app.current.get('stream').update();\n }\n m.redraw();\n });\n }\n if (suppliedOnsubmit) suppliedOnsubmit(tags);\n };\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagDiscussionModal', TagDiscussionModal);"],"names":["ToggleButton","view","vnode","className","isToggled","attrs","this","icon","m","Object","assign","children","flarum","reg","add","TagSelectionModal","constructor","super","arguments","static","_attrs$limits$min$tot","_attrs$limits","_attrs$limits$min","_attrs$limits$min$pri","_attrs$limits2","_attrs$limits2$min","_attrs$limits$min$sec","_attrs$limits3","_attrs$limits3$min","_attrs$limits$max$tot","_attrs$limits4","_attrs$limits4$max","_attrs$limits$max$pri","_attrs$limits5","_attrs$limits5$max","_attrs$limits$max$sec","_attrs$limits6","_attrs$limits6$max","initAttrs","title","canSelect","allowResetting","limits","min","total","primary","secondary","max","Infinity","Error","catchInvalidLimits","oninit","navigator","onUp","setIndex","getCurrentNumericIndex","onDown","onSelect","select","bind","onRemove","selected","splice","length","then","tags","loading","selectableTags","sortTags","selectedTags","map","addTag","indexTag","redraw","content","filter","toLowerCase","primaryCount","secondaryCount","getFilteredTags","inputWidth","Math","getInstruction","focused","onclick","$","focus","tag","removeTag","onready","tagLabel","placeholder","bidi","style","width","onkeydown","navigate","onfocus","onblur","type","disabled","meetsRequirements","id","pinned","position","child","parent","colored","color","includes","active","onmouseover","toggleTag","tagIcon","name","description","allowBypassing","bypassReqs","requireParentTag","isPrimaryParent","push","index","indexOf","t","forEach","onDeselect","remaining","count","onsubmit","e","preventDefault","hide","metaKey","ctrlKey","click","getItem","dispatchEvent","Event","selectableItems","selectedTag","concat","scrollToItem","$items","$dropdown","$item","eq","attr","dropdownScroll","scrollTop","dropdownTop","offset","top","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","css","stop","animate","TagDiscussionModal","_attrs$discussion","discussion","getSelectableTags","canStartDiscussion","suppliedOnsubmit","save","relationships","update"],"sourceRoot":""} \ No newline at end of file diff --git a/framework/core/js/dist/admin.js b/framework/core/js/dist/admin.js index c60ff798b..3249406cb 100644 --- a/framework/core/js/dist/admin.js +++ b/framework/core/js/dist/admin.js @@ -1,3 +1,3 @@ /*! For license information please see admin.js.LICENSE.txt */ -(()=>{var t,e,n={1207:(t,e,n)=>{"use strict";n.d(e,{J:()=>j,Z:()=>B});var r=n(7905),s=n(7465),o=n(4041),i=n(8312),a=n(7224),l=n(8588),c=n(406),u=n(4153);function d(t){return Array.isArray(t.data)}class h{constructor(t){(0,r.Z)(this,"data",{}),(0,r.Z)(this,"models",void 0),this.models=t}pushPayload(t){t.included&&t.included.map(this.pushObject.bind(this));const e=t.data instanceof Array?t.data.map((t=>this.pushObject(t))):this.pushObject(t.data);return e.payload=t,e}pushObject(t){if(!this.models[t.type])return setTimeout((()=>{throw new Error("Pushing object of type `".concat(t.type,"` not allowed, as type not yet registered in the store."))})),null;const e=this.data[t.type]=this.data[t.type]||{},n=e[t.id],r=n?n.pushData(t):this.createRecord(t.type,t);return e[t.id]=r,r.exists=!0,r}async find(t,e,n,r){var o,i;void 0===n&&(n={}),void 0===r&&(r={});let a=n,l=s.Z.forum.attribute("apiUrl")+"/"+t;return e instanceof Array?l+="?filter[id]="+e.join(","):"object"==typeof e?a=e:e&&(l+="/"+e),"filter"in a&&null!=(o=a)&&null!=(i=o.filter)&&i.q&&(a.filter=s.Z.search.gambits.apply(t,a.filter)),s.Z.request({method:"GET",url:l,params:a,...r}).then((t=>(d(t),this.pushPayload(t))))}getById(t,e){var n,r;return null==(n=this.data)||null==(r=n[t])?void 0:r[e]}getBy(t,e,n){return this.all(t).filter((t=>t[e]()===n))[0]}all(t){const e=this.data[t];return e?Object.values(e):[]}remove(t){delete this.data[t.data.type][t.id()]}createRecord(t,e){return void 0===e&&(e={}),e.type=e.type||t,new this.models[t](e,this)}}flarum.reg.add("core","common/Store",h);class p{constructor(t,e){(0,r.Z)(this,"user",void 0),(0,r.Z)(this,"csrfToken",void 0),this.user=t,this.csrfToken=e}login(t,e){return void 0===e&&(e={}),s.Z.request({method:"POST",url:"".concat(s.Z.forum.attribute("baseUrl"),"/login"),body:t,...e})}logout(){window.location.href="".concat(s.Z.forum.attribute("baseUrl"),"/logout?token=").concat(this.csrfToken)}}flarum.reg.add("core","common/Session",p);var f=n(6786),g=n(1552),v=n(7569),b=n(4430),y=n(6386),w=n(4718),Z=n(9423);function x(){$("[data-humantime]").each((function(){const t=$(this),e=(0,Z.Z)(t.attr("datetime"));t.html(e)}))}function N(){setInterval(x,1e4)}flarum.reg.add("core","common/utils/liveHumanTimes",N);var k=n(8134),_=n(3813),C=n(7498),E=n(6322),S=n(4125),A=n(7645),T=n(5788),P=n(5013),D=n(5123),I=n(5278);function M(t,e,n){var r,o;console.group("%c".concat(e),"background-color: #d83e3e; color: #ffffff; font-weight: bold;"),console.error(n),console.groupEnd(),null!=(r=s.Z.session)&&null!=(o=r.user)&&o.isAdmin()&&s.Z.alerts.show({type:"error"},"".concat(t))}flarum.reg.add("core","common/helpers/fireApplicationError",M);var O=n(9175);class L extends O.Z{token(){return O.Z.attribute("token").call(this)}userId(){return O.Z.attribute("userId").call(this)}title(){return O.Z.attribute("title").call(this)}type(){return O.Z.attribute("type").call(this)}createdAt(){return O.Z.attribute("createdAt",O.Z.transformDate).call(this)}lastActivityAt(){return O.Z.attribute("lastActivityAt",O.Z.transformDate).call(this)}lastIpAddress(){return O.Z.attribute("lastIpAddress").call(this)}device(){return O.Z.attribute("device").call(this)}isCurrent(){return O.Z.attribute("isCurrent").call(this)}isSessionToken(){return O.Z.attribute("isSessionToken").call(this)}}flarum.reg.add("core","common/models/AccessToken",L);let j=function(t){return t.NO_MAINTENANCE="none",t.HIGH_MAINTENANCE="high",t.LOW_MAINTENANCE="low",t.SAFE_MODE="safe",t}({});class B{constructor(){(0,r.Z)(this,"forum",void 0),(0,r.Z)(this,"routes",{}),(0,r.Z)(this,"initializers",new o.Z),(0,r.Z)(this,"session",void 0),(0,r.Z)(this,"translator",new u.Z),(0,r.Z)(this,"store",new h({"access-tokens":L,forums:_.Z,users:C.Z,discussions:E.Z,posts:S.Z,groups:A.Z,notifications:T.Z})),(0,r.Z)(this,"search",void 0),(0,r.Z)(this,"cache",{}),(0,r.Z)(this,"booted",!1),(0,r.Z)(this,"current",new P.Z(null)),(0,r.Z)(this,"previous",new P.Z(null)),(0,r.Z)(this,"modal",new D.Z),(0,r.Z)(this,"alerts",new I.Z),(0,r.Z)(this,"drawer",void 0),(0,r.Z)(this,"history",null),(0,r.Z)(this,"pane",null),(0,r.Z)(this,"data",void 0),(0,r.Z)(this,"_title",""),(0,r.Z)(this,"_titleCount",0),(0,r.Z)(this,"requestErrorAlert",null),(0,r.Z)(this,"initialRoute",void 0)}set title(t){this._title=t}get title(){return this._title}set titleCount(t){this._titleCount=t}get titleCount(){return this._titleCount}load(t){this.data=t,this.translator.setLocale(t.locale)}boot(){var t;const e=[];this.initializers.toArray().forEach((t=>{try{t(this)}catch(n){const r=t.itemName.includes("/")?t.itemName.replace(/(\/flarum-ext-)|(\/flarum-)/g,"-"):t.itemName;e.push((()=>M((0,g.Z)(s.Z.translator.trans("core.lib.error.extension_initialiation_failed_message",{extension:r})),"".concat(r," failed to initialize"),n)))}})),this.store.pushPayload({data:this.data.resources}),this.forum=this.store.getById("forums","1"),this.session=new p(null!=(t=this.store.getById("users",String(this.data.session.userId)))?t:null,this.data.session.csrfToken),this.mount(),this.initialRoute=window.location.href,e.forEach((t=>t()))}bootExtensions(t){Object.keys(t).forEach((e=>{const n=t[e];if(!n.extend)return;const r=n.extend.flat(1/0);for(const t of r)t.extend(this,{name:e,exports:n})}))}mount(t){void 0===t&&(t=""),m.mount(document.getElementById("modal"),{view:()=>m(a.Z,{state:this.modal})}),m.mount(document.getElementById("alerts"),{view:()=>m(l.Z,{state:this.alerts})}),this.drawer=new v.Z,m.route(document.getElementById("content"),t+"/",(0,b.Z)(this.routes,t));const e=document.getElementById("app"),n=document.querySelector(".App-header"),r=new w.Z((t=>{const r=e.getBoundingClientRect().top+document.body.scrollTop;e.classList.toggle("affix",t>=r),e.classList.toggle("scrolled",t>r),n.classList.toggle("navbar-fixed-top",t>=r)}));r.start(),r.update(),document.body.classList.add("ontouchstart"in window?"touch":"no-touch"),N()}preloadedApiDocument(){if(this.data.apiDocument&&window.location.href===this.initialRoute){const t=(d(this.data.apiDocument),this.store.pushPayload(this.data.apiDocument));return this.data.apiDocument=null,t}return null}screen(){return getComputedStyle(document.documentElement).getPropertyValue("--flarum-screen")}setTitle(t){this.title=t,this.updateTitle()}setTitleCount(t){this.titleCount=t,this.updateTitle()}updateTitle(){const t=this.titleCount?"(".concat(this.titleCount,") "):"",e=m.route.get()===this.forum.attribute("basePath")+"/",n={pageTitle:this.title,forumName:this.forum.attribute("title"),pageNumber:1};let r=e||!this.title?(0,g.Z)(s.Z.translator.trans("core.lib.meta_titles.without_page_title",n)):(0,g.Z)(s.Z.translator.trans("core.lib.meta_titles.with_page_title",n));r=t+r;const o=new DOMParser;document.title=o.parseFromString(r,"text/html").body.innerText}transformRequestOptions(t){const{background:e,deserialize:n,modifyText:r,...o}={...t},i={background:null==e||e,deserialize:null!=n?n:t=>t,...o};if((0,k.l)(i,"config",((t,e)=>{e.setRequestHeader("X-CSRF-Token",this.session.csrfToken)})),i.method&&!["GET","POST"].includes(i.method)){const t=i.method;(0,k.l)(i,"config",((e,n)=>{n.setRequestHeader("X-HTTP-Method-Override",t)})),i.method="POST"}return i.extract=t=>{let e;e=r?r(t.responseText):t.responseText;const n=t.status;if(n<200||n>299)throw new y.Z(n,"".concat(e),i,t);if(t.getResponseHeader){const e=t.getResponseHeader("X-CSRF-Token");e&&(s.Z.session.csrfToken=e)}try{return""===e?null:JSON.parse(e)}catch(n){throw new y.Z(500,"".concat(e),i,t)}},i}request(t){const e=this.transformRequestOptions(t);return this.requestErrorAlert&&this.alerts.dismiss(this.requestErrorAlert),m.request(e).catch((e=>this.requestErrorCatch(e,t.errorHandler)))}requestErrorCatch(t,e){var n,r,o;const a=null!=(n=null==(r=t.response)||null==(o=r.errors)?void 0:o.map((t=>{var e;return decodeURI(null!=(e=t.detail)?e:"")})))?n:[];let l;switch(t.status){case 422:l=a.map((t=>[t,m("br",null)])).flat().slice(0,-1);break;case 401:case 403:l=s.Z.translator.trans("core.lib.error.permission_denied_message");break;case 404:case 410:l=s.Z.translator.trans("core.lib.error.not_found_message");break;case 413:l=s.Z.translator.trans("core.lib.error.payload_too_large_message");break;case 429:l=s.Z.translator.trans("core.lib.error.rate_limit_exceeded_message");break;default:l=this.requestWasCrossOrigin(t)?s.Z.translator.trans("core.lib.error.generic_cross_origin_message"):s.Z.translator.trans("core.lib.error.generic_message")}const c=s.Z.forum.attribute("debug");return t.alert={type:"error",content:l,controls:c&&[m(i.Z,{className:"Button Button--link",onclick:this.showDebug.bind(this,t,a)},s.Z.translator.trans("core.lib.debug_button"))]},e?e(t):this.requestErrorDefaultHandler(t,c,a),Promise.reject(t)}requestWasCrossOrigin(t){return new URL(t.options.url,document.baseURI).origin!==window.location.origin}requestErrorDefaultHandler(t,e,n){if(!(t instanceof y.Z))throw t;if(e&&t.xhr){const{method:e,url:r}=t.options,{status:s=""}=t.xhr;console.group("".concat(e," ").concat(r," ").concat(s)),n.length?console.error(...n):console.error(t),console.groupEnd()}500===t.status&&e?s.Z.modal.show(c.Z,{error:t,formattedError:n}):t.alert&&(this.requestErrorAlert=this.alerts.show(t.alert,t.alert.content))}showDebug(t,e){null!==this.requestErrorAlert&&this.alerts.dismiss(this.requestErrorAlert),this.modal.show(c.Z,{error:t,formattedError:e})}route(t,e){void 0===e&&(e={});const n=this.routes[t];if(!n)throw new Error("Route '".concat(t,"' does not exist"));const r=n.path.replace(/:([^\/]+)/g,((t,n)=>"".concat((0,f.Z)(e,n))));for(const t in e)e.hasOwnProperty(t)&&!e[t]&&delete e[t];const s=m.buildQueryString(e);return(""===m.route.prefix?this.forum.attribute("basePath"):"")+r+(s?"?"+s:"")}}flarum.reg.add("core","common/Application",B)},2190:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7905);class s{constructor(){(0,r.Z)(this,"element",void 0),(0,r.Z)(this,"attrs",void 0),(0,r.Z)(this,"state",void 0)}oninit(t){this.setAttrs(t.attrs)}oncreate(t){this.element=t.dom}onbeforeupdate(t){this.setAttrs(t.attrs)}onupdate(t){}onbeforeremove(t){}onremove(t){}$(t){const e=$(this.element);return t?e.find(t):e}static component(t,e){void 0===t&&(t={}),void 0===e&&(e=null);const n={...t};return m(this,n,e)}setAttrs(t){if(void 0===t&&(t={}),this.constructor.initAttrs(t),t){if("children"in t)throw new Error("[".concat(this.constructor.name,'] The "children" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute'));if("tag"in t)throw new Error("[".concat(this.constructor.name,'] You cannot use the "tag" attribute name with Mithril 2.'))}this.attrs=t}static initAttrs(t){}}flarum.reg.add("core","common/Component",s)},9175:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(7905),s=n(7465);class o{constructor(t,e){void 0===t&&(t={}),void 0===e&&(e=s.Z.store),(0,r.Z)(this,"data",{}),(0,r.Z)(this,"freshness",new Date),(0,r.Z)(this,"exists",!1),(0,r.Z)(this,"store",void 0),this.data=t,this.store=e}id(){return"id"in this.data?this.data.id:void 0}attribute(t){var e,n;return null==(e=this.data)||null==(n=e.attributes)?void 0:n[t]}pushData(t){if("id"in t&&(this.data.id=t.id),"type"in t&&(this.data.type=t.type),"attributes"in t){var e;(e=this.data).attributes||(e.attributes={});for(const e in t.attributes){const n=t.attributes[e];n&&n instanceof o&&delete t.attributes[e]}Object.assign(this.data.attributes,t.attributes)}if("relationships"in t){var n;const e=null!=(n=this.data.relationships)?n:{};for(const n in t.relationships){const r=t.relationships[n];if(null===r){delete e[n],delete t.relationships[n];continue}let s;s=r instanceof o?{data:o.getIdentifier(r)}:r instanceof Array?{data:r.map(o.getIdentifier)}:r,t.relationships[n]=s,e[n]=s}this.data.relationships=e}return this.freshness=new Date,this}pushAttributes(t){this.pushData({attributes:t})}save(t,e){void 0===e&&(e={});const n={type:this.data.type,attributes:t};if("id"in this.data&&(n.id=this.data.id),t.relationships){n.relationships={};for(const e in t.relationships){const r=t.relationships[e];null!==r&&(n.relationships[e]={data:r instanceof Array?r.map(o.getIdentifier):o.getIdentifier(r)})}delete t.relationships}const r=this.copyData();this.pushData(n);const i={data:n,meta:e.meta||void 0};return s.Z.request({method:this.exists?"PATCH":"POST",url:s.Z.forum.attribute("apiUrl")+this.apiEndpoint(),body:i,...e}).then((t=>this.store.pushPayload(t)),(t=>{throw this.pushData(r),m.redraw(),t}))}delete(t,e){return void 0===t&&(t={}),void 0===e&&(e={}),this.exists?s.Z.request({method:"DELETE",url:s.Z.forum.attribute("apiUrl")+this.apiEndpoint(),body:t,...e}).then((()=>{this.exists=!1,this.store.remove(this)})):Promise.resolve()}apiEndpoint(){return"/"+this.data.type+("id"in this.data?"/"+this.data.id:"")}copyData(){return JSON.parse(JSON.stringify(this.data))}rawRelationship(t){var e,n;return null==(e=this.data.relationships)||null==(n=e[t])?void 0:n.data}static attribute(t,e){return function(){return e?e(this.attribute(t)):this.attribute(t)}}static hasOne(t){return function(){var e,n;const r=null==(e=this.data.relationships)||null==(n=e[t])?void 0:n.data;if(r&&r instanceof Array)throw new Error("Relationship ".concat(t," on model ").concat(this.data.type," is plural, so the hasOne method cannot be used to access it."));return!!r&&this.store.getById(r.type,r.id)}}static hasMany(t){return function(){var e,n;const r=null==(e=this.data.relationships)||null==(n=e[t])?void 0:n.data;if(r&&!(r instanceof Array))throw new Error("Relationship ".concat(t," on model ").concat(this.data.type," is singular, so the hasMany method cannot be used to access it."));return!!r&&r.map((t=>this.store.getById(t.type,t.id)))}}static transformDate(t){return null!=t?new Date(t):t}static getIdentifier(t){return t&&"id"in t.data?{type:t.data.type,id:t.data.id}:null}}flarum.reg.add("core","common/Model",o)},8740:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var r=n(7905),s=n(7465),o=n(1586);class i extends o.y3{key(){return s.Z.translator.trans("core.lib.gambits.discussions.author.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.discussions.author.hint",{},!0)}filterKey(){return"author"}}flarum.reg.add("core","common/query/discussions/AuthorGambit",i);class a extends o.y3{key(){return s.Z.translator.trans("core.lib.gambits.discussions.created.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.discussions.created.hint",{},!0)}valuePattern(){return"(\\d{4}\\-\\d\\d\\-\\d\\d(?:\\.\\.(\\d{4}\\-\\d\\d\\-\\d\\d))?)"}filterKey(){return"created"}}flarum.reg.add("core","common/query/discussions/CreatedGambit",a);class l extends o.gD{key(){return s.Z.translator.trans("core.lib.gambits.discussions.hidden.key",{},!0)}filterKey(){return"hidden"}enabled(){return!!s.Z.session.user}}flarum.reg.add("core","common/query/discussions/HiddenGambit",l);class c extends o.gD{key(){return s.Z.translator.trans("core.lib.gambits.discussions.unread.key",{},!0)}filterKey(){return"unread"}enabled(){return!!s.Z.session.user}}flarum.reg.add("core","common/query/discussions/UnreadGambit",c);class u extends o.y3{key(){return s.Z.translator.trans("core.lib.gambits.users.email.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.users.email.hint",{},!0)}filterKey(){return"email"}enabled(){return!(!s.Z.session.user||!s.Z.forum.attribute("canEditUserCredentials"))}}flarum.reg.add("core","common/query/users/EmailGambit",u);class d extends o.y3{key(){return s.Z.translator.trans("core.lib.gambits.users.group.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.users.group.hint",{},!0)}filterKey(){return"group"}}flarum.reg.add("core","common/query/users/GroupGambit",d);class m{constructor(){(0,r.Z)(this,"gambits",{discussions:[i,a,l,c],users:[u,d]})}apply(t,e){return e.q=this.match(t,e.q,((t,n,r)=>{const s=t.toFilter(n,r);Object.keys(s).forEach((n=>{n in e&&t.predicates&&Array.isArray(s[n])?e[n]=e[n].concat(s[n]):e[n]=s[n]}))})),e}match(t,e,n){const r=this.for(t).filter((t=>t.enabled()));if(0===r.length)return e;const s=e.split(" ");for(const t of r)for(const r of s){const s="^(-?)".concat(t.pattern(),"$");let o=r.match(s);if(o){const s="-"===o[1];o.splice(1,1),n(t,o,s,r),e=e.replace(r,"")}}return e.trim().replace(/\s+/g," ")}from(t,e,n){const r=this.for(t);return 0===r.length||Object.keys(n).forEach((t=>{for(const s of r){const r="-"===t[0];r&&(t=t.substring(1)),s.filterKey()===t&&(e+=" ".concat(s.fromFilter(n[t],r)))}})),e}for(t){return(this.gambits[t]||[]).map((t=>new t))}}flarum.reg.add("core","common/GambitManager",m);class h{constructor(t){(0,r.Z)(this,"state",void 0),(0,r.Z)(this,"gambits",new m),this.state=t}}(0,r.Z)(h,"MIN_SEARCH_LEN",3),flarum.reg.add("core","common/SearchManager",h)},4153:(t,e,n)=>{"use strict";n.d(e,{Z:()=>V});var r,s=n(7905),o=n(6880),i=n.n(o),a=n(6353),l=n.n(a),c=n(2512),u=n.n(c),d=n(8328),h=n.n(d),p=n(9939),f=n.n(p),g=n(1627),v=n.n(g),b=n(871),y=n.n(b);function w(t){return t.reduce((function(t,e){return t.concat(Array.isArray(e)?w(e):e)}),[])}function Z(t){var e={};return function(){for(var n=arguments.length,r=new Array(n),s=0;s3&&void 0!==arguments[3]?arguments[3]:[];if(!t)return r;if(1===n)return r.push(t),r;var s=t.indexOf(e);if(-1===s)return r.push(t),r;var o=t.substring(0,s).trim(),i=t.substring(s+e.length+1).trim();return r.push(o),_(i,e,n-1,r)}function C(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function E(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,s=arguments.length>3?arguments[3]:void 0,o=arguments.length>4?arguments[4]:void 0,i=x(e),a=i.args,l=i.cases,c=parseInt(t);a.forEach((function(t){t.startsWith("offset:")&&(c-=parseInt(t.slice("offset:".length)))}));var u=[];if("PluralRules"in Intl){void 0!==r&&r.resolvedOptions().locale===n||(r=new Intl.PluralRules(n));var d=r.select(c);d!==A&&u.push(d)}1===c&&u.push("one"),u.push("=".concat(c),A);for(var m=0;m1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0,s=x(e),o=s.cases;return t in o?r(o[t],n):D in o?r(o.other,n):t}function M(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=[],o=function(r,o,i,a,l,c){if(o)return{break:!0};var u=O(t,i,a,l);if(!u)return s;var d=u.segmentIndex===a,m=t[u.segmentIndex],h=[];if(d)h.push(r.slice(l+1,u.segmentStart));else{h.push(r.slice(l+1));for(var p=a+1;p"===a[m]){var h=a.slice(c+1+l,m),p=s(a,l,h,i,m,c);if(p.exit)return;if(p.newSegmentIndex&&(i=p.newSegmentIndex),p.processedSegment&&(d=!0),p.break)break;l=!1,c=null,u=!1}else u&&(o=a[m],!/[a-zA-Z-_]/.test(o))&&(l=!1,c=null,u=!1);else c=m,u=!0,"/"===a[m+1]&&(l=!0,m++);d||r.push(a)}else r.push(a)}}function j(t){return Object.keys(t).reduce((function(e,n){return e[n]=R(t[n]),e}),{})}function B(t){return"string"!=typeof t?t:t.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}function R(t){return"string"==typeof t||t instanceof String?t.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"):Array.isArray(t)?t.map(R):t}function $(t,e,n){return"<".concat(t,">").concat(B(n),"")}var H=function(t){h()(s,t);var e,n,r=(e=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,r=v()(e);if(n){var s=v()(this).constructor;t=Reflect.construct(r,arguments,s)}else t=r.apply(this,arguments);return f()(this,t)});function s(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return l()(this,s),(e=r.call(this,t,n)).richHandler=o||$,e}return u()(s,[{key:"rich",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=j(e),r=w(this.process(t,n)),s=Math.random().toString(36)+Math.random().toString(36)+Math.random().toString(36),o=Object.fromEntries(Object.entries(e).map((function(t){var e=i()(t,2),n=e[0];return e[1],[n,s]}))),a=w(this.process(t,o)),l=M(a,o,(function(){return s})),c=l.map((function(t,e){return t===s?null:e})).filter((function(t){return null!==t}));return M(r,n,this.richHandler,c)}}]),s}(function(){function t(e){var n=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};l()(this,t),y()(this,"format",Z((function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return w(n.process(t,e)).join("")}))),this.locale=e,this.typeHandlers=r}return u()(t,[{key:"process",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)return[];var n=t.indexOf("{");if(-1!==n){var r=N(t,n);if(-1===r)throw new Error('Unbalanced curly braces in string: "'.concat(t,'"'));var s=t.substring(n,r+1);if(s){var o=[],a=t.substring(0,n);a&&o.push(a);var l=k(s),c=i()(l,3),u=c[0],d=c[1],m=c[2],h=e[u];null==h&&(h="");var p=d&&this.typeHandlers[d];o.push(p?p(h,m,this.locale,e,this.process.bind(this)):h);var f=t.substring(r+1);return f&&o.push(this.process(f,e)),o}}return[t]}}]),t}());function U(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function F(t){for(var e=1;e{"use strict";n.d(e,{Z:()=>o});const r=window,s=new Proxy({},{get:(t,e)=>Reflect.get(r.app,e,r.app),set:(t,e,n)=>Reflect.set(r.app,e,n,r.app)}),o=s;flarum.reg.add("core","common/app",s)},3817:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(2190),s=n(8312),o=n(1268),i=n(6786),a=n(3344),l=n(7465),c=n(9133);class u extends r.Z{view(t){const e=Object.assign({},this.attrs),n=(0,i.Z)(e,"type");e.className=(0,a.Z)("Alert","Alert--".concat(n),e.className);const r=(0,i.Z)(e,"title"),u=(0,i.Z)(e,"icon"),d=(0,i.Z)(e,"content")||t.children,h=(0,i.Z)(e,"controls")||[],p=(0,i.Z)(e,"dismissible"),f=(0,i.Z)(e,"ondismiss"),g=[];return(p||void 0===p)&&g.push(m(s.Z,{"aria-label":l.Z.translator.trans("core.lib.alert.dismiss_a11y_label"),icon:"fas fa-times",className:"Button Button--link Button--icon Alert-dismiss",onclick:f})),m("div",e,m("div",{className:(0,a.Z)("Alert-container",e.containerClassName)},!!r&&m("div",{className:"Alert-title"},!!u&&m("span",{className:"Alert-title-icon"},m(c.Z,{name:u})),m("span",{className:"Alert-title-text"},r)),m("span",{className:"Alert-body"},d),m("ul",{className:"Alert-controls"},(0,o.Z)(h.concat(g)))))}}flarum.reg.add("core","common/components/Alert",u)},8588:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(2190);class s extends r.Z{oninit(t){super.oninit(t),this.state=this.attrs.state}view(){const t=this.state.getActiveAlerts();return m("div",{className:"AlertManager"},Object.keys(t).map(Number).map((e=>{const n=t[e],r="error"===n.attrs.type;return m("div",{className:"AlertManager-alert",role:"alert","aria-live":r?"assertive":"polite"},m(n.componentClass,Object.assign({},n.attrs,{ondismiss:this.state.dismiss.bind(this.state,e)}),n.children))})))}}flarum.reg.add("core","common/components/AlertManager",s)},7323:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(3344),s=n(2190);class o extends s.Z{view(t){const{user:e,...n}=t.attrs;n.className=(0,r.Z)("Avatar",n.className),null!=n.loading||(n.loading="lazy");let s="";const o="undefined"===n.title||n.title;if(o||delete n.title,e){const t=e.displayName()||"?",r=e.avatarUrl();if(o&&(n.title=n.title||t),r)return m("img",Object.assign({},n,{src:r,alt:""}));s=t.charAt(0).toUpperCase(),n.style={"--avatar-bg":e.color()}}return m("span",n,s)}}flarum.reg.add("core","common/components/Avatar",o)},3804:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(6439),s=n(2190),o=n(3344),i=n(9215),a=n(9133);class l extends s.Z{view(){const{type:t,icon:e,label:n,color:s,style:l={},...c}=this.attrs,u=(0,o.Z)("Badge",[t&&"Badge--".concat(t)],c.className,(0,i.Z)(s)),d=e?m(a.Z,{name:e,className:"Badge-icon"}):m.trust(" "),h={...l,"--badge-bg":s},p={...c,className:u,style:h},f=m("div",p,d);return n?m(r.Z,{text:n},f):f}}flarum.reg.add("core","common/components/Badge",l)},8312:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(2190),s=n(7465);function o(){s.Z.forum.attribute("debug")&&console.warn(...arguments)}flarum.reg.add("core","common/helpers/fireDebugWarning",o);var i=n(3344),a=n(1552),l=n(5226),c=n(9133);class u extends r.Z{view(t){let{type:e,"aria-label":n,icon:r,disabled:s,loading:o,className:l,class:c,...u}=this.attrs;e||(e="button"),"object"==typeof n&&(n=(0,a.Z)(n)),(s||o)&&delete u.onclick,l=(0,i.Z)(c,l,{hasIcon:r,disabled:s||o,loading:o});const d={disabled:s,className:l,type:e,"aria-label":n,...u};return m("button",d,this.getButtonContent(t.children))}oncreate(t){var e,n;super.oncreate(t);const{"aria-label":r}=this.attrs;this.view!==u.prototype.view||r||(0,a.Z)(t.children)||null!=(e=this.element)&&null!=(n=e.getAttribute)&&n.call(e,"aria-label")||o('[Flarum Accessibility Warning] Button has no content and no accessible label. This means that screen-readers will not be able to interpret its meaning and just read "Button". Consider providing accessible text via the `aria-label` attribute. https://web.dev/button-name',this.element)}getButtonContent(t){const e=this.attrs.icon;return[e&&m(c.Z,{name:e,className:"Button-icon"}),t&&m("span",{className:"Button-label"},t),this.attrs.loading&&m(l.Z,{size:"small",display:"inline"})]}}flarum.reg.add("core","common/components/Button",u)},7298:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(2190),s=n(5226),o=n(3344),i=n(7669),a=n(9133);class l extends r.Z{view(t){const e=(0,o.Z)(["Checkbox",this.attrs.state?"on":"off",this.attrs.className,this.attrs.loading&&"loading",this.attrs.disabled&&"disabled"]);return m("label",{className:e},m("input",{type:"checkbox",checked:this.attrs.state,disabled:this.attrs.disabled,onchange:(0,i.Z)("checked",this.onchange.bind(this))}),m("div",{className:"Checkbox-display","aria-hidden":"true"},this.getDisplay()),t.children)}getDisplay(){return this.attrs.loading?m(s.Z,{display:"unset",size:"small"}):m(a.Z,{name:this.attrs.state?"fas fa-check":"fas fa-times"})}onchange(t){this.attrs.onchange&&this.attrs.onchange(t,this)}}flarum.reg.add("core","common/components/Checkbox",l)},344:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(7905),s=n(7465),o=n(2190),i=n(1268),a=n(1552),l=n(6439),c=n(9133);class u extends o.Z{constructor(){super(...arguments),(0,r.Z)(this,"showing",!1)}static initAttrs(t){t.className||(t.className=""),t.buttonClassName||(t.buttonClassName=""),t.menuClassName||(t.menuClassName=""),t.label||(t.label=""),null!=t.caretIcon||(t.caretIcon="fas fa-caret-down"),t.accessibleToggleLabel||(t.accessibleToggleLabel=(0,a.Z)(s.Z.translator.trans("core.lib.dropdown.toggle_dropdown_accessible_label")))}view(t){const e=t.children?(0,i.Z)(t.children):[],n=!this.attrs.lazyDraw||this.showing;return m("div",{className:"ButtonGroup Dropdown dropdown "+this.attrs.className+" itemCount"+e.length+(this.showing?" open":"")},this.getButton(t.children),n&&this.getMenu(e))}oncreate(t){super.oncreate(t),this.$().on("shown.bs.dropdown",(()=>{var t,e,n,r,s,o,i,a,l,c,u;const{lazyDraw:d,onshow:h}=this.attrs;this.showing=!0,d&&m.redraw.sync(),"function"==typeof h&&h(),d||m.redraw();const p=this.$(".Dropdown-menu"),f=p.hasClass("Dropdown-menu--right"),g=null!=(t=null==(e=p.offset())?void 0:e.top)?t:0,v=null!=(n=p.height())?n:0,b=null!=(r=$(window).scrollTop())?r:0,y=null!=(s=$(window).height())?s:0;p.removeClass("Dropdown-menu--top Dropdown-menu--right"),p.toggleClass("Dropdown-menu--top",g+v>b+y),((null==(o=p.offset())?void 0:o.top)||0)<0&&p.removeClass("Dropdown-menu--top");const w=null!=(i=null==(a=p.offset())?void 0:a.left)?i:0,Z=null!=(l=p.width())?l:0,x=null!=(c=$(window).scrollLeft())?c:0,N=null!=(u=$(window).width())?u:0;p.toggleClass("Dropdown-menu--right",f||w+Z>x+N)})),this.$().on("hidden.bs.dropdown",(()=>{this.showing=!1,this.attrs.onhide&&this.attrs.onhide(),m.redraw()}))}getButton(t){let e=m("button",Object.assign({className:"Dropdown-toggle "+this.attrs.buttonClassName,"aria-haspopup":"menu","aria-label":this.attrs.accessibleToggleLabel,"data-toggle":"dropdown",onclick:this.attrs.onclick},this.attrs.buttonAttrs),this.getButtonContent(t));return this.attrs.tooltip&&(e=m(l.Z,{text:this.attrs.tooltip,position:"bottom"},e)),e}getButtonContent(t){return[this.attrs.icon?m(c.Z,{name:this.attrs.icon,className:"Button-icon"}):"",m("span",{className:"Button-label"},this.attrs.label),this.attrs.caretIcon?m(c.Z,{name:this.attrs.caretIcon,className:"Button-caret"}):""]}getMenu(t){return m("ul",{className:"Dropdown-menu dropdown-menu "+this.attrs.menuClassName},t)}}flarum.reg.add("core","common/components/Dropdown",u)},8034:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(2190),s=n(3344);class o extends r.Z{view(t){return m("div",{className:(0,s.Z)("FieldSet",this.attrs.className),role:"group","aria-label":this.attrs.label,"aria-disabled":!1},m("label",{className:"FieldSet-label","aria-hidden":"true"},this.attrs.label),this.attrs.description?m("div",{className:"FieldSet-description helpText"},this.attrs.description):null,m("div",{className:"FieldSet-items"},t.children))}}flarum.reg.add("core","common/components/FieldSet",o)},6352:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(2190),s=n(3344);class o extends r.Z{view(t){const{label:e,description:n,className:r,...o}=t.attrs;return m("div",Object.assign({className:(0,s.Z)("Form",r)},o),m("div",{className:"Form-header"},e&&m("label",null,e),n&&m("p",{className:"helpText"},n)),m("div",{className:"Form-body"},t.children))}}flarum.reg.add("core","common/components/Form",o)},899:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7108);class s extends r.Z{wrapper(t){return m("form",{onsubmit:this.onsubmit.bind(this)},t)}onsubmit(t){}onready(){this.$().find("input, select, textarea").first().trigger("focus").trigger("select")}onerror(t){var e;this.alertAttrs=t.alert,m.redraw(),422===t.status&&null!=(e=t.response)&&e.errors?this.$("form [name="+t.response.errors[0].source.pointer.replace("/data/attributes/","")+"]").trigger("select"):this.onready()}}flarum.reg.add("core","common/components/FormModal",s)},6697:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(3804);class s extends r.Z{static initAttrs(t){super.initAttrs(t),t.group&&(t.icon=t.group.icon()||"",t.color=t.group.color()||"",t.label=void 0===t.label?t.group.nameSingular():t.label,t.type="group--"+t.group.id(),delete t.group)}}flarum.reg.add("core","common/components/GroupBadge",s)},9133:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(3344),s=n(2190);class o extends s.Z{view(t){const{name:e,...n}=t.attrs;return n.className=(0,r.Z)("icon",e,n.className),m("i",Object.assign({"aria-hidden":"true"},n))}}flarum.reg.add("core","common/components/Icon",o)},3986:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(2190),s=n(9133),o=n(3344);class i extends r.Z{view(t){const{icon:e,className:n,...r}=t.attrs;return m("div",Object.assign({className:(0,o.Z)("InfoTile",n)},r),this.icon(),m("div",{className:"InfoTile-text"},t.children))}icon(){return this.attrs.iconElement?this.attrs.iconElement:this.attrs.icon?m(s.Z,{name:(0,o.Z)(this.attrs.icon,"InfoTile-icon")}):null}}flarum.reg.add("core","common/components/InfoTile",i)},9908:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(6789),s=n(2190),o=n(9133),i=n(5226),a=n(3344),l=n(8312);class c extends s.Z{oninit(t){super.oninit(t)}view(t){var e,n;const{className:s,...c}=this.attrs.inputAttrs||{},u=this.attrs.value||(null==(e=(n=this.attrs).stream)?void 0:e.call(n))||"";return m("div",{className:(0,a.Z)("Input",this.attrs.className,{"Input--withPrefix":this.attrs.prefixIcon,"Input--withClear":this.attrs.clearable})},this.attrs.prefixIcon&&m(o.Z,{name:(0,a.Z)(this.attrs.prefixIcon,"Input-prefix-icon")}),this.input({inputClassName:s,value:u,inputAttrs:c}),this.attrs.loading&&m(i.Z,{size:"small",display:"inline",containerClassName:"Button Button--icon Button--link"}),this.attrs.clearable&&u&&!this.attrs.loading&&m(l.Z,{className:"Input-clear Button Button--icon Button--link",onclick:this.clear.bind(this),"aria-label":this.attrs.clearLabel||r.Z.translator.trans("core.lib.input.clear_button"),type:"button",icon:"fas fa-times-circle"}))}input(t){let{inputClassName:e,value:n,inputAttrs:r}=t;const s={className:(0,a.Z)("FormControl",e),type:this.attrs.type||"text",value:n,oninput:t=>{var e;return null==(e=this.onchange)?void 0:e.call(this,t.target.value)},"aria-label":this.attrs.ariaLabel,placeholder:this.attrs.placeholder,readonly:this.attrs.readonly||void 0,disabled:this.attrs.disabled||void 0,...r};return this.attrs.renderInput?this.attrs.renderInput(s):m("input",s)}onchange(t){var e,n;this.attrs.stream?this.attrs.stream(t):null==(e=(n=this.attrs).onchange)||e.call(n,t)}clear(){this.onchange("")}}flarum.reg.add("core","common/components/Input",c)},5226:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(7465),s=n(2190),o=n(3344);class i extends s.Z{view(){const{display:t="block",size:e="medium",containerClassName:n,className:s,...i}=this.attrs,a=(0,o.Z)("LoadingIndicator",s),l=(0,o.Z)("LoadingIndicator-container","unset"!==t&&"LoadingIndicator-container--".concat(t),e&&"LoadingIndicator-container--".concat(e),n);return m("div",Object.assign({"aria-label":r.Z.translator.trans("core.lib.loading_indicator.accessible_label"),role:"status"},i.containerAttrs,{"data-size":e,className:l}),m("div",Object.assign({"aria-hidden":"true",className:a},i)))}}flarum.reg.add("core","common/components/LoadingIndicator",i)},7108:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(7905),s=n(7465),o=n(2190),i=n(3817),a=n(8312),l=n(3344);class c extends o.Z{constructor(){super(...arguments),(0,r.Z)(this,"loading",!1),(0,r.Z)(this,"alertAttrs",null)}static get dismissibleOptions(){return{viaCloseButton:this.isDismissibleViaCloseButton,viaEscKey:this.isDismissibleViaEscKey,viaBackdropClick:this.isDismissibleViaBackdropClick}}oncreate(t){super.oncreate(t),this.attrs.animateShow((()=>this.onready()))}onbeforeremove(t){if(super.onbeforeremove(t),!this.attrs.state.modal)return new Promise((t=>setTimeout(t,300)))}view(){return this.alertAttrs&&(this.alertAttrs.dismissible=!1),m("div",{className:(0,l.Z)("Modal modal-dialog fade",this.className())},m("div",{className:"Modal-content"},this.dismissibleOptions.viaCloseButton&&m("div",{className:"Modal-close App-backControl"},m(a.Z,{icon:"fas fa-times",onclick:()=>this.hide(),className:"Button Button--icon Button--link","aria-label":s.Z.translator.trans("core.lib.modal.close")})),this.wrapper(this.inner())))}wrapper(t){return m("[",null,t)}inner(){return m("[",null,m("div",{className:"Modal-header"},m("h3",{className:"App-titleControl App-titleControl--text"},this.title())),!!this.alertAttrs&&m("div",{className:"Modal-alert"},m(i.Z,this.alertAttrs)),this.content())}onready(){}hide(){this.attrs.animateHide()}loaded(){this.loading=!1,m.redraw()}get dismissibleOptions(){return this.constructor.dismissibleOptions}}(0,r.Z)(c,"isDismissibleViaCloseButton",!0),(0,r.Z)(c,"isDismissibleViaEscKey",!0),(0,r.Z)(c,"isDismissibleViaBackdropClick",!0),flarum.reg.add("core","common/components/Modal",c)},7224:(t,e,n)=>{"use strict";n.d(e,{Z:()=>w});var r=n(7905),s=n(2190),o=n(7835),i=!1;if("undefined"!=typeof window){var a={get passive(){i=!0}};window.addEventListener("testPassive",null,a),window.removeEventListener("testPassive",null,a)}var l="undefined"!=typeof window&&window.navigator&&window.navigator.platform&&(/iP(ad|hone|od)/.test(window.navigator.platform)||"MacIntel"===window.navigator.platform&&window.navigator.maxTouchPoints>1),c=[],u=!1,d=-1,h=void 0,p=void 0,f=void 0,g=function(t){return c.some((function(e){return!(!e.options.allowTouchMove||!e.options.allowTouchMove(t))}))},v=function(t){var e=t||window.event;return!!g(e.target)||e.touches.length>1||(e.preventDefault&&e.preventDefault(),!1)},b=function(){l&&(c.forEach((function(t){t.targetElement.ontouchstart=null,t.targetElement.ontouchmove=null})),u&&(document.removeEventListener("touchmove",v,i?{passive:!1}:void 0),u=!1),d=-1),l?function(){if(void 0!==p){var t=-parseInt(document.body.style.top,10),e=-parseInt(document.body.style.left,10);document.body.style.position=p.position,document.body.style.top=p.top,document.body.style.left=p.left,window.scrollTo(e,t),p=void 0}}():(void 0!==f&&(document.body.style.paddingRight=f,f=void 0),void 0!==h&&(document.body.style.overflow=h,h=void 0)),c=[]},y=n(5226);class w extends s.Z{constructor(){super(...arguments),(0,r.Z)(this,"focusTrap",void 0),(0,r.Z)(this,"lastSetFocusTrap",void 0),(0,r.Z)(this,"modalClosing",!1),(0,r.Z)(this,"keyUpListener",null)}view(t){return m("[",null,this.attrs.state.modalList.map(((t,e)=>{const n=null==t?void 0:t.componentClass;return m("div",{key:t.key,className:"ModalManager modal","data-modal-key":t.key,"data-modal-number":e,role:"dialog","aria-modal":"true",style:{"--modal-number":e},"aria-hidden":this.attrs.state.modal!==t&&"true"},!!n&&[m(n,Object.assign({key:t.key},t.attrs,{animateShow:this.animateShow.bind(this),animateHide:this.animateHide.bind(this),state:this.attrs.state})),m("div",{key:t.key,className:"ModalManager-invisibleBackdrop",onclick:this.handlePossibleBackdropClick.bind(this)})])})),(this.attrs.state.backdropShown||this.attrs.state.loadingModal)&&m("div",{className:"Modal-backdrop backdrop",ontransitionend:this.onBackdropTransitionEnd.bind(this),"data-showing":!!this.attrs.state.modalList.length||this.attrs.state.loadingModal,style:{"--modal-count":this.attrs.state.modalList.length+Number(this.attrs.state.loadingModal)}},this.attrs.state.loadingModal&&m(y.Z,null)))}oncreate(t){super.oncreate(t),this.keyUpListener=this.handleEscPress.bind(this),document.body.addEventListener("keyup",this.keyUpListener)}onbeforeremove(t){super.onbeforeremove(t),this.keyUpListener&&document.body.removeEventListener("keyup",this.keyUpListener),this.keyUpListener=null}onupdate(t){super.onupdate(t),requestAnimationFrame((()=>{try{var t,e,n,r;if(!this.attrs.state.isModalOpen())return null==(e=document.getElementById("app"))||e.setAttribute("aria-hidden","false"),null==(n=(r=this.focusTrap).deactivate)||n.call(r),void b();null==(t=document.getElementById("app"))||t.setAttribute("aria-hidden","true");const w=this.attrs.state.modal.key;var s,a,m,y;this.focusTrap&&this.lastSetFocusTrap!==w&&(null==(s=(a=this.focusTrap).deactivate)||s.call(a),b()),this.activeDialogElement&&this.lastSetFocusTrap!==w&&(this.focusTrap=(0,o.v)(this.activeDialogElement,{allowOutsideClick:!0}),null==(m=(y=this.focusTrap).activate)||m.call(y),function(t,e){if(t){if(!c.some((function(e){return e.targetElement===t}))){var n={targetElement:t,options:e||{}};c=[].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e=r&&(document.body.style.top=-(e+t))}))}),300)}})):function(t){if(void 0===f){var e=!!t&&!0===t.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(e&&n>0){var r=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right"),10);f=document.body.style.paddingRight,document.body.style.paddingRight=r+n+"px"}}void 0===h&&(h=document.body.style.overflow,document.body.style.overflow="hidden")}(e),l&&(t.ontouchstart=function(t){1===t.targetTouches.length&&(d=t.targetTouches[0].clientY)},t.ontouchmove=function(e){1===e.targetTouches.length&&function(t,e){var n=t.targetTouches[0].clientY-d;!g(t.target)&&(e&&0===e.scrollTop&&n>0||function(t){return!!t&&t.scrollHeight-t.scrollTop<=t.clientHeight}(e)&&n<0?v(t):t.stopPropagation())}(e,t)},u||(document.addEventListener("touchmove",v,i?{passive:!1}:void 0),u=!0))}}else console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.")}(this.activeDialogManagerElement,{reserveScrollBarGap:!0})),this.lastSetFocusTrap=w}catch{}}))}get activeDialogElement(){var t;return document.body.querySelector('.ModalManager[data-modal-key="'.concat(null==(t=this.attrs.state.modal)?void 0:t.key,'"] .Modal'))}get activeDialogManagerElement(){var t;return document.body.querySelector('.ModalManager[data-modal-key="'.concat(null==(t=this.attrs.state.modal)?void 0:t.key,'"]'))}animateShow(t){void 0===t&&(t=()=>{}),this.attrs.state.modal&&(this.activeDialogElement.addEventListener("transitionend",(()=>{t()}),{once:!0}),requestAnimationFrame((()=>{this.activeDialogElement.classList.add("in")})))}animateHide(t){void 0===t&&(t=()=>{}),this.modalClosing||(this.modalClosing=!0,this.activeDialogElement.addEventListener("transitionend",(()=>{this.modalClosing=!1,this.attrs.state.close(),t()}),{once:!0}),this.activeDialogElement.classList.remove("in"),this.activeDialogElement.classList.add("out"))}handleEscPress(t){if(!this.attrs.state.modal)return;const e=this.attrs.state.modal.componentClass.dismissibleOptions;"Escape"===t.key&&e.viaEscKey&&(t.preventDefault(),this.animateHide())}handlePossibleBackdropClick(t){this.attrs.state.modal&&this.attrs.state.modal.componentClass.dismissibleOptions.viaBackdropClick&&this.animateHide()}onBackdropTransitionEnd(t){"opacity"===t.propertyName&&null===t.currentTarget.getAttribute("data-showing")&&(this.attrs.state.backdropShown=!1,m.redraw())}}flarum.reg.add("core","common/components/ModalManager",w)},5386:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(7465),s=n(2190),o=n(8312),i=n(2360),a=n(3344);class l extends s.Z{view(){const{history:t,pane:e}=r.Z;return m("div",{className:(0,a.Z)("Navigation ButtonGroup",this.attrs.className),onmouseenter:e&&e.show.bind(e),onmouseleave:e&&e.onmouseleave.bind(e)},null!=t&&t.canGoBack()?[this.getBackButton(),this.getPaneButton()]:this.getDrawerButton())}getBackButton(){const{history:t}=r.Z,e=null==t?void 0:t.getPrevious();return m(i.Z,{className:"Button Navigation-back Button--icon",href:null==t?void 0:t.backUrl(),icon:"fas fa-chevron-left","aria-label":null==e?void 0:e.title,onclick:e=>{e.shiftKey||e.ctrlKey||e.metaKey||2===e.which||(e.preventDefault(),null==t||t.back())}})}getPaneButton(){const{pane:t}=r.Z;return t&&t.active?m(o.Z,{className:(0,a.Z)("Button Button--icon Navigation-pin",{active:t.pinned}),onclick:t.togglePinned.bind(t),icon:"fas fa-thumbtack"}):null}getDrawerButton(){if(!this.attrs.drawer)return null;const{drawer:t}=r.Z,e=r.Z.session.user;return m(o.Z,{className:(0,a.Z)("Button Button--icon Navigation-drawer",{new:null==e?void 0:e.newNotificationCount()}),onclick:e=>{e.stopPropagation(),t.show()},icon:"fas fa-bars","aria-label":r.Z.translator.trans("core.lib.nav.drawer_button")})}}flarum.reg.add("core","common/components/Navigation",l)},4661:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(7905),s=n(7465),o=n(2190),i=n(5013);class a extends o.Z{constructor(){super(...arguments),(0,r.Z)(this,"bodyClass",""),(0,r.Z)(this,"scrollTopOnCreate",!0),(0,r.Z)(this,"useBrowserScrollRestoration",!0)}oninit(t){super.oninit(t),s.Z.previous=s.Z.current,s.Z.current=new i.Z(this.constructor,{routeName:this.attrs.routeName}),s.Z.drawer.hide(),s.Z.modal.close()}oncreate(t){super.oncreate(t),this.bodyClass&&$("#app").addClass(this.bodyClass),this.scrollTopOnCreate&&$(window).scrollTop(0),"scrollRestoration"in history&&(history.scrollRestoration=this.useBrowserScrollRestoration?"auto":"manual")}onremove(t){super.onremove(t),this.bodyClass&&$("#app").removeClass(this.bodyClass)}}flarum.reg.add("core","common/components/Page",a)},406:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7108);class s extends r.Z{className(){return"RequestErrorModal Modal--large"}title(){return!!this.attrs.error.xhr&&"".concat(this.attrs.error.xhr.status," ").concat(this.attrs.error.xhr.statusText)}content(){var t;const{error:e,formattedError:n}=this.attrs;let r;return r=n.length?n.join("\n\n"):e.response?JSON.stringify(e.response,null,2):e.responseText,null!=(t=r)&&t.includes("