diff --git a/extensions/embed/less/forum.less b/extensions/embed/less/forum.less index d195646aa3..4b0959f862 100644 --- a/extensions/embed/less/forum.less +++ b/extensions/embed/less/forum.less @@ -50,7 +50,7 @@ padding: 15px 15px; .scrolled & { - .box-shadow(0 2px 6px var(--shadow-color)); + box-shadow: 0 2px 6px var(--shadow-color); } } diff --git a/extensions/emoji/js/dist/forum.js b/extensions/emoji/js/dist/forum.js index 71479d9ef2..c60bf59780 100644 --- a/extensions/emoji/js/dist/forum.js +++ b/extensions/emoji/js/dist/forum.js @@ -1,3 +1,3 @@ /*! For license information please see forum.js.LICENSE.txt */ -(()=>{var d,u,f={},e={};function c(d){var u=e[d];if(void 0!==u)return u.exports;var t=e[d]={exports:{}};return f[d](t,t.exports,c),t.exports}c.m=f,c.n=d=>{var u=d&&d.__esModule?()=>d.default:()=>d;return c.d(u,{a:u}),u},c.d=(d,u)=>{for(var f in u)c.o(u,f)&&!c.o(d,f)&&Object.defineProperty(d,f,{enumerable:!0,get:u[f]})},c.f={},c.e=d=>Promise.all(Object.keys(c.f).reduce(((u,f)=>(c.f[f](d,u),u)),[])),c.u=d=>"forum/emojiMap.js",c.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(d){if("object"==typeof window)return window}}(),c.o=(d,u)=>Object.prototype.hasOwnProperty.call(d,u),d={},u="module.exports:",c.l=(f,e,t,o)=>{if(d[f])d[f].push(e);else{var r,n;if(void 0!==t)for(var a=document.getElementsByTagName("script"),i=0;i{r.onerror=r.onload=null,clearTimeout(l);var c=d[f];if(delete d[f],r.parentNode&&r.parentNode.removeChild(r),c&&c.forEach((d=>d(e))),u)return u(e)},l=setTimeout(b.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=b.bind(null,r.onerror),r.onload=b.bind(null,r.onload),n&&document.head.appendChild(r)}},c.r=d=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(d,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(d,"__esModule",{value:!0})},(()=>{var d;c.g.importScripts&&(d=c.g.location+"");var u=c.g.document;if(!d&&u&&(u.currentScript&&(d=u.currentScript.src),!d)){var f=u.getElementsByTagName("script");f.length&&(d=f[f.length-1].src)}if(!d)throw new Error("Automatic publicPath is not supported in this browser");d=d.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),c.p=d})(),c.f.compat=(d,u)=>{const f=c.l;c.l=flarum.reg.loadChunk.bind(flarum.reg,f)},(()=>{var d={315:0};c.f.j=(u,f)=>{var e=c.o(d,u)?d[u]:void 0;if(0!==e)if(e)f.push(e[2]);else{var t=new Promise(((f,c)=>e=d[u]=[f,c]));f.push(e[2]=t);var o=c.p+c.u(u),r=new Error;c.l(o,(f=>{if(c.o(d,u)&&(0!==(e=d[u])&&(d[u]=void 0),e)){var t=f&&("load"===f.type?"missing":f.type),o=f&&f.target&&f.target.src;r.message="Loading chunk "+u+" failed.\n("+t+": "+o+")",r.name="ChunkLoadError",r.type=t,r.request=o,e[1](r)}}),"chunk-"+u,u)}};var u=(u,f)=>{var e,t,[o,r,n]=f,a=0;if(o.some((u=>0!==d[u]))){for(e in r)c.o(r,e)&&(c.m[e]=r[e]);n&&n(c)}for(u&&u(f);a{"use strict";c.r(t);const d=flarum.reg.get("core","forum/app");var u=c.n(d);const f=flarum.reg.get("core","common/extend"),e=flarum.reg.get("core","common/components/TextEditorButton");var o=c.n(e);const r=flarum.reg.get("core","common/utils/KeyboardNavigatable");var n=c.n(r);function a(d){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&"function"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d},a(d)}function i(d,u,f){return(u=function(d){var u=function(d,u){if("object"!==a(d)||null===d)return d;var f=d[Symbol.toPrimitive];if(void 0!==f){var e=f.call(d,u);if("object"!==a(e))return e;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(d)}(d,"string");return"symbol"===a(u)?u:String(u)}(u))in d?Object.defineProperty(d,u,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[u]=f,d}const s=flarum.reg.get("core","common/Fragment");var b=c.n(s);class l extends(b()){constructor(){super(...arguments),i(this,"items",[]),i(this,"active",!1),i(this,"index",0),i(this,"keyWasJustPressed",!1)}view(){return m("ul",{className:"Dropdown-menu EmojiDropdown"},m("li",{className:"Dropdown-header"},app.translator.trans("flarum-emoji.forum.composer.type_to_search_text")),this.items.map((d=>m("li",{key:d.attrs.key},d))))}show(d,u){this.$().show().css({left:d+"px",top:u+"px"}),this.active=!0}hide(){this.$().hide(),this.active=!1}navigate(d){this.keyWasJustPressed=!0,this.setIndex(this.index+d,!0),clearTimeout(this.keyWasJustPressedTimeout),this.keyWasJustPressedTimeout=setTimeout((()=>this.keyWasJustPressed=!1),500)}complete(){this.$("li:not(.Dropdown-header)").eq(this.index).find("button").click()}setIndex(d,u){if(this.keyWasJustPressed&&!u)return;const f=this.$(),e=f.find("li:not(.Dropdown-header)");let c=d;c<0?c=e.length-1:c>=e.length&&(c=0),this.index=c;const t=e.removeClass("active").eq(c).addClass("active");if(u){const d=f.scrollTop(),u=f.offset().top,e=u+f.outerHeight(),c=t.offset().top,o=c+t.outerHeight();let r;ce&&(r=d-e+o+parseInt(f.css("padding-bottom"),10)),void 0!==r&&f.stop(!0).animate({scrollTop:r},100)}}}flarum.reg.add("flarum-emoji","forum/fragments/AutocompleteDropdown",l);var p=function(){var d={base:"https://twemoji.maxcdn.com/v/14.0.2/",ext:".png",size:"72x72",className:"emoji",convert:{fromCodePoint:function(d){var u="string"==typeof d?parseInt(d,16):d;return u<65536?r(u):r(55296+((u-=65536)>>10),56320+(1023&u))},toCodePoint:g},onerror:function(){this.parentNode&&this.parentNode.replaceChild(n(this.alt,!1),this)},parse:function(u,f){return f&&"function"!=typeof f||(f={callback:f}),("string"==typeof u?l:b)(u,{callback:f.callback||a,attributes:"function"==typeof f.attributes?f.attributes:p,base:"string"==typeof f.base?f.base:d.base,ext:f.ext||d.ext,size:f.folder||(e=f.size||d.size,"number"==typeof e?e+"x"+e:e),className:f.className||d.className,onerror:f.onerror||d.onerror});var e},replace:h,test:function(d){f.lastIndex=0;var u=f.test(d);return f.lastIndex=0,u}},u={"&":"&","<":"<",">":">","'":"'",'"':"""},f=/(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83e\udef1\ud83c\udffb\u200d\ud83e\udef2\ud83c[\udffc-\udfff]|\ud83e\udef1\ud83c\udffc\u200d\ud83e\udef2\ud83c[\udffb\udffd-\udfff]|\ud83e\udef1\ud83c\udffd\u200d\ud83e\udef2\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\udef1\ud83c\udffe\u200d\ud83e\udef2\ud83c[\udffb-\udffd\udfff]|\ud83e\udef1\ud83c\udfff\u200d\ud83e\udef2\ud83c[\udffb-\udffe]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83e\udd1d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91]|\ud83e\udd1d)|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd\udec3-\udec5\udef0-\udef6]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udedd-\udedf\udeeb\udeec\udef4-\udefc\udfe0-\udfeb\udff0]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78-\uddb4\uddb7\uddba\uddbc-\uddcc\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7c\ude80-\ude86\ude90-\udeac\udeb0-\udeba\udec0-\udec2\uded0-\uded9\udee0-\udee7]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g,e=/\uFE0F/g,c=String.fromCharCode(8205),t=/[&<>'"]/g,o=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,r=String.fromCharCode;return d;function n(d,u){return document.createTextNode(u?d.replace(e,""):d)}function a(d,u){return"".concat(u.base,u.size,"/",d,u.ext)}function i(d,u){for(var f,e,c=d.childNodes,t=c.length;t--;)3===(e=(f=c[t]).nodeType)?u.push(f):1!==e||"ownerSVGElement"in f||o.test(f.nodeName.toLowerCase())||i(f,u);return u}function s(d){return g(d.indexOf(c)<0?d.replace(e,""):d)}function b(d,u){for(var e,c,t,o,r,a,b,l,m,p,h,g,v,y=i(d,[]),w=y.length;w--;){for(t=!1,o=document.createDocumentFragment(),a=(r=y[w]).nodeValue,l=0;b=f.exec(a);){if((m=b.index)!==l&&o.appendChild(n(a.slice(l,m),!0)),g=s(h=b[0]),l=m+h.length,v=u.callback(g,u),g&&v){for(c in(p=new Image).onerror=u.onerror,p.setAttribute("draggable","false"),e=u.attributes(h,g))e.hasOwnProperty(c)&&0!==c.indexOf("on")&&!p.hasAttribute(c)&&p.setAttribute(c,e[c]);p.className=u.className,p.alt=h,p.src=v,t=!0,o.appendChild(p)}p||o.appendChild(n(h,!1)),p=null}t&&(l")}return c}))}function m(d){return u[d]}function p(){return null}function h(d,u){return String(d).replace(f,u)}function g(d,u){for(var f=[],e=0,c=0,t=0;t({loading:"lazy"})};u().initializers.add("flarum-emoji",(()=>{!function(){const d=$('
'),u=new l;let e=null;(0,f.extend)("flarum/common/components/TextEditor","oninit",(function(){this._loaders.push((async()=>await c.e(411).then(c.bind(c,948)).then((d=>e=d.default))))})),(0,f.extend)("flarum/common/components/TextEditor","onbuild",(function(){const f=this.$(".TextEditor-editor").wrap('
');this.navigator=new(n()),this.navigator.when((()=>u.active)).onUp((()=>u.navigate(-1))).onDown((()=>u.navigate(1))).onSelect(u.complete.bind(u)).onCancel(u.hide.bind(u)).bindTo(f),f.after(d)})),(0,f.extend)("flarum/common/components/TextEditor","buildEditorParams",(function(f){const c=Object.keys(e);let t,o,r;const n=d=>{this.attrs.composer.editor.replaceBeforeCursor(o-1,d+" "),u.hide()};f.inputListeners.push((()=>{const f=this.attrs.composer.editor.getSelectionRange(),a=f[0];if(f[1]-a>0)return;const i=this.attrs.composer.editor.getLastNChars(15);o=0;for(let d=i.length-1;d>=0;d--){const u=i.substr(d,1);if(!/[a-z0-9]|\+|\-|_|\:/.test(u))break;if(":"===u&&(0==d||/\s/.test(i.substr(d-1,1)))){t=d+1,o=a-i.length+d+1;break}}if(u.hide(),u.active=!1,o){r=i.substring(t).toLowerCase();const f=function(d){let{emoji:f,name:e,code:c}=d;return m("button",{key:f,onclick:()=>n(f),onmouseenter:function(){u.setIndex($(this).parent().index()-1)}},m("img",{alt:f,className:"emoji",draggable:"false",loading:"lazy",src:"".concat(x,"72x72/").concat(c,".png")}),e)};(()=>{const t=[],n=function(d){const u=new RegExp("\\((["+"+.*?[]{}()^$|\\".replace(/(.)/g,"\\$1")+"])\\)","g");return new RegExp("(.*)"+d.toLowerCase().replace(/(.)/g,"($1)(.*?)").replace(u,"(\\$1)")+"$","i")}(r);let a=7;const i=d=>{for(let u=0;u0;u++){const f=c[u];if(-1===t.indexOf(f)){const u=e[f];for(let e of u)if(d(e)){--a,t.push(f);break}}}};i((d=>0===d.indexOf(r))),i((d=>n.test(d)));const s=t.map((d=>({emoji:d,name:e[d][0],code:y(d)}))).map(f);if(s.length){u.items=s,m.render(d[0],u.render()),u.show();const f=this.attrs.composer.editor.getCaretCoordinates(o),e=u.$().outerWidth(),c=u.$().outerHeight(),t=u.$().offsetParent();let r=f.left,n=f.top+15;n+c>t.height()&&(n=f.top-c-15),r+e>t.width()&&(r=t.width()-e),n=Math.max(-(t.offset().top-$(document).scrollTop()),n),r=Math.max(-t.offset().left,r),u.show(r,n)}})(),u.setIndex(0),u.$().scrollTop(0),u.active=!0}}))})),(0,f.extend)("flarum/common/components/TextEditor","toolbarItems",(function(d){d.add("emoji",m(o(),{onclick:()=>this.attrs.composer.editor.insertAtCursor(" :"),icon:"far fa-smile"},app.translator.trans("flarum-emoji.forum.composer.emoji_tooltip")))}))}(),(0,f.override)(k().prototype,"contentHtml",(function(d){const u=d();if(this.oldContentHtml!==u){const d=h.parse(function(d){const u=document.implementation.createHTMLDocument();return u.body.innerHTML=d,u.body}(u),C);this.emojifiedContentHtml=d.innerHTML,this.oldContentHtml=u}return this.emojifiedContentHtml})),(0,f.override)(s9e.TextFormatter,"preview",((d,u,f)=>{d(u,f),h.parse(f,C)}))}))})(),module.exports=t})(); +(()=>{var d,u,f={},e={};function c(d){var u=e[d];if(void 0!==u)return u.exports;var t=e[d]={exports:{}};return f[d](t,t.exports,c),t.exports}c.m=f,c.n=d=>{var u=d&&d.__esModule?()=>d.default:()=>d;return c.d(u,{a:u}),u},c.d=(d,u)=>{for(var f in u)c.o(u,f)&&!c.o(d,f)&&Object.defineProperty(d,f,{enumerable:!0,get:u[f]})},c.f={},c.e=d=>Promise.all(Object.keys(c.f).reduce(((u,f)=>(c.f[f](d,u),u)),[])),c.u=d=>"forum/emojiMap.js",c.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(d){if("object"==typeof window)return window}}(),c.o=(d,u)=>Object.prototype.hasOwnProperty.call(d,u),d={},u="module.exports:",c.l=(f,e,t,o)=>{if(d[f])d[f].push(e);else{var r,n;if(void 0!==t)for(var a=document.getElementsByTagName("script"),i=0;i{r.onerror=r.onload=null,clearTimeout(m);var c=d[f];if(delete d[f],r.parentNode&&r.parentNode.removeChild(r),c&&c.forEach((d=>d(e))),u)return u(e)},m=setTimeout(b.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=b.bind(null,r.onerror),r.onload=b.bind(null,r.onload),n&&document.head.appendChild(r)}},c.r=d=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(d,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(d,"__esModule",{value:!0})},(()=>{var d;c.g.importScripts&&(d=c.g.location+"");var u=c.g.document;if(!d&&u&&(u.currentScript&&(d=u.currentScript.src),!d)){var f=u.getElementsByTagName("script");f.length&&(d=f[f.length-1].src)}if(!d)throw new Error("Automatic publicPath is not supported in this browser");d=d.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),c.p=d})(),c.f.compat=(d,u)=>{const f=c.l;c.l=flarum.reg.loadChunk.bind(flarum.reg,f)},(()=>{var d={315:0};c.f.j=(u,f)=>{var e=c.o(d,u)?d[u]:void 0;if(0!==e)if(e)f.push(e[2]);else{var t=new Promise(((f,c)=>e=d[u]=[f,c]));f.push(e[2]=t);var o=c.p+c.u(u),r=new Error;c.l(o,(f=>{if(c.o(d,u)&&(0!==(e=d[u])&&(d[u]=void 0),e)){var t=f&&("load"===f.type?"missing":f.type),o=f&&f.target&&f.target.src;r.message="Loading chunk "+u+" failed.\n("+t+": "+o+")",r.name="ChunkLoadError",r.type=t,r.request=o,e[1](r)}}),"chunk-"+u,u)}};var u=(u,f)=>{var e,t,[o,r,n]=f,a=0;if(o.some((u=>0!==d[u]))){for(e in r)c.o(r,e)&&(c.m[e]=r[e]);n&&n(c)}for(u&&u(f);a{"use strict";c.r(t);const d=flarum.reg.get("core","forum/app");var u=c.n(d);const f=flarum.reg.get("core","common/extend"),e=flarum.reg.get("core","common/components/TextEditorButton");var o=c.n(e);const r=flarum.reg.get("core","common/utils/KeyboardNavigatable");var n=c.n(r);function a(d){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&"function"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d},a(d)}function i(d,u,f){return(u=function(d){var u=function(d,u){if("object"!==a(d)||null===d)return d;var f=d[Symbol.toPrimitive];if(void 0!==f){var e=f.call(d,u);if("object"!==a(e))return e;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(d)}(d,"string");return"symbol"===a(u)?u:String(u)}(u))in d?Object.defineProperty(d,u,{value:f,enumerable:!0,configurable:!0,writable:!0}):d[u]=f,d}const s=flarum.reg.get("core","common/Fragment");var b=c.n(s);class l extends(b()){constructor(){super(...arguments),i(this,"items",[]),i(this,"active",!1),i(this,"index",0),i(this,"keyWasJustPressed",!1)}view(){return m("ul",{className:"Dropdown-menu EmojiDropdown"},m("li",{className:"Dropdown-header"},app.translator.trans("flarum-emoji.forum.composer.type_to_search_text")),this.items.map((d=>m("li",{key:d.attrs.key},d))))}show(d,u){this.$().show().css({left:d+"px",top:u+"px"}),this.active=!0}hide(){this.$().hide(),this.active=!1}navigate(d){this.keyWasJustPressed=!0,this.setIndex(this.index+d,!0),clearTimeout(this.keyWasJustPressedTimeout),this.keyWasJustPressedTimeout=setTimeout((()=>this.keyWasJustPressed=!1),500)}complete(){this.$("li:not(.Dropdown-header)").eq(this.index).find("button").click()}setIndex(d,u){if(this.keyWasJustPressed&&!u)return;const f=this.$(),e=f.find("li:not(.Dropdown-header)");let c=d;c<0?c=e.length-1:c>=e.length&&(c=0),this.index=c;const t=e.removeClass("active").eq(c).addClass("active");if(u){const d=f.scrollTop(),u=f.offset().top,e=u+f.outerHeight(),c=t.offset().top,o=c+t.outerHeight();let r;ce&&(r=d-e+o+parseInt(f.css("padding-bottom"),10)),void 0!==r&&f.stop(!0).animate({scrollTop:r},100)}}}flarum.reg.add("flarum-emoji","forum/fragments/AutocompleteDropdown",l);var p=function(){var d={base:"https://twemoji.maxcdn.com/v/14.0.2/",ext:".png",size:"72x72",className:"emoji",convert:{fromCodePoint:function(d){var u="string"==typeof d?parseInt(d,16):d;return u<65536?r(u):r(55296+((u-=65536)>>10),56320+(1023&u))},toCodePoint:g},onerror:function(){this.parentNode&&this.parentNode.replaceChild(n(this.alt,!1),this)},parse:function(u,f){return f&&"function"!=typeof f||(f={callback:f}),("string"==typeof u?m:b)(u,{callback:f.callback||a,attributes:"function"==typeof f.attributes?f.attributes:p,base:"string"==typeof f.base?f.base:d.base,ext:f.ext||d.ext,size:f.folder||(e=f.size||d.size,"number"==typeof e?e+"x"+e:e),className:f.className||d.className,onerror:f.onerror||d.onerror});var e},replace:h,test:function(d){f.lastIndex=0;var u=f.test(d);return f.lastIndex=0,u}},u={"&":"&","<":"<",">":">","'":"'",'"':"""},f=/(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83e\udef1\ud83c\udffb\u200d\ud83e\udef2\ud83c[\udffc-\udfff]|\ud83e\udef1\ud83c\udffc\u200d\ud83e\udef2\ud83c[\udffb\udffd-\udfff]|\ud83e\udef1\ud83c\udffd\u200d\ud83e\udef2\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\udef1\ud83c\udffe\u200d\ud83e\udef2\ud83c[\udffb-\udffd\udfff]|\ud83e\udef1\ud83c\udfff\u200d\ud83e\udef2\ud83c[\udffb-\udffe]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83e\udd1d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91]|\ud83e\udd1d)|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd\udec3-\udec5\udef0-\udef6]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udedd-\udedf\udeeb\udeec\udef4-\udefc\udfe0-\udfeb\udff0]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78-\uddb4\uddb7\uddba\uddbc-\uddcc\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7c\ude80-\ude86\ude90-\udeac\udeb0-\udeba\udec0-\udec2\uded0-\uded9\udee0-\udee7]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g,e=/\uFE0F/g,c=String.fromCharCode(8205),t=/[&<>'"]/g,o=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,r=String.fromCharCode;return d;function n(d,u){return document.createTextNode(u?d.replace(e,""):d)}function a(d,u){return"".concat(u.base,u.size,"/",d,u.ext)}function i(d,u){for(var f,e,c=d.childNodes,t=c.length;t--;)3===(e=(f=c[t]).nodeType)?u.push(f):1!==e||"ownerSVGElement"in f||o.test(f.nodeName.toLowerCase())||i(f,u);return u}function s(d){return g(d.indexOf(c)<0?d.replace(e,""):d)}function b(d,u){for(var e,c,t,o,r,a,b,m,l,p,h,g,w,v=i(d,[]),j=v.length;j--;){for(t=!1,o=document.createDocumentFragment(),a=(r=v[j]).nodeValue,m=0;b=f.exec(a);){if((l=b.index)!==m&&o.appendChild(n(a.slice(m,l),!0)),g=s(h=b[0]),m=l+h.length,w=u.callback(g,u),g&&w){for(c in(p=new Image).onerror=u.onerror,p.setAttribute("draggable","false"),e=u.attributes(h,g))e.hasOwnProperty(c)&&0!==c.indexOf("on")&&!p.hasAttribute(c)&&p.setAttribute(c,e[c]);p.className=u.className,p.alt=h,p.src=w,t=!0,o.appendChild(p)}p||o.appendChild(n(h,!1)),p=null}t&&(m")}return c}))}function l(d){return u[d]}function p(){return null}function h(d,u){return String(d).replace(f,u)}function g(d,u){for(var f=[],e=0,c=0,t=0;t({loading:"lazy"})};u().initializers.add("flarum-emoji",(()=>{!function(){let d=null;(0,f.extend)("flarum/common/components/TextEditor","oninit",(function(){this._loaders.push((async()=>await c.e(411).then(c.bind(c,948)).then((u=>d=u.default))))})),(0,f.extend)("flarum/common/components/TextEditor","onbuild",(function(){this.emojiDropdown=new l;const d=this.$(".TextEditor-editor").wrap('
');this.navigator=new(n()),this.navigator.when((()=>this.emojiDropdown.active)).onUp((()=>this.emojiDropdown.navigate(-1))).onDown((()=>this.emojiDropdown.navigate(1))).onSelect(this.emojiDropdown.complete.bind(this.emojiDropdown)).onCancel(this.emojiDropdown.hide.bind(this.emojiDropdown)).bindTo(d),d.after($('
'))})),(0,f.extend)("flarum/common/components/TextEditor","buildEditorParams",(function(u){const f=Object.keys(d);let e,c,t;const o=d=>{this.attrs.composer.editor.replaceBeforeCursor(c-1,d+" "),this.emojiDropdown.hide()};u.inputListeners.push((()=>{const u=this.attrs.composer.editor.getSelectionRange(),r=u[0];if(u[1]-r>0)return;const n=this.attrs.composer.editor.getLastNChars(15);c=0;for(let d=n.length-1;d>=0;d--){const u=n.substr(d,1);if(!/[a-z0-9]|\+|\-|_|\:/.test(u))break;if(":"===u&&(0==d||/\s/.test(n.substr(d-1,1)))){e=d+1,c=r-n.length+d+1;break}}if(this.emojiDropdown.hide(),this.emojiDropdown.active=!1,c){t=n.substring(e).toLowerCase();const u=function(d){let{emoji:u,name:f,code:e}=d;return m("button",{key:u,onclick:()=>o(u),onmouseenter:function(){this.emojiDropdown.setIndex($(this).parent().index()-1)}},m("img",{alt:u,className:"emoji",draggable:"false",loading:"lazy",src:"".concat(y,"72x72/").concat(e,".png")}),f)};(()=>{const e=[],o=function(d){const u=new RegExp("\\((["+"+.*?[]{}()^$|\\".replace(/(.)/g,"\\$1")+"])\\)","g");return new RegExp("(.*)"+d.toLowerCase().replace(/(.)/g,"($1)(.*?)").replace(u,"(\\$1)")+"$","i")}(t);let r=7;const n=u=>{for(let c=0;c0;c++){const t=f[c];if(-1===e.indexOf(t)){const f=d[t];for(let d of f)if(u(d)){--r,e.push(t);break}}}};n((d=>0===d.indexOf(t))),n((d=>o.test(d)));const a=e.map((u=>({emoji:u,name:d[u][0],code:v(u)}))).map(u);if(a.length){this.emojiDropdown.items=a,m.render(this.$(".ComposerBody-emojiDropdownContainer")[0],this.emojiDropdown.render()),this.emojiDropdown.show();const d=this.attrs.composer.editor.getCaretCoordinates(c),u=this.emojiDropdown.$().outerWidth(),f=this.emojiDropdown.$().outerHeight(),e=this.emojiDropdown.$().offsetParent();let t=d.left,o=d.top+15;o+f>e.height()&&(o=d.top-f-15),t+u>e.width()&&(t=e.width()-u),o=Math.max(-(e.offset().top-$(document).scrollTop()),o),t=Math.max(-e.offset().left,t),this.emojiDropdown.show(t,o)}})(),this.emojiDropdown.setIndex(0),this.emojiDropdown.$().scrollTop(0),this.emojiDropdown.active=!0}}))})),(0,f.extend)("flarum/common/components/TextEditor","toolbarItems",(function(d){d.add("emoji",m(o(),{onclick:()=>this.attrs.composer.editor.insertAtCursor(" :"),icon:"far fa-smile"},app.translator.trans("flarum-emoji.forum.composer.emoji_tooltip")))}))}(),(0,f.override)(k().prototype,"contentHtml",(function(d){const u=d();if(this.oldContentHtml!==u){const d=h.parse(function(d){const u=document.implementation.createHTMLDocument();return u.body.innerHTML=d,u.body}(u),C);this.emojifiedContentHtml=d.innerHTML,this.oldContentHtml=u}return this.emojifiedContentHtml})),(0,f.override)(s9e.TextFormatter,"preview",((d,u,f)=>{d(u,f),h.parse(f,C)}))}))})(),module.exports=t})(); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/extensions/emoji/js/dist/forum.js.map b/extensions/emoji/js/dist/forum.js.map index 93961e2dde..0baee85064 100644 --- a/extensions/emoji/js/dist/forum.js.map +++ b/extensions/emoji/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/emoji/webpack/runtime/load script","webpack://@flarum/emoji/webpack/bootstrap","webpack://@flarum/emoji/webpack/runtime/compat get default export","webpack://@flarum/emoji/webpack/runtime/define property getters","webpack://@flarum/emoji/webpack/runtime/ensure chunk","webpack://@flarum/emoji/webpack/runtime/get javascript chunk filename","webpack://@flarum/emoji/webpack/runtime/global","webpack://@flarum/emoji/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/emoji/webpack/runtime/make namespace object","webpack://@flarum/emoji/webpack/runtime/publicPath","webpack://@flarum/emoji/webpack/runtime/compat","webpack://@flarum/emoji/webpack/runtime/jsonp chunk loading","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'common/components/TextEditorButton')\"","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/emoji/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/emoji/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/emoji/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/emoji/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'common/Fragment')\"","webpack://@flarum/emoji/./src/forum/fragments/AutocompleteDropdown.js","webpack://@flarum/emoji/../../../node_modules/twemoji/dist/twemoji.esm.js","webpack://@flarum/emoji/./src/forum/helpers/getEmojiIconCode.js","webpack://@flarum/emoji/./src/forum/cdn.js","webpack://@flarum/emoji/./src/forum/addComposerAutocomplete.js","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'common/models/Post')\"","webpack://@flarum/emoji/./src/forum/renderEmoji.js","webpack://@flarum/emoji/./src/forum/index.js"],"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};","// 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/emojiMap\" + \".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));","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/TextEditorButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","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/Fragment');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Fragment from 'flarum/common/Fragment';\nexport default class AutocompleteDropdown extends Fragment {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"items\", []);\n _defineProperty(this, \"active\", false);\n _defineProperty(this, \"index\", 0);\n _defineProperty(this, \"keyWasJustPressed\", false);\n }\n view() {\n return m(\"ul\", {\n className: \"Dropdown-menu EmojiDropdown\"\n }, m(\"li\", {\n className: \"Dropdown-header\"\n }, app.translator.trans('flarum-emoji.forum.composer.type_to_search_text')), this.items.map(item => m(\"li\", {\n key: item.attrs.key\n }, item)));\n }\n show(left, top) {\n this.$().show().css({\n left: left + 'px',\n top: top + 'px'\n });\n this.active = true;\n }\n hide() {\n this.$().hide();\n this.active = false;\n }\n navigate(delta) {\n this.keyWasJustPressed = true;\n this.setIndex(this.index + delta, true);\n clearTimeout(this.keyWasJustPressedTimeout);\n this.keyWasJustPressedTimeout = setTimeout(() => this.keyWasJustPressed = false, 500);\n }\n complete() {\n this.$('li:not(.Dropdown-header)').eq(this.index).find('button').click();\n }\n setIndex(index, scrollToItem) {\n if (this.keyWasJustPressed && !scrollToItem) return;\n const $dropdown = this.$();\n const $items = $dropdown.find('li:not(.Dropdown-header)');\n let rangedIndex = index;\n if (rangedIndex < 0) {\n rangedIndex = $items.length - 1;\n } else if (rangedIndex >= $items.length) {\n rangedIndex = 0;\n }\n this.index = rangedIndex;\n const $item = $items.removeClass('active').eq(rangedIndex).addClass('active');\n if (scrollToItem) {\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}\nflarum.reg.add('flarum-emoji', 'forum/fragments/AutocompleteDropdown', AutocompleteDropdown);","/*! Copyright Twitter Inc. and other contributors. Licensed under MIT */\nvar twemoji=function(){\"use strict\";var twemoji={base:\"https://twemoji.maxcdn.com/v/14.0.2/\",ext:\".png\",size:\"72x72\",className:\"emoji\",convert:{fromCodePoint:fromCodePoint,toCodePoint:toCodePoint},onerror:function onerror(){if(this.parentNode){this.parentNode.replaceChild(createText(this.alt,false),this)}},parse:parse,replace:replace,test:test},escaper={\"&\":\"&\",\"<\":\"<\",\">\":\">\",\"'\":\"'\",'\"':\""\"},re=/(?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\udef1\\ud83c\\udffb\\u200d\\ud83e\\udef2\\ud83c[\\udffc-\\udfff]|\\ud83e\\udef1\\ud83c\\udffc\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\udef1\\ud83c\\udffd\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\udef1\\ud83c\\udffe\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\udef1\\ud83c\\udfff\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc8f\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc91\\ud83c[\\udffb-\\udfff]|\\ud83e\\udd1d\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d\\udc8f\\udc91]|\\ud83e\\udd1d)|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f|\\u2696\\ufe0f|\\u2708\\ufe0f|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)((?:\\ud83c[\\udffb-\\udfff]|\\ufe0f)\\u200d[\\u2640\\u2642]\\ufe0f)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd4\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f|(?:\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f\\u200d\\u26a7\\ufe0f|\\ud83c\\udff3\\ufe0f\\u200d\\ud83c\\udf08|\\ud83d\\ude36\\u200d\\ud83c\\udf2b\\ufe0f|\\u2764\\ufe0f\\u200d\\ud83d\\udd25|\\u2764\\ufe0f\\u200d\\ud83e\\ude79|\\ud83c\\udff4\\u200d\\u2620\\ufe0f|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f|\\ud83d\\ude2e\\u200d\\ud83d\\udca8|\\ud83d\\ude35\\u200d\\ud83d\\udcab|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f|\\ud83e\\uddde\\u200d\\u2640\\ufe0f|\\ud83e\\uddde\\u200d\\u2642\\ufe0f|\\ud83e\\udddf\\u200d\\u2640\\ufe0f|\\ud83e\\udddf\\u200d\\u2642\\ufe0f|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f?\\u20e3|(?:[©®\\u2122\\u265f]\\ufe0f)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd\\udec3-\\udec5\\udef0-\\udef6]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udc8e\\udc90\\udc92-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udedd-\\udedf\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb\\udff0]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcc\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7c\\ude80-\\ude86\\ude90-\\udeac\\udeb0-\\udeba\\udec0-\\udec2\\uded0-\\uded9\\udee0-\\udee7]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f/g,UFE0Fg=/\\uFE0F/g,U200D=String.fromCharCode(8205),rescaper=/[&<>'\"]/g,shouldntBeParsed=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,fromCharCode=String.fromCharCode;return twemoji;function createText(text,clean){return document.createTextNode(clean?text.replace(UFE0Fg,\"\"):text)}function escapeHTML(s){return s.replace(rescaper,replacer)}function defaultImageSrcGenerator(icon,options){return\"\".concat(options.base,options.size,\"/\",icon,options.ext)}function grabAllTextNodes(node,allText){var childNodes=node.childNodes,length=childNodes.length,subnode,nodeType;while(length--){subnode=childNodes[length];nodeType=subnode.nodeType;if(nodeType===3){allText.push(subnode)}else if(nodeType===1&&!(\"ownerSVGElement\"in subnode)&&!shouldntBeParsed.test(subnode.nodeName.toLowerCase())){grabAllTextNodes(subnode,allText)}}return allText}function grabTheRightIcon(rawText){return toCodePoint(rawText.indexOf(U200D)<0?rawText.replace(UFE0Fg,\"\"):rawText)}function parseNode(node,options){var allText=grabAllTextNodes(node,[]),length=allText.length,attrib,attrname,modified,fragment,subnode,text,match,i,index,img,rawText,iconId,src;while(length--){modified=false;fragment=document.createDocumentFragment();subnode=allText[length];text=subnode.nodeValue;i=0;while(match=re.exec(text)){index=match.index;if(index!==i){fragment.appendChild(createText(text.slice(i,index),true))}rawText=match[0];iconId=grabTheRightIcon(rawText);i=index+rawText.length;src=options.callback(iconId,options);if(iconId&&src){img=new Image;img.onerror=options.onerror;img.setAttribute(\"draggable\",\"false\");attrib=options.attributes(rawText,iconId);for(attrname in attrib){if(attrib.hasOwnProperty(attrname)&&attrname.indexOf(\"on\")!==0&&!img.hasAttribute(attrname)){img.setAttribute(attrname,attrib[attrname])}}img.className=options.className;img.alt=rawText;img.src=src;modified=true;fragment.appendChild(img)}if(!img)fragment.appendChild(createText(rawText,false));img=null}if(modified){if(i\")}return ret})}function replacer(m){return escaper[m]}function returnNull(){return null}function toSizeSquaredAsset(value){return typeof value===\"number\"?value+\"x\"+value:value}function fromCodePoint(codepoint){var code=typeof codepoint===\"string\"?parseInt(codepoint,16):codepoint;if(code<65536){return fromCharCode(code)}code-=65536;return fromCharCode(55296+(code>>10),56320+(code&1023))}function parse(what,how){if(!how||typeof how===\"function\"){how={callback:how}}return(typeof what===\"string\"?parseString:parseNode)(what,{callback:how.callback||defaultImageSrcGenerator,attributes:typeof how.attributes===\"function\"?how.attributes:returnNull,base:typeof how.base===\"string\"?how.base:twemoji.base,ext:how.ext||twemoji.ext,size:how.folder||toSizeSquaredAsset(how.size||twemoji.size),className:how.className||twemoji.className,onerror:how.onerror||twemoji.onerror})}function replace(text,callback){return String(text).replace(re,callback)}function test(text){re.lastIndex=0;var result=re.test(text);re.lastIndex=0;return result}function toCodePoint(unicodeSurrogates,sep){var r=[],c=0,p=0,i=0;while(i');\n const dropdown = new AutocompleteDropdown();\n let emojiMap = null;\n extend('flarum/common/components/TextEditor', 'oninit', function () {\n this._loaders.push(async () => await import(/* webpackChunkName: 'forum/emojiMap', webpackMode: 'lazy-once' */ './emojiMap').then(m => emojiMap = m.default));\n });\n extend('flarum/common/components/TextEditor', 'onbuild', function () {\n const $editor = this.$('.TextEditor-editor').wrap('
');\n this.navigator = new KeyboardNavigatable();\n this.navigator.when(() => dropdown.active).onUp(() => dropdown.navigate(-1)).onDown(() => dropdown.navigate(1)).onSelect(dropdown.complete.bind(dropdown)).onCancel(dropdown.hide.bind(dropdown)).bindTo($editor);\n $editor.after($container);\n });\n extend('flarum/common/components/TextEditor', 'buildEditorParams', function (params) {\n const emojiKeys = Object.keys(emojiMap);\n let relEmojiStart;\n let absEmojiStart;\n let typed;\n const applySuggestion = replacement => {\n this.attrs.composer.editor.replaceBeforeCursor(absEmojiStart - 1, replacement + ' ');\n dropdown.hide();\n };\n params.inputListeners.push(() => {\n const selection = this.attrs.composer.editor.getSelectionRange();\n const cursor = selection[0];\n if (selection[1] - cursor > 0) return;\n\n // Search backwards from the cursor for an ':' symbol. If we find\n // one and followed by a whitespace, we will want to show the\n // autocomplete dropdown!\n const lastChunk = this.attrs.composer.editor.getLastNChars(15);\n absEmojiStart = 0;\n for (let i = lastChunk.length - 1; i >= 0; i--) {\n const character = lastChunk.substr(i, 1);\n // check what user typed, emoji names only contains alphanumeric,\n // underline, '+' and '-'\n if (!/[a-z0-9]|\\+|\\-|_|\\:/.test(character)) break;\n // make sure ':' preceded by a whitespace or newline\n if (character === ':' && (i == 0 || /\\s/.test(lastChunk.substr(i - 1, 1)))) {\n relEmojiStart = i + 1;\n absEmojiStart = cursor - lastChunk.length + i + 1;\n break;\n }\n }\n dropdown.hide();\n dropdown.active = false;\n if (absEmojiStart) {\n typed = lastChunk.substring(relEmojiStart).toLowerCase();\n const makeSuggestion = function (_ref) {\n let {\n emoji,\n name,\n code\n } = _ref;\n return m(\"button\", {\n key: emoji,\n onclick: () => applySuggestion(emoji),\n onmouseenter: function () {\n dropdown.setIndex($(this).parent().index() - 1);\n }\n }, m(\"img\", {\n alt: emoji,\n className: \"emoji\",\n draggable: \"false\",\n loading: \"lazy\",\n src: \"\".concat(cdn, \"72x72/\").concat(code, \".png\")\n }), name);\n };\n const buildSuggestions = () => {\n const similarEmoji = [];\n\n // Build a regular expression to do a fuzzy match of the given input string\n const fuzzyRegexp = function (str) {\n const reEscape = new RegExp('\\\\(([' + '+.*?[]{}()^$|\\\\'.replace(/(.)/g, '\\\\$1') + '])\\\\)', 'g');\n return new RegExp('(.*)' + str.toLowerCase().replace(/(.)/g, '($1)(.*?)').replace(reEscape, '(\\\\$1)') + '$', 'i');\n };\n const regTyped = fuzzyRegexp(typed);\n let maxSuggestions = 7;\n const findMatchingEmojis = matcher => {\n for (let i = 0; i < emojiKeys.length && maxSuggestions > 0; i++) {\n const curEmoji = emojiKeys[i];\n if (similarEmoji.indexOf(curEmoji) === -1) {\n const names = emojiMap[curEmoji];\n for (let name of names) {\n if (matcher(name)) {\n --maxSuggestions;\n similarEmoji.push(curEmoji);\n break;\n }\n }\n }\n }\n };\n\n // First, try to find all emojis starting with the given string\n findMatchingEmojis(emoji => emoji.indexOf(typed) === 0);\n\n // If there are still suggestions left, try for some fuzzy matches\n findMatchingEmojis(emoji => regTyped.test(emoji));\n const suggestions = similarEmoji.map(emoji => ({\n emoji,\n name: emojiMap[emoji][0],\n code: getEmojiIconCode(emoji)\n })).map(makeSuggestion);\n if (suggestions.length) {\n dropdown.items = suggestions;\n m.render($container[0], dropdown.render());\n dropdown.show();\n const coordinates = this.attrs.composer.editor.getCaretCoordinates(absEmojiStart);\n const width = dropdown.$().outerWidth();\n const height = dropdown.$().outerHeight();\n const parent = dropdown.$().offsetParent();\n let left = coordinates.left;\n let top = coordinates.top + 15;\n\n // Keep the dropdown inside the editor.\n if (top + height > parent.height()) {\n top = coordinates.top - height - 15;\n }\n if (left + width > parent.width()) {\n left = parent.width() - width;\n }\n\n // Prevent the dropdown from going off screen on mobile\n top = Math.max(-(parent.offset().top - $(document).scrollTop()), top);\n left = Math.max(-parent.offset().left, left);\n dropdown.show(left, top);\n }\n };\n buildSuggestions();\n dropdown.setIndex(0);\n dropdown.$().scrollTop(0);\n dropdown.active = true;\n }\n });\n });\n extend('flarum/common/components/TextEditor', 'toolbarItems', function (items) {\n items.add('emoji', m(TextEditorButton, {\n onclick: () => this.attrs.composer.editor.insertAtCursor(' :'),\n icon: \"far fa-smile\"\n }, app.translator.trans('flarum-emoji.forum.composer.emoji_tooltip')));\n });\n}flarum.reg.addChunkModule('411', '948', 'flarum-emoji', 'forum/emojiMap');\nflarum.reg.addChunkModule('411', '948', 'flarum-emoji', '/home/runner/work/framework/framework/extensions/emoji/js/src/forum/emojiMap.ts');\nflarum.reg.addChunkModule('411', '948', 'flarum-emoji', '/home/runner/work/framework/framework/node_modules/simple-emoji-map/index.mjs');\nflarum.reg.addChunkModule('411', '948', 'flarum-emoji', '/home/runner/work/framework/framework/node_modules/simple-emoji-map/generated/emojis.json');\nflarum.reg.addChunkModule('411', '948', 'flarum-emoji', '/home/runner/work/framework/framework/node_modules/simple-emoji-map/generated/variants.json');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Post');","import twemoji from 'twemoji';\nimport { override } from 'flarum/common/extend';\nimport Post from 'flarum/common/models/Post';\nimport base from './cdn';\nconst options = {\n base,\n attributes: () => ({\n loading: 'lazy'\n })\n};\n\n/**\n * Parses an HTML string into a `` node containing the HTML content.\n *\n * Vanilla JS implementation of jQuery's `$.parseHTML()`,\n * sourced from http://youmightnotneedjquery.com/\n */\nfunction parseHTML(str) {\n const tmp = document.implementation.createHTMLDocument();\n tmp.body.innerHTML = str;\n return tmp.body;\n}\nexport default function renderEmoji() {\n override(Post.prototype, 'contentHtml', function (original) {\n const contentHtml = original();\n if (this.oldContentHtml !== contentHtml) {\n // We need to parse the HTML string into a DOM node, then give it to Twemoji.\n //\n // This prevents some issues with the default find-replace that would be performed\n // on a string passed to `Twemoji.parse()`.\n //\n // The parse function can only handle a single DOM node provided, so we need to\n // wrap it in a node. In our `parseHTML` implementation, we wrap it in a ``\n // element. This gets stripped below.\n //\n // See https://github.com/flarum/core/issues/2958\n const emojifiedDom = twemoji.parse(parseHTML(contentHtml), options);\n\n // Steal the HTML string inside the emojified DOM `` tag.\n this.emojifiedContentHtml = emojifiedDom.innerHTML;\n this.oldContentHtml = contentHtml;\n }\n return this.emojifiedContentHtml;\n });\n override(s9e.TextFormatter, 'preview', (original, text, element) => {\n original(text, element);\n twemoji.parse(element, options);\n });\n}","import app from 'flarum/forum/app';\nimport addComposerAutocomplete from './addComposerAutocomplete';\nimport renderEmoji from './renderEmoji';\napp.initializers.add('flarum-emoji', () => {\n // After typing ':' in the composer, show a dropdown suggesting a bunch of\n // emoji that the user could use.\n addComposerAutocomplete();\n\n // render emoji as image in Posts content and title.\n renderEmoji();\n});"],"names":["inProgress","dataWebpackPrefix","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","m","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","f","e","chunkId","Promise","all","keys","reduce","promises","u","g","globalThis","this","Function","window","obj","prop","prototype","hasOwnProperty","call","l","url","done","push","script","needAttach","scripts","document","getElementsByTagName","i","length","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","forEach","fn","setTimeout","bind","type","target","head","appendChild","r","Symbol","toStringTag","value","scriptUrl","importScripts","location","currentScript","Error","replace","p","compat","originalLoadChunk","flarum","reg","loadChunk","installedChunks","j","installedChunkData","promise","resolve","reject","error","errorType","realSrc","message","name","request","webpackJsonpCallback","parentChunkLoadingFunction","data","chunkIds","moreModules","runtime","some","id","chunkLoadingGlobal","self","_typeof","iterator","constructor","_defineProperty","arg","input","hint","prim","toPrimitive","res","TypeError","String","toPropertyKey","configurable","writable","AutocompleteDropdown","super","arguments","view","className","app","translator","trans","items","map","item","attrs","show","left","top","$","css","active","hide","navigate","delta","keyWasJustPressed","setIndex","index","keyWasJustPressedTimeout","complete","eq","find","click","scrollToItem","$dropdown","$items","rangedIndex","$item","removeClass","addClass","dropdownScroll","scrollTop","dropdownTop","offset","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","stop","animate","add","twemoji","base","ext","size","convert","fromCodePoint","codepoint","code","fromCharCode","toCodePoint","replaceChild","createText","alt","parse","what","how","callback","parseString","parseNode","defaultImageSrcGenerator","attributes","returnNull","folder","test","text","re","lastIndex","result","escaper","UFE0Fg","U200D","rescaper","shouldntBeParsed","clean","createTextNode","icon","options","concat","grabAllTextNodes","node","allText","subnode","nodeType","childNodes","nodeName","toLowerCase","grabTheRightIcon","rawText","indexOf","attrib","attrname","modified","fragment","match","img","iconId","createDocumentFragment","nodeValue","exec","slice","Image","hasAttribute","str","ret","replacer","unicodeSurrogates","sep","c","charCodeAt","toString","join","getEmojiIconCode","emoji","version","addChunkModule","loading","$container","dropdown","emojiMap","extend","_loaders","async","then","default","$editor","wrap","navigator","when","onUp","onDown","onSelect","onCancel","bindTo","after","params","emojiKeys","relEmojiStart","absEmojiStart","typed","applySuggestion","replacement","composer","editor","replaceBeforeCursor","inputListeners","selection","getSelectionRange","cursor","lastChunk","getLastNChars","character","substr","substring","makeSuggestion","_ref","onclick","onmouseenter","parent","draggable","cdn","similarEmoji","regTyped","reEscape","RegExp","fuzzyRegexp","maxSuggestions","findMatchingEmojis","matcher","curEmoji","names","suggestions","render","coordinates","getCaretCoordinates","width","outerWidth","height","offsetParent","Math","max","buildSuggestions","insertAtCursor","addComposerAutocomplete","override","original","contentHtml","oldContentHtml","emojifiedDom","tmp","implementation","createHTMLDocument","body","innerHTML","parseHTML","emojifiedContentHtml","s9e","TextFormatter","element"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/emoji/webpack/runtime/load script","webpack://@flarum/emoji/webpack/bootstrap","webpack://@flarum/emoji/webpack/runtime/compat get default export","webpack://@flarum/emoji/webpack/runtime/define property getters","webpack://@flarum/emoji/webpack/runtime/ensure chunk","webpack://@flarum/emoji/webpack/runtime/get javascript chunk filename","webpack://@flarum/emoji/webpack/runtime/global","webpack://@flarum/emoji/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/emoji/webpack/runtime/make namespace object","webpack://@flarum/emoji/webpack/runtime/publicPath","webpack://@flarum/emoji/webpack/runtime/compat","webpack://@flarum/emoji/webpack/runtime/jsonp chunk loading","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'common/components/TextEditorButton')\"","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/emoji/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/emoji/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/emoji/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/emoji/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'common/Fragment')\"","webpack://@flarum/emoji/./src/forum/fragments/AutocompleteDropdown.js","webpack://@flarum/emoji/../../../node_modules/twemoji/dist/twemoji.esm.js","webpack://@flarum/emoji/./src/forum/helpers/getEmojiIconCode.js","webpack://@flarum/emoji/./src/forum/cdn.js","webpack://@flarum/emoji/./src/forum/addComposerAutocomplete.js","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'common/models/Post')\"","webpack://@flarum/emoji/./src/forum/renderEmoji.js","webpack://@flarum/emoji/./src/forum/index.js"],"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};","// 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/emojiMap\" + \".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));","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/TextEditorButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","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/Fragment');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Fragment from 'flarum/common/Fragment';\nexport default class AutocompleteDropdown extends Fragment {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"items\", []);\n _defineProperty(this, \"active\", false);\n _defineProperty(this, \"index\", 0);\n _defineProperty(this, \"keyWasJustPressed\", false);\n }\n view() {\n return m(\"ul\", {\n className: \"Dropdown-menu EmojiDropdown\"\n }, m(\"li\", {\n className: \"Dropdown-header\"\n }, app.translator.trans('flarum-emoji.forum.composer.type_to_search_text')), this.items.map(item => m(\"li\", {\n key: item.attrs.key\n }, item)));\n }\n show(left, top) {\n this.$().show().css({\n left: left + 'px',\n top: top + 'px'\n });\n this.active = true;\n }\n hide() {\n this.$().hide();\n this.active = false;\n }\n navigate(delta) {\n this.keyWasJustPressed = true;\n this.setIndex(this.index + delta, true);\n clearTimeout(this.keyWasJustPressedTimeout);\n this.keyWasJustPressedTimeout = setTimeout(() => this.keyWasJustPressed = false, 500);\n }\n complete() {\n this.$('li:not(.Dropdown-header)').eq(this.index).find('button').click();\n }\n setIndex(index, scrollToItem) {\n if (this.keyWasJustPressed && !scrollToItem) return;\n const $dropdown = this.$();\n const $items = $dropdown.find('li:not(.Dropdown-header)');\n let rangedIndex = index;\n if (rangedIndex < 0) {\n rangedIndex = $items.length - 1;\n } else if (rangedIndex >= $items.length) {\n rangedIndex = 0;\n }\n this.index = rangedIndex;\n const $item = $items.removeClass('active').eq(rangedIndex).addClass('active');\n if (scrollToItem) {\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}\nflarum.reg.add('flarum-emoji', 'forum/fragments/AutocompleteDropdown', AutocompleteDropdown);","/*! Copyright Twitter Inc. and other contributors. Licensed under MIT */\nvar twemoji=function(){\"use strict\";var twemoji={base:\"https://twemoji.maxcdn.com/v/14.0.2/\",ext:\".png\",size:\"72x72\",className:\"emoji\",convert:{fromCodePoint:fromCodePoint,toCodePoint:toCodePoint},onerror:function onerror(){if(this.parentNode){this.parentNode.replaceChild(createText(this.alt,false),this)}},parse:parse,replace:replace,test:test},escaper={\"&\":\"&\",\"<\":\"<\",\">\":\">\",\"'\":\"'\",'\"':\""\"},re=/(?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\udef1\\ud83c\\udffb\\u200d\\ud83e\\udef2\\ud83c[\\udffc-\\udfff]|\\ud83e\\udef1\\ud83c\\udffc\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\udef1\\ud83c\\udffd\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\udef1\\ud83c\\udffe\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\udef1\\ud83c\\udfff\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc8f\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc91\\ud83c[\\udffb-\\udfff]|\\ud83e\\udd1d\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d\\udc8f\\udc91]|\\ud83e\\udd1d)|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f|\\u2696\\ufe0f|\\u2708\\ufe0f|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)((?:\\ud83c[\\udffb-\\udfff]|\\ufe0f)\\u200d[\\u2640\\u2642]\\ufe0f)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd4\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f|(?:\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f\\u200d\\u26a7\\ufe0f|\\ud83c\\udff3\\ufe0f\\u200d\\ud83c\\udf08|\\ud83d\\ude36\\u200d\\ud83c\\udf2b\\ufe0f|\\u2764\\ufe0f\\u200d\\ud83d\\udd25|\\u2764\\ufe0f\\u200d\\ud83e\\ude79|\\ud83c\\udff4\\u200d\\u2620\\ufe0f|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f|\\ud83d\\ude2e\\u200d\\ud83d\\udca8|\\ud83d\\ude35\\u200d\\ud83d\\udcab|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f|\\ud83e\\uddde\\u200d\\u2640\\ufe0f|\\ud83e\\uddde\\u200d\\u2642\\ufe0f|\\ud83e\\udddf\\u200d\\u2640\\ufe0f|\\ud83e\\udddf\\u200d\\u2642\\ufe0f|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f?\\u20e3|(?:[©®\\u2122\\u265f]\\ufe0f)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd\\udec3-\\udec5\\udef0-\\udef6]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udc8e\\udc90\\udc92-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udedd-\\udedf\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb\\udff0]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcc\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7c\\ude80-\\ude86\\ude90-\\udeac\\udeb0-\\udeba\\udec0-\\udec2\\uded0-\\uded9\\udee0-\\udee7]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f/g,UFE0Fg=/\\uFE0F/g,U200D=String.fromCharCode(8205),rescaper=/[&<>'\"]/g,shouldntBeParsed=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,fromCharCode=String.fromCharCode;return twemoji;function createText(text,clean){return document.createTextNode(clean?text.replace(UFE0Fg,\"\"):text)}function escapeHTML(s){return s.replace(rescaper,replacer)}function defaultImageSrcGenerator(icon,options){return\"\".concat(options.base,options.size,\"/\",icon,options.ext)}function grabAllTextNodes(node,allText){var childNodes=node.childNodes,length=childNodes.length,subnode,nodeType;while(length--){subnode=childNodes[length];nodeType=subnode.nodeType;if(nodeType===3){allText.push(subnode)}else if(nodeType===1&&!(\"ownerSVGElement\"in subnode)&&!shouldntBeParsed.test(subnode.nodeName.toLowerCase())){grabAllTextNodes(subnode,allText)}}return allText}function grabTheRightIcon(rawText){return toCodePoint(rawText.indexOf(U200D)<0?rawText.replace(UFE0Fg,\"\"):rawText)}function parseNode(node,options){var allText=grabAllTextNodes(node,[]),length=allText.length,attrib,attrname,modified,fragment,subnode,text,match,i,index,img,rawText,iconId,src;while(length--){modified=false;fragment=document.createDocumentFragment();subnode=allText[length];text=subnode.nodeValue;i=0;while(match=re.exec(text)){index=match.index;if(index!==i){fragment.appendChild(createText(text.slice(i,index),true))}rawText=match[0];iconId=grabTheRightIcon(rawText);i=index+rawText.length;src=options.callback(iconId,options);if(iconId&&src){img=new Image;img.onerror=options.onerror;img.setAttribute(\"draggable\",\"false\");attrib=options.attributes(rawText,iconId);for(attrname in attrib){if(attrib.hasOwnProperty(attrname)&&attrname.indexOf(\"on\")!==0&&!img.hasAttribute(attrname)){img.setAttribute(attrname,attrib[attrname])}}img.className=options.className;img.alt=rawText;img.src=src;modified=true;fragment.appendChild(img)}if(!img)fragment.appendChild(createText(rawText,false));img=null}if(modified){if(i\")}return ret})}function replacer(m){return escaper[m]}function returnNull(){return null}function toSizeSquaredAsset(value){return typeof value===\"number\"?value+\"x\"+value:value}function fromCodePoint(codepoint){var code=typeof codepoint===\"string\"?parseInt(codepoint,16):codepoint;if(code<65536){return fromCharCode(code)}code-=65536;return fromCharCode(55296+(code>>10),56320+(code&1023))}function parse(what,how){if(!how||typeof how===\"function\"){how={callback:how}}return(typeof what===\"string\"?parseString:parseNode)(what,{callback:how.callback||defaultImageSrcGenerator,attributes:typeof how.attributes===\"function\"?how.attributes:returnNull,base:typeof how.base===\"string\"?how.base:twemoji.base,ext:how.ext||twemoji.ext,size:how.folder||toSizeSquaredAsset(how.size||twemoji.size),className:how.className||twemoji.className,onerror:how.onerror||twemoji.onerror})}function replace(text,callback){return String(text).replace(re,callback)}function test(text){re.lastIndex=0;var result=re.test(text);re.lastIndex=0;return result}function toCodePoint(unicodeSurrogates,sep){var r=[],c=0,p=0,i=0;while(i await import(/* webpackChunkName: 'forum/emojiMap', webpackMode: 'lazy-once' */ './emojiMap').then(m => emojiMap = m.default));\n });\n extend('flarum/common/components/TextEditor', 'onbuild', function () {\n this.emojiDropdown = new AutocompleteDropdown();\n const $editor = this.$('.TextEditor-editor').wrap('
');\n this.navigator = new KeyboardNavigatable();\n this.navigator.when(() => this.emojiDropdown.active).onUp(() => this.emojiDropdown.navigate(-1)).onDown(() => this.emojiDropdown.navigate(1)).onSelect(this.emojiDropdown.complete.bind(this.emojiDropdown)).onCancel(this.emojiDropdown.hide.bind(this.emojiDropdown)).bindTo($editor);\n $editor.after($('
'));\n });\n extend('flarum/common/components/TextEditor', 'buildEditorParams', function (params) {\n const emojiKeys = Object.keys(emojiMap);\n let relEmojiStart;\n let absEmojiStart;\n let typed;\n const applySuggestion = replacement => {\n this.attrs.composer.editor.replaceBeforeCursor(absEmojiStart - 1, replacement + ' ');\n this.emojiDropdown.hide();\n };\n params.inputListeners.push(() => {\n const selection = this.attrs.composer.editor.getSelectionRange();\n const cursor = selection[0];\n if (selection[1] - cursor > 0) return;\n\n // Search backwards from the cursor for an ':' symbol. If we find\n // one and followed by a whitespace, we will want to show the\n // autocomplete dropdown!\n const lastChunk = this.attrs.composer.editor.getLastNChars(15);\n absEmojiStart = 0;\n for (let i = lastChunk.length - 1; i >= 0; i--) {\n const character = lastChunk.substr(i, 1);\n // check what user typed, emoji names only contains alphanumeric,\n // underline, '+' and '-'\n if (!/[a-z0-9]|\\+|\\-|_|\\:/.test(character)) break;\n // make sure ':' preceded by a whitespace or newline\n if (character === ':' && (i == 0 || /\\s/.test(lastChunk.substr(i - 1, 1)))) {\n relEmojiStart = i + 1;\n absEmojiStart = cursor - lastChunk.length + i + 1;\n break;\n }\n }\n this.emojiDropdown.hide();\n this.emojiDropdown.active = false;\n if (absEmojiStart) {\n typed = lastChunk.substring(relEmojiStart).toLowerCase();\n const makeSuggestion = function (_ref) {\n let {\n emoji,\n name,\n code\n } = _ref;\n return m(\"button\", {\n key: emoji,\n onclick: () => applySuggestion(emoji),\n onmouseenter: function () {\n this.emojiDropdown.setIndex($(this).parent().index() - 1);\n }\n }, m(\"img\", {\n alt: emoji,\n className: \"emoji\",\n draggable: \"false\",\n loading: \"lazy\",\n src: \"\".concat(cdn, \"72x72/\").concat(code, \".png\")\n }), name);\n };\n const buildSuggestions = () => {\n const similarEmoji = [];\n\n // Build a regular expression to do a fuzzy match of the given input string\n const fuzzyRegexp = function (str) {\n const reEscape = new RegExp('\\\\(([' + '+.*?[]{}()^$|\\\\'.replace(/(.)/g, '\\\\$1') + '])\\\\)', 'g');\n return new RegExp('(.*)' + str.toLowerCase().replace(/(.)/g, '($1)(.*?)').replace(reEscape, '(\\\\$1)') + '$', 'i');\n };\n const regTyped = fuzzyRegexp(typed);\n let maxSuggestions = 7;\n const findMatchingEmojis = matcher => {\n for (let i = 0; i < emojiKeys.length && maxSuggestions > 0; i++) {\n const curEmoji = emojiKeys[i];\n if (similarEmoji.indexOf(curEmoji) === -1) {\n const names = emojiMap[curEmoji];\n for (let name of names) {\n if (matcher(name)) {\n --maxSuggestions;\n similarEmoji.push(curEmoji);\n break;\n }\n }\n }\n }\n };\n\n // First, try to find all emojis starting with the given string\n findMatchingEmojis(emoji => emoji.indexOf(typed) === 0);\n\n // If there are still suggestions left, try for some fuzzy matches\n findMatchingEmojis(emoji => regTyped.test(emoji));\n const suggestions = similarEmoji.map(emoji => ({\n emoji,\n name: emojiMap[emoji][0],\n code: getEmojiIconCode(emoji)\n })).map(makeSuggestion);\n if (suggestions.length) {\n this.emojiDropdown.items = suggestions;\n m.render(this.$('.ComposerBody-emojiDropdownContainer')[0], this.emojiDropdown.render());\n this.emojiDropdown.show();\n const coordinates = this.attrs.composer.editor.getCaretCoordinates(absEmojiStart);\n const width = this.emojiDropdown.$().outerWidth();\n const height = this.emojiDropdown.$().outerHeight();\n const parent = this.emojiDropdown.$().offsetParent();\n let left = coordinates.left;\n let top = coordinates.top + 15;\n\n // Keep the dropdown inside the editor.\n if (top + height > parent.height()) {\n top = coordinates.top - height - 15;\n }\n if (left + width > parent.width()) {\n left = parent.width() - width;\n }\n\n // Prevent the dropdown from going off screen on mobile\n top = Math.max(-(parent.offset().top - $(document).scrollTop()), top);\n left = Math.max(-parent.offset().left, left);\n this.emojiDropdown.show(left, top);\n }\n };\n buildSuggestions();\n this.emojiDropdown.setIndex(0);\n this.emojiDropdown.$().scrollTop(0);\n this.emojiDropdown.active = true;\n }\n });\n });\n extend('flarum/common/components/TextEditor', 'toolbarItems', function (items) {\n items.add('emoji', m(TextEditorButton, {\n onclick: () => this.attrs.composer.editor.insertAtCursor(' :'),\n icon: \"far fa-smile\"\n }, app.translator.trans('flarum-emoji.forum.composer.emoji_tooltip')));\n });\n}flarum.reg.addChunkModule('411', '948', 'flarum-emoji', 'forum/emojiMap');\nflarum.reg.addChunkModule('411', '948', 'flarum-emoji', '/home/runner/work/framework/framework/extensions/emoji/js/src/forum/emojiMap.ts');\nflarum.reg.addChunkModule('411', '948', 'flarum-emoji', '/home/runner/work/framework/framework/node_modules/simple-emoji-map/index.mjs');\nflarum.reg.addChunkModule('411', '948', 'flarum-emoji', '/home/runner/work/framework/framework/node_modules/simple-emoji-map/generated/emojis.json');\nflarum.reg.addChunkModule('411', '948', 'flarum-emoji', '/home/runner/work/framework/framework/node_modules/simple-emoji-map/generated/variants.json');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Post');","import twemoji from 'twemoji';\nimport { override } from 'flarum/common/extend';\nimport Post from 'flarum/common/models/Post';\nimport base from './cdn';\nconst options = {\n base,\n attributes: () => ({\n loading: 'lazy'\n })\n};\n\n/**\n * Parses an HTML string into a `` node containing the HTML content.\n *\n * Vanilla JS implementation of jQuery's `$.parseHTML()`,\n * sourced from http://youmightnotneedjquery.com/\n */\nfunction parseHTML(str) {\n const tmp = document.implementation.createHTMLDocument();\n tmp.body.innerHTML = str;\n return tmp.body;\n}\nexport default function renderEmoji() {\n override(Post.prototype, 'contentHtml', function (original) {\n const contentHtml = original();\n if (this.oldContentHtml !== contentHtml) {\n // We need to parse the HTML string into a DOM node, then give it to Twemoji.\n //\n // This prevents some issues with the default find-replace that would be performed\n // on a string passed to `Twemoji.parse()`.\n //\n // The parse function can only handle a single DOM node provided, so we need to\n // wrap it in a node. In our `parseHTML` implementation, we wrap it in a ``\n // element. This gets stripped below.\n //\n // See https://github.com/flarum/core/issues/2958\n const emojifiedDom = twemoji.parse(parseHTML(contentHtml), options);\n\n // Steal the HTML string inside the emojified DOM `` tag.\n this.emojifiedContentHtml = emojifiedDom.innerHTML;\n this.oldContentHtml = contentHtml;\n }\n return this.emojifiedContentHtml;\n });\n override(s9e.TextFormatter, 'preview', (original, text, element) => {\n original(text, element);\n twemoji.parse(element, options);\n });\n}","import app from 'flarum/forum/app';\nimport addComposerAutocomplete from './addComposerAutocomplete';\nimport renderEmoji from './renderEmoji';\napp.initializers.add('flarum-emoji', () => {\n // After typing ':' in the composer, show a dropdown suggesting a bunch of\n // emoji that the user could use.\n addComposerAutocomplete();\n\n // render emoji as image in Posts content and title.\n renderEmoji();\n});"],"names":["inProgress","dataWebpackPrefix","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","m","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","f","e","chunkId","Promise","all","keys","reduce","promises","u","g","globalThis","this","Function","window","obj","prop","prototype","hasOwnProperty","call","l","url","done","push","script","needAttach","scripts","document","getElementsByTagName","i","length","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","forEach","fn","setTimeout","bind","type","target","head","appendChild","r","Symbol","toStringTag","value","scriptUrl","importScripts","location","currentScript","Error","replace","p","compat","originalLoadChunk","flarum","reg","loadChunk","installedChunks","j","installedChunkData","promise","resolve","reject","error","errorType","realSrc","message","name","request","webpackJsonpCallback","parentChunkLoadingFunction","data","chunkIds","moreModules","runtime","some","id","chunkLoadingGlobal","self","_typeof","iterator","constructor","_defineProperty","arg","input","hint","prim","toPrimitive","res","TypeError","String","toPropertyKey","configurable","writable","AutocompleteDropdown","super","arguments","view","className","app","translator","trans","items","map","item","attrs","show","left","top","$","css","active","hide","navigate","delta","keyWasJustPressed","setIndex","index","keyWasJustPressedTimeout","complete","eq","find","click","scrollToItem","$dropdown","$items","rangedIndex","$item","removeClass","addClass","dropdownScroll","scrollTop","dropdownTop","offset","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","stop","animate","add","twemoji","base","ext","size","convert","fromCodePoint","codepoint","code","fromCharCode","toCodePoint","replaceChild","createText","alt","parse","what","how","callback","parseString","parseNode","defaultImageSrcGenerator","attributes","returnNull","folder","test","text","re","lastIndex","result","escaper","UFE0Fg","U200D","rescaper","shouldntBeParsed","clean","createTextNode","icon","options","concat","grabAllTextNodes","node","allText","subnode","nodeType","childNodes","nodeName","toLowerCase","grabTheRightIcon","rawText","indexOf","attrib","attrname","modified","fragment","match","img","iconId","createDocumentFragment","nodeValue","exec","slice","Image","hasAttribute","str","ret","replacer","unicodeSurrogates","sep","c","charCodeAt","toString","join","getEmojiIconCode","emoji","version","addChunkModule","loading","emojiMap","extend","_loaders","async","then","default","emojiDropdown","$editor","wrap","navigator","when","onUp","onDown","onSelect","onCancel","bindTo","after","params","emojiKeys","relEmojiStart","absEmojiStart","typed","applySuggestion","replacement","composer","editor","replaceBeforeCursor","inputListeners","selection","getSelectionRange","cursor","lastChunk","getLastNChars","character","substr","substring","makeSuggestion","_ref","onclick","onmouseenter","parent","draggable","cdn","similarEmoji","regTyped","reEscape","RegExp","fuzzyRegexp","maxSuggestions","findMatchingEmojis","matcher","curEmoji","names","suggestions","render","coordinates","getCaretCoordinates","width","outerWidth","height","offsetParent","Math","max","buildSuggestions","insertAtCursor","addComposerAutocomplete","override","original","contentHtml","oldContentHtml","emojifiedDom","tmp","implementation","createHTMLDocument","body","innerHTML","parseHTML","emojifiedContentHtml","s9e","TextFormatter","element"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/emoji/js/src/forum/addComposerAutocomplete.js b/extensions/emoji/js/src/forum/addComposerAutocomplete.js index 7f0475b5d6..30a8626850 100644 --- a/extensions/emoji/js/src/forum/addComposerAutocomplete.js +++ b/extensions/emoji/js/src/forum/addComposerAutocomplete.js @@ -8,8 +8,6 @@ import getEmojiIconCode from './helpers/getEmojiIconCode'; import cdn from './cdn'; export default function addComposerAutocomplete() { - const $container = $('
'); - const dropdown = new AutocompleteDropdown(); let emojiMap = null; extend('flarum/common/components/TextEditor', 'oninit', function () { @@ -24,18 +22,19 @@ export default function addComposerAutocomplete() { }); extend('flarum/common/components/TextEditor', 'onbuild', function () { + this.emojiDropdown = new AutocompleteDropdown(); const $editor = this.$('.TextEditor-editor').wrap('
'); this.navigator = new KeyboardNavigatable(); this.navigator - .when(() => dropdown.active) - .onUp(() => dropdown.navigate(-1)) - .onDown(() => dropdown.navigate(1)) - .onSelect(dropdown.complete.bind(dropdown)) - .onCancel(dropdown.hide.bind(dropdown)) + .when(() => this.emojiDropdown.active) + .onUp(() => this.emojiDropdown.navigate(-1)) + .onDown(() => this.emojiDropdown.navigate(1)) + .onSelect(this.emojiDropdown.complete.bind(this.emojiDropdown)) + .onCancel(this.emojiDropdown.hide.bind(this.emojiDropdown)) .bindTo($editor); - $editor.after($container); + $editor.after($('
')); }); extend('flarum/common/components/TextEditor', 'buildEditorParams', function (params) { @@ -48,7 +47,7 @@ export default function addComposerAutocomplete() { const applySuggestion = (replacement) => { this.attrs.composer.editor.replaceBeforeCursor(absEmojiStart - 1, replacement + ' '); - dropdown.hide(); + this.emojiDropdown.hide(); }; params.inputListeners.push(() => { @@ -76,8 +75,8 @@ export default function addComposerAutocomplete() { } } - dropdown.hide(); - dropdown.active = false; + this.emojiDropdown.hide(); + this.emojiDropdown.active = false; if (absEmojiStart) { typed = lastChunk.substring(relEmojiStart).toLowerCase(); @@ -89,7 +88,7 @@ export default function addComposerAutocomplete() { key={emoji} onclick={() => applySuggestion(emoji)} onmouseenter={function () { - dropdown.setIndex($(this).parent().index() - 1); + this.emojiDropdown.setIndex($(this).parent().index() - 1); }} > {emoji} @@ -149,14 +148,14 @@ export default function addComposerAutocomplete() { .map(makeSuggestion); if (suggestions.length) { - dropdown.items = suggestions; - m.render($container[0], dropdown.render()); + this.emojiDropdown.items = suggestions; + m.render(this.$('.ComposerBody-emojiDropdownContainer')[0], this.emojiDropdown.render()); - dropdown.show(); + this.emojiDropdown.show(); const coordinates = this.attrs.composer.editor.getCaretCoordinates(absEmojiStart); - const width = dropdown.$().outerWidth(); - const height = dropdown.$().outerHeight(); - const parent = dropdown.$().offsetParent(); + const width = this.emojiDropdown.$().outerWidth(); + const height = this.emojiDropdown.$().outerHeight(); + const parent = this.emojiDropdown.$().offsetParent(); let left = coordinates.left; let top = coordinates.top + 15; @@ -172,15 +171,15 @@ export default function addComposerAutocomplete() { top = Math.max(-(parent.offset().top - $(document).scrollTop()), top); left = Math.max(-parent.offset().left, left); - dropdown.show(left, top); + this.emojiDropdown.show(left, top); } }; buildSuggestions(); - dropdown.setIndex(0); - dropdown.$().scrollTop(0); - dropdown.active = true; + this.emojiDropdown.setIndex(0); + this.emojiDropdown.$().scrollTop(0); + this.emojiDropdown.active = true; } }); }); diff --git a/extensions/flags/js/dist-typings/forum/components/FlagPostModal.d.ts b/extensions/flags/js/dist-typings/forum/components/FlagPostModal.d.ts index 083a2ef245..53dfd88b48 100644 --- a/extensions/flags/js/dist-typings/forum/components/FlagPostModal.d.ts +++ b/extensions/flags/js/dist-typings/forum/components/FlagPostModal.d.ts @@ -1,5 +1,5 @@ /// -export default class FlagPostModal extends Modal { +export default class FlagPostModal extends FormModal { constructor(); oninit(vnode: any): void; success: boolean | undefined; @@ -10,6 +10,6 @@ export default class FlagPostModal extends Modal; onsubmit(e: any): void; } -import Modal from "flarum/common/components/Modal"; +import FormModal from "flarum/common/components/FormModal"; import Stream from "flarum/common/utils/Stream"; import ItemList from "flarum/common/utils/ItemList"; diff --git a/extensions/flags/js/dist/forum.js b/extensions/flags/js/dist/forum.js index d14424232b..7313572f2e 100644 --- a/extensions/flags/js/dist/forum.js +++ b/extensions/flags/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var t={n:a=>{var e=a&&a.__esModule?()=>a.default:()=>a;return t.d(e,{a:e}),e},d:(a,e)=>{for(var s in e)t.o(e,s)&&!t.o(a,s)&&Object.defineProperty(a,s,{enumerable:!0,get:e[s]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{extend:()=>et});const e=flarum.reg.get("core","forum/app");var s=t.n(e);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 o(t,a,e){return(a=function(t){var a=function(t,a){if("object"!==r(t)||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var s=e.call(t,a);if("object"!==r(s))return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===r(a)?a:String(a)}(a))in t?Object.defineProperty(t,a,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[a]=e,t}class n{constructor(t){o(this,"app",void 0),o(this,"loading",!1),o(this,"cache",null),o(this,"index",null),this.app=t}load(){this.cache&&!this.app.session.user.attribute("newFlagCount")||(this.loading=!0,m.redraw(),this.app.store.find("flags").then((t=>{this.app.session.user.pushAttributes({newFlagCount:0}),this.cache=t.sort(((t,a)=>a.createdAt().getTime()-t.createdAt().getTime()))})).catch((()=>{})).then((()=>{this.loading=!1,m.redraw()})))}}flarum.reg.add("flarum-flags","forum/states/FlagListState",n);const l=flarum.reg.get("core","common/extend"),i=flarum.reg.get("core","forum/utils/PostControls");var u=t.n(i);const c=flarum.reg.get("core","common/components/Button");var f=t.n(c);const g=flarum.reg.get("core","common/components/Modal");var d=t.n(g);const p=flarum.reg.get("core","common/components/Form");var h=t.n(p);const v=flarum.reg.get("core","common/utils/Stream");var b=t.n(v);const _=flarum.reg.get("core","common/utils/withAttr");var y=t.n(_);const x=flarum.reg.get("core","common/utils/ItemList");var N=t.n(x);class F extends(d()){oninit(t){super.oninit(t),this.success=!1,this.reason=b()(""),this.reasonDetail=b()("")}className(){return"FlagPostModal Modal--medium"}title(){return s().translator.trans("flarum-flags.forum.flag_post.title")}content(){return this.success?m("div",{className:"Modal-body"},m(h(),{className:"Form--centered"},m("p",{className:"helpText"},s().translator.trans("flarum-flags.forum.flag_post.confirmation_message")),m("div",{className:"Form-group Form-controls"},m(f(),{className:"Button Button--primary Button--block",onclick:this.hide.bind(this)},s().translator.trans("flarum-flags.forum.flag_post.dismiss_button"))))):m("div",{className:"Modal-body"},m(h(),{className:"Form--centered"},m("div",{className:"Form-group"},m("div",null,this.flagReasons().toArray())),m("div",{className:"Form-group Form-controls"},m(f(),{className:"Button Button--primary Button--block",type:"submit",loading:this.loading,disabled:!this.reason()},s().translator.trans("flarum-flags.forum.flag_post.submit_button")))))}flagReasons(){const t=new(N()),a=s().forum.attribute("guidelinesUrl");return t.add("off-topic",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"off_topic"===this.reason(),value:"off_topic",onclick:y()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_off_topic_label")),s().translator.trans("flarum-flags.forum.flag_post.reason_off_topic_text"),"off_topic"===this.reason()&&m("textarea",{className:"FormControl",placeholder:s().translator.trans("flarum-flags.forum.flag_post.reason_details_placeholder"),value:this.reasonDetail(),oninput:y()("value",this.reasonDetail)})),70),t.add("inappropriate",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"inappropriate"===this.reason(),value:"inappropriate",onclick:y()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_inappropriate_label")),s().translator.trans("flarum-flags.forum.flag_post.reason_inappropriate_text",{a:a?m("a",{href:a,target:"_blank"}):void 0}),"inappropriate"===this.reason()&&m("textarea",{className:"FormControl",placeholder:s().translator.trans("flarum-flags.forum.flag_post.reason_details_placeholder"),value:this.reasonDetail(),oninput:y()("value",this.reasonDetail)})),60),t.add("spam",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"spam"===this.reason(),value:"spam",onclick:y()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_spam_label")),s().translator.trans("flarum-flags.forum.flag_post.reason_spam_text"),"spam"===this.reason()&&m("textarea",{className:"FormControl",placeholder:s().translator.trans("flarum-flags.forum.flag_post.reason_details_placeholder"),value:this.reasonDetail(),oninput:y()("value",this.reasonDetail)})),50),t.add("other",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"other"===this.reason(),value:"other",onclick:y()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_other_label")),"other"===this.reason()&&m("textarea",{className:"FormControl",value:this.reasonDetail(),oninput:y()("value",this.reasonDetail)})),10),t}onsubmit(t){t.preventDefault(),this.loading=!0,s().store.createRecord("flags").save({reason:"other"===this.reason()?null:this.reason(),reasonDetail:this.reasonDetail(),relationships:{user:s().session.user,post:this.attrs.post}},{errorHandler:this.onerror.bind(this)}).then((()=>this.success=!0)).catch((()=>{})).then(this.loaded.bind(this))}}flarum.reg.add("flarum-flags","forum/components/FlagPostModal",F);const w=flarum.reg.get("core","forum/components/HeaderSecondary");var P=t.n(w);const k=flarum.reg.get("core","forum/components/HeaderDropdown");var D=t.n(k);const A=flarum.reg.get("core","common/utils/classList");var C=t.n(A);const S=flarum.reg.get("core","common/Component");var M=t.n(S);const T=flarum.reg.get("core","common/components/Avatar");var B=t.n(T);const L=flarum.reg.get("core","common/helpers/username");var O=t.n(L);const j=flarum.reg.get("core","forum/components/HeaderList");var H=t.n(j);const R=flarum.reg.get("core","forum/components/HeaderListItem");var E=t.n(R);class I extends(M()){oninit(t){super.oninit(t),this.state=this.attrs.state}view(){const t=this.state.cache||[];return m(H(),{className:"FlagList",title:s().translator.trans("flarum-flags.forum.flagged_posts.title"),hasItems:t.length,loading:this.state.loading,emptyText:s().translator.trans("flarum-flags.forum.flagged_posts.empty_text")},m("ul",{className:"HeaderListGroup-content"},!this.state.loading&&t.map((t=>{const a=t.post();return m("li",null,m(E(),{className:"Flag",avatar:m(B(),{user:a.user()||null}),icon:"fas fa-flag",content:s().translator.trans("flarum-flags.forum.flagged_posts.item_text",{username:O()(a.user()),em:m("em",null),discussion:a.discussion().title()}),excerpt:a.contentPlain(),datetime:t.createdAt(),href:s().route.post(a),onclick:t=>{s().flags.index=a,t.redraw=!1}}))}))))}}flarum.reg.add("flarum-flags","forum/components/FlagList",I);class U extends(D()){static initAttrs(t){t.className=C()("FlagsDropdown",t.className),t.label=t.label||s().translator.trans("flarum-flags.forum.flagged_posts.tooltip"),t.icon=t.icon||"fas fa-flag",super.initAttrs(t)}getContent(){return m(I,{state:this.attrs.state})}goToRoute(){m.route.set(s().route("flags"))}getUnreadCount(){return s().flags.cache?s().flags.cache.length:s().forum.attribute("flagCount")}getNewCount(){return s().session.user.attribute("newFlagCount")}}flarum.reg.add("flarum-flags","forum/components/FlagsDropdown",U);const G=flarum.reg.get("core","forum/components/Post");var q=t.n(G);const z=flarum.reg.get("core","common/utils/humanTime");var V=t.n(z);const J=flarum.reg.get("core","common/extenders");var K=t.n(J);const Q=flarum.reg.get("core","common/models/Post");var W=t.n(Q);const X=flarum.reg.get("core","common/components/Page");var Y=t.n(X);class Z extends(Y()){oninit(t){super.oninit(t),s().history.push("flags"),s().flags.load(),this.bodyClass="App--flags"}view(){return m("div",{className:"FlagsPage"},m(I,{state:s().flags}))}}flarum.reg.add("flarum-flags","forum/components/FlagsPage",Z);const $=flarum.reg.get("core","common/Model");var tt=t.n($);class at extends(tt()){type(){return tt().attribute("type").call(this)}reason(){return tt().attribute("reason").call(this)}reasonDetail(){return tt().attribute("reasonDetail").call(this)}createdAt(){return tt().attribute("createdAt",tt().transformDate).call(this)}post(){return tt().hasOne("post").call(this)}user(){return tt().hasOne("user").call(this)}}flarum.reg.add("flarum-flags","forum/models/Flag",at);const et=[(new(K().Routes)).add("flags","/flags",Z),(new(K().Store)).add("flags",at),new(K().Model)(W()).hasMany("flags").attribute("canFlag")];s().initializers.add("flarum-flags",(()=>{s().flags=new n(s()),(0,l.extend)(u(),"userControls",(function(t,a){!a.isHidden()&&"comment"===a.contentType()&&a.canFlag()&&t.add("flag",m(f(),{icon:"fas fa-flag",onclick:()=>s().modal.show(F,{post:a})},s().translator.trans("flarum-flags.forum.post_controls.flag_button")))})),(0,l.extend)(P().prototype,"items",(function(t){s().forum.attribute("canViewFlags")&&t.add("flags",m(U,{state:s().flags}),15)})),(0,l.extend)(q().prototype,"elementAttrs",(function(t){this.attrs.post.flags().length&&(t.className+=" Post--flagged")})),q().prototype.dismissFlag=function(t){const a=this.attrs.post;return delete a.data.relationships.flags,this.subtree.invalidate(),s().flags.cache&&s().flags.cache.some(((t,e)=>{if(t.post()===a){if(s().flags.cache.splice(e,1),s().flags.index===a){let t=s().flags.cache[e];if(t||(t=s().flags.cache[0]),t){const a=t.post();s().flags.index=a,m.route.set(s().route.post(a))}}return!0}})),s().request({url:s().forum.attribute("apiUrl")+a.apiEndpoint()+"/flags",method:"DELETE",body:t})},q().prototype.flagActionItems=function(){const t=new(N()),a=u().destructiveControls(this.attrs.post);return Object.keys(a.items).forEach((t=>{const e=a.get(t).attrs;e.className="Button",(0,l.extend)(e,"onclick",(()=>this.dismissFlag()))})),t.add("controls",m("div",{className:"ButtonGroup"},a.toArray())),t.add("dismiss",m(f(),{className:"Button",icon:"far fa-eye-slash",onclick:this.dismissFlag.bind(this)},s().translator.trans("flarum-flags.forum.post.dismiss_flag_button")),-100),t},(0,l.override)(q().prototype,"header",(function(t){const a=this.attrs.post,e=a.flags();if(e.length)return a.isHidden()&&(this.revealContent=!0),m("div",{className:"Post-flagged"},m("div",{className:"Post-flagged-flags"},e.map((t=>m("div",{className:"Post-flagged-flag"},this.flagReason(t))))),m("div",{className:"Post-flagged-actions"},this.flagActionItems().toArray()))})),q().prototype.flagReason=function(t){if("user"===t.type()){const a=t.user(),e=t.reason()?s().translator.trans("flarum-flags.forum.flag_post.reason_".concat(t.reason(),"_label")):null,r=t.reasonDetail(),o=V()(t.createdAt());return[s().translator.trans(e?"flarum-flags.forum.post.flagged_by_with_reason_text":"flarum-flags.forum.post.flagged_by_text",{time:o,user:a,reason:e}),!!r&&m("span",{className:"Post-flagged-detail"},r)]}}}))})(),module.exports=a})(); +(()=>{var t={n:a=>{var e=a&&a.__esModule?()=>a.default:()=>a;return t.d(e,{a:e}),e},d:(a,e)=>{for(var s in e)t.o(e,s)&&!t.o(a,s)&&Object.defineProperty(a,s,{enumerable:!0,get:e[s]})},o:(t,a)=>Object.prototype.hasOwnProperty.call(t,a),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},a={};(()=>{"use strict";t.r(a),t.d(a,{extend:()=>et});const e=flarum.reg.get("core","forum/app");var s=t.n(e);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 o(t,a,e){return(a=function(t){var a=function(t,a){if("object"!==r(t)||null===t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var s=e.call(t,a);if("object"!==r(s))return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===r(a)?a:String(a)}(a))in t?Object.defineProperty(t,a,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[a]=e,t}class n{constructor(t){o(this,"app",void 0),o(this,"loading",!1),o(this,"cache",null),o(this,"index",null),this.app=t}load(){this.cache&&!this.app.session.user.attribute("newFlagCount")||(this.loading=!0,m.redraw(),this.app.store.find("flags").then((t=>{this.app.session.user.pushAttributes({newFlagCount:0}),this.cache=t.sort(((t,a)=>a.createdAt().getTime()-t.createdAt().getTime()))})).catch((()=>{})).then((()=>{this.loading=!1,m.redraw()})))}}flarum.reg.add("flarum-flags","forum/states/FlagListState",n);const l=flarum.reg.get("core","common/extend"),i=flarum.reg.get("core","forum/utils/PostControls");var u=t.n(i);const c=flarum.reg.get("core","common/components/Button");var f=t.n(c);const g=flarum.reg.get("core","common/components/FormModal");var d=t.n(g);const p=flarum.reg.get("core","common/components/Form");var h=t.n(p);const v=flarum.reg.get("core","common/utils/Stream");var b=t.n(v);const _=flarum.reg.get("core","common/utils/withAttr");var y=t.n(_);const x=flarum.reg.get("core","common/utils/ItemList");var N=t.n(x);class F extends(d()){oninit(t){super.oninit(t),this.success=!1,this.reason=b()(""),this.reasonDetail=b()("")}className(){return"FlagPostModal Modal--medium"}title(){return s().translator.trans("flarum-flags.forum.flag_post.title")}content(){return this.success?m("div",{className:"Modal-body"},m(h(),{className:"Form--centered"},m("p",{className:"helpText"},s().translator.trans("flarum-flags.forum.flag_post.confirmation_message")),m("div",{className:"Form-group Form-controls"},m(f(),{className:"Button Button--primary Button--block",onclick:this.hide.bind(this)},s().translator.trans("flarum-flags.forum.flag_post.dismiss_button"))))):m("div",{className:"Modal-body"},m(h(),{className:"Form--centered"},m("div",{className:"Form-group"},m("div",null,this.flagReasons().toArray())),m("div",{className:"Form-group Form-controls"},m(f(),{className:"Button Button--primary Button--block",type:"submit",loading:this.loading,disabled:!this.reason()},s().translator.trans("flarum-flags.forum.flag_post.submit_button")))))}flagReasons(){const t=new(N()),a=s().forum.attribute("guidelinesUrl");return t.add("off-topic",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"off_topic"===this.reason(),value:"off_topic",onclick:y()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_off_topic_label")),s().translator.trans("flarum-flags.forum.flag_post.reason_off_topic_text"),"off_topic"===this.reason()&&m("textarea",{className:"FormControl",placeholder:s().translator.trans("flarum-flags.forum.flag_post.reason_details_placeholder"),value:this.reasonDetail(),oninput:y()("value",this.reasonDetail)})),70),t.add("inappropriate",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"inappropriate"===this.reason(),value:"inappropriate",onclick:y()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_inappropriate_label")),s().translator.trans("flarum-flags.forum.flag_post.reason_inappropriate_text",{a:a?m("a",{href:a,target:"_blank"}):void 0}),"inappropriate"===this.reason()&&m("textarea",{className:"FormControl",placeholder:s().translator.trans("flarum-flags.forum.flag_post.reason_details_placeholder"),value:this.reasonDetail(),oninput:y()("value",this.reasonDetail)})),60),t.add("spam",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"spam"===this.reason(),value:"spam",onclick:y()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_spam_label")),s().translator.trans("flarum-flags.forum.flag_post.reason_spam_text"),"spam"===this.reason()&&m("textarea",{className:"FormControl",placeholder:s().translator.trans("flarum-flags.forum.flag_post.reason_details_placeholder"),value:this.reasonDetail(),oninput:y()("value",this.reasonDetail)})),50),t.add("other",m("label",{className:"checkbox"},m("input",{type:"radio",name:"reason",checked:"other"===this.reason(),value:"other",onclick:y()("value",this.reason)}),m("strong",null,s().translator.trans("flarum-flags.forum.flag_post.reason_other_label")),"other"===this.reason()&&m("textarea",{className:"FormControl",value:this.reasonDetail(),oninput:y()("value",this.reasonDetail)})),10),t}onsubmit(t){t.preventDefault(),this.loading=!0,s().store.createRecord("flags").save({reason:"other"===this.reason()?null:this.reason(),reasonDetail:this.reasonDetail(),relationships:{user:s().session.user,post:this.attrs.post}},{errorHandler:this.onerror.bind(this)}).then((()=>this.success=!0)).catch((()=>{})).then(this.loaded.bind(this))}}flarum.reg.add("flarum-flags","forum/components/FlagPostModal",F);const w=flarum.reg.get("core","forum/components/HeaderSecondary");var P=t.n(w);const k=flarum.reg.get("core","forum/components/HeaderDropdown");var D=t.n(k);const A=flarum.reg.get("core","common/utils/classList");var C=t.n(A);const S=flarum.reg.get("core","common/Component");var M=t.n(S);const T=flarum.reg.get("core","common/components/Avatar");var B=t.n(T);const O=flarum.reg.get("core","common/helpers/username");var j=t.n(O);const L=flarum.reg.get("core","forum/components/HeaderList");var H=t.n(L);const R=flarum.reg.get("core","forum/components/HeaderListItem");var E=t.n(R);class I extends(M()){oninit(t){super.oninit(t),this.state=this.attrs.state}view(){const t=this.state.cache||[];return m(H(),{className:"FlagList",title:s().translator.trans("flarum-flags.forum.flagged_posts.title"),hasItems:t.length,loading:this.state.loading,emptyText:s().translator.trans("flarum-flags.forum.flagged_posts.empty_text")},m("ul",{className:"HeaderListGroup-content"},!this.state.loading&&t.map((t=>{const a=t.post();return m("li",null,m(E(),{className:"Flag",avatar:m(B(),{user:a.user()||null}),icon:"fas fa-flag",content:s().translator.trans("flarum-flags.forum.flagged_posts.item_text",{username:j()(a.user()),em:m("em",null),discussion:a.discussion().title()}),excerpt:a.contentPlain(),datetime:t.createdAt(),href:s().route.post(a),onclick:t=>{s().flags.index=a,t.redraw=!1}}))}))))}}flarum.reg.add("flarum-flags","forum/components/FlagList",I);class U extends(D()){static initAttrs(t){t.className=C()("FlagsDropdown",t.className),t.label=t.label||s().translator.trans("flarum-flags.forum.flagged_posts.tooltip"),t.icon=t.icon||"fas fa-flag",super.initAttrs(t)}getContent(){return m(I,{state:this.attrs.state})}goToRoute(){m.route.set(s().route("flags"))}getUnreadCount(){return s().flags.cache?s().flags.cache.length:s().forum.attribute("flagCount")}getNewCount(){return s().session.user.attribute("newFlagCount")}}flarum.reg.add("flarum-flags","forum/components/FlagsDropdown",U);const G=flarum.reg.get("core","forum/components/Post");var q=t.n(G);const z=flarum.reg.get("core","common/utils/humanTime");var V=t.n(z);const J=flarum.reg.get("core","common/extenders");var K=t.n(J);const Q=flarum.reg.get("core","common/models/Post");var W=t.n(Q);const X=flarum.reg.get("core","common/components/Page");var Y=t.n(X);class Z extends(Y()){oninit(t){super.oninit(t),s().history.push("flags"),s().flags.load(),this.bodyClass="App--flags"}view(){return m("div",{className:"FlagsPage"},m(I,{state:s().flags}))}}flarum.reg.add("flarum-flags","forum/components/FlagsPage",Z);const $=flarum.reg.get("core","common/Model");var tt=t.n($);class at extends(tt()){type(){return tt().attribute("type").call(this)}reason(){return tt().attribute("reason").call(this)}reasonDetail(){return tt().attribute("reasonDetail").call(this)}createdAt(){return tt().attribute("createdAt",tt().transformDate).call(this)}post(){return tt().hasOne("post").call(this)}user(){return tt().hasOne("user").call(this)}}flarum.reg.add("flarum-flags","forum/models/Flag",at);const et=[(new(K().Routes)).add("flags","/flags",Z),(new(K().Store)).add("flags",at),new(K().Model)(W()).hasMany("flags").attribute("canFlag")];s().initializers.add("flarum-flags",(()=>{s().flags=new n(s()),(0,l.extend)(u(),"userControls",(function(t,a){!a.isHidden()&&"comment"===a.contentType()&&a.canFlag()&&t.add("flag",m(f(),{icon:"fas fa-flag",onclick:()=>s().modal.show(F,{post:a})},s().translator.trans("flarum-flags.forum.post_controls.flag_button")))})),(0,l.extend)(P().prototype,"items",(function(t){s().forum.attribute("canViewFlags")&&t.add("flags",m(U,{state:s().flags}),15)})),(0,l.extend)(q().prototype,"elementAttrs",(function(t){this.attrs.post.flags().length&&(t.className+=" Post--flagged")})),q().prototype.dismissFlag=function(t){const a=this.attrs.post;return delete a.data.relationships.flags,this.subtree.invalidate(),s().flags.cache&&s().flags.cache.some(((t,e)=>{if(t.post()===a){if(s().flags.cache.splice(e,1),s().flags.index===a){let t=s().flags.cache[e];if(t||(t=s().flags.cache[0]),t){const a=t.post();s().flags.index=a,m.route.set(s().route.post(a))}}return!0}})),s().request({url:s().forum.attribute("apiUrl")+a.apiEndpoint()+"/flags",method:"DELETE",body:t})},q().prototype.flagActionItems=function(){const t=new(N()),a=u().destructiveControls(this.attrs.post);return Object.keys(a.toObject()).forEach((t=>{const e=a.get(t).attrs;e.className="Button",(0,l.extend)(e,"onclick",(()=>this.dismissFlag()))})),t.add("controls",m("div",{className:"ButtonGroup"},a.toArray())),t.add("dismiss",m(f(),{className:"Button",icon:"far fa-eye-slash",onclick:this.dismissFlag.bind(this)},s().translator.trans("flarum-flags.forum.post.dismiss_flag_button")),-100),t},(0,l.override)(q().prototype,"header",(function(t){const a=this.attrs.post,e=a.flags();if(e.length)return a.isHidden()&&(this.revealContent=!0),m("div",{className:"Post-flagged"},m("div",{className:"Post-flagged-flags"},e.map((t=>m("div",{className:"Post-flagged-flag"},this.flagReason(t))))),m("div",{className:"Post-flagged-actions"},this.flagActionItems().toArray()))})),q().prototype.flagReason=function(t){if("user"===t.type()){const a=t.user(),e=t.reason()?s().translator.trans("flarum-flags.forum.flag_post.reason_".concat(t.reason(),"_label")):null,r=t.reasonDetail(),o=V()(t.createdAt());return[s().translator.trans(e?"flarum-flags.forum.post.flagged_by_with_reason_text":"flarum-flags.forum.post.flagged_by_text",{time:o,user:a,reason:e}),!!r&&m("span",{className:"Post-flagged-detail"},r)]}}}))})(),module.exports=a})(); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/extensions/flags/js/dist/forum.js.map b/extensions/flags/js/dist/forum.js.map index ae234e9a1d..2aeab67ccf 100644 --- a/extensions/flags/js/dist/forum.js.map +++ b/extensions/flags/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/flags/webpack/bootstrap","webpack://@flarum/flags/webpack/runtime/compat get default export","webpack://@flarum/flags/webpack/runtime/define property getters","webpack://@flarum/flags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/flags/webpack/runtime/make namespace object","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/flags/./src/forum/states/FlagListState.tsx","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/utils/PostControls')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Modal')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/withAttr')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/flags/./src/forum/components/FlagPostModal.js","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderSecondary')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderDropdown')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Avatar')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/helpers/username')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderList')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderListItem')\"","webpack://@flarum/flags/./src/forum/components/FlagList.tsx","webpack://@flarum/flags/./src/forum/components/FlagsDropdown.tsx","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/Post')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/humanTime')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/models/Post')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Page')\"","webpack://@flarum/flags/./src/forum/components/FlagsPage.js","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/flags/./src/forum/models/Flag.ts","webpack://@flarum/flags/./src/forum/extend.ts","webpack://@flarum/flags/./src/forum/index.ts","webpack://@flarum/flags/./src/forum/addFlagControl.js","webpack://@flarum/flags/./src/forum/addFlagsDropdown.js","webpack://@flarum/flags/./src/forum/addFlagsToPosts.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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', 'forum/app');","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}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class FlagListState {\n constructor(app) {\n _defineProperty(this, \"app\", void 0);\n _defineProperty(this, \"loading\", false);\n _defineProperty(this, \"cache\", null);\n _defineProperty(this, \"index\", null);\n this.app = app;\n }\n\n /**\n * Load flags into the application's cache if they haven't already\n * been loaded.\n */\n load() {\n if (this.cache && !this.app.session.user.attribute('newFlagCount')) {\n return;\n }\n this.loading = true;\n m.redraw();\n this.app.store.find('flags').then(flags => {\n this.app.session.user.pushAttributes({\n newFlagCount: 0\n });\n this.cache = flags.sort((a, b) => b.createdAt().getTime() - a.createdAt().getTime());\n }).catch(() => {}).then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n}\nflarum.reg.add('flarum-flags', 'forum/states/FlagListState', FlagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/PostControls');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Modal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/Stream');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Form from 'flarum/common/components/Form';\nimport Button from 'flarum/common/components/Button';\nimport Stream from 'flarum/common/utils/Stream';\nimport withAttr from 'flarum/common/utils/withAttr';\nimport ItemList from 'flarum/common/utils/ItemList';\nexport default class FlagPostModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n this.success = false;\n this.reason = Stream('');\n this.reasonDetail = Stream('');\n }\n className() {\n return 'FlagPostModal Modal--medium';\n }\n title() {\n return app.translator.trans('flarum-flags.forum.flag_post.title');\n }\n content() {\n if (this.success) {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"p\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-flags.forum.flag_post.confirmation_message')), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary Button--block\",\n onclick: this.hide.bind(this)\n }, app.translator.trans('flarum-flags.forum.flag_post.dismiss_button')))));\n }\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"div\", null, this.flagReasons().toArray())), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary Button--block\",\n type: \"submit\",\n loading: this.loading,\n disabled: !this.reason()\n }, app.translator.trans('flarum-flags.forum.flag_post.submit_button')))));\n }\n flagReasons() {\n const items = new ItemList();\n const guidelinesUrl = app.forum.attribute('guidelinesUrl');\n items.add('off-topic', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'off_topic',\n value: \"off_topic\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_label')), app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_text'), this.reason() === 'off_topic' && m(\"textarea\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder'),\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 70);\n items.add('inappropriate', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'inappropriate',\n value: \"inappropriate\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_label')), app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_text', {\n a: guidelinesUrl ? m(\"a\", {\n href: guidelinesUrl,\n target: \"_blank\"\n }) : undefined\n }), this.reason() === 'inappropriate' && m(\"textarea\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder'),\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 60);\n items.add('spam', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'spam',\n value: \"spam\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_spam_label')), app.translator.trans('flarum-flags.forum.flag_post.reason_spam_text'), this.reason() === 'spam' && m(\"textarea\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder'),\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 50);\n items.add('other', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'other',\n value: \"other\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_other_label')), this.reason() === 'other' && m(\"textarea\", {\n className: \"FormControl\",\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 10);\n return items;\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n app.store.createRecord('flags').save({\n reason: this.reason() === 'other' ? null : this.reason(),\n reasonDetail: this.reasonDetail(),\n relationships: {\n user: app.session.user,\n post: this.attrs.post\n }\n }, {\n errorHandler: this.onerror.bind(this)\n }).then(() => this.success = true).catch(() => {}).then(this.loaded.bind(this));\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagPostModal', FlagPostModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderSecondary');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/classList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Component');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Avatar');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/username');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderListItem');","import app from 'flarum/forum/app';\nimport Component from 'flarum/common/Component';\nimport Avatar from 'flarum/common/components/Avatar';\nimport username from 'flarum/common/helpers/username';\nimport HeaderList from 'flarum/forum/components/HeaderList';\nimport HeaderListItem from 'flarum/forum/components/HeaderListItem';\nexport default class FlagList extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n this.state = this.attrs.state;\n }\n view() {\n const flags = this.state.cache || [];\n return m(HeaderList, {\n className: \"FlagList\",\n title: app.translator.trans('flarum-flags.forum.flagged_posts.title'),\n hasItems: flags.length,\n loading: this.state.loading,\n emptyText: app.translator.trans('flarum-flags.forum.flagged_posts.empty_text')\n }, m(\"ul\", {\n className: \"HeaderListGroup-content\"\n }, !this.state.loading && flags.map(flag => {\n const post = flag.post();\n return m(\"li\", null, m(HeaderListItem, {\n className: \"Flag\",\n avatar: m(Avatar, {\n user: post.user() || null\n }),\n icon: \"fas fa-flag\",\n content: app.translator.trans('flarum-flags.forum.flagged_posts.item_text', {\n username: username(post.user()),\n em: m(\"em\", null),\n discussion: post.discussion().title()\n }),\n excerpt: post.contentPlain(),\n datetime: flag.createdAt(),\n href: app.route.post(post),\n onclick: e => {\n app.flags.index = post;\n e.redraw = false;\n }\n }));\n })));\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagList', FlagList);","import app from 'flarum/forum/app';\nimport HeaderDropdown from 'flarum/forum/components/HeaderDropdown';\nimport classList from 'flarum/common/utils/classList';\nimport FlagList from './FlagList';\nexport default class FlagsDropdown extends HeaderDropdown {\n static initAttrs(attrs) {\n attrs.className = classList('FlagsDropdown', attrs.className);\n attrs.label = attrs.label || app.translator.trans('flarum-flags.forum.flagged_posts.tooltip');\n attrs.icon = attrs.icon || 'fas fa-flag';\n super.initAttrs(attrs);\n }\n getContent() {\n return m(FlagList, {\n state: this.attrs.state\n });\n }\n goToRoute() {\n m.route.set(app.route('flags'));\n }\n getUnreadCount() {\n return app.flags.cache ? app.flags.cache.length : app.forum.attribute('flagCount');\n }\n getNewCount() {\n return app.session.user.attribute('newFlagCount');\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagsDropdown', FlagsDropdown);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/Post');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/humanTime');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Post');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Page');","import app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport FlagList from './FlagList';\n\n/**\n * The `FlagsPage` component shows the flags list. It is only\n * used on mobile devices where the flags dropdown is within the drawer.\n */\nexport default class FlagsPage extends Page {\n oninit(vnode) {\n super.oninit(vnode);\n app.history.push('flags');\n app.flags.load();\n this.bodyClass = 'App--flags';\n }\n view() {\n return m(\"div\", {\n className: \"FlagsPage\"\n }, m(FlagList, {\n state: app.flags\n }));\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagsPage', FlagsPage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import Model from 'flarum/common/Model';\nexport default class Flag extends Model {\n type() {\n return Model.attribute('type').call(this);\n }\n reason() {\n return Model.attribute('reason').call(this);\n }\n reasonDetail() {\n return Model.attribute('reasonDetail').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n post() {\n return Model.hasOne('post').call(this);\n }\n user() {\n return Model.hasOne('user').call(this);\n }\n}\nflarum.reg.add('flarum-flags', 'forum/models/Flag', Flag);","import Extend from 'flarum/common/extenders';\nimport Post from 'flarum/common/models/Post';\nimport FlagsPage from './components/FlagsPage';\nimport Flag from './models/Flag';\nexport default [new Extend.Routes() //\n.add('flags', '/flags', FlagsPage), new Extend.Store() //\n.add('flags', Flag), new Extend.Model(Post) //\n.hasMany('flags').attribute('canFlag')];","import app from 'flarum/forum/app';\nimport FlagListState from './states/FlagListState';\nimport addFlagControl from './addFlagControl';\nimport addFlagsDropdown from './addFlagsDropdown';\nimport addFlagsToPosts from './addFlagsToPosts';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-flags', () => {\n app.flags = new FlagListState(app);\n addFlagControl();\n addFlagsDropdown();\n addFlagsToPosts();\n});\nimport './forum';","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport PostControls from 'flarum/forum/utils/PostControls';\nimport Button from 'flarum/common/components/Button';\nimport FlagPostModal from './components/FlagPostModal';\nexport default function () {\n extend(PostControls, 'userControls', function (items, post) {\n if (post.isHidden() || post.contentType() !== 'comment' || !post.canFlag()) return;\n items.add('flag', m(Button, {\n icon: \"fas fa-flag\",\n onclick: () => app.modal.show(FlagPostModal, {\n post\n })\n }, app.translator.trans('flarum-flags.forum.post_controls.flag_button')));\n });\n}","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport HeaderSecondary from 'flarum/forum/components/HeaderSecondary';\nimport FlagsDropdown from './components/FlagsDropdown';\nexport default function () {\n extend(HeaderSecondary.prototype, 'items', function (items) {\n if (app.forum.attribute('canViewFlags')) {\n items.add('flags', m(FlagsDropdown, {\n state: app.flags\n }), 15);\n }\n });\n}","import { extend, override } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport Post from 'flarum/forum/components/Post';\nimport Button from 'flarum/common/components/Button';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport PostControls from 'flarum/forum/utils/PostControls';\nimport humanTime from 'flarum/common/utils/humanTime';\nexport default function () {\n extend(Post.prototype, 'elementAttrs', function (attrs) {\n if (this.attrs.post.flags().length) {\n attrs.className += ' Post--flagged';\n }\n });\n Post.prototype.dismissFlag = function (body) {\n const post = this.attrs.post;\n delete post.data.relationships.flags;\n this.subtree.invalidate();\n if (app.flags.cache) {\n app.flags.cache.some((flag, i) => {\n if (flag.post() === post) {\n app.flags.cache.splice(i, 1);\n if (app.flags.index === post) {\n let next = app.flags.cache[i];\n if (!next) next = app.flags.cache[0];\n if (next) {\n const nextPost = next.post();\n app.flags.index = nextPost;\n m.route.set(app.route.post(nextPost));\n }\n }\n return true;\n }\n });\n }\n return app.request({\n url: app.forum.attribute('apiUrl') + post.apiEndpoint() + '/flags',\n method: 'DELETE',\n body\n });\n };\n Post.prototype.flagActionItems = function () {\n const items = new ItemList();\n const controls = PostControls.destructiveControls(this.attrs.post);\n Object.keys(controls.items).forEach(k => {\n const attrs = controls.get(k).attrs;\n attrs.className = 'Button';\n extend(attrs, 'onclick', () => this.dismissFlag());\n });\n items.add('controls', m(\"div\", {\n className: \"ButtonGroup\"\n }, controls.toArray()));\n items.add('dismiss', m(Button, {\n className: \"Button\",\n icon: \"far fa-eye-slash\",\n onclick: this.dismissFlag.bind(this)\n }, app.translator.trans('flarum-flags.forum.post.dismiss_flag_button')), -100);\n return items;\n };\n override(Post.prototype, 'header', function (vdom) {\n const post = this.attrs.post;\n const flags = post.flags();\n if (!flags.length) return;\n if (post.isHidden()) this.revealContent = true;\n return m(\"div\", {\n className: \"Post-flagged\"\n }, m(\"div\", {\n className: \"Post-flagged-flags\"\n }, flags.map(flag => m(\"div\", {\n className: \"Post-flagged-flag\"\n }, this.flagReason(flag)))), m(\"div\", {\n className: \"Post-flagged-actions\"\n }, this.flagActionItems().toArray()));\n });\n Post.prototype.flagReason = function (flag) {\n if (flag.type() === 'user') {\n const user = flag.user();\n const reason = flag.reason() ? app.translator.trans(\"flarum-flags.forum.flag_post.reason_\".concat(flag.reason(), \"_label\")) : null;\n const detail = flag.reasonDetail();\n const time = humanTime(flag.createdAt());\n return [app.translator.trans(reason ? 'flarum-flags.forum.post.flagged_by_with_reason_text' : 'flarum-flags.forum.post.flagged_by_text', {\n time,\n user,\n reason\n }), !!detail && m(\"span\", {\n className: \"Post-flagged-detail\"\n }, detail)];\n }\n };\n}"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","_typeof","iterator","constructor","_defineProperty","arg","input","hint","prim","toPrimitive","undefined","res","TypeError","String","toPropertyKey","configurable","writable","FlagListState","app","this","load","cache","session","user","attribute","loading","m","redraw","store","find","then","flags","pushAttributes","newFlagCount","sort","b","createdAt","getTime","catch","add","FlagPostModal","oninit","vnode","super","success","reason","reasonDetail","className","title","content","onclick","hide","bind","flagReasons","toArray","type","disabled","items","guidelinesUrl","name","checked","placeholder","oninput","href","target","onsubmit","e","preventDefault","save","relationships","post","attrs","errorHandler","onerror","loaded","FlagList","state","view","hasItems","length","emptyText","map","flag","avatar","icon","username","em","discussion","excerpt","contentPlain","datetime","FlagsDropdown","static","label","initAttrs","getContent","goToRoute","route","set","getUnreadCount","getNewCount","FlagsPage","bodyClass","Flag","hasMany","extend","isHidden","contentType","canFlag","body","data","subtree","invalidate","i","next","nextPost","url","apiEndpoint","method","controls","keys","forEach","k","dismissFlag","override","vdom","revealContent","flagReason","flagActionItems","concat","detail","time"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,sDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA7C,SAASW,EAAQV,GAG9B,OAAOU,EAAU,mBAAqBL,QAAU,iBAAmBA,OAAOM,SAAW,SAAUX,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAO,mBAAqBK,QAAUL,EAAIY,cAAgBP,QAAUL,IAAQK,OAAOH,UAAY,gBAAkBF,CAC1H,EAAGU,EAAQV,EACb,CCPe,SAASa,EAAgBb,EAAKN,EAAKa,GAYhD,OAXAb,ECAa,SAAwBoB,GACrC,IAAIpB,ECFS,SAAsBqB,EAAOC,GAC1C,GAAuB,WAAnBN,EAAQK,IAAiC,OAAVA,EAAgB,OAAOA,EAC1D,IAAIE,EAAOF,EAAMV,OAAOa,aACxB,QAAaC,IAATF,EAAoB,CACtB,IAAIG,EAAMH,EAAKb,KAAKW,EAAOC,GAC3B,GAAqB,WAAjBN,EAAQU,GAAmB,OAAOA,EACtC,MAAM,IAAIC,UAAU,+CACtB,CACA,OAA4BC,OAAiBP,EAC/C,CDPYG,CAAYJ,EAAK,UAC3B,MAAwB,WAAjBJ,EAAQhB,GAAoBA,EAAM4B,OAAO5B,EAClD,CDHQ6B,CAAc7B,MACTM,EACTJ,OAAOC,eAAeG,EAAKN,EAAK,CAC9Ba,MAAOA,EACPT,YAAY,EACZ0B,cAAc,EACdC,UAAU,IAGZzB,EAAIN,GAAOa,EAENP,CACT,CGbe,MAAM0B,EACnBd,YAAYe,GACVd,EAAgBe,KAAM,WAAO,GAC7Bf,EAAgBe,KAAM,WAAW,GACjCf,EAAgBe,KAAM,QAAS,MAC/Bf,EAAgBe,KAAM,QAAS,MAC/BA,KAAKD,IAAMA,CACb,CAMAE,OACMD,KAAKE,QAAUF,KAAKD,IAAII,QAAQC,KAAKC,UAAU,kBAGnDL,KAAKM,SAAU,EACfC,EAAEC,SACFR,KAAKD,IAAIU,MAAMC,KAAK,SAASC,MAAKC,IAChCZ,KAAKD,IAAII,QAAQC,KAAKS,eAAe,CACnCC,aAAc,IAEhBd,KAAKE,MAAQU,EAAMG,MAAK,CAACpD,EAAGqD,IAAMA,EAAEC,YAAYC,UAAYvD,EAAEsD,YAAYC,WAAU,IACnFC,OAAM,SAAUR,MAAK,KACtBX,KAAKM,SAAU,EACfC,EAAEC,QAAQ,IAEd,EAEF5B,OAAOC,IAAIuC,IAAI,eAAgB,6BAA8BtB,GC/B7D,MAAM,EAA+BlB,OAAOC,IAAIV,IAAI,OAAQ,iBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,4B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,4B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,+B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,0B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,uB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,yB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,yB,aCO7C,MAAMkD,UAAsB,KACzCC,OAAOC,GACLC,MAAMF,OAAOC,GACbvB,KAAKyB,SAAU,EACfzB,KAAK0B,OAAS,IAAO,IACrB1B,KAAK2B,aAAe,IAAO,GAC7B,CACAC,YACE,MAAO,6BACT,CACAC,QACE,OAAO,qBAAqB,qCAC9B,CACAC,UACE,OAAI9B,KAAKyB,QACAlB,EAAE,MAAO,CACdqB,UAAW,cACVrB,EAAE,IAAM,CACTqB,UAAW,kBACVrB,EAAE,IAAK,CACRqB,UAAW,YACV,qBAAqB,sDAAuDrB,EAAE,MAAO,CACtFqB,UAAW,4BACVrB,EAAE,IAAQ,CACXqB,UAAW,uCACXG,QAAS/B,KAAKgC,KAAKC,KAAKjC,OACvB,qBAAqB,mDAEnBO,EAAE,MAAO,CACdqB,UAAW,cACVrB,EAAE,IAAM,CACTqB,UAAW,kBACVrB,EAAE,MAAO,CACVqB,UAAW,cACVrB,EAAE,MAAO,KAAMP,KAAKkC,cAAcC,YAAa5B,EAAE,MAAO,CACzDqB,UAAW,4BACVrB,EAAE,IAAQ,CACXqB,UAAW,uCACXQ,KAAM,SACN9B,QAASN,KAAKM,QACd+B,UAAWrC,KAAK0B,UACf,qBAAqB,iDAC1B,CACAQ,cACE,MAAMI,EAAQ,IAAI,KACZC,EAAgB,oBAAoB,iBA6D1C,OA5DAD,EAAMlB,IAAI,YAAab,EAAE,QAAS,CAChCqB,UAAW,YACVrB,EAAE,QAAS,CACZ6B,KAAM,QACNI,KAAM,SACNC,QAA2B,cAAlBzC,KAAK0B,SACd/C,MAAO,YACPoD,QAAS,IAAS,QAAS/B,KAAK0B,UAC9BnB,EAAE,SAAU,KAAM,qBAAqB,wDAAyD,qBAAqB,sDAAyE,cAAlBP,KAAK0B,UAA4BnB,EAAE,WAAY,CAC7NqB,UAAW,cACXc,YAAa,qBAAqB,2DAClC/D,MAAOqB,KAAK2B,eACZgB,QAAS,IAAS,QAAS3C,KAAK2B,iBAC7B,IACLW,EAAMlB,IAAI,gBAAiBb,EAAE,QAAS,CACpCqB,UAAW,YACVrB,EAAE,QAAS,CACZ6B,KAAM,QACNI,KAAM,SACNC,QAA2B,kBAAlBzC,KAAK0B,SACd/C,MAAO,gBACPoD,QAAS,IAAS,QAAS/B,KAAK0B,UAC9BnB,EAAE,SAAU,KAAM,qBAAqB,4DAA6D,qBAAqB,yDAA0D,CACrL5C,EAAG4E,EAAgBhC,EAAE,IAAK,CACxBqC,KAAML,EACNM,OAAQ,gBACLtD,IACe,kBAAlBS,KAAK0B,UAAgCnB,EAAE,WAAY,CACrDqB,UAAW,cACXc,YAAa,qBAAqB,2DAClC/D,MAAOqB,KAAK2B,eACZgB,QAAS,IAAS,QAAS3C,KAAK2B,iBAC7B,IACLW,EAAMlB,IAAI,OAAQb,EAAE,QAAS,CAC3BqB,UAAW,YACVrB,EAAE,QAAS,CACZ6B,KAAM,QACNI,KAAM,SACNC,QAA2B,SAAlBzC,KAAK0B,SACd/C,MAAO,OACPoD,QAAS,IAAS,QAAS/B,KAAK0B,UAC9BnB,EAAE,SAAU,KAAM,qBAAqB,mDAAoD,qBAAqB,iDAAoE,SAAlBP,KAAK0B,UAAuBnB,EAAE,WAAY,CAC9MqB,UAAW,cACXc,YAAa,qBAAqB,2DAClC/D,MAAOqB,KAAK2B,eACZgB,QAAS,IAAS,QAAS3C,KAAK2B,iBAC7B,IACLW,EAAMlB,IAAI,QAASb,EAAE,QAAS,CAC5BqB,UAAW,YACVrB,EAAE,QAAS,CACZ6B,KAAM,QACNI,KAAM,SACNC,QAA2B,UAAlBzC,KAAK0B,SACd/C,MAAO,QACPoD,QAAS,IAAS,QAAS/B,KAAK0B,UAC9BnB,EAAE,SAAU,KAAM,qBAAqB,oDAAuE,UAAlBP,KAAK0B,UAAwBnB,EAAE,WAAY,CACzIqB,UAAW,cACXjD,MAAOqB,KAAK2B,eACZgB,QAAS,IAAS,QAAS3C,KAAK2B,iBAC7B,IACEW,CACT,CACAQ,SAASC,GACPA,EAAEC,iBACFhD,KAAKM,SAAU,EACf,uBAAuB,SAAS2C,KAAK,CACnCvB,OAA0B,UAAlB1B,KAAK0B,SAAuB,KAAO1B,KAAK0B,SAChDC,aAAc3B,KAAK2B,eACnBuB,cAAe,CACb9C,KAAM,iBACN+C,KAAMnD,KAAKoD,MAAMD,OAElB,CACDE,aAAcrD,KAAKsD,QAAQrB,KAAKjC,QAC/BW,MAAK,IAAMX,KAAKyB,SAAU,IAAMN,OAAM,SAAUR,KAAKX,KAAKuD,OAAOtB,KAAKjC,MAC3E,EAEFpB,OAAOC,IAAIuC,IAAI,eAAgB,iCAAkCC,GClIjE,MAAM,EAA+BzC,OAAOC,IAAIV,IAAI,OAAQ,oC,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,mC,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,0B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,4B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,2B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,+B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,mC,aCM7C,MAAMqF,UAAiB,KACpClC,OAAOC,GACLC,MAAMF,OAAOC,GACbvB,KAAKyD,MAAQzD,KAAKoD,MAAMK,KAC1B,CACAC,OACE,MAAM9C,EAAQZ,KAAKyD,MAAMvD,OAAS,GAClC,OAAOK,EAAE,IAAY,CACnBqB,UAAW,WACXC,MAAO,qBAAqB,0CAC5B8B,SAAU/C,EAAMgD,OAChBtD,QAASN,KAAKyD,MAAMnD,QACpBuD,UAAW,qBAAqB,gDAC/BtD,EAAE,KAAM,CACTqB,UAAW,4BACT5B,KAAKyD,MAAMnD,SAAWM,EAAMkD,KAAIC,IAClC,MAAMZ,EAAOY,EAAKZ,OAClB,OAAO5C,EAAE,KAAM,KAAMA,EAAE,IAAgB,CACrCqB,UAAW,OACXoC,OAAQzD,EAAE,IAAQ,CAChBH,KAAM+C,EAAK/C,QAAU,OAEvB6D,KAAM,cACNnC,QAAS,qBAAqB,6CAA8C,CAC1EoC,SAAU,IAASf,EAAK/C,QACxB+D,GAAI5D,EAAE,KAAM,MACZ6D,WAAYjB,EAAKiB,aAAavC,UAEhCwC,QAASlB,EAAKmB,eACdC,SAAUR,EAAK9C,YACf2B,KAAM,eAAeO,GACrBpB,QAASgB,IACP,gBAAkBI,EAClBJ,EAAEvC,QAAS,CAAK,IAEjB,KAEP,EAEF5B,OAAOC,IAAIuC,IAAI,eAAgB,4BAA6BoC,GCzC7C,MAAMgB,UAAsB,KACzCC,iBAAiBrB,GACfA,EAAMxB,UAAY,IAAU,gBAAiBwB,EAAMxB,WACnDwB,EAAMsB,MAAQtB,EAAMsB,OAAS,qBAAqB,4CAClDtB,EAAMa,KAAOb,EAAMa,MAAQ,cAC3BzC,MAAMmD,UAAUvB,EAClB,CACAwB,aACE,OAAOrE,EAAEiD,EAAU,CACjBC,MAAOzD,KAAKoD,MAAMK,OAEtB,CACAoB,YACEtE,EAAEuE,MAAMC,IAAI,UAAU,SACxB,CACAC,iBACE,OAAO,gBAAkB,uBAAyB,oBAAoB,YACxE,CACAC,cACE,OAAO,2BAA2B,eACpC,EAEFrG,OAAOC,IAAIuC,IAAI,eAAgB,iCAAkCoD,GC1BjE,MAAM,EAA+B5F,OAAOC,IAAIV,IAAI,OAAQ,yB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,0B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,sB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,0B,aCQ7C,MAAM+G,UAAkB,KACrC5D,OAAOC,GACLC,MAAMF,OAAOC,GACb,iBAAiB,SACjB,iBACAvB,KAAKmF,UAAY,YACnB,CACAzB,OACE,OAAOnD,EAAE,MAAO,CACdqB,UAAW,aACVrB,EAAEiD,EAAU,CACbC,MAAO,YAEX,EAEF7E,OAAOC,IAAIuC,IAAI,eAAgB,6BAA8B8D,GCvB7D,MAAM,EAA+BtG,OAAOC,IAAIV,IAAI,OAAQ,gB,cCC7C,MAAMiH,WAAa,MAChChD,OACE,OAAO,eAAgB,QAAQ5D,KAAKwB,KACtC,CACA0B,SACE,OAAO,eAAgB,UAAUlD,KAAKwB,KACxC,CACA2B,eACE,OAAO,eAAgB,gBAAgBnD,KAAKwB,KAC9C,CACAiB,YACE,OAAO,eAAgB,YAAa,oBAAqBzC,KAAKwB,KAChE,CACAmD,OACE,OAAO,YAAa,QAAQ3E,KAAKwB,KACnC,CACAI,OACE,OAAO,YAAa,QAAQ5B,KAAKwB,KACnC,EAEFpB,OAAOC,IAAIuC,IAAI,eAAgB,oBAAqBgE,ICjBpD,WAAgB,IAAI,aACnBhE,IAAI,QAAS,SAAU8D,IAAY,IAAI,YACvC9D,IAAI,QAASgE,IAAO,IAAI,WAAa,KACrCC,QAAQ,SAAShF,UAAU,YCD5B,qBAAqB,gBAAgB,KACnC,UAAY,IAAIP,EAAc,MCD9B,IAAAwF,QAAO,IAAc,gBAAgB,SAAUhD,EAAOa,IAChDA,EAAKoC,YAAqC,YAAvBpC,EAAKqC,eAAgCrC,EAAKsC,WACjEnD,EAAMlB,IAAI,OAAQb,EAAE,IAAQ,CAC1B0D,KAAM,cACNlC,QAAS,IAAM,eAAeV,EAAe,CAC3C8B,UAED,qBAAqB,iDAC1B,KCTA,IAAAmC,QAAO,cAA2B,SAAS,SAAUhD,GAC/C,oBAAoB,iBACtBA,EAAMlB,IAAI,QAASb,EAAEiE,EAAe,CAClCf,MAAO,YACL,GAER,KCHA,IAAA6B,QAAO,cAAgB,gBAAgB,SAAUlC,GAC3CpD,KAAKoD,MAAMD,KAAKvC,QAAQgD,SAC1BR,EAAMxB,WAAa,iBAEvB,IACA,0BAA6B,SAAU8D,GACrC,MAAMvC,EAAOnD,KAAKoD,MAAMD,KAoBxB,cAnBOA,EAAKwC,KAAKzC,cAActC,MAC/BZ,KAAK4F,QAAQC,aACT,iBACF,sBAAqB,CAAC9B,EAAM+B,KAC1B,GAAI/B,EAAKZ,SAAWA,EAAM,CAExB,GADA,uBAAuB2C,EAAG,GACtB,kBAAoB3C,EAAM,CAC5B,IAAI4C,EAAO,gBAAgBD,GAE3B,GADKC,IAAMA,EAAO,oBACdA,EAAM,CACR,MAAMC,EAAWD,EAAK5C,OACtB,gBAAkB6C,EAClBzF,EAAEuE,MAAMC,IAAI,eAAeiB,GAC7B,CACF,CACA,OAAO,CACT,KAGG,YAAY,CACjBC,IAAK,oBAAoB,UAAY9C,EAAK+C,cAAgB,SAC1DC,OAAQ,SACRT,QAEJ,EACA,8BAAiC,WAC/B,MAAMpD,EAAQ,IAAI,KACZ8D,EAAW,wBAAiCpG,KAAKoD,MAAMD,MAc7D,OAbAnF,OAAOqI,KAAKD,EAASE,YAAYC,SAAQC,IACvC,MAAMpD,EAAQgD,EAASjI,IAAIqI,GAAGpD,MAC9BA,EAAMxB,UAAY,UAClB,IAAA0D,QAAOlC,EAAO,WAAW,IAAMpD,KAAKyG,eAAc,IAEpDnE,EAAMlB,IAAI,WAAYb,EAAE,MAAO,CAC7BqB,UAAW,eACVwE,EAASjE,YACZG,EAAMlB,IAAI,UAAWb,EAAE,IAAQ,CAC7BqB,UAAW,SACXqC,KAAM,mBACNlC,QAAS/B,KAAKyG,YAAYxE,KAAKjC,OAC9B,qBAAqB,iDAAkD,KACnEsC,CACT,GACA,IAAAoE,UAAS,cAAgB,UAAU,SAAUC,GAC3C,MAAMxD,EAAOnD,KAAKoD,MAAMD,KAClBvC,EAAQuC,EAAKvC,QACnB,GAAKA,EAAMgD,OAEX,OADIT,EAAKoC,aAAYvF,KAAK4G,eAAgB,GACnCrG,EAAE,MAAO,CACdqB,UAAW,gBACVrB,EAAE,MAAO,CACVqB,UAAW,sBACVhB,EAAMkD,KAAIC,GAAQxD,EAAE,MAAO,CAC5BqB,UAAW,qBACV5B,KAAK6G,WAAW9C,OAAUxD,EAAE,MAAO,CACpCqB,UAAW,wBACV5B,KAAK8G,kBAAkB3E,WAC5B,IACA,yBAA4B,SAAU4B,GACpC,GAAoB,SAAhBA,EAAK3B,OAAmB,CAC1B,MAAMhC,EAAO2D,EAAK3D,OACZsB,EAASqC,EAAKrC,SAAW,qBAAqB,uCAAuCqF,OAAOhD,EAAKrC,SAAU,WAAa,KACxHsF,EAASjD,EAAKpC,eACdsF,EAAO,IAAUlD,EAAK9C,aAC5B,MAAO,CAAC,qBAAqBS,EAAS,sDAAwD,0CAA2C,CACvIuF,OACA7G,OACAsB,aACIsF,GAAUzG,EAAE,OAAQ,CACxBqB,UAAW,uBACVoF,GACL,CACF,CH7EiB,G","sources":["webpack://@flarum/flags/webpack/bootstrap","webpack://@flarum/flags/webpack/runtime/compat get default export","webpack://@flarum/flags/webpack/runtime/define property getters","webpack://@flarum/flags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/flags/webpack/runtime/make namespace object","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/flags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/flags/./src/forum/states/FlagListState.tsx","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/utils/PostControls')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/withAttr')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/flags/./src/forum/components/FlagPostModal.js","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderSecondary')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderDropdown')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Avatar')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/helpers/username')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderList')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/HeaderListItem')\"","webpack://@flarum/flags/./src/forum/components/FlagList.tsx","webpack://@flarum/flags/./src/forum/components/FlagsDropdown.tsx","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'forum/components/Post')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/utils/humanTime')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/models/Post')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/components/Page')\"","webpack://@flarum/flags/./src/forum/components/FlagsPage.js","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/flags/./src/forum/models/Flag.ts","webpack://@flarum/flags/./src/forum/extend.ts","webpack://@flarum/flags/./src/forum/index.ts","webpack://@flarum/flags/./src/forum/addFlagControl.js","webpack://@flarum/flags/./src/forum/addFlagsDropdown.js","webpack://@flarum/flags/./src/forum/addFlagsToPosts.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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', 'forum/app');","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}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class FlagListState {\n constructor(app) {\n _defineProperty(this, \"app\", void 0);\n _defineProperty(this, \"loading\", false);\n _defineProperty(this, \"cache\", null);\n _defineProperty(this, \"index\", null);\n this.app = app;\n }\n\n /**\n * Load flags into the application's cache if they haven't already\n * been loaded.\n */\n load() {\n if (this.cache && !this.app.session.user.attribute('newFlagCount')) {\n return;\n }\n this.loading = true;\n m.redraw();\n this.app.store.find('flags').then(flags => {\n this.app.session.user.pushAttributes({\n newFlagCount: 0\n });\n this.cache = flags.sort((a, b) => b.createdAt().getTime() - a.createdAt().getTime());\n }).catch(() => {}).then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n}\nflarum.reg.add('flarum-flags', 'forum/states/FlagListState', FlagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/PostControls');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormModal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/Stream');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","import app from 'flarum/forum/app';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Form from 'flarum/common/components/Form';\nimport Button from 'flarum/common/components/Button';\nimport Stream from 'flarum/common/utils/Stream';\nimport withAttr from 'flarum/common/utils/withAttr';\nimport ItemList from 'flarum/common/utils/ItemList';\nexport default class FlagPostModal extends FormModal {\n oninit(vnode) {\n super.oninit(vnode);\n this.success = false;\n this.reason = Stream('');\n this.reasonDetail = Stream('');\n }\n className() {\n return 'FlagPostModal Modal--medium';\n }\n title() {\n return app.translator.trans('flarum-flags.forum.flag_post.title');\n }\n content() {\n if (this.success) {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"p\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-flags.forum.flag_post.confirmation_message')), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary Button--block\",\n onclick: this.hide.bind(this)\n }, app.translator.trans('flarum-flags.forum.flag_post.dismiss_button')))));\n }\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"div\", null, this.flagReasons().toArray())), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary Button--block\",\n type: \"submit\",\n loading: this.loading,\n disabled: !this.reason()\n }, app.translator.trans('flarum-flags.forum.flag_post.submit_button')))));\n }\n flagReasons() {\n const items = new ItemList();\n const guidelinesUrl = app.forum.attribute('guidelinesUrl');\n items.add('off-topic', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'off_topic',\n value: \"off_topic\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_label')), app.translator.trans('flarum-flags.forum.flag_post.reason_off_topic_text'), this.reason() === 'off_topic' && m(\"textarea\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder'),\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 70);\n items.add('inappropriate', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'inappropriate',\n value: \"inappropriate\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_label')), app.translator.trans('flarum-flags.forum.flag_post.reason_inappropriate_text', {\n a: guidelinesUrl ? m(\"a\", {\n href: guidelinesUrl,\n target: \"_blank\"\n }) : undefined\n }), this.reason() === 'inappropriate' && m(\"textarea\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder'),\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 60);\n items.add('spam', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'spam',\n value: \"spam\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_spam_label')), app.translator.trans('flarum-flags.forum.flag_post.reason_spam_text'), this.reason() === 'spam' && m(\"textarea\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-flags.forum.flag_post.reason_details_placeholder'),\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 50);\n items.add('other', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"reason\",\n checked: this.reason() === 'other',\n value: \"other\",\n onclick: withAttr('value', this.reason)\n }), m(\"strong\", null, app.translator.trans('flarum-flags.forum.flag_post.reason_other_label')), this.reason() === 'other' && m(\"textarea\", {\n className: \"FormControl\",\n value: this.reasonDetail(),\n oninput: withAttr('value', this.reasonDetail)\n })), 10);\n return items;\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n app.store.createRecord('flags').save({\n reason: this.reason() === 'other' ? null : this.reason(),\n reasonDetail: this.reasonDetail(),\n relationships: {\n user: app.session.user,\n post: this.attrs.post\n }\n }, {\n errorHandler: this.onerror.bind(this)\n }).then(() => this.success = true).catch(() => {}).then(this.loaded.bind(this));\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagPostModal', FlagPostModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderSecondary');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/classList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Component');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Avatar');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/username');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/HeaderListItem');","import app from 'flarum/forum/app';\nimport Component from 'flarum/common/Component';\nimport Avatar from 'flarum/common/components/Avatar';\nimport username from 'flarum/common/helpers/username';\nimport HeaderList from 'flarum/forum/components/HeaderList';\nimport HeaderListItem from 'flarum/forum/components/HeaderListItem';\nexport default class FlagList extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n this.state = this.attrs.state;\n }\n view() {\n const flags = this.state.cache || [];\n return m(HeaderList, {\n className: \"FlagList\",\n title: app.translator.trans('flarum-flags.forum.flagged_posts.title'),\n hasItems: flags.length,\n loading: this.state.loading,\n emptyText: app.translator.trans('flarum-flags.forum.flagged_posts.empty_text')\n }, m(\"ul\", {\n className: \"HeaderListGroup-content\"\n }, !this.state.loading && flags.map(flag => {\n const post = flag.post();\n return m(\"li\", null, m(HeaderListItem, {\n className: \"Flag\",\n avatar: m(Avatar, {\n user: post.user() || null\n }),\n icon: \"fas fa-flag\",\n content: app.translator.trans('flarum-flags.forum.flagged_posts.item_text', {\n username: username(post.user()),\n em: m(\"em\", null),\n discussion: post.discussion().title()\n }),\n excerpt: post.contentPlain(),\n datetime: flag.createdAt(),\n href: app.route.post(post),\n onclick: e => {\n app.flags.index = post;\n e.redraw = false;\n }\n }));\n })));\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagList', FlagList);","import app from 'flarum/forum/app';\nimport HeaderDropdown from 'flarum/forum/components/HeaderDropdown';\nimport classList from 'flarum/common/utils/classList';\nimport FlagList from './FlagList';\nexport default class FlagsDropdown extends HeaderDropdown {\n static initAttrs(attrs) {\n attrs.className = classList('FlagsDropdown', attrs.className);\n attrs.label = attrs.label || app.translator.trans('flarum-flags.forum.flagged_posts.tooltip');\n attrs.icon = attrs.icon || 'fas fa-flag';\n super.initAttrs(attrs);\n }\n getContent() {\n return m(FlagList, {\n state: this.attrs.state\n });\n }\n goToRoute() {\n m.route.set(app.route('flags'));\n }\n getUnreadCount() {\n return app.flags.cache ? app.flags.cache.length : app.forum.attribute('flagCount');\n }\n getNewCount() {\n return app.session.user.attribute('newFlagCount');\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagsDropdown', FlagsDropdown);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/Post');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/humanTime');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Post');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Page');","import app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport FlagList from './FlagList';\n\n/**\n * The `FlagsPage` component shows the flags list. It is only\n * used on mobile devices where the flags dropdown is within the drawer.\n */\nexport default class FlagsPage extends Page {\n oninit(vnode) {\n super.oninit(vnode);\n app.history.push('flags');\n app.flags.load();\n this.bodyClass = 'App--flags';\n }\n view() {\n return m(\"div\", {\n className: \"FlagsPage\"\n }, m(FlagList, {\n state: app.flags\n }));\n }\n}\nflarum.reg.add('flarum-flags', 'forum/components/FlagsPage', FlagsPage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import Model from 'flarum/common/Model';\nexport default class Flag extends Model {\n type() {\n return Model.attribute('type').call(this);\n }\n reason() {\n return Model.attribute('reason').call(this);\n }\n reasonDetail() {\n return Model.attribute('reasonDetail').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n post() {\n return Model.hasOne('post').call(this);\n }\n user() {\n return Model.hasOne('user').call(this);\n }\n}\nflarum.reg.add('flarum-flags', 'forum/models/Flag', Flag);","import Extend from 'flarum/common/extenders';\nimport Post from 'flarum/common/models/Post';\nimport FlagsPage from './components/FlagsPage';\nimport Flag from './models/Flag';\nexport default [new Extend.Routes() //\n.add('flags', '/flags', FlagsPage), new Extend.Store() //\n.add('flags', Flag), new Extend.Model(Post) //\n.hasMany('flags').attribute('canFlag')];","import app from 'flarum/forum/app';\nimport FlagListState from './states/FlagListState';\nimport addFlagControl from './addFlagControl';\nimport addFlagsDropdown from './addFlagsDropdown';\nimport addFlagsToPosts from './addFlagsToPosts';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-flags', () => {\n app.flags = new FlagListState(app);\n addFlagControl();\n addFlagsDropdown();\n addFlagsToPosts();\n});\nimport './forum';","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport PostControls from 'flarum/forum/utils/PostControls';\nimport Button from 'flarum/common/components/Button';\nimport FlagPostModal from './components/FlagPostModal';\nexport default function () {\n extend(PostControls, 'userControls', function (items, post) {\n if (post.isHidden() || post.contentType() !== 'comment' || !post.canFlag()) return;\n items.add('flag', m(Button, {\n icon: \"fas fa-flag\",\n onclick: () => app.modal.show(FlagPostModal, {\n post\n })\n }, app.translator.trans('flarum-flags.forum.post_controls.flag_button')));\n });\n}","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport HeaderSecondary from 'flarum/forum/components/HeaderSecondary';\nimport FlagsDropdown from './components/FlagsDropdown';\nexport default function () {\n extend(HeaderSecondary.prototype, 'items', function (items) {\n if (app.forum.attribute('canViewFlags')) {\n items.add('flags', m(FlagsDropdown, {\n state: app.flags\n }), 15);\n }\n });\n}","import { extend, override } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport Post from 'flarum/forum/components/Post';\nimport Button from 'flarum/common/components/Button';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport PostControls from 'flarum/forum/utils/PostControls';\nimport humanTime from 'flarum/common/utils/humanTime';\nexport default function () {\n extend(Post.prototype, 'elementAttrs', function (attrs) {\n if (this.attrs.post.flags().length) {\n attrs.className += ' Post--flagged';\n }\n });\n Post.prototype.dismissFlag = function (body) {\n const post = this.attrs.post;\n delete post.data.relationships.flags;\n this.subtree.invalidate();\n if (app.flags.cache) {\n app.flags.cache.some((flag, i) => {\n if (flag.post() === post) {\n app.flags.cache.splice(i, 1);\n if (app.flags.index === post) {\n let next = app.flags.cache[i];\n if (!next) next = app.flags.cache[0];\n if (next) {\n const nextPost = next.post();\n app.flags.index = nextPost;\n m.route.set(app.route.post(nextPost));\n }\n }\n return true;\n }\n });\n }\n return app.request({\n url: app.forum.attribute('apiUrl') + post.apiEndpoint() + '/flags',\n method: 'DELETE',\n body\n });\n };\n Post.prototype.flagActionItems = function () {\n const items = new ItemList();\n const controls = PostControls.destructiveControls(this.attrs.post);\n Object.keys(controls.toObject()).forEach(k => {\n const attrs = controls.get(k).attrs;\n attrs.className = 'Button';\n extend(attrs, 'onclick', () => this.dismissFlag());\n });\n items.add('controls', m(\"div\", {\n className: \"ButtonGroup\"\n }, controls.toArray()));\n items.add('dismiss', m(Button, {\n className: \"Button\",\n icon: \"far fa-eye-slash\",\n onclick: this.dismissFlag.bind(this)\n }, app.translator.trans('flarum-flags.forum.post.dismiss_flag_button')), -100);\n return items;\n };\n override(Post.prototype, 'header', function (vdom) {\n const post = this.attrs.post;\n const flags = post.flags();\n if (!flags.length) return;\n if (post.isHidden()) this.revealContent = true;\n return m(\"div\", {\n className: \"Post-flagged\"\n }, m(\"div\", {\n className: \"Post-flagged-flags\"\n }, flags.map(flag => m(\"div\", {\n className: \"Post-flagged-flag\"\n }, this.flagReason(flag)))), m(\"div\", {\n className: \"Post-flagged-actions\"\n }, this.flagActionItems().toArray()));\n });\n Post.prototype.flagReason = function (flag) {\n if (flag.type() === 'user') {\n const user = flag.user();\n const reason = flag.reason() ? app.translator.trans(\"flarum-flags.forum.flag_post.reason_\".concat(flag.reason(), \"_label\")) : null;\n const detail = flag.reasonDetail();\n const time = humanTime(flag.createdAt());\n return [app.translator.trans(reason ? 'flarum-flags.forum.post.flagged_by_with_reason_text' : 'flarum-flags.forum.post.flagged_by_text', {\n time,\n user,\n reason\n }), !!detail && m(\"span\", {\n className: \"Post-flagged-detail\"\n }, detail)];\n }\n };\n}"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","_typeof","iterator","constructor","_defineProperty","arg","input","hint","prim","toPrimitive","undefined","res","TypeError","String","toPropertyKey","configurable","writable","FlagListState","app","this","load","cache","session","user","attribute","loading","m","redraw","store","find","then","flags","pushAttributes","newFlagCount","sort","b","createdAt","getTime","catch","add","FlagPostModal","oninit","vnode","super","success","reason","reasonDetail","className","title","content","onclick","hide","bind","flagReasons","toArray","type","disabled","items","guidelinesUrl","name","checked","placeholder","oninput","href","target","onsubmit","e","preventDefault","save","relationships","post","attrs","errorHandler","onerror","loaded","FlagList","state","view","hasItems","length","emptyText","map","flag","avatar","icon","username","em","discussion","excerpt","contentPlain","datetime","FlagsDropdown","static","label","initAttrs","getContent","goToRoute","route","set","getUnreadCount","getNewCount","FlagsPage","bodyClass","Flag","hasMany","extend","isHidden","contentType","canFlag","body","data","subtree","invalidate","i","next","nextPost","url","apiEndpoint","method","controls","keys","toObject","forEach","k","dismissFlag","override","vdom","revealContent","flagReason","flagActionItems","concat","detail","time"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/flags/js/src/forum/addFlagsToPosts.js b/extensions/flags/js/src/forum/addFlagsToPosts.js index 018d6307f8..9002002c5a 100644 --- a/extensions/flags/js/src/forum/addFlagsToPosts.js +++ b/extensions/flags/js/src/forum/addFlagsToPosts.js @@ -54,7 +54,7 @@ export default function () { const controls = PostControls.destructiveControls(this.attrs.post); - Object.keys(controls.items).forEach((k) => { + Object.keys(controls.toObject()).forEach((k) => { const attrs = controls.get(k).attrs; attrs.className = 'Button'; diff --git a/extensions/flags/js/src/forum/components/FlagPostModal.js b/extensions/flags/js/src/forum/components/FlagPostModal.js index 204dad1dcd..560b99ec28 100644 --- a/extensions/flags/js/src/forum/components/FlagPostModal.js +++ b/extensions/flags/js/src/forum/components/FlagPostModal.js @@ -1,5 +1,5 @@ import app from 'flarum/forum/app'; -import Modal from 'flarum/common/components/Modal'; +import FormModal from 'flarum/common/components/FormModal'; import Form from 'flarum/common/components/Form'; import Button from 'flarum/common/components/Button'; @@ -7,7 +7,7 @@ import Stream from 'flarum/common/utils/Stream'; import withAttr from 'flarum/common/utils/withAttr'; import ItemList from 'flarum/common/utils/ItemList'; -export default class FlagPostModal extends Modal { +export default class FlagPostModal extends FormModal { oninit(vnode) { super.oninit(vnode); diff --git a/extensions/flags/src/Command/DeleteFlagsHandler.php b/extensions/flags/src/Command/DeleteFlagsHandler.php index ffb4e008e0..be90e591ab 100644 --- a/extensions/flags/src/Command/DeleteFlagsHandler.php +++ b/extensions/flags/src/Command/DeleteFlagsHandler.php @@ -10,7 +10,6 @@ namespace Flarum\Flags\Command; use Flarum\Flags\Event\Deleting; -use Flarum\Flags\Event\FlagsWillBeDeleted; use Flarum\Post\Post; use Flarum\Post\PostRepository; use Illuminate\Events\Dispatcher; @@ -31,9 +30,6 @@ public function handle(DeleteFlags $command): Post $actor->assertCan('viewFlags', $post->discussion); - // Deprecated, removed v2.0 - $this->events->dispatch(new FlagsWillBeDeleted($post, $actor, $command->data)); - foreach ($post->flags as $flag) { $this->events->dispatch(new Deleting($flag, $actor, $command->data)); } diff --git a/extensions/flags/src/Event/FlagsWillBeDeleted.php b/extensions/flags/src/Event/FlagsWillBeDeleted.php deleted file mode 100644 index d2f4265917..0000000000 --- a/extensions/flags/src/Event/FlagsWillBeDeleted.php +++ /dev/null @@ -1,27 +0,0 @@ -{var t={n:e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},d:(e,n)=>{for(var o in n)t.o(n,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:n[o]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};(()=>{"use strict";t.r(e),t.d(e,{extend:()=>Wt,filterGroupMentions:()=>Qt,filterPostMentions:()=>Jt,filterTagMentions:()=>Yt,filterUserMentions:()=>qt,postFilterGroupMentions:()=>Xt,postFilterPostMentions:()=>zt,postFilterTagMentions:()=>Kt,postFilterUserMentions:()=>Ot});const n=flarum.reg.get("core","common/extend"),o=flarum.reg.get("core","forum/app");var s=t.n(o);const r=flarum.reg.get("core","common/utils/string"),i=flarum.reg.get("core","common/helpers/textContrastClass");var a=t.n(i);const u=flarum.reg.get("core","forum/components/Post");var l=t.n(u);const c=flarum.reg.get("core","forum/components/CommentPost");var d=t.n(c);const f=flarum.reg.get("core","forum/components/PostPreview");var p=t.n(f);const h=flarum.reg.get("core","common/components/LoadingIndicator");var g=t.n(h);const b=flarum.reg.get("core","common/components/Link");var y=t.n(b);const v=flarum.reg.get("core","common/helpers/punctuateSeries");var w=t.n(v);const M=flarum.reg.get("core","common/helpers/username");var x=t.n(M);const P=flarum.reg.get("core","common/components/Icon");var C=t.n(P);const T=flarum.reg.get("core","common/components/Button");var A=t.n(T);const B=flarum.reg.get("core","common/components/Modal");var _=t.n(B);const N=flarum.reg.get("core","common/states/PaginatedListState");var S=t.n(N);class k extends(S()){constructor(t,e){void 0===e&&(e=1),t.page={...t.page||{},limit:10},super(t,e,10)}get type(){return"posts"}}flarum.reg.add("flarum-mentions","forum/state/MentionedByModalState",k);const F=flarum.reg.get("core","common/components/Form");var I=t.n(F);class L extends(_()){oninit(t){super.oninit(t),this.state=new k({filter:{mentionedPost:this.attrs.post.id()},sort:"number"}),this.state.refresh()}className(){return"MentionedByModal"}title(){return s().translator.trans("flarum-mentions.forum.mentioned_by.title")}content(){return m("[",null,m("div",{className:"Modal-body"},this.state.isInitialLoading()?m(g(),null):m("[",null,m("ul",{className:"MentionedByModal-list Dropdown-menu Dropdown-menu--inline Post-mentionedBy-preview"},this.state.getPages().map((t=>t.items.map((t=>m("li",{"data-number":t.number()},m(p(),{post:t,onclick:()=>s().modal.close()}))))))))),this.state.hasNext()&&m("div",{className:"Modal-footer"},m(I(),{className:"Form--centered"},m("div",{className:"Form-group"},m(A(),{className:"Button Button--block",onclick:()=>this.state.loadNext(),loading:this.state.isLoadingNext()},s().translator.trans("flarum-mentions.forum.mentioned_by.load_more_button"))))))}}flarum.reg.add("flarum-mentions","forum/components/MentionedByModal",L);const R=flarum.reg.get("core","forum/utils/DiscussionControls");var D=t.n(R);function U(t,e,n){return new Promise((o=>{const r=s().mentionFormats.mentionable("post").replacement(t)+" ";e.fields.content()||(e.body.attrs.originalContent=r);const i=e.editor.getSelectionRange()[0],a=e.fields.content().slice(0,i),m=0==a.length?0:3-a.match(/(\n{0,2})$/)[0].length;return e.editor.insertAtCursor(Array(m).join("\n")+(n?"> "+r+n.trim().replace(/\n/g,"\n> ")+"\n\n":r),!1),o(e)}))}function j(t,e){const n=flarum.reg.checkModule("core","forum/components/EditPostComposer");return n&&s().composer.bodyMatches(n)&&s().composer.body.attrs.post.discussion()===t.discussion()?U(t,s().composer,e):D().replyAction.call(t.discussion()).then((n=>U(t,n,e)))}flarum.reg.add("flarum-mentions","forum/utils/reply",j);const E=flarum.reg.get("core","common/Fragment");var H=t.n(E);class G extends(H()){constructor(t){super(),this.post=t}view(){return m("button",{className:"Button PostQuoteButton",onclick:()=>{j(this.post,this.content)}},m(C(),{name:"fas fa-quote-left",className:"Button-icon"}),s().translator.trans("flarum-mentions.forum.post.quote_button"))}show(t,e){const n=this.$().show(),o=n.offsetParent().offset();n.css("left",t-o.left).css("top",e-o.top),this.hideHandler=this.hide.bind(this),$(document).on("mouseup",this.hideHandler)}showStart(t,e){const n=this.$();this.show(t,$(window).scrollTop()+e-n.outerHeight()-5)}showEnd(t,e){const n=this.$();this.show(t-n.outerWidth(),$(window).scrollTop()+e+5)}hide(){this.$().hide(),$(document).off("mouseup",this.hideHandler)}}function W(t){const e=window.getSelection();if(!e.isCollapsed){const n=e.getRangeAt(0),o=n.commonAncestorContainer;if(t[0]===o||$.contains(t[0],o)){const t=$("
").append(n.cloneContents());return t.find("img.emoji").replaceWith((function(){return this.alt})),t.find("img").replaceWith((function(){return"![](".concat(this.src,")")})),t.find("a").replaceWith((function(){return"[".concat(this.innerText,"](").concat(this.href,")")})),t.text()}}return""}flarum.reg.add("flarum-mentions","forum/fragments/PostQuoteButton",G),flarum.reg.add("flarum-mentions","forum/utils/selectedText",W);const q=flarum.reg.get("core","common/components/TextEditorButton");var O=t.n(q);const J=flarum.reg.get("core","common/utils/KeyboardNavigatable");var z=t.n(J);function Q(t){return Q="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},Q(t)}function X(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==Q(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e);if("object"!==Q(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Q(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}class Y extends(H()){constructor(){super(...arguments),X(this,"items",[]),X(this,"active",!1),X(this,"index",0),X(this,"keyWasJustPressed",!1)}view(){return m("ul",{className:"Dropdown-menu MentionsDropdown"},this.items.map((t=>m("li",null,t))))}show(t,e){this.$().show().css({left:t+"px",top:e+"px"}),this.active=!0}hide(){this.$().hide(),this.active=!1}navigate(t){this.keyWasJustPressed=!0,this.setIndex(this.index+t,!0),clearTimeout(this.keyWasJustPressedTimeout),this.keyWasJustPressedTimeout=setTimeout((()=>this.keyWasJustPressed=!1),500)}complete(){this.$("li").eq(this.index).find("button").click()}setIndex(t,e){if(this.keyWasJustPressed&&!e)return;const n=this.$(),o=n.find("li");let s=t;s<0?s=o.length-1:s>=o.length&&(s=0),this.index=s;const r=o.removeClass("active").eq(s).addClass("active");if(e){const t=n.scrollTop(),e=n.offset().top,o=e+n.outerHeight(),s=r.offset().top,i=s+r.outerHeight();let a;so&&(a=t-o+i+parseInt(n.css("padding-bottom"),10)),void 0!==a&&n.stop(!0).animate({scrollTop:a},100)}}}flarum.reg.add("flarum-mentions","forum/fragments/AutocompleteDropdown",Y);const K=flarum.reg.get("core","common/Component");var V=t.n(K);const Z=flarum.reg.get("core","common/utils/classList");var tt=t.n(Z);class et extends(V()){view(t){const{mentionable:e,...n}=this.attrs,o=tt()("MentionsDropdownItem","PostPreview","MentionsDropdown-".concat(e.type()));return m("button",Object.assign({className:o},n),m("span",{className:"PostPreview-content"},t.children))}}flarum.reg.add("flarum-mentions","forum/components/MentionsDropdownItem",et);const nt=flarum.reg.get("core","common/utils/throttleDebounce");class ot{constructor(t){X(this,"mentionables",void 0),X(this,"results",{}),X(this,"typed",null),X(this,"searched",[]),X(this,"dropdownItemAttrs",{}),X(this,"search",(0,nt.throttle)(250,(async()=>{if(!this.typed||this.typed.length<=1)return;const t=this.typed.toLowerCase();if(!this.searched.includes(t)){for(const e of this.mentionables)for(const n of await e.search(t))this.results[e.type()].has(n.id())||this.results[e.type()].set(n.id(),n);return this.searched.push(t),Promise.resolve()}}))),this.dropdownItemAttrs=t}init(t){this.typed=null,this.mentionables=t;for(const t of this.mentionables)this.results[t.type()]=new Map(t.initialResults().map((t=>[t.id(),t])))}matches(t,e){var n;return t.matches(e,(null==(n=this.typed)?void 0:n.toLowerCase())||"")}makeSuggestion(t,e){const n=t.suggestion(e,this.typed),o=t.replacement(e),{onclick:s,...r}=this.dropdownItemAttrs;return m(et,Object.assign({mentionable:t,onclick:()=>s(o)},r),n)}buildSuggestions(){const t=[];for(const e of this.mentionables){if(!e.enabled())continue;let n=Array.from(this.results[e.type()].values()).filter((t=>this.matches(e,t)));const o=e.maxStoreMatchedResults();o&&(n=n.splice(0,o));for(const o of n){const n=this.makeSuggestion(e,o);t.push(n)}}return t}}flarum.reg.add("flarum-mentions","forum/mentionables/MentionableModels",ot);const st=flarum.reg.get("core","forum/components/Notification");var rt=t.n(st);class it extends(rt()){icon(){return"fas fa-reply"}href(){const t=this.attrs.notification,e=t.subject(),n=t.content();return s().route.discussion(e.discussion(),n&&n.replyNumber)}content(){const t=this.attrs.notification.fromUser();return s().translator.trans("flarum-mentions.forum.notifications.post_mentioned_text",{user:t,count:1})}excerpt(){return(0,r.truncate)(this.attrs.notification.subject().contentPlain()||"",200)}}flarum.reg.add("flarum-mentions","forum/components/PostMentionedNotification",it);class at extends(rt()){icon(){return"fas fa-at"}href(){const t=this.attrs.notification.subject();return s().route.discussion(t.discussion(),t.number())}content(){const t=this.attrs.notification.fromUser();return s().translator.trans("flarum-mentions.forum.notifications.user_mentioned_text",{user:t})}excerpt(){return(0,r.truncate)(this.attrs.notification.subject().contentPlain(),200)}}flarum.reg.add("flarum-mentions","forum/components/UserMentionedNotification",at);class mt extends(rt()){icon(){return"fas fa-at"}href(){const t=this.attrs.notification.subject();return s().route.discussion(t.discussion(),t.number())}content(){const t=this.attrs.notification.fromUser();return s().translator.trans("flarum-mentions.forum.notifications.group_mentioned_text",{user:t})}excerpt(){return(0,r.truncate)(this.attrs.notification.subject().contentPlain(),200)}}flarum.reg.add("flarum-mentions","forum/components/GroupMentionedNotification",mt);class ut{constructor(){X(this,"instances",void 0),X(this,"mentionables",void 0),X(this,"extendable",void 0)}makeMentionables(){var t;return null!=(t=this.instances)?t:this.instances=this.mentionables.map((t=>new t(this)))}getMentionable(t){var e;return null!=(e=this.makeMentionables().find((e=>e.type()===t)))?e:null}extend(t){if(!this.extendable)throw new Error("This mention format does not allow extending.");this.mentionables.push(t)}}flarum.reg.add("flarum-mentions","forum/mentionables/formats/MentionFormat",ut);const lt=flarum.reg.get("core","common/components/Avatar");var ct=t.n(lt);const dt=flarum.reg.get("core","common/helpers/highlight");var ft=t.n(dt);class pt{constructor(t){X(this,"format",void 0),this.format=t}}flarum.reg.add("flarum-mentions","forum/mentionables/MentionableModel",pt);const ht=flarum.reg.get("core","common/utils/extractText");var gt=t.n(ht);const bt=()=>gt()(s().translator.trans("core.lib.username.deleted_text"));function yt(t,e){return void 0===e&&(e=!0),t?((e?t.displayName():t.username())||bt()).replace(/"#[a-z]{0,3}[0-9]+/,"_"):bt().replace(/"#[a-z]{0,3}[0-9]+/,"_")}flarum.reg.add("flarum-mentions","forum/utils/getCleanDisplayName",yt);class vt extends pt{type(){return"user"}initialResults(){return Array.from(s().store.all("users"))}replacement(t){if(s().forum.attribute("allowUsernameMentionFormat")){const e=yt(t,!1);return this.format.format(e)}const e=yt(t);return this.format.format(e,"",t.id())}suggestion(t,e){const n=x()(t,(t=>ft()(t,e)));return m("[",null,m(ct(),{user:t}),n)}matches(t,e){return!!e&&[t.username(),t.displayName()].some((t=>t.toLowerCase().substr(0,e.length)===e))}maxStoreMatchedResults(){return null}async search(t){return await s().store.find("users",{filter:{q:t},page:{limit:5}})}enabled(){return!0}}flarum.reg.add("flarum-mentions","forum/mentionables/UserMention",vt);class wt extends pt{type(){return"post"}initialResults(){const t=flarum.reg.checkModule("core","forum/components/EditPostComposer"),e=flarum.reg.checkModule("core","forum/components/ReplyComposer");if(!(e&&s().composer.bodyMatches(e)||t&&s().composer.bodyMatches(t)))return[];const n=s().composer.body.attrs,o=n.post;return(o&&o.discussion()||n.discussion).posts().filter((t=>t&&"comment"===t.contentType()&&(!o||t.number()e.createdAt().getTime()-t.createdAt().getTime()))}replacement(t){const e=yt(t.user());return this.format.format(e,"p",t.id())}suggestion(t,e){var n;const o=t.user()||null,i=x()(o,(t=>ft()(t,e)));return m("[",null,m(ct(),{user:o}),i,[s().translator.trans("flarum-mentions.forum.composer.reply_to_post_text",{number:t.number()})," — ",(0,r.truncate)(null!=(n=t.contentPlain())?n:"",200)])}matches(t,e){const n=t.user(),o=s().mentionFormats.mentionable("user");return!e||n&&o.matches(n,e)}maxStoreMatchedResults(){return 5}search(t){return Promise.resolve([])}enabled(){return!0}}flarum.reg.add("flarum-mentions","forum/mentionables/PostMention",wt);const Mt=flarum.reg.get("core","common/models/Group");var xt=t.n(Mt);const Pt=flarum.reg.get("core","common/components/Badge");var Ct=t.n(Pt);class Tt extends pt{type(){return"group"}initialResults(){return Array.from(s().store.all("groups").filter((t=>t.id()!==xt().GUEST_ID&&t.id()!==xt().MEMBER_ID)))}replacement(t){return this.format.format(t.namePlural(),"g",t.id())}suggestion(t,e){let n=t.namePlural();return e&&(n=ft()(n,e)),m("[",null,m(Ct(),{className:"Avatar Badge Badge--group--".concat(t.id()," Badge-icon"),color:t.color(),type:"group",icon:t.icon()}),m("span",{className:"username"},n))}matches(t,e){return!!e&&[t.namePlural().toLowerCase(),t.nameSingular().toLowerCase()].some((t=>t.toLowerCase().substr(0,e.length)===e))}maxStoreMatchedResults(){return null}search(t){return Promise.resolve([])}enabled(){var t,e,n;return null!=(t=null==(e=s().session)||null==(n=e.user)?void 0:n.canMentionGroups())&&t}}flarum.reg.add("flarum-mentions","forum/mentionables/GroupMention",Tt);class At extends ut{constructor(){super(...arguments),X(this,"mentionables",[vt,wt,Tt]),X(this,"extendable",!0)}trigger(){return"@"}queryFromTyped(t){const e=t.match(/^["“]?((?:(?!"#).)+)$/);return e?e[1]:null}format(t,e,n){return void 0===e&&(e=""),void 0===n&&(n=null),{simple:"@".concat(t),safe:'@"'.concat(t,'"#').concat(e).concat(n)}[n?"safe":"simple"]}}flarum.reg.add("flarum-mentions","forum/mentionables/formats/AtMentionFormat",At);class Bt extends pt{type(){return"tag"}initialResults(){return Array.from(s().store.all("tags"))}replacement(t){return this.format.format(t.slug())}matches(t,e){return!!e&&[t.name().toLowerCase()].some((t=>t.toLowerCase().substr(0,e.length)===e))}maxStoreMatchedResults(){return null}async search(t){return await s().store.find("tags",{filter:{q:t},page:{limit:5}})}suggestion(t,e){let n=t.name();return e&&(n=ft()(n,e)),m("[",null,m(Ct(),{className:"Avatar",icon:t.icon(),color:t.color(),type:"tag"}),m("span",{className:"username"},n))}enabled(){return"flarum-tags"in flarum.extensions}}flarum.reg.add("flarum-mentions","forum/mentionables/TagMention",Bt);class $t extends ut{constructor(){super(...arguments),X(this,"mentionables",[Bt]),X(this,"extendable",!0)}trigger(){return"#"}queryFromTyped(t){const e=t.match(/^[-_\p{L}\p{N}\p{M}]+$/giu);return e?e[0]:null}format(t){return"#".concat(t)}}flarum.reg.add("flarum-mentions","forum/mentionables/formats/HashMentionFormat",$t);class _t{constructor(){X(this,"formats",[new At,new $t])}get(t){var e;return null!=(e=this.formats.find((e=>e.trigger()===t)))?e:null}mentionable(t){for(const e of this.formats){const n=e.getMentionable(t);if(n)return n}return null}extend(t){this.formats.push(new t)}}flarum.reg.add("flarum-mentions","forum/mentionables/formats/MentionFormats",_t);const Nt=flarum.reg.get("core","forum/components/UserPage");var St=t.n(Nt);const kt=flarum.reg.get("core","common/components/LinkButton");var Ft=t.n(kt);const It=flarum.reg.get("core","common/extenders");var Lt=t.n(It);const Rt=flarum.reg.get("core","common/models/Post");var Dt=t.n(Rt);const Ut=flarum.reg.get("core","common/models/User");var jt=t.n(Ut);const Et=flarum.reg.get("core","forum/components/PostsUserPage");var Ht=t.n(Et);class Gt extends(Ht()){loadResults(t){return s().store.find("posts",{filter:{type:"comment",mentioned:this.user.id()},page:{offset:t,limit:this.loadLimit},sort:"-createdAt"})}}flarum.reg.add("flarum-mentions","forum/components/MentionsUserPage",Gt);const Wt=[(new(Lt().Routes)).add("user.mentions","/u/:username/mentions",Gt),new(Lt().Model)(Dt()).hasMany("mentionedBy").attribute("mentionedByCount"),new(Lt().Model)(jt()).attribute("canMentionGroups")];function qt(t){let e;if(s().forum.attribute("allowUsernameMentionFormat")&&t.hasAttribute("username")?e=s().store.getBy("users","username",t.getAttribute("username")):t.hasAttribute("id")&&(e=s().store.getById("users",t.getAttribute("id"))),e)return t.setAttribute("id",e.id()),t.setAttribute("slug",e.slug()),t.setAttribute("displayname",gt()(x()(e))),!0;t.invalidate()}function Ot(t){t.setAttribute("deleted",!1)}function Jt(t){const e=s().store.getById("posts",t.getAttribute("id"));if(e)return t.setAttribute("discussionid",e.discussion().id()),t.setAttribute("number",e.number()),t.setAttribute("displayname",gt()(x()(e.user()))),!0}function zt(t){t.setAttribute("deleted",!1)}function Qt(t){var e,n;if(null!=(e=s().session)&&null!=(n=e.user)&&n.canMentionGroups()){const e=s().store.getById("groups",t.getAttribute("id"));if(e)return t.setAttribute("groupname",gt()(e.namePlural())),!0}t.invalidate()}function Xt(t){var e,n;if(null!=(e=s().session)&&null!=(n=e.user)&&n.canMentionGroups()){const e=s().store.getById("groups",t.getAttribute("id"));t.setAttribute("color",e.color()),t.setAttribute("icon",e.icon()),t.setAttribute("deleted",!1)}}function Yt(t){if("flarum-tags"in flarum.extensions){const e=s().store.getBy("tags","slug",t.getAttribute("slug"));if(e)return t.setAttribute("id",e.id()),t.setAttribute("tagname",e.name()),!0}t.invalidate()}function Kt(t){if("flarum-tags"in flarum.extensions){const e=s().store.getBy("tags","slug",t.getAttribute("slug"));t.setAttribute("icon",e.icon()),t.setAttribute("color",e.color()),t.setAttribute("deleted",!1)}}flarum.reg.add("flarum-mentions","forum/utils/textFormatter",{filterUserMentions:qt,postFilterUserMentions:Ot,filterPostMentions:Jt,postFilterPostMentions:zt,filterGroupMentions:Qt,postFilterGroupMentions:Xt,filterTagMentions:Yt,postFilterTagMentions:Kt}),flarum.reg.add("flarum-mentions","forum/utils/getMentionText",(function(t,e,n){if(void 0!==t&&void 0===e)return s().mentionables.get("user").replacement(t);if(void 0!==t&&void 0!==e)return s().mentionables.get("post").replacement(s().store.getById("posts",e));if(void 0!==n)return s().mentionables.get("group").replacement(n);throw"No parameters were passed"})),flarum.reg.add("flarum-mentions","forum/extenders/Mentionables",class{constructor(){X(this,"formats",[]),X(this,"mentionables",{})}format(t){return this.formats.push(t),this}mentionable(t,e){return this.mentionables[t]||(this.mentionables[t]=[]),this.mentionables[t].push(e),this}extend(t){for(const e of this.formats)t.mentionFormats.extend(e);for(const e in this.mentionables){const n=t.mentionFormats.get(e);if(n)for(const t of this.mentionables[e])n.extend(t)}}}),s().mentionFormats=new _t,s().initializers.add("flarum-mentions",(function(){!function(){function t(){const t=this.attrs.post.contentHtml();if(t===this.oldPostContentHtml||this.isEditing())return;this.oldPostContentHtml=t;const e=this.attrs.post,n=this.$();this.$().on("click",".UserMention:not(.UserMention--deleted), .PostMention:not(.PostMention--deleted), .TagMention:not(.TagMention--deleted)",(function(t){m.route.set(this.getAttribute("href")),t.preventDefault()})),this.$(".PostMention:not(.PostMention--deleted)").each((function(){const t=$(this),o=t.data("id");let s;const r=$('
'),e=new Y;(0,n.extend)("flarum/common/components/TextEditor","onbuild",(function(){const n=this.$(".TextEditor-editor").wrap('
');this.navigator=new(z()),this.navigator.when((()=>e.active)).onUp((()=>e.navigate(-1))).onDown((()=>e.navigate(1))).onSelect(e.complete.bind(e)).onCancel(e.hide.bind(e)).bindTo(n),n.after(t)})),(0,n.extend)("flarum/common/components/TextEditor","buildEditorParams",(function(n){let o,r,i,a=new ot({onmouseenter:function(){e.setIndex($(this).parent().index())},onclick:t=>{this.attrs.composer.editor.replaceBeforeCursor(r-1,t+" "),e.hide()}});n.inputListeners.push((()=>{const n=this.attrs.composer.editor.getSelectionRange(),u=n[0];if(n[1]-u>0)return;const l=this.attrs.composer.editor.getLastNChars(30);r=0;let c=null;for(let t=l.length-1;t>=0;t--){const e=l.substr(t,1);if(c=s().mentionFormats.get(e),c&&(0===t||/\s/.test(l.substr(t-1,1)))){o=t+1,r=u-l.length+t+1,a.init(c.makeMentionables());break}}if(e.hide(),e.active=!1,r){var d;const n=l.substring(o).toLowerCase();if(i=c.queryFromTyped(n),!i)return;a.typed=i;const s=()=>{const n=a.buildSuggestions();if(n.length){e.items=n,m.render(t[0],e.render()),e.show();const o=this.attrs.composer.editor.getCaretCoordinates(r),s=e.$().outerWidth(),i=e.$().outerHeight(),a=e.$().offsetParent();let u=o.left,l=o.top+15;l+i>a.height()&&(l=o.top-i-15),u+s>a.width()&&(u=a.width()-s),l=Math.max(-(a.offset().top-$(document).scrollTop()),l),u=Math.max(-a.offset().left,u),e.show(u,l)}else e.active=!1,e.hide()};e.active=!0,s(),e.setIndex(0),e.$().scrollTop(0),null==(d=a.search())||d.then(s)}}))})),(0,n.extend)("flarum/common/components/TextEditor","toolbarItems",(function(t){t.add("mention",m(O(),{onclick:()=>this.attrs.composer.editor.insertAtCursor(" @"),icon:"fas fa-at"},s().translator.trans("flarum-mentions.forum.composer.mention_tooltip")))}))}(),s().notificationComponents.postMentioned=it,s().notificationComponents.userMentioned=at,s().notificationComponents.groupMentioned=mt,(0,n.extend)("flarum/forum/components/NotificationGrid","notificationTypes",(function(t){t.add("postMentioned",{name:"postMentioned",icon:"fas fa-reply",label:s().translator.trans("flarum-mentions.forum.settings.notify_post_mentioned_label")}),t.add("userMentioned",{name:"userMentioned",icon:"fas fa-at",label:s().translator.trans("flarum-mentions.forum.settings.notify_user_mentioned_label")}),t.add("groupMentioned",{name:"groupMentioned",icon:"fas fa-at",label:s().translator.trans("flarum-mentions.forum.settings.notify_group_mentioned_label")})})),(0,n.extend)(St().prototype,"navItems",(function(t){const e=this.user;t.add("mentions",m(Ft(),{href:s().route("user.mentions",{username:e.slug()}),name:"mentions",icon:"fas fa-at"},s().translator.trans("flarum-mentions.forum.user.mentions_link")),80)})),r.getPlainContent.removeSelectors.push("a.PostMention"),(0,n.extend)(l().prototype,"oncreate",(function(){this.$(".GroupMention--colored, .TagMention--colored").each((function(){this.classList.add(a()(getComputedStyle(this).getPropertyValue("--color")))}))}))}))})(),module.exports=e})(); +(()=>{var t={n:e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},d:(e,n)=>{for(var o in n)t.o(n,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:n[o]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};(()=>{"use strict";t.r(e),t.d(e,{extend:()=>Wt,filterGroupMentions:()=>Qt,filterPostMentions:()=>Jt,filterTagMentions:()=>Yt,filterUserMentions:()=>qt,postFilterGroupMentions:()=>Xt,postFilterPostMentions:()=>zt,postFilterTagMentions:()=>Kt,postFilterUserMentions:()=>Ot});const n=flarum.reg.get("core","common/extend"),o=flarum.reg.get("core","forum/app");var s=t.n(o);const r=flarum.reg.get("core","common/utils/string"),i=flarum.reg.get("core","common/helpers/textContrastClass");var a=t.n(i);const u=flarum.reg.get("core","forum/components/Post");var l=t.n(u);const c=flarum.reg.get("core","forum/components/CommentPost");var d=t.n(c);const f=flarum.reg.get("core","forum/components/PostPreview");var p=t.n(f);const h=flarum.reg.get("core","common/components/LoadingIndicator");var g=t.n(h);const b=flarum.reg.get("core","common/components/Link");var y=t.n(b);const v=flarum.reg.get("core","common/helpers/punctuateSeries");var w=t.n(v);const M=flarum.reg.get("core","common/helpers/username");var x=t.n(M);const P=flarum.reg.get("core","common/components/Icon");var C=t.n(P);const T=flarum.reg.get("core","common/components/Button");var A=t.n(T);const B=flarum.reg.get("core","common/components/Modal");var D=t.n(B);const _=flarum.reg.get("core","common/states/PaginatedListState");var N=t.n(_);class S extends(N()){constructor(t,e){void 0===e&&(e=1),t.page={...t.page||{},limit:10},super(t,e,10)}get type(){return"posts"}}flarum.reg.add("flarum-mentions","forum/state/MentionedByModalState",S);const k=flarum.reg.get("core","common/components/Form");var F=t.n(k);class I extends(D()){oninit(t){super.oninit(t),this.state=new S({filter:{mentionedPost:this.attrs.post.id()},sort:"number"}),this.state.refresh()}className(){return"MentionedByModal"}title(){return s().translator.trans("flarum-mentions.forum.mentioned_by.title")}content(){return m("[",null,m("div",{className:"Modal-body"},this.state.isInitialLoading()?m(g(),null):m("[",null,m("ul",{className:"MentionedByModal-list Dropdown-menu Dropdown-menu--inline Post-mentionedBy-preview"},this.state.getPages().map((t=>t.items.map((t=>m("li",{"data-number":t.number()},m(p(),{post:t,onclick:()=>s().modal.close()}))))))))),this.state.hasNext()&&m("div",{className:"Modal-footer"},m(F(),{className:"Form--centered"},m("div",{className:"Form-group"},m(A(),{className:"Button Button--block",onclick:()=>this.state.loadNext(),loading:this.state.isLoadingNext()},s().translator.trans("flarum-mentions.forum.mentioned_by.load_more_button"))))))}}flarum.reg.add("flarum-mentions","forum/components/MentionedByModal",I);const L=flarum.reg.get("core","forum/utils/DiscussionControls");var R=t.n(L);function U(t,e,n){return new Promise((o=>{const r=s().mentionFormats.mentionable("post").replacement(t)+" ";e.fields.content()||(e.body.attrs.originalContent=r);const i=e.editor.getSelectionRange()[0],a=e.fields.content().slice(0,i),m=0==a.length?0:3-a.match(/(\n{0,2})$/)[0].length;return e.editor.insertAtCursor(Array(m).join("\n")+(n?"> "+r+n.trim().replace(/\n/g,"\n> ")+"\n\n":r),!1),o(e)}))}function j(t,e){const n=flarum.reg.checkModule("core","forum/components/EditPostComposer");return n&&s().composer.bodyMatches(n)&&s().composer.body.attrs.post.discussion()===t.discussion()?U(t,s().composer,e):R().replyAction.call(t.discussion()).then((n=>U(t,n,e)))}flarum.reg.add("flarum-mentions","forum/utils/reply",j);const E=flarum.reg.get("core","common/Fragment");var H=t.n(E);class G extends(H()){constructor(t){super(),this.post=t}view(){return m("button",{className:"Button PostQuoteButton",onclick:()=>{j(this.post,this.content)}},m(C(),{name:"fas fa-quote-left",className:"Button-icon"}),s().translator.trans("flarum-mentions.forum.post.quote_button"))}show(t,e){const n=this.$().show(),o=n.offsetParent().offset();n.css("left",t-o.left).css("top",e-o.top),this.hideHandler=this.hide.bind(this),$(document).on("mouseup",this.hideHandler)}showStart(t,e){const n=this.$();this.show(t,$(window).scrollTop()+e-n.outerHeight()-5)}showEnd(t,e){const n=this.$();this.show(t-n.outerWidth(),$(window).scrollTop()+e+5)}hide(){this.$().hide(),$(document).off("mouseup",this.hideHandler)}}function W(t){const e=window.getSelection();if(!e.isCollapsed){const n=e.getRangeAt(0),o=n.commonAncestorContainer;if(t[0]===o||$.contains(t[0],o)){const t=$("
").append(n.cloneContents());return t.find("img.emoji").replaceWith((function(){return this.alt})),t.find("img").replaceWith((function(){return"![](".concat(this.src,")")})),t.find("a").replaceWith((function(){return"[".concat(this.innerText,"](").concat(this.href,")")})),t.text()}}return""}flarum.reg.add("flarum-mentions","forum/fragments/PostQuoteButton",G),flarum.reg.add("flarum-mentions","forum/utils/selectedText",W);const q=flarum.reg.get("core","common/components/TextEditorButton");var O=t.n(q);const J=flarum.reg.get("core","common/utils/KeyboardNavigatable");var z=t.n(J);function Q(t){return Q="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},Q(t)}function X(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==Q(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e);if("object"!==Q(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===Q(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}class Y extends(H()){constructor(){super(...arguments),X(this,"items",[]),X(this,"active",!1),X(this,"index",0),X(this,"keyWasJustPressed",!1)}view(){return m("ul",{className:"Dropdown-menu MentionsDropdown"},this.items.map((t=>m("li",null,t))))}show(t,e){this.$().show().css({left:t+"px",top:e+"px"}),this.active=!0}hide(){this.$().hide(),this.active=!1}navigate(t){this.keyWasJustPressed=!0,this.setIndex(this.index+t,!0),clearTimeout(this.keyWasJustPressedTimeout),this.keyWasJustPressedTimeout=setTimeout((()=>this.keyWasJustPressed=!1),500)}complete(){this.$("li").eq(this.index).find("button").click()}setIndex(t,e){if(this.keyWasJustPressed&&!e)return;const n=this.$(),o=n.find("li");let s=t;s<0?s=o.length-1:s>=o.length&&(s=0),this.index=s;const r=o.removeClass("active").eq(s).addClass("active");if(e){const t=n.scrollTop(),e=n.offset().top,o=e+n.outerHeight(),s=r.offset().top,i=s+r.outerHeight();let a;so&&(a=t-o+i+parseInt(n.css("padding-bottom"),10)),void 0!==a&&n.stop(!0).animate({scrollTop:a},100)}}}flarum.reg.add("flarum-mentions","forum/fragments/AutocompleteDropdown",Y);const K=flarum.reg.get("core","common/Component");var V=t.n(K);const Z=flarum.reg.get("core","common/utils/classList");var tt=t.n(Z);class et extends(V()){view(t){const{mentionable:e,...n}=this.attrs,o=tt()("MentionsDropdownItem","PostPreview","MentionsDropdown-".concat(e.type()));return m("button",Object.assign({className:o},n),m("span",{className:"PostPreview-content"},t.children))}}flarum.reg.add("flarum-mentions","forum/components/MentionsDropdownItem",et);const nt=flarum.reg.get("core","common/utils/throttleDebounce");class ot{constructor(t){X(this,"mentionables",void 0),X(this,"results",{}),X(this,"typed",null),X(this,"searched",[]),X(this,"dropdownItemAttrs",{}),X(this,"search",(0,nt.throttle)(250,(async()=>{if(!this.typed||this.typed.length<=1)return;const t=this.typed.toLowerCase();if(!this.searched.includes(t)){for(const e of this.mentionables)for(const n of await e.search(t))this.results[e.type()].has(n.id())||this.results[e.type()].set(n.id(),n);return this.searched.push(t),Promise.resolve()}}))),this.dropdownItemAttrs=t}init(t){this.typed=null,this.mentionables=t;for(const t of this.mentionables)this.results[t.type()]=new Map(t.initialResults().map((t=>[t.id(),t])))}matches(t,e){var n;return t.matches(e,(null==(n=this.typed)?void 0:n.toLowerCase())||"")}makeSuggestion(t,e){const n=t.suggestion(e,this.typed),o=t.replacement(e),{onclick:s,...r}=this.dropdownItemAttrs;return m(et,Object.assign({mentionable:t,onclick:()=>s(o)},r),n)}buildSuggestions(){const t=[];for(const e of this.mentionables){if(!e.enabled())continue;let n=Array.from(this.results[e.type()].values()).filter((t=>this.matches(e,t)));const o=e.maxStoreMatchedResults();o&&(n=n.splice(0,o));for(const o of n){const n=this.makeSuggestion(e,o);t.push(n)}}return t}}flarum.reg.add("flarum-mentions","forum/mentionables/MentionableModels",ot);const st=flarum.reg.get("core","forum/components/Notification");var rt=t.n(st);class it extends(rt()){icon(){return"fas fa-reply"}href(){const t=this.attrs.notification,e=t.subject(),n=t.content();return s().route.discussion(e.discussion(),n&&n.replyNumber)}content(){const t=this.attrs.notification.fromUser();return s().translator.trans("flarum-mentions.forum.notifications.post_mentioned_text",{user:t,count:1})}excerpt(){return(0,r.truncate)(this.attrs.notification.subject().contentPlain()||"",200)}}flarum.reg.add("flarum-mentions","forum/components/PostMentionedNotification",it);class at extends(rt()){icon(){return"fas fa-at"}href(){const t=this.attrs.notification.subject();return s().route.discussion(t.discussion(),t.number())}content(){const t=this.attrs.notification.fromUser();return s().translator.trans("flarum-mentions.forum.notifications.user_mentioned_text",{user:t})}excerpt(){return(0,r.truncate)(this.attrs.notification.subject().contentPlain(),200)}}flarum.reg.add("flarum-mentions","forum/components/UserMentionedNotification",at);class mt extends(rt()){icon(){return"fas fa-at"}href(){const t=this.attrs.notification.subject();return s().route.discussion(t.discussion(),t.number())}content(){const t=this.attrs.notification.fromUser();return s().translator.trans("flarum-mentions.forum.notifications.group_mentioned_text",{user:t})}excerpt(){return(0,r.truncate)(this.attrs.notification.subject().contentPlain(),200)}}flarum.reg.add("flarum-mentions","forum/components/GroupMentionedNotification",mt);class ut{constructor(){X(this,"instances",void 0),X(this,"mentionables",void 0),X(this,"extendable",void 0)}makeMentionables(){var t;return null!=(t=this.instances)?t:this.instances=this.mentionables.map((t=>new t(this)))}getMentionable(t){var e;return null!=(e=this.makeMentionables().find((e=>e.type()===t)))?e:null}extend(t){if(!this.extendable)throw new Error("This mention format does not allow extending.");this.mentionables.push(t)}}flarum.reg.add("flarum-mentions","forum/mentionables/formats/MentionFormat",ut);const lt=flarum.reg.get("core","common/components/Avatar");var ct=t.n(lt);const dt=flarum.reg.get("core","common/helpers/highlight");var ft=t.n(dt);class pt{constructor(t){X(this,"format",void 0),this.format=t}}flarum.reg.add("flarum-mentions","forum/mentionables/MentionableModel",pt);const ht=flarum.reg.get("core","common/utils/extractText");var gt=t.n(ht);const bt=()=>gt()(s().translator.trans("core.lib.username.deleted_text"));function yt(t,e){return void 0===e&&(e=!0),t?((e?t.displayName():t.username())||bt()).replace(/"#[a-z]{0,3}[0-9]+/,"_"):bt().replace(/"#[a-z]{0,3}[0-9]+/,"_")}flarum.reg.add("flarum-mentions","forum/utils/getCleanDisplayName",yt);class vt extends pt{type(){return"user"}initialResults(){return Array.from(s().store.all("users"))}replacement(t){if(s().forum.attribute("allowUsernameMentionFormat")){const e=yt(t,!1);return this.format.format(e)}const e=yt(t);return this.format.format(e,"",t.id())}suggestion(t,e){const n=x()(t,(t=>ft()(t,e)));return m("[",null,m(ct(),{user:t}),n)}matches(t,e){return!!e&&[t.username(),t.displayName()].some((t=>t.toLowerCase().substr(0,e.length)===e))}maxStoreMatchedResults(){return null}async search(t){return await s().store.find("users",{filter:{q:t},page:{limit:5}})}enabled(){return!0}}flarum.reg.add("flarum-mentions","forum/mentionables/UserMention",vt);class wt extends pt{type(){return"post"}initialResults(){const t=flarum.reg.checkModule("core","forum/components/EditPostComposer"),e=flarum.reg.checkModule("core","forum/components/ReplyComposer");if(!(e&&s().composer.bodyMatches(e)||t&&s().composer.bodyMatches(t)))return[];const n=s().composer.body.attrs,o=n.post;return(o&&o.discussion()||n.discussion).posts().filter((t=>t&&"comment"===t.contentType()&&(!o||t.number()e.createdAt().getTime()-t.createdAt().getTime()))}replacement(t){const e=yt(t.user());return this.format.format(e,"p",t.id())}suggestion(t,e){var n;const o=t.user()||null,i=x()(o,(t=>ft()(t,e)));return m("[",null,m(ct(),{user:o}),i,[s().translator.trans("flarum-mentions.forum.composer.reply_to_post_text",{number:t.number()})," — ",(0,r.truncate)(null!=(n=t.contentPlain())?n:"",200)])}matches(t,e){const n=t.user(),o=s().mentionFormats.mentionable("user");return!e||n&&o.matches(n,e)}maxStoreMatchedResults(){return 5}search(t){return Promise.resolve([])}enabled(){return!0}}flarum.reg.add("flarum-mentions","forum/mentionables/PostMention",wt);const Mt=flarum.reg.get("core","common/models/Group");var xt=t.n(Mt);const Pt=flarum.reg.get("core","common/components/Badge");var Ct=t.n(Pt);class Tt extends pt{type(){return"group"}initialResults(){return Array.from(s().store.all("groups").filter((t=>t.id()!==xt().GUEST_ID&&t.id()!==xt().MEMBER_ID)))}replacement(t){return this.format.format(t.namePlural(),"g",t.id())}suggestion(t,e){let n=t.namePlural();return e&&(n=ft()(n,e)),m("[",null,m(Ct(),{className:"Avatar Badge Badge--group--".concat(t.id()," Badge-icon"),color:t.color(),type:"group",icon:t.icon()}),m("span",{className:"username"},n))}matches(t,e){return!!e&&[t.namePlural().toLowerCase(),t.nameSingular().toLowerCase()].some((t=>t.toLowerCase().substr(0,e.length)===e))}maxStoreMatchedResults(){return null}search(t){return Promise.resolve([])}enabled(){var t,e,n;return null!=(t=null==(e=s().session)||null==(n=e.user)?void 0:n.canMentionGroups())&&t}}flarum.reg.add("flarum-mentions","forum/mentionables/GroupMention",Tt);class At extends ut{constructor(){super(...arguments),X(this,"mentionables",[vt,wt,Tt]),X(this,"extendable",!0)}trigger(){return"@"}queryFromTyped(t){const e=t.match(/^["“]?((?:(?!"#).)+)$/);return e?e[1]:null}format(t,e,n){return void 0===e&&(e=""),void 0===n&&(n=null),{simple:"@".concat(t),safe:'@"'.concat(t,'"#').concat(e).concat(n)}[n?"safe":"simple"]}}flarum.reg.add("flarum-mentions","forum/mentionables/formats/AtMentionFormat",At);class Bt extends pt{type(){return"tag"}initialResults(){return Array.from(s().store.all("tags"))}replacement(t){return this.format.format(t.slug())}matches(t,e){return!!e&&[t.name().toLowerCase()].some((t=>t.toLowerCase().substr(0,e.length)===e))}maxStoreMatchedResults(){return null}async search(t){return await s().store.find("tags",{filter:{q:t},page:{limit:5}})}suggestion(t,e){let n=t.name();return e&&(n=ft()(n,e)),m("[",null,m(Ct(),{className:"Avatar",icon:t.icon(),color:t.color(),type:"tag"}),m("span",{className:"username"},n))}enabled(){return"flarum-tags"in flarum.extensions}}flarum.reg.add("flarum-mentions","forum/mentionables/TagMention",Bt);class $t extends ut{constructor(){super(...arguments),X(this,"mentionables",[Bt]),X(this,"extendable",!0)}trigger(){return"#"}queryFromTyped(t){const e=t.match(/^[-_\p{L}\p{N}\p{M}]+$/giu);return e?e[0]:null}format(t){return"#".concat(t)}}flarum.reg.add("flarum-mentions","forum/mentionables/formats/HashMentionFormat",$t);class Dt{constructor(){X(this,"formats",[new At,new $t])}get(t){var e;return null!=(e=this.formats.find((e=>e.trigger()===t)))?e:null}mentionable(t){for(const e of this.formats){const n=e.getMentionable(t);if(n)return n}return null}extend(t){this.formats.push(new t)}}flarum.reg.add("flarum-mentions","forum/mentionables/formats/MentionFormats",Dt);const _t=flarum.reg.get("core","forum/components/UserPage");var Nt=t.n(_t);const St=flarum.reg.get("core","common/components/LinkButton");var kt=t.n(St);const Ft=flarum.reg.get("core","common/extenders");var It=t.n(Ft);const Lt=flarum.reg.get("core","common/models/Post");var Rt=t.n(Lt);const Ut=flarum.reg.get("core","common/models/User");var jt=t.n(Ut);const Et=flarum.reg.get("core","forum/components/PostsUserPage");var Ht=t.n(Et);class Gt extends(Ht()){loadResults(t){return s().store.find("posts",{filter:{type:"comment",mentioned:this.user.id()},page:{offset:t,limit:this.loadLimit},sort:"-createdAt"})}}flarum.reg.add("flarum-mentions","forum/components/MentionsUserPage",Gt);const Wt=[(new(It().Routes)).add("user.mentions","/u/:username/mentions",Gt),new(It().Model)(Rt()).hasMany("mentionedBy").attribute("mentionedByCount"),new(It().Model)(jt()).attribute("canMentionGroups")];function qt(t){let e;if(s().forum.attribute("allowUsernameMentionFormat")&&t.hasAttribute("username")?e=s().store.getBy("users","username",t.getAttribute("username")):t.hasAttribute("id")&&(e=s().store.getById("users",t.getAttribute("id"))),e)return t.setAttribute("id",e.id()),t.setAttribute("slug",e.slug()),t.setAttribute("displayname",gt()(x()(e))),!0;t.invalidate()}function Ot(t){t.setAttribute("deleted",!1)}function Jt(t){const e=s().store.getById("posts",t.getAttribute("id"));if(e)return t.setAttribute("discussionid",e.discussion().id()),t.setAttribute("number",e.number()),t.setAttribute("displayname",gt()(x()(e.user()))),!0}function zt(t){t.setAttribute("deleted",!1)}function Qt(t){var e,n;if(null!=(e=s().session)&&null!=(n=e.user)&&n.canMentionGroups()){const e=s().store.getById("groups",t.getAttribute("id"));if(e)return t.setAttribute("groupname",gt()(e.namePlural())),!0}t.invalidate()}function Xt(t){var e,n;if(null!=(e=s().session)&&null!=(n=e.user)&&n.canMentionGroups()){const e=s().store.getById("groups",t.getAttribute("id"));t.setAttribute("color",e.color()),t.setAttribute("icon",e.icon()),t.setAttribute("deleted",!1)}}function Yt(t){if("flarum-tags"in flarum.extensions){const e=s().store.getBy("tags","slug",t.getAttribute("slug"));if(e)return t.setAttribute("id",e.id()),t.setAttribute("tagname",e.name()),!0}t.invalidate()}function Kt(t){if("flarum-tags"in flarum.extensions){const e=s().store.getBy("tags","slug",t.getAttribute("slug"));t.setAttribute("icon",e.icon()),t.setAttribute("color",e.color()),t.setAttribute("deleted",!1)}}flarum.reg.add("flarum-mentions","forum/utils/textFormatter",{filterUserMentions:qt,postFilterUserMentions:Ot,filterPostMentions:Jt,postFilterPostMentions:zt,filterGroupMentions:Qt,postFilterGroupMentions:Xt,filterTagMentions:Yt,postFilterTagMentions:Kt}),flarum.reg.add("flarum-mentions","forum/extenders/Mentionables",class{constructor(){X(this,"formats",[]),X(this,"mentionables",{})}format(t){return this.formats.push(t),this}mentionable(t,e){return this.mentionables[t]||(this.mentionables[t]=[]),this.mentionables[t].push(e),this}extend(t){for(const e of this.formats)t.mentionFormats.extend(e);for(const e in this.mentionables){const n=t.mentionFormats.get(e);if(n)for(const t of this.mentionables[e])n.extend(t)}}}),s().mentionFormats=new Dt,s().initializers.add("flarum-mentions",(function(){!function(){function t(){const t=this.attrs.post.contentHtml();if(t===this.oldPostContentHtml||this.isEditing())return;this.oldPostContentHtml=t;const e=this.attrs.post,n=this.$();this.$().on("click",".UserMention:not(.UserMention--deleted), .PostMention:not(.PostMention--deleted), .TagMention:not(.TagMention--deleted)",(function(t){m.route.set(this.getAttribute("href")),t.preventDefault()})),this.$(".PostMention:not(.PostMention--deleted)").each((function(){const t=$(this),o=t.data("id");let s;const r=$('
');this.navigator=new(z()),this.navigator.when((()=>this.mentionsDropdown.active)).onUp((()=>this.mentionsDropdown.navigate(-1))).onDown((()=>this.mentionsDropdown.navigate(1))).onSelect(this.mentionsDropdown.complete.bind(this.mentionsDropdown)).onCancel(this.mentionsDropdown.hide.bind(this.mentionsDropdown)).bindTo(t),t.after($('
'))})),(0,n.extend)("flarum/common/components/TextEditor","buildEditorParams",(function(t){let e,n,o,r=new ot({onmouseenter:function(){this.mentionsDropdown.setIndex($(this).parent().index())},onclick:t=>{this.attrs.composer.editor.replaceBeforeCursor(n-1,t+" "),this.mentionsDropdown.hide()}});t.inputListeners.push((()=>{const t=this.attrs.composer.editor.getSelectionRange(),i=t[0];if(t[1]-i>0)return;const a=this.attrs.composer.editor.getLastNChars(30);n=0;let u=null;for(let t=a.length-1;t>=0;t--){const o=a.substr(t,1);if(u=s().mentionFormats.get(o),u&&(0===t||/\s/.test(a.substr(t-1,1)))){e=t+1,n=i-a.length+t+1,r.init(u.makeMentionables());break}}if(this.mentionsDropdown.hide(),this.mentionsDropdown.active=!1,n){var l;const t=a.substring(e).toLowerCase();if(o=u.queryFromTyped(t),!o)return;r.typed=o;const s=()=>{const t=r.buildSuggestions();if(t.length){this.mentionsDropdown.items=t,m.render(this.$(".ComposerBody-mentionsDropdownContainer")[0],this.mentionsDropdown.render()),this.mentionsDropdown.show();const e=this.attrs.composer.editor.getCaretCoordinates(n),o=this.mentionsDropdown.$().outerWidth(),s=this.mentionsDropdown.$().outerHeight(),r=this.mentionsDropdown.$().offsetParent();let i=e.left,a=e.top+15;a+s>r.height()&&(a=e.top-s-15),i+o>r.width()&&(i=r.width()-o),a=Math.max(-(r.offset().top-$(document).scrollTop()),a),i=Math.max(-r.offset().left,i),this.mentionsDropdown.show(i,a)}else this.mentionsDropdown.active=!1,this.mentionsDropdown.hide()};this.mentionsDropdown.active=!0,s(),this.mentionsDropdown.setIndex(0),this.mentionsDropdown.$().scrollTop(0),null==(l=r.search())||l.then(s)}}))})),(0,n.extend)("flarum/common/components/TextEditor","toolbarItems",(function(t){t.add("mention",m(O(),{onclick:()=>this.attrs.composer.editor.insertAtCursor(" @"),icon:"fas fa-at"},s().translator.trans("flarum-mentions.forum.composer.mention_tooltip")))})),s().notificationComponents.postMentioned=it,s().notificationComponents.userMentioned=at,s().notificationComponents.groupMentioned=mt,(0,n.extend)("flarum/forum/components/NotificationGrid","notificationTypes",(function(t){t.add("postMentioned",{name:"postMentioned",icon:"fas fa-reply",label:s().translator.trans("flarum-mentions.forum.settings.notify_post_mentioned_label")}),t.add("userMentioned",{name:"userMentioned",icon:"fas fa-at",label:s().translator.trans("flarum-mentions.forum.settings.notify_user_mentioned_label")}),t.add("groupMentioned",{name:"groupMentioned",icon:"fas fa-at",label:s().translator.trans("flarum-mentions.forum.settings.notify_group_mentioned_label")})})),(0,n.extend)(Nt().prototype,"navItems",(function(t){const e=this.user;t.add("mentions",m(kt(),{href:s().route("user.mentions",{username:e.slug()}),name:"mentions",icon:"fas fa-at"},s().translator.trans("flarum-mentions.forum.user.mentions_link")),80)})),r.getPlainContent.removeSelectors.push("a.PostMention"),(0,n.extend)(l().prototype,"oncreate",(function(){this.$(".GroupMention--colored, .TagMention--colored").each((function(){this.classList.add(a()(getComputedStyle(this).getPropertyValue("--color")))}))}))}))})(),module.exports=e})(); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/extensions/mentions/js/dist/forum.js.map b/extensions/mentions/js/dist/forum.js.map index eec7f86860..a1ca412671 100644 --- a/extensions/mentions/js/dist/forum.js.map +++ b/extensions/mentions/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/mentions/webpack/bootstrap","webpack://@flarum/mentions/webpack/runtime/compat get default export","webpack://@flarum/mentions/webpack/runtime/define property getters","webpack://@flarum/mentions/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/mentions/webpack/runtime/make namespace object","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/utils/string')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/components/Post')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/components/CommentPost')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/components/PostPreview')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/helpers/punctuateSeries')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/helpers/username')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Icon')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Modal')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/states/PaginatedListState')\"","webpack://@flarum/mentions/./src/forum/state/MentionedByModalState.ts","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/mentions/./src/forum/components/MentionedByModal.tsx","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/utils/DiscussionControls')\"","webpack://@flarum/mentions/./src/forum/utils/reply.js","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/Fragment')\"","webpack://@flarum/mentions/./src/forum/fragments/PostQuoteButton.js","webpack://@flarum/mentions/./src/forum/utils/selectedText.js","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/TextEditorButton')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/mentions/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/mentions/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/mentions/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/mentions/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/mentions/./src/forum/fragments/AutocompleteDropdown.js","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/mentions/./src/forum/components/MentionsDropdownItem.tsx","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/utils/throttleDebounce')\"","webpack://@flarum/mentions/./src/forum/mentionables/MentionableModels.tsx","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/components/Notification')\"","webpack://@flarum/mentions/./src/forum/components/PostMentionedNotification.js","webpack://@flarum/mentions/./src/forum/components/UserMentionedNotification.js","webpack://@flarum/mentions/./src/forum/components/GroupMentionedNotification.js","webpack://@flarum/mentions/./src/forum/mentionables/formats/MentionFormat.ts","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Avatar')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/mentions/./src/forum/mentionables/MentionableModel.ts","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/mentions/./src/forum/utils/getCleanDisplayName.js","webpack://@flarum/mentions/./src/forum/mentionables/UserMention.tsx","webpack://@flarum/mentions/./src/forum/mentionables/PostMention.tsx","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/models/Group')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Badge')\"","webpack://@flarum/mentions/./src/forum/mentionables/GroupMention.tsx","webpack://@flarum/mentions/./src/forum/mentionables/formats/AtMentionFormat.ts","webpack://@flarum/mentions/./src/forum/mentionables/TagMention.tsx","webpack://@flarum/mentions/./src/forum/mentionables/formats/HashMentionFormat.ts","webpack://@flarum/mentions/./src/forum/mentionables/formats/MentionFormats.ts","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/components/UserPage')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/LinkButton')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/models/Post')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/models/User')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/components/PostsUserPage')\"","webpack://@flarum/mentions/./src/forum/components/MentionsUserPage.js","webpack://@flarum/mentions/./src/forum/extend.ts","webpack://@flarum/mentions/./src/forum/utils/textFormatter.js","webpack://@flarum/mentions/./src/forum/utils/getMentionText.js","webpack://@flarum/mentions/./src/forum/extenders/Mentionables.ts","webpack://@flarum/mentions/./src/forum/index.js","webpack://@flarum/mentions/./src/forum/addPostMentionPreviews.js","webpack://@flarum/mentions/./src/forum/addMentionedByList.js","webpack://@flarum/mentions/./src/forum/addPostReplyAction.js","webpack://@flarum/mentions/./src/forum/addPostQuoteButton.js","webpack://@flarum/mentions/./src/forum/addComposerAutocomplete.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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', 'forum/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/string');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/textContrastClass');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/Post');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/CommentPost');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/PostPreview');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LoadingIndicator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Link');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/punctuateSeries');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/username');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Icon');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Modal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/states/PaginatedListState');","import PaginatedListState from 'flarum/common/states/PaginatedListState';\nexport default class MentionedByModalState extends PaginatedListState {\n constructor(params, page) {\n if (page === void 0) {\n page = 1;\n }\n const limit = 10;\n params.page = {\n ...(params.page || {}),\n limit\n };\n super(params, page, limit);\n }\n get type() {\n return 'posts';\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/state/MentionedByModalState', MentionedByModalState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","import app from 'flarum/forum/app';\nimport PostPreview from 'flarum/forum/components/PostPreview';\nimport Modal from 'flarum/common/components/Modal';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Button from 'flarum/common/components/Button';\nimport MentionedByModalState from '../state/MentionedByModalState';\nimport Form from 'flarum/common/components/Form';\nexport default class MentionedByModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n this.state = new MentionedByModalState({\n filter: {\n mentionedPost: this.attrs.post.id()\n },\n sort: 'number'\n });\n this.state.refresh();\n }\n className() {\n return 'MentionedByModal';\n }\n title() {\n return app.translator.trans('flarum-mentions.forum.mentioned_by.title');\n }\n content() {\n return m('[', null, m(\"div\", {\n className: \"Modal-body\"\n }, this.state.isInitialLoading() ? m(LoadingIndicator, null) : m('[', null, m(\"ul\", {\n className: \"MentionedByModal-list Dropdown-menu Dropdown-menu--inline Post-mentionedBy-preview\"\n }, this.state.getPages().map(page => page.items.map(reply => m(\"li\", {\n \"data-number\": reply.number()\n }, m(PostPreview, {\n post: reply,\n onclick: () => app.modal.close()\n }))))))), this.state.hasNext() && m(\"div\", {\n className: \"Modal-footer\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(Button, {\n className: \"Button Button--block\",\n onclick: () => this.state.loadNext(),\n loading: this.state.isLoadingNext()\n }, app.translator.trans('flarum-mentions.forum.mentioned_by.load_more_button'))))));\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/components/MentionedByModal', MentionedByModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/DiscussionControls');","import app from 'flarum/forum/app';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nexport function insertMention(post, composer, quote) {\n return new Promise(resolve => {\n const mention = app.mentionFormats.mentionable('post').replacement(post) + ' ';\n\n // If the composer is empty, then assume we're starting a new reply.\n // In which case we don't want the user to have to confirm if they\n // close the composer straight away.\n if (!composer.fields.content()) {\n composer.body.attrs.originalContent = mention;\n }\n const cursorPosition = composer.editor.getSelectionRange()[0];\n const preceding = composer.fields.content().slice(0, cursorPosition);\n const precedingNewlines = preceding.length == 0 ? 0 : 3 - preceding.match(/(\\n{0,2})$/)[0].length;\n composer.editor.insertAtCursor(Array(precedingNewlines).join('\\n') + (\n // Insert up to two newlines, depending on preceding whitespace\n quote ? '> ' + mention + quote.trim().replace(/\\n/g, '\\n> ') + '\\n\\n' : mention), false);\n return resolve(composer);\n });\n}\nexport default function reply(post, quote) {\n const EditPostComposer = flarum.reg.checkModule('core', 'forum/components/EditPostComposer');\n if (EditPostComposer && app.composer.bodyMatches(EditPostComposer) && app.composer.body.attrs.post.discussion() === post.discussion()) {\n // If we're already editing a post in the discussion of post we're quoting,\n // insert the mention directly.\n return insertMention(post, app.composer, quote);\n } else {\n // The default \"Reply\" action behavior will only open a new composer if\n // necessary, but it will always be a ReplyComposer, hence the exceptional\n // case above.\n return DiscussionControls.replyAction.call(post.discussion()).then(composer => insertMention(post, composer, quote));\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/utils/reply', reply);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Fragment');","import app from 'flarum/forum/app';\nimport Fragment from 'flarum/common/Fragment';\nimport Icon from 'flarum/common/components/Icon';\nimport reply from '../utils/reply';\nexport default class PostQuoteButton extends Fragment {\n constructor(post) {\n super();\n this.post = post;\n }\n view() {\n return m(\"button\", {\n className: \"Button PostQuoteButton\",\n onclick: () => {\n reply(this.post, this.content);\n }\n }, m(Icon, {\n name: \"fas fa-quote-left\",\n className: \"Button-icon\"\n }), app.translator.trans('flarum-mentions.forum.post.quote_button'));\n }\n show(left, top) {\n const $this = this.$().show();\n const parentOffset = $this.offsetParent().offset();\n $this.css('left', left - parentOffset.left).css('top', top - parentOffset.top);\n this.hideHandler = this.hide.bind(this);\n $(document).on('mouseup', this.hideHandler);\n }\n showStart(left, top) {\n const $this = this.$();\n this.show(left, $(window).scrollTop() + top - $this.outerHeight() - 5);\n }\n showEnd(right, bottom) {\n const $this = this.$();\n this.show(right - $this.outerWidth(), $(window).scrollTop() + bottom + 5);\n }\n hide() {\n this.$().hide();\n $(document).off('mouseup', this.hideHandler);\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/fragments/PostQuoteButton', PostQuoteButton);","/**\n * Finds the selected text in the provided composer body.\n */\nexport default function selectedText(body) {\n const selection = window.getSelection();\n if (!selection.isCollapsed) {\n const range = selection.getRangeAt(0);\n const parent = range.commonAncestorContainer;\n if (body[0] === parent || $.contains(body[0], parent)) {\n const clone = $('
').append(range.cloneContents());\n\n // Replace emoji images with their shortcode (found in alt attribute)\n clone.find('img.emoji').replaceWith(function () {\n return this.alt;\n });\n\n // Replace all other images with a Markdown image\n clone.find('img').replaceWith(function () {\n return \"![](\".concat(this.src, \")\");\n });\n\n // Replace all links with a Markdown link\n clone.find('a').replaceWith(function () {\n return \"[\".concat(this.innerText, \"](\").concat(this.href, \")\");\n });\n return clone.text();\n }\n }\n return '';\n}\nflarum.reg.add('flarum-mentions', 'forum/utils/selectedText', selectedText);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/TextEditorButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","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}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Fragment from 'flarum/common/Fragment';\nexport default class AutocompleteDropdown extends Fragment {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"items\", []);\n _defineProperty(this, \"active\", false);\n _defineProperty(this, \"index\", 0);\n _defineProperty(this, \"keyWasJustPressed\", false);\n }\n view() {\n return m(\"ul\", {\n className: \"Dropdown-menu MentionsDropdown\"\n }, this.items.map(item => m(\"li\", null, item)));\n }\n show(left, top) {\n this.$().show().css({\n left: left + 'px',\n top: top + 'px'\n });\n this.active = true;\n }\n hide() {\n this.$().hide();\n this.active = false;\n }\n navigate(delta) {\n this.keyWasJustPressed = true;\n this.setIndex(this.index + delta, true);\n clearTimeout(this.keyWasJustPressedTimeout);\n this.keyWasJustPressedTimeout = setTimeout(() => this.keyWasJustPressed = false, 500);\n }\n complete() {\n this.$('li').eq(this.index).find('button').click();\n }\n setIndex(index, scrollToItem) {\n if (this.keyWasJustPressed && !scrollToItem) return;\n const $dropdown = this.$();\n const $items = $dropdown.find('li');\n let rangedIndex = index;\n if (rangedIndex < 0) {\n rangedIndex = $items.length - 1;\n } else if (rangedIndex >= $items.length) {\n rangedIndex = 0;\n }\n this.index = rangedIndex;\n const $item = $items.removeClass('active').eq(rangedIndex).addClass('active');\n if (scrollToItem) {\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}\nflarum.reg.add('flarum-mentions', 'forum/fragments/AutocompleteDropdown', AutocompleteDropdown);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Component');","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 MentionsDropdownItem extends Component {\n view(vnode) {\n const {\n mentionable,\n ...attrs\n } = this.attrs;\n const className = classList('MentionsDropdownItem', 'PostPreview', \"MentionsDropdown-\".concat(mentionable.type()));\n return m(\"button\", Object.assign({\n className: className\n }, attrs), m(\"span\", {\n className: \"PostPreview-content\"\n }, vnode.children));\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/components/MentionsDropdownItem', MentionsDropdownItem);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/throttleDebounce');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport MentionsDropdownItem from '../components/MentionsDropdownItem';\nimport { throttle } from 'flarum/common/utils/throttleDebounce';\nexport default class MentionableModels {\n constructor(dropdownItemAttrs) {\n _defineProperty(this, \"mentionables\", void 0);\n /**\n * We store models returned from an API here to preserve order in which they are returned\n * This prevents the list jumping around while models are returned.\n * We also use a hashmap for model IDs to provide O(1) lookup for the users already in the list.\n */\n _defineProperty(this, \"results\", {});\n _defineProperty(this, \"typed\", null);\n _defineProperty(this, \"searched\", []);\n _defineProperty(this, \"dropdownItemAttrs\", {});\n /**\n * Don't send API calls searching for models until at least 2 characters have been typed.\n * This focuses the mention results on models already loaded.\n */\n _defineProperty(this, \"search\", throttle(250, async () => {\n if (!this.typed || this.typed.length <= 1) return;\n const typedLower = this.typed.toLowerCase();\n if (this.searched.includes(typedLower)) return;\n for (const mentionable of this.mentionables) {\n for (const model of await mentionable.search(typedLower)) {\n if (!this.results[mentionable.type()].has(model.id())) {\n this.results[mentionable.type()].set(model.id(), model);\n }\n }\n }\n this.searched.push(typedLower);\n return Promise.resolve();\n }));\n this.dropdownItemAttrs = dropdownItemAttrs;\n }\n init(mentionables) {\n this.typed = null;\n this.mentionables = mentionables;\n for (const mentionable of this.mentionables) {\n this.results[mentionable.type()] = new Map(mentionable.initialResults().map(result => [result.id(), result]));\n }\n }\n matches(mentionable, model) {\n var _this$typed;\n return mentionable.matches(model, ((_this$typed = this.typed) == null ? void 0 : _this$typed.toLowerCase()) || '');\n }\n makeSuggestion(mentionable, model) {\n const content = mentionable.suggestion(model, this.typed);\n const replacement = mentionable.replacement(model);\n const {\n onclick,\n ...attrs\n } = this.dropdownItemAttrs;\n return m(MentionsDropdownItem, Object.assign({\n mentionable: mentionable,\n onclick: () => onclick(replacement)\n }, attrs), content);\n }\n buildSuggestions() {\n const suggestions = [];\n for (const mentionable of this.mentionables) {\n if (!mentionable.enabled()) continue;\n let matches = Array.from(this.results[mentionable.type()].values()).filter(model => this.matches(mentionable, model));\n const max = mentionable.maxStoreMatchedResults();\n if (max) matches = matches.splice(0, max);\n for (const model of matches) {\n const dropdownItem = this.makeSuggestion(mentionable, model);\n suggestions.push(dropdownItem);\n }\n }\n return suggestions;\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/MentionableModels', MentionableModels);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/Notification');","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\nexport default class PostMentionedNotification extends Notification {\n icon() {\n return 'fas fa-reply';\n }\n href() {\n const notification = this.attrs.notification;\n const post = notification.subject();\n const content = notification.content();\n return app.route.discussion(post.discussion(), content && content.replyNumber);\n }\n content() {\n const notification = this.attrs.notification;\n const user = notification.fromUser();\n return app.translator.trans('flarum-mentions.forum.notifications.post_mentioned_text', {\n user,\n count: 1\n });\n }\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain() || '', 200);\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/components/PostMentionedNotification', PostMentionedNotification);","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\nexport default class UserMentionedNotification extends Notification {\n icon() {\n return 'fas fa-at';\n }\n href() {\n const post = this.attrs.notification.subject();\n return app.route.discussion(post.discussion(), post.number());\n }\n content() {\n const user = this.attrs.notification.fromUser();\n return app.translator.trans('flarum-mentions.forum.notifications.user_mentioned_text', {\n user\n });\n }\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain(), 200);\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/components/UserMentionedNotification', UserMentionedNotification);","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\nexport default class GroupMentionedNotification extends Notification {\n icon() {\n return 'fas fa-at';\n }\n href() {\n const post = this.attrs.notification.subject();\n return app.route.discussion(post.discussion(), post.number());\n }\n content() {\n const user = this.attrs.notification.fromUser();\n return app.translator.trans('flarum-mentions.forum.notifications.group_mentioned_text', {\n user\n });\n }\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain(), 200);\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/components/GroupMentionedNotification', GroupMentionedNotification);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class MentionFormat {\n constructor() {\n _defineProperty(this, \"instances\", void 0);\n _defineProperty(this, \"mentionables\", void 0);\n _defineProperty(this, \"extendable\", void 0);\n }\n makeMentionables() {\n var _this$instances;\n return (_this$instances = this.instances) != null ? _this$instances : this.instances = this.mentionables.map(Mentionable => new Mentionable(this));\n }\n getMentionable(type) {\n var _this$makeMentionable;\n return (_this$makeMentionable = this.makeMentionables().find(mentionable => mentionable.type() === type)) != null ? _this$makeMentionable : null;\n }\n extend(mentionable) {\n if (!this.extendable) throw new Error('This mention format does not allow extending.');\n this.mentionables.push(mentionable);\n }\n\n /**\n * Picks the term to search in the API from the typed text.\n * @example:\n * * Full text = `Hello @\"John D`\n * * Typed text = `\"John D`\n * * Query = `John D`\n */\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/formats/MentionFormat', MentionFormat);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Avatar');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/highlight');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class MentionableModel {\n constructor(format) {\n _defineProperty(this, \"format\", void 0);\n this.format = format;\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/MentionableModel', MentionableModel);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","import app from 'flarum/forum/app';\nimport extractText from 'flarum/common/utils/extractText';\n\n/**\n * Whether to use the old mentions format.\n *\n * `'@username'` or `'@\"Display name\"'`\n */\nexport const shouldUseOldFormat = () => app.forum.attribute('allowUsernameMentionFormat') || false;\nconst getDeletedUserText = () => extractText(app.translator.trans('core.lib.username.deleted_text'));\n\n/**\n * Fetches a user's username or display name.\n *\n * Chooses based on the format option set in the admin settings page.\n *\n * @param user An instance of the User model to fetch the username for\n * @param useDisplayName If `true`, uses `user.displayName()`, otherwise, uses `user.username()`\n */\nexport default function getCleanDisplayName(user, useDisplayName) {\n if (useDisplayName === void 0) {\n useDisplayName = true;\n }\n if (!user) return getDeletedUserText().replace(/\"#[a-z]{0,3}[0-9]+/, '_');\n const text = (useDisplayName ? user.displayName() : user.username()) || getDeletedUserText();\n return text.replace(/\"#[a-z]{0,3}[0-9]+/, '_');\n}\nflarum.reg.add('flarum-mentions', 'forum/utils/getCleanDisplayName', getCleanDisplayName);","import app from 'flarum/forum/app';\nimport usernameHelper from 'flarum/common/helpers/username';\nimport Avatar from 'flarum/common/components/Avatar';\nimport highlight from 'flarum/common/helpers/highlight';\nimport MentionableModel from './MentionableModel';\nimport getCleanDisplayName, { shouldUseOldFormat } from '../utils/getCleanDisplayName';\nexport default class UserMention extends MentionableModel {\n type() {\n return 'user';\n }\n initialResults() {\n return Array.from(app.store.all('users'));\n }\n\n /**\n * Automatically determines which mention syntax to be used based on the option in the\n * admin dashboard. Also performs display name clean-up automatically.\n *\n * @\"Display name\"#UserID or `@username`\n *\n * @example New display name syntax\n * // '@\"user\"#1'\n * forUser(User) // User is ID 1, display name is 'User'\n *\n * @example Using old syntax\n * // '@username'\n * forUser(user) // User's username is 'username'\n */\n replacement(user) {\n if (shouldUseOldFormat()) {\n const cleanText = getCleanDisplayName(user, false);\n return this.format.format(cleanText);\n }\n const cleanText = getCleanDisplayName(user);\n return this.format.format(cleanText, '', user.id());\n }\n suggestion(model, typed) {\n const username = usernameHelper(model, name => highlight(name, typed));\n return m('[', null, m(Avatar, {\n user: model\n }), username);\n }\n matches(model, typed) {\n if (!typed) return false;\n const names = [model.username(), model.displayName()];\n return names.some(name => name.toLowerCase().substr(0, typed.length) === typed);\n }\n maxStoreMatchedResults() {\n return null;\n }\n async search(typed) {\n return await app.store.find('users', {\n filter: {\n q: typed\n },\n page: {\n limit: 5\n }\n });\n }\n enabled() {\n return true;\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/UserMention', UserMention);","import app from 'flarum/forum/app';\nimport MentionableModel from './MentionableModel';\nimport usernameHelper from 'flarum/common/helpers/username';\nimport Avatar from 'flarum/common/components/Avatar';\nimport highlight from 'flarum/common/helpers/highlight';\nimport { truncate } from 'flarum/common/utils/string';\nimport getCleanDisplayName from '../utils/getCleanDisplayName';\nexport default class PostMention extends MentionableModel {\n type() {\n return 'post';\n }\n\n /**\n * If the user is replying to a discussion, or if they are editing a\n * post, then we can suggest other posts in the discussion to mention.\n * We will add the 5 most recent comments in the discussion which\n * match any username characters that have been typed.\n */\n initialResults() {\n const EditPostComposer = flarum.reg.checkModule('core', 'forum/components/EditPostComposer');\n const ReplyComposer = flarum.reg.checkModule('core', 'forum/components/ReplyComposer');\n if ((!ReplyComposer || !app.composer.bodyMatches(ReplyComposer)) && (!EditPostComposer || !app.composer.bodyMatches(EditPostComposer))) {\n return [];\n }\n\n // @ts-ignore\n const composerAttrs = app.composer.body.attrs;\n const composerPost = composerAttrs.post;\n const discussion = composerPost && composerPost.discussion() || composerAttrs.discussion;\n return discussion.posts()\n // Filter to only comment posts, and replies before this message\n .filter(post => post && post.contentType() === 'comment' && (!composerPost || post.number() < composerPost.number()))\n // Sort by new to old\n .sort((a, b) => b.createdAt().getTime() - a.createdAt().getTime());\n }\n\n /**\n * Generates the syntax for mentioning of a post. Also cleans up the display name.\n *\n * @example Post mention\n * // '@\"User\"#p13'\n * // @\"Display name\"#pPostID\n * forPostMention(user, 13) // User display name is 'User', post ID is 13\n */\n replacement(post) {\n const user = post.user();\n const cleanText = getCleanDisplayName(user);\n return this.format.format(cleanText, 'p', post.id());\n }\n suggestion(model, typed) {\n var _model$contentPlain;\n const user = model.user() || null;\n const username = usernameHelper(user, name => highlight(name, typed));\n return m('[', null, m(Avatar, {\n user: user\n }), username, [app.translator.trans('flarum-mentions.forum.composer.reply_to_post_text', {\n number: model.number()\n }), ' — ', truncate((_model$contentPlain = model.contentPlain()) != null ? _model$contentPlain : '', 200)]);\n }\n matches(model, typed) {\n const user = model.user();\n const userMentionable = app.mentionFormats.mentionable('user');\n return !typed || user && userMentionable.matches(user, typed);\n }\n maxStoreMatchedResults() {\n return 5;\n }\n\n /**\n * Post mention suggestions are only offered from current discussion posts.\n */\n search(typed) {\n return Promise.resolve([]);\n }\n enabled() {\n return true;\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/PostMention', PostMention);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Group');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Badge');","import app from 'flarum/forum/app';\nimport Group from 'flarum/common/models/Group';\nimport MentionableModel from './MentionableModel';\nimport Badge from 'flarum/common/components/Badge';\nimport highlight from 'flarum/common/helpers/highlight';\nexport default class GroupMention extends MentionableModel {\n type() {\n return 'group';\n }\n initialResults() {\n return Array.from(app.store.all('groups').filter(g => {\n return g.id() !== Group.GUEST_ID && g.id() !== Group.MEMBER_ID;\n }));\n }\n\n /**\n * Generates the mention syntax for a group mention.\n *\n * @\"Name Plural\"#gGroupID\n *\n * @example Group mention\n * // '@\"Mods\"#g4'\n * forGroup(group) // Group display name is 'Mods', group ID is 4\n */\n replacement(group) {\n return this.format.format(group.namePlural(), 'g', group.id());\n }\n suggestion(model, typed) {\n let groupName = model.namePlural();\n if (typed) {\n groupName = highlight(groupName, typed);\n }\n return m('[', null, m(Badge, {\n className: \"Avatar Badge Badge--group--\".concat(model.id(), \" Badge-icon\"),\n color: model.color(),\n type: \"group\",\n icon: model.icon()\n }), m(\"span\", {\n className: \"username\"\n }, groupName));\n }\n matches(model, typed) {\n if (!typed) return false;\n const names = [model.namePlural().toLowerCase(), model.nameSingular().toLowerCase()];\n return names.some(name => name.toLowerCase().substr(0, typed.length) === typed);\n }\n maxStoreMatchedResults() {\n return null;\n }\n\n /**\n * All groups are already loaded, so we don't need to search for them.\n */\n search(typed) {\n return Promise.resolve([]);\n }\n enabled() {\n var _app$session$user$can, _app$session, _app$session$user;\n return (_app$session$user$can = (_app$session = app.session) == null ? void 0 : (_app$session$user = _app$session.user) == null ? void 0 : _app$session$user.canMentionGroups()) != null ? _app$session$user$can : false;\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/GroupMention', GroupMention);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport MentionFormat from './MentionFormat';\nimport UserMention from '../UserMention';\nimport PostMention from '../PostMention';\nimport GroupMention from '../GroupMention';\nexport default class AtMentionFormat extends MentionFormat {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"mentionables\", [UserMention, PostMention, GroupMention]);\n _defineProperty(this, \"extendable\", true);\n }\n trigger() {\n return '@';\n }\n queryFromTyped(typed) {\n const matchTyped = typed.match(/^[\"“]?((?:(?!\"#).)+)$/);\n return matchTyped ? matchTyped[1] : null;\n }\n format(name, char, id) {\n if (char === void 0) {\n char = '';\n }\n if (id === void 0) {\n id = null;\n }\n return {\n simple: \"@\".concat(name),\n safe: \"@\\\"\".concat(name, \"\\\"#\").concat(char).concat(id)\n }[id ? 'safe' : 'simple'];\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/formats/AtMentionFormat', AtMentionFormat);","import app from 'flarum/forum/app';\nimport Badge from 'flarum/common/components/Badge';\nimport highlight from 'flarum/common/helpers/highlight';\nimport MentionableModel from './MentionableModel';\nexport default class TagMention extends MentionableModel {\n type() {\n return 'tag';\n }\n initialResults() {\n return Array.from(app.store.all('tags'));\n }\n\n /**\n * Generates the mention syntax for a tag mention.\n *\n * ~tagSlug\n *\n * @example Tag mention\n * // ~general\n * forTag(tag) // Tag display name is 'Tag', tag ID is 5\n */\n replacement(tag) {\n return this.format.format(tag.slug());\n }\n matches(model, typed) {\n if (!typed) return false;\n const names = [model.name().toLowerCase()];\n return names.some(name => name.toLowerCase().substr(0, typed.length) === typed);\n }\n maxStoreMatchedResults() {\n return null;\n }\n async search(typed) {\n return await app.store.find('tags', {\n filter: {\n q: typed\n },\n page: {\n limit: 5\n }\n });\n }\n suggestion(model, typed) {\n let tagName = model.name();\n if (typed) {\n tagName = highlight(tagName, typed);\n }\n return m('[', null, m(Badge, {\n className: \"Avatar\",\n icon: model.icon(),\n color: model.color(),\n type: \"tag\"\n }), m(\"span\", {\n className: \"username\"\n }, tagName));\n }\n enabled() {\n return 'flarum-tags' in flarum.extensions;\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/TagMention', TagMention);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport MentionFormat from './MentionFormat';\nimport TagMention from '../TagMention';\nexport default class HashMentionFormat extends MentionFormat {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"mentionables\", [TagMention]);\n _defineProperty(this, \"extendable\", true);\n }\n trigger() {\n return '#';\n }\n queryFromTyped(typed) {\n const matchTyped = typed.match(/^[-_\\p{L}\\p{N}\\p{M}]+$/giu);\n return matchTyped ? matchTyped[0] : null;\n }\n format(slug) {\n return \"#\".concat(slug);\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/formats/HashMentionFormat', HashMentionFormat);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AtMentionFormat from './AtMentionFormat';\nimport HashMentionFormat from './HashMentionFormat';\nexport default class MentionFormats {\n constructor() {\n _defineProperty(this, \"formats\", [new AtMentionFormat(), new HashMentionFormat()]);\n }\n get(symbol) {\n var _this$formats$find;\n return (_this$formats$find = this.formats.find(f => f.trigger() === symbol)) != null ? _this$formats$find : null;\n }\n mentionable(type) {\n for (const format of this.formats) {\n const mentionable = format.getMentionable(type);\n if (mentionable) return mentionable;\n }\n return null;\n }\n extend(format) {\n this.formats.push(new format());\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/formats/MentionFormats', MentionFormats);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/UserPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LinkButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Post');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/User');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/PostsUserPage');","import app from 'flarum/forum/app';\nimport PostsUserPage from 'flarum/forum/components/PostsUserPage';\n\n/**\n * The `MentionsUserPage` component shows post which user Mentioned at\n */\nexport default class MentionsUserPage extends PostsUserPage {\n /**\n * Load a new page of the user's activity feed.\n *\n * @param {Integer} [offset] The position to start getting results from.\n * @return {Promise}\n * @protected\n */\n loadResults(offset) {\n return app.store.find('posts', {\n filter: {\n type: 'comment',\n mentioned: this.user.id()\n },\n page: {\n offset,\n limit: this.loadLimit\n },\n sort: '-createdAt'\n });\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/components/MentionsUserPage', MentionsUserPage);","import Extend from 'flarum/common/extenders';\nimport Post from 'flarum/common/models/Post';\nimport User from 'flarum/common/models/User';\nimport MentionsUserPage from './components/MentionsUserPage';\nexport default [new Extend.Routes() //\n.add('user.mentions', '/u/:username/mentions', MentionsUserPage), new Extend.Model(Post) //\n.hasMany('mentionedBy').attribute('mentionedByCount'), new Extend.Model(User) //\n.attribute('canMentionGroups')];","import app from 'flarum/forum/app';\nimport username from 'flarum/common/helpers/username';\nimport extractText from 'flarum/common/utils/extractText';\nexport function filterUserMentions(tag) {\n let user;\n if (app.forum.attribute('allowUsernameMentionFormat') && tag.hasAttribute('username')) user = app.store.getBy('users', 'username', tag.getAttribute('username'));else if (tag.hasAttribute('id')) user = app.store.getById('users', tag.getAttribute('id'));\n if (user) {\n tag.setAttribute('id', user.id());\n tag.setAttribute('slug', user.slug());\n tag.setAttribute('displayname', extractText(username(user)));\n return true;\n }\n tag.invalidate();\n}\nexport function postFilterUserMentions(tag) {\n tag.setAttribute('deleted', false);\n}\nexport function filterPostMentions(tag) {\n const post = app.store.getById('posts', tag.getAttribute('id'));\n if (post) {\n tag.setAttribute('discussionid', post.discussion().id());\n tag.setAttribute('number', post.number());\n tag.setAttribute('displayname', extractText(username(post.user())));\n return true;\n }\n}\nexport function postFilterPostMentions(tag) {\n tag.setAttribute('deleted', false);\n}\nexport function filterGroupMentions(tag) {\n var _app$session, _app$session$user;\n if ((_app$session = app.session) != null && (_app$session$user = _app$session.user) != null && _app$session$user.canMentionGroups()) {\n const group = app.store.getById('groups', tag.getAttribute('id'));\n if (group) {\n tag.setAttribute('groupname', extractText(group.namePlural()));\n return true;\n }\n }\n tag.invalidate();\n}\nexport function postFilterGroupMentions(tag) {\n var _app$session2, _app$session2$user;\n if ((_app$session2 = app.session) != null && (_app$session2$user = _app$session2.user) != null && _app$session2$user.canMentionGroups()) {\n const group = app.store.getById('groups', tag.getAttribute('id'));\n tag.setAttribute('color', group.color());\n tag.setAttribute('icon', group.icon());\n tag.setAttribute('deleted', false);\n }\n}\nexport function filterTagMentions(tag) {\n if ('flarum-tags' in flarum.extensions) {\n const model = app.store.getBy('tags', 'slug', tag.getAttribute('slug'));\n if (model) {\n tag.setAttribute('id', model.id());\n tag.setAttribute('tagname', model.name());\n return true;\n }\n }\n tag.invalidate();\n}\nexport function postFilterTagMentions(tag) {\n if ('flarum-tags' in flarum.extensions) {\n const model = app.store.getBy('tags', 'slug', tag.getAttribute('slug'));\n tag.setAttribute('icon', model.icon());\n tag.setAttribute('color', model.color());\n tag.setAttribute('deleted', false);\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/utils/textFormatter', { filterUserMentions: filterUserMentions,postFilterUserMentions: postFilterUserMentions,filterPostMentions: filterPostMentions,postFilterPostMentions: postFilterPostMentions,filterGroupMentions: filterGroupMentions,postFilterGroupMentions: postFilterGroupMentions,filterTagMentions: filterTagMentions,postFilterTagMentions: postFilterTagMentions, });","import app from 'flarum/forum/app';\n\n/**\n * Fetches the mention text for a specified user (and optionally a post ID for replies or group).\n *\n * Automatically determines which mention syntax to be used based on the option in the\n * admin dashboard. Also performs display name clean-up automatically.\n *\n * @deprecated Use `app.mentionables.get('user').replacement(user)` instead. Will be removed in 2.0.\n */\nexport default function getMentionText(user, postId, group) {\n if (user !== undefined && postId === undefined) {\n return app.mentionables.get('user').replacement(user);\n } else if (user !== undefined && postId !== undefined) {\n return app.mentionables.get('post').replacement(app.store.getById('posts', postId));\n } else if (group !== undefined) {\n return app.mentionables.get('group').replacement(group);\n }\n throw 'No parameters were passed';\n}\nflarum.reg.add('flarum-mentions', 'forum/utils/getMentionText', getMentionText);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class Mentionables {\n constructor() {\n _defineProperty(this, \"formats\", []);\n _defineProperty(this, \"mentionables\", {});\n }\n /**\n * Register a new mention format.\n * Must extend MentionFormat and have a unique unused trigger symbol.\n */\n format(format) {\n this.formats.push(format);\n return this;\n }\n\n /**\n * Register a new mentionable model to a mention format.\n * Only works if the format has already been registered,\n * and the format allows using multiple mentionables.\n *\n * @param symbol The trigger symbol of the format to extend (ex: @).\n * @param mentionable The mentionable instance to register.\n * Must extend MentionableModel.\n */\n mentionable(symbol, mentionable) {\n if (!this.mentionables[symbol]) {\n this.mentionables[symbol] = [];\n }\n this.mentionables[symbol].push(mentionable);\n return this;\n }\n extend(app) {\n for (const format of this.formats) {\n app.mentionFormats.extend(format);\n }\n for (const symbol in this.mentionables) {\n const format = app.mentionFormats.get(symbol);\n if (!format) continue;\n for (const mentionable of this.mentionables[symbol]) {\n format.extend(mentionable);\n }\n }\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/extenders/Mentionables', Mentionables);","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport { getPlainContent } from 'flarum/common/utils/string';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport Post from 'flarum/forum/components/Post';\nimport addPostMentionPreviews from './addPostMentionPreviews';\nimport addMentionedByList from './addMentionedByList';\nimport addPostReplyAction from './addPostReplyAction';\nimport addPostQuoteButton from './addPostQuoteButton';\nimport addComposerAutocomplete from './addComposerAutocomplete';\nimport PostMentionedNotification from './components/PostMentionedNotification';\nimport UserMentionedNotification from './components/UserMentionedNotification';\nimport GroupMentionedNotification from './components/GroupMentionedNotification';\nimport MentionFormats from './mentionables/formats/MentionFormats';\nimport UserPage from 'flarum/forum/components/UserPage';\nimport LinkButton from 'flarum/common/components/LinkButton';\napp.mentionFormats = new MentionFormats();\nexport { default as extend } from './extend';\napp.initializers.add('flarum-mentions', function () {\n // For every mention of a post inside a post's content, set up a hover handler\n // that shows a preview of the mentioned post.\n addPostMentionPreviews();\n\n // In the footer of each post, show information about who has replied (i.e.\n // who the post has been mentioned by).\n addMentionedByList();\n\n // Add a 'reply' control to the footer of each post. When clicked, it will\n // open up the composer and add a post mention to its contents.\n addPostReplyAction();\n\n // Show a Quote button when Post text is selected\n addPostQuoteButton();\n\n // After typing '@' in the composer, show a dropdown suggesting a bunch of\n // posts or users that the user could mention.\n addComposerAutocomplete();\n app.notificationComponents.postMentioned = PostMentionedNotification;\n app.notificationComponents.userMentioned = UserMentionedNotification;\n app.notificationComponents.groupMentioned = GroupMentionedNotification;\n\n // Add notification preferences.\n extend('flarum/forum/components/NotificationGrid', 'notificationTypes', function (items) {\n items.add('postMentioned', {\n name: 'postMentioned',\n icon: 'fas fa-reply',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_post_mentioned_label')\n });\n items.add('userMentioned', {\n name: 'userMentioned',\n icon: 'fas fa-at',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_user_mentioned_label')\n });\n items.add('groupMentioned', {\n name: 'groupMentioned',\n icon: 'fas fa-at',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_group_mentioned_label')\n });\n });\n\n // Add mentions tab in user profile\n extend(UserPage.prototype, 'navItems', function (items) {\n const user = this.user;\n items.add('mentions', m(LinkButton, {\n href: app.route('user.mentions', {\n username: user.slug()\n }),\n name: \"mentions\",\n icon: \"fas fa-at\"\n }, app.translator.trans('flarum-mentions.forum.user.mentions_link')), 80);\n });\n\n // Remove post mentions when rendering post previews.\n getPlainContent.removeSelectors.push('a.PostMention');\n\n // Apply color contrast fix on group mentions.\n extend(Post.prototype, 'oncreate', function () {\n this.$('.GroupMention--colored, .TagMention--colored').each(function () {\n this.classList.add(textContrastClass(getComputedStyle(this).getPropertyValue('--color')));\n });\n });\n});\nexport * from './utils/textFormatter';\nimport './forum';","import { extend } from 'flarum/common/extend';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport PostPreview from 'flarum/forum/components/PostPreview';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nexport default function addPostMentionPreviews() {\n function addPreviews() {\n const contentHtml = this.attrs.post.contentHtml();\n if (contentHtml === this.oldPostContentHtml || this.isEditing()) return;\n this.oldPostContentHtml = contentHtml;\n const parentPost = this.attrs.post;\n const $parentPost = this.$();\n this.$().on('click', '.UserMention:not(.UserMention--deleted), .PostMention:not(.PostMention--deleted), .TagMention:not(.TagMention--deleted)', function (e) {\n m.route.set(this.getAttribute('href'));\n e.preventDefault();\n });\n this.$('.PostMention:not(.PostMention--deleted)').each(function () {\n const $this = $(this);\n const id = $this.data('id');\n let timeout;\n\n // Wrap the mention link in a wrapper element so that we can insert a\n // preview popup as its sibling and relatively position it.\n const $preview = $('
    ');\n $parentPost.append($preview);\n const getPostElement = () => {\n return $(\".PostStream-item[data-id=\\\"\".concat(id, \"\\\"]\"));\n };\n const showPreview = () => {\n // When the user hovers their mouse over the mention, look for the\n // post that it's referring to in the stream, and determine if it's\n // in the viewport. If it is, we will \"pulsate\" it.\n const $post = getPostElement();\n let visible = false;\n if ($post.length) {\n const top = $post.offset().top;\n const scrollTop = window.pageYOffset;\n if (top > scrollTop && top + $post.height() < scrollTop + $(window).height()) {\n $post.addClass('pulsate');\n visible = true;\n }\n }\n\n // Otherwise, we will show a popup preview of the post. If the post\n // hasn't yet been loaded, we will need to do that.\n if (!visible) {\n // Position the preview so that it appears above the mention.\n // (The offsetParent should be .Post-body.)\n const positionPreview = () => {\n const previewHeight = $preview.outerHeight(true);\n let offset = 0;\n\n // If the preview goes off the top of the viewport, reposition it to\n // be below the mention.\n if ($this.offset().top - previewHeight < $(window).scrollTop() + $('#header').outerHeight()) {\n offset += $this.outerHeight(true);\n } else {\n offset -= previewHeight;\n }\n $preview.show().css('top', $this.offset().top - $parentPost.offset().top + offset).css('left', $this.offsetParent().offset().left - $parentPost.offset().left).css('max-width', $this.offsetParent().width());\n };\n const showPost = post => {\n const discussion = post.discussion();\n m.render($preview[0], [discussion !== parentPost.discussion() && m(\"li\", null, m(\"span\", {\n className: \"PostMention-preview-discussion\"\n }, discussion.title())), m(\"li\", null, m(PostPreview, {\n post: post\n }))]);\n positionPreview();\n };\n const post = app.store.getById('posts', id);\n if (post && post.discussion()) {\n showPost(post);\n } else {\n m.render($preview[0], m(LoadingIndicator, null));\n app.store.find('posts', id).then(showPost);\n positionPreview();\n }\n setTimeout(() => $preview.off('transitionend').addClass('in'));\n }\n };\n const hidePreview = () => {\n getPostElement().removeClass('pulsate');\n if ($preview.hasClass('in')) {\n $preview.removeClass('in').one('transitionend', () => $preview.hide());\n }\n };\n\n // On a touch (mobile) device we cannot hover the link to reveal the preview.\n // Instead we cancel the navigation so that a click reveals the preview.\n // Users can then click on the preview to go to the post if desired.\n $this.on('touchend', e => {\n if (e.cancelable) {\n e.preventDefault();\n }\n });\n $this.add($preview).hover(() => {\n clearTimeout(timeout);\n timeout = setTimeout(showPreview, 250);\n }, () => {\n clearTimeout(timeout);\n getPostElement().removeClass('pulsate');\n timeout = setTimeout(hidePreview, 250);\n }).on('touchend', e => {\n showPreview();\n e.stopPropagation();\n });\n $(document).on('touchend', hidePreview);\n });\n }\n extend(CommentPost.prototype, 'oncreate', addPreviews);\n extend(CommentPost.prototype, 'onupdate', addPreviews);\n}","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport Link from 'flarum/common/components/Link';\nimport PostPreview from 'flarum/forum/components/PostPreview';\nimport punctuateSeries from 'flarum/common/helpers/punctuateSeries';\nimport username from 'flarum/common/helpers/username';\nimport Icon from 'flarum/common/components/Icon';\nimport Button from 'flarum/common/components/Button';\nimport MentionedByModal from './components/MentionedByModal';\nexport default function addMentionedByList() {\n function hidePreview() {\n this.$('.Post-mentionedBy-preview').removeClass('in').one('transitionend', function () {\n $(this).hide();\n });\n }\n extend(CommentPost.prototype, 'oncreate', function () {\n let timeout;\n const post = this.attrs.post;\n const replies = post.mentionedBy();\n if (replies && replies.length) {\n const $preview = $('
      ');\n this.$().append($preview);\n const $parentPost = this.$();\n const $this = this.$('.Post-mentionedBy');\n const showPreview = () => {\n if (!$preview.hasClass('in') && $preview.is(':visible')) return;\n\n // When the user hovers their mouse over the list of people who have\n // replied to the post, render a list of reply previews into a\n // popup.\n m.render($preview[0], m('[', null, replies.map(reply => m(\"li\", {\n \"data-number\": reply.number()\n }, m(PostPreview, {\n post: reply,\n onclick: hidePreview.bind(this)\n }))), replies.length < post.mentionedByCount() && m(\"li\", {\n className: \"Post-mentionedBy-preview-more\"\n }, m(Button, {\n className: \"PostPreview Button\",\n onclick: () => {\n hidePreview.call(this);\n app.modal.show(MentionedByModal, {\n post\n });\n }\n }, m(\"span\", {\n className: \"PostPreview-content\"\n }, m(\"span\", {\n className: \"PostPreview-badge Avatar\"\n }, m(Icon, {\n name: 'fas fa-reply-all'\n })), m(\"span\", null, app.translator.trans('flarum-mentions.forum.post.mentioned_by_more_text', {\n count: post.mentionedByCount() - replies.length\n })))))));\n $preview.show().css('top', $this.offset().top - $parentPost.offset().top + $this.outerHeight(true)).css('left', $this.offsetParent().offset().left - $parentPost.offset().left).css('max-width', $parentPost.width());\n setTimeout(() => $preview.off('transitionend').addClass('in'));\n };\n $this.add($preview).hover(() => {\n clearTimeout(timeout);\n timeout = setTimeout(showPreview, 250);\n }, () => {\n clearTimeout(timeout);\n timeout = setTimeout(hidePreview, 250);\n });\n\n // Whenever the user hovers their mouse over a particular name in the\n // list of repliers, highlight the corresponding post in the preview\n // popup.\n this.$().find('.Post-mentionedBy-summary a').hover(function () {\n $preview.find('[data-number=\"' + $(this).data('number') + '\"]').addClass('active');\n }, function () {\n $preview.find('[data-number]').removeClass('active');\n });\n }\n });\n extend(CommentPost.prototype, 'footerItems', function (items) {\n const post = this.attrs.post;\n const replies = post.mentionedBy();\n if (replies && replies.length) {\n const users = [];\n const repliers = replies.sort(reply => reply.user() === app.session.user ? -1 : 0).filter(reply => {\n const user = reply.user();\n if (users.indexOf(user) === -1) {\n users.push(user);\n return true;\n }\n });\n const limit = 4;\n const overLimit = post.mentionedByCount() > limit;\n\n // Create a list of unique users who have replied. So even if a user has\n // replied twice, they will only be in this array once.\n const names = repliers.slice(0, overLimit ? limit - 1 : limit).map(reply => {\n const user = reply.user();\n return m(Link, {\n href: app.route.post(reply),\n onclick: hidePreview.bind(this),\n \"data-number\": reply.number()\n }, app.session.user === user ? app.translator.trans('flarum-mentions.forum.post.you_text') : username(user));\n });\n\n // If there are more users that we've run out of room to display, add a \"x\n // others\" name to the end of the list. Clicking on it will display a modal\n // with a full list of names.\n if (overLimit) {\n const count = post.mentionedByCount() - names.length;\n names.push(app.translator.trans('flarum-mentions.forum.post.others_text', {\n count\n }));\n }\n items.add('replies', m(\"div\", {\n className: \"Post-mentionedBy\"\n }, m(\"span\", {\n className: \"Post-mentionedBy-summary\"\n }, m(Icon, {\n name: 'fas fa-reply'\n }), app.translator.trans(\"flarum-mentions.forum.post.mentioned_by\".concat(repliers[0].user() === app.session.user ? '_self' : '', \"_text\"), {\n count: names.length,\n users: punctuateSeries(names)\n }))));\n }\n });\n}","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport Button from 'flarum/common/components/Button';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport reply from './utils/reply';\nexport default function addPostReplyAction() {\n extend(CommentPost.prototype, 'actionItems', function (items) {\n const post = this.attrs.post;\n if (post.isHidden() || app.session.user && !post.discussion().canReply()) return;\n items.add('reply', m(Button, {\n className: \"Button Button--link\",\n onclick: () => reply(post)\n }, app.translator.trans('flarum-mentions.forum.post.reply_link')));\n });\n}","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport PostQuoteButton from './fragments/PostQuoteButton';\nimport selectedText from './utils/selectedText';\nexport default function addPostQuoteButton() {\n extend(CommentPost.prototype, 'oncreate', function () {\n const post = this.attrs.post;\n if (post.isHidden() || app.session.user && !post.discussion().canReply()) return;\n const $postBody = this.$('.Post-body');\n\n // Wrap the quote button in a wrapper element so that we can render\n // button into it.\n const $container = $('
      ');\n const button = new PostQuoteButton(post);\n const handler = function (e) {\n setTimeout(() => {\n const content = selectedText($postBody);\n if (content) {\n button.content = content;\n m.render($container[0], button.render());\n const rects = window.getSelection().getRangeAt(0).getClientRects();\n const firstRect = rects[0];\n if (e.clientY < firstRect.bottom && e.clientX - firstRect.right < firstRect.left - e.clientX) {\n button.showStart(firstRect.left, firstRect.top);\n } else {\n const lastRect = rects[rects.length - 1];\n button.showEnd(lastRect.right, lastRect.bottom);\n }\n }\n }, 1);\n };\n this.$().after($container).on('mouseup', handler);\n if ('ontouchstart' in window) {\n document.addEventListener('selectionchange', handler, false);\n }\n });\n}","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport TextEditorButton from 'flarum/common/components/TextEditorButton';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport AutocompleteDropdown from './fragments/AutocompleteDropdown';\nimport MentionableModels from './mentionables/MentionableModels';\nexport default function addComposerAutocomplete() {\n const $container = $('
      ');\n const dropdown = new AutocompleteDropdown();\n extend('flarum/common/components/TextEditor', 'onbuild', function () {\n const $editor = this.$('.TextEditor-editor').wrap('
      ');\n this.navigator = new KeyboardNavigatable();\n this.navigator.when(() => dropdown.active).onUp(() => dropdown.navigate(-1)).onDown(() => dropdown.navigate(1)).onSelect(dropdown.complete.bind(dropdown)).onCancel(dropdown.hide.bind(dropdown)).bindTo($editor);\n $editor.after($container);\n });\n extend('flarum/common/components/TextEditor', 'buildEditorParams', function (params) {\n let relMentionStart;\n let absMentionStart;\n let matchTyped;\n let mentionables = new MentionableModels({\n onmouseenter: function () {\n dropdown.setIndex($(this).parent().index());\n },\n onclick: replacement => {\n this.attrs.composer.editor.replaceBeforeCursor(absMentionStart - 1, replacement + ' ');\n dropdown.hide();\n }\n });\n const suggestionsInputListener = () => {\n const selection = this.attrs.composer.editor.getSelectionRange();\n const cursor = selection[0];\n if (selection[1] - cursor > 0) return;\n\n // Search backwards from the cursor for a mention triggering symbol. If we find one,\n // we will want to show the correct autocomplete dropdown!\n // Check classes implementing the IMentionableModel interface to see triggering symbols.\n const lastChunk = this.attrs.composer.editor.getLastNChars(30);\n absMentionStart = 0;\n let activeFormat = null;\n for (let i = lastChunk.length - 1; i >= 0; i--) {\n const character = lastChunk.substr(i, 1);\n activeFormat = app.mentionFormats.get(character);\n if (activeFormat && (i === 0 || /\\s/.test(lastChunk.substr(i - 1, 1)))) {\n relMentionStart = i + 1;\n absMentionStart = cursor - lastChunk.length + i + 1;\n mentionables.init(activeFormat.makeMentionables());\n break;\n }\n }\n dropdown.hide();\n dropdown.active = false;\n if (absMentionStart) {\n var _mentionables$search;\n const typed = lastChunk.substring(relMentionStart).toLowerCase();\n matchTyped = activeFormat.queryFromTyped(typed);\n if (!matchTyped) return;\n mentionables.typed = matchTyped;\n const buildSuggestions = () => {\n // If the user has started to type a mention,\n // then suggest models matching.\n const suggestions = mentionables.buildSuggestions();\n if (suggestions.length) {\n dropdown.items = suggestions;\n m.render($container[0], dropdown.render());\n dropdown.show();\n const coordinates = this.attrs.composer.editor.getCaretCoordinates(absMentionStart);\n const width = dropdown.$().outerWidth();\n const height = dropdown.$().outerHeight();\n const parent = dropdown.$().offsetParent();\n let left = coordinates.left;\n let top = coordinates.top + 15;\n\n // Keep the dropdown inside the editor.\n if (top + height > parent.height()) {\n top = coordinates.top - height - 15;\n }\n if (left + width > parent.width()) {\n left = parent.width() - width;\n }\n\n // Prevent the dropdown from going off screen on mobile\n top = Math.max(-(parent.offset().top - $(document).scrollTop()), top);\n left = Math.max(-parent.offset().left, left);\n dropdown.show(left, top);\n } else {\n dropdown.active = false;\n dropdown.hide();\n }\n };\n dropdown.active = true;\n buildSuggestions();\n dropdown.setIndex(0);\n dropdown.$().scrollTop(0);\n (_mentionables$search = mentionables.search()) == null ? void 0 : _mentionables$search.then(buildSuggestions);\n }\n };\n params.inputListeners.push(suggestionsInputListener);\n });\n extend('flarum/common/components/TextEditor', 'toolbarItems', function (items) {\n items.add('mention', m(TextEditorButton, {\n onclick: () => this.attrs.composer.editor.insertAtCursor(' @'),\n icon: \"fas fa-at\"\n }, app.translator.trans('flarum-mentions.forum.composer.mention_tooltip')));\n });\n}"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","MentionedByModalState","constructor","params","page","limit","super","type","add","MentionedByModal","oninit","vnode","this","state","filter","mentionedPost","attrs","post","id","sort","refresh","className","title","content","m","isInitialLoading","getPages","map","items","reply","number","onclick","hasNext","loadNext","loading","isLoadingNext","insertMention","composer","quote","Promise","resolve","mention","replacement","fields","body","originalContent","cursorPosition","editor","getSelectionRange","preceding","slice","precedingNewlines","length","match","insertAtCursor","Array","join","trim","replace","EditPostComposer","checkModule","discussion","then","PostQuoteButton","view","name","show","left","top","$this","$","parentOffset","offsetParent","offset","css","hideHandler","hide","bind","document","on","showStart","window","scrollTop","outerHeight","showEnd","right","bottom","outerWidth","off","selectedText","selection","getSelection","isCollapsed","range","getRangeAt","parent","commonAncestorContainer","contains","clone","append","cloneContents","find","replaceWith","alt","concat","src","innerText","href","text","_typeof","iterator","_defineProperty","arg","input","hint","prim","toPrimitive","undefined","res","TypeError","String","toPropertyKey","configurable","writable","AutocompleteDropdown","arguments","item","active","navigate","delta","keyWasJustPressed","setIndex","index","clearTimeout","keyWasJustPressedTimeout","setTimeout","complete","eq","click","scrollToItem","$dropdown","$items","rangedIndex","$item","removeClass","addClass","dropdownScroll","dropdownTop","dropdownBottom","itemTop","itemBottom","parseInt","stop","animate","MentionsDropdownItem","mentionable","assign","children","MentionableModels","dropdownItemAttrs","throttle","async","typed","typedLower","toLowerCase","searched","includes","mentionables","model","search","results","has","set","push","init","Map","initialResults","result","matches","_this$typed","makeSuggestion","suggestion","buildSuggestions","suggestions","enabled","from","values","max","maxStoreMatchedResults","splice","dropdownItem","PostMentionedNotification","icon","notification","subject","replyNumber","user","fromUser","count","excerpt","truncate","contentPlain","UserMentionedNotification","GroupMentionedNotification","MentionFormat","makeMentionables","_this$instances","instances","Mentionable","getMentionable","_this$makeMentionable","extend","extendable","Error","MentionableModel","format","getDeletedUserText","getCleanDisplayName","useDisplayName","displayName","username","UserMention","cleanText","some","substr","q","PostMention","ReplyComposer","composerAttrs","composerPost","posts","contentType","b","createdAt","getTime","_model$contentPlain","userMentionable","GroupMention","g","group","namePlural","groupName","color","nameSingular","_app$session$user$can","_app$session","_app$session$user","canMentionGroups","AtMentionFormat","trigger","queryFromTyped","matchTyped","char","simple","safe","TagMention","tag","slug","tagName","extensions","HashMentionFormat","MentionFormats","symbol","_this$formats$find","formats","f","MentionsUserPage","loadResults","mentioned","loadLimit","hasMany","attribute","filterUserMentions","hasAttribute","getAttribute","setAttribute","invalidate","postFilterUserMentions","filterPostMentions","postFilterPostMentions","filterGroupMentions","postFilterGroupMentions","_app$session2","_app$session2$user","filterTagMentions","postFilterTagMentions","postId","app","mentionFormats","addPreviews","contentHtml","oldPostContentHtml","isEditing","parentPost","$parentPost","e","route","preventDefault","each","data","timeout","$preview","getPostElement","showPreview","$post","visible","pageYOffset","height","positionPreview","previewHeight","width","showPost","render","store","getById","hidePreview","hasClass","one","cancelable","hover","stopPropagation","addPostMentionPreviews","replies","mentionedBy","is","mentionedByCount","users","repliers","indexOf","overLimit","names","addMentionedByList","isHidden","canReply","$postBody","$container","button","handler","rects","getClientRects","firstRect","clientY","clientX","lastRect","after","addEventListener","dropdown","$editor","wrap","navigator","when","onUp","onDown","onSelect","onCancel","bindTo","relMentionStart","absMentionStart","onmouseenter","replaceBeforeCursor","inputListeners","cursor","lastChunk","getLastNChars","activeFormat","i","character","test","_mentionables$search","substring","coordinates","getCaretCoordinates","Math","addComposerAutocomplete","label","getPlainContent","classList","getComputedStyle","getPropertyValue"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/mentions/webpack/bootstrap","webpack://@flarum/mentions/webpack/runtime/compat get default export","webpack://@flarum/mentions/webpack/runtime/define property getters","webpack://@flarum/mentions/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/mentions/webpack/runtime/make namespace object","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/utils/string')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/components/Post')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/components/CommentPost')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/components/PostPreview')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/helpers/punctuateSeries')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/helpers/username')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Icon')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Modal')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/states/PaginatedListState')\"","webpack://@flarum/mentions/./src/forum/state/MentionedByModalState.ts","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/mentions/./src/forum/components/MentionedByModal.tsx","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/utils/DiscussionControls')\"","webpack://@flarum/mentions/./src/forum/utils/reply.js","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/Fragment')\"","webpack://@flarum/mentions/./src/forum/fragments/PostQuoteButton.js","webpack://@flarum/mentions/./src/forum/utils/selectedText.js","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/TextEditorButton')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/mentions/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/mentions/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/mentions/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/mentions/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/mentions/./src/forum/fragments/AutocompleteDropdown.js","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/mentions/./src/forum/components/MentionsDropdownItem.tsx","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/utils/throttleDebounce')\"","webpack://@flarum/mentions/./src/forum/mentionables/MentionableModels.tsx","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/components/Notification')\"","webpack://@flarum/mentions/./src/forum/components/PostMentionedNotification.js","webpack://@flarum/mentions/./src/forum/components/UserMentionedNotification.js","webpack://@flarum/mentions/./src/forum/components/GroupMentionedNotification.js","webpack://@flarum/mentions/./src/forum/mentionables/formats/MentionFormat.ts","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Avatar')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/mentions/./src/forum/mentionables/MentionableModel.ts","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/mentions/./src/forum/utils/getCleanDisplayName.js","webpack://@flarum/mentions/./src/forum/mentionables/UserMention.tsx","webpack://@flarum/mentions/./src/forum/mentionables/PostMention.tsx","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/models/Group')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/Badge')\"","webpack://@flarum/mentions/./src/forum/mentionables/GroupMention.tsx","webpack://@flarum/mentions/./src/forum/mentionables/formats/AtMentionFormat.ts","webpack://@flarum/mentions/./src/forum/mentionables/TagMention.tsx","webpack://@flarum/mentions/./src/forum/mentionables/formats/HashMentionFormat.ts","webpack://@flarum/mentions/./src/forum/mentionables/formats/MentionFormats.ts","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/components/UserPage')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/components/LinkButton')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/models/Post')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/models/User')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'forum/components/PostsUserPage')\"","webpack://@flarum/mentions/./src/forum/components/MentionsUserPage.js","webpack://@flarum/mentions/./src/forum/extend.ts","webpack://@flarum/mentions/./src/forum/utils/textFormatter.js","webpack://@flarum/mentions/./src/forum/extenders/Mentionables.ts","webpack://@flarum/mentions/./src/forum/index.js","webpack://@flarum/mentions/./src/forum/addPostMentionPreviews.js","webpack://@flarum/mentions/./src/forum/addMentionedByList.js","webpack://@flarum/mentions/./src/forum/addPostReplyAction.js","webpack://@flarum/mentions/./src/forum/addPostQuoteButton.js","webpack://@flarum/mentions/./src/forum/addComposerAutocomplete.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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', 'forum/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/string');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/textContrastClass');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/Post');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/CommentPost');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/PostPreview');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LoadingIndicator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Link');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/punctuateSeries');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/username');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Icon');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Modal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/states/PaginatedListState');","import PaginatedListState from 'flarum/common/states/PaginatedListState';\nexport default class MentionedByModalState extends PaginatedListState {\n constructor(params, page) {\n if (page === void 0) {\n page = 1;\n }\n const limit = 10;\n params.page = {\n ...(params.page || {}),\n limit\n };\n super(params, page, limit);\n }\n get type() {\n return 'posts';\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/state/MentionedByModalState', MentionedByModalState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","import app from 'flarum/forum/app';\nimport PostPreview from 'flarum/forum/components/PostPreview';\nimport Modal from 'flarum/common/components/Modal';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Button from 'flarum/common/components/Button';\nimport MentionedByModalState from '../state/MentionedByModalState';\nimport Form from 'flarum/common/components/Form';\nexport default class MentionedByModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n this.state = new MentionedByModalState({\n filter: {\n mentionedPost: this.attrs.post.id()\n },\n sort: 'number'\n });\n this.state.refresh();\n }\n className() {\n return 'MentionedByModal';\n }\n title() {\n return app.translator.trans('flarum-mentions.forum.mentioned_by.title');\n }\n content() {\n return m('[', null, m(\"div\", {\n className: \"Modal-body\"\n }, this.state.isInitialLoading() ? m(LoadingIndicator, null) : m('[', null, m(\"ul\", {\n className: \"MentionedByModal-list Dropdown-menu Dropdown-menu--inline Post-mentionedBy-preview\"\n }, this.state.getPages().map(page => page.items.map(reply => m(\"li\", {\n \"data-number\": reply.number()\n }, m(PostPreview, {\n post: reply,\n onclick: () => app.modal.close()\n }))))))), this.state.hasNext() && m(\"div\", {\n className: \"Modal-footer\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(Button, {\n className: \"Button Button--block\",\n onclick: () => this.state.loadNext(),\n loading: this.state.isLoadingNext()\n }, app.translator.trans('flarum-mentions.forum.mentioned_by.load_more_button'))))));\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/components/MentionedByModal', MentionedByModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/DiscussionControls');","import app from 'flarum/forum/app';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nexport function insertMention(post, composer, quote) {\n return new Promise(resolve => {\n const mention = app.mentionFormats.mentionable('post').replacement(post) + ' ';\n\n // If the composer is empty, then assume we're starting a new reply.\n // In which case we don't want the user to have to confirm if they\n // close the composer straight away.\n if (!composer.fields.content()) {\n composer.body.attrs.originalContent = mention;\n }\n const cursorPosition = composer.editor.getSelectionRange()[0];\n const preceding = composer.fields.content().slice(0, cursorPosition);\n const precedingNewlines = preceding.length == 0 ? 0 : 3 - preceding.match(/(\\n{0,2})$/)[0].length;\n composer.editor.insertAtCursor(Array(precedingNewlines).join('\\n') + (\n // Insert up to two newlines, depending on preceding whitespace\n quote ? '> ' + mention + quote.trim().replace(/\\n/g, '\\n> ') + '\\n\\n' : mention), false);\n return resolve(composer);\n });\n}\nexport default function reply(post, quote) {\n const EditPostComposer = flarum.reg.checkModule('core', 'forum/components/EditPostComposer');\n if (EditPostComposer && app.composer.bodyMatches(EditPostComposer) && app.composer.body.attrs.post.discussion() === post.discussion()) {\n // If we're already editing a post in the discussion of post we're quoting,\n // insert the mention directly.\n return insertMention(post, app.composer, quote);\n } else {\n // The default \"Reply\" action behavior will only open a new composer if\n // necessary, but it will always be a ReplyComposer, hence the exceptional\n // case above.\n return DiscussionControls.replyAction.call(post.discussion()).then(composer => insertMention(post, composer, quote));\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/utils/reply', reply);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Fragment');","import app from 'flarum/forum/app';\nimport Fragment from 'flarum/common/Fragment';\nimport Icon from 'flarum/common/components/Icon';\nimport reply from '../utils/reply';\nexport default class PostQuoteButton extends Fragment {\n constructor(post) {\n super();\n this.post = post;\n }\n view() {\n return m(\"button\", {\n className: \"Button PostQuoteButton\",\n onclick: () => {\n reply(this.post, this.content);\n }\n }, m(Icon, {\n name: \"fas fa-quote-left\",\n className: \"Button-icon\"\n }), app.translator.trans('flarum-mentions.forum.post.quote_button'));\n }\n show(left, top) {\n const $this = this.$().show();\n const parentOffset = $this.offsetParent().offset();\n $this.css('left', left - parentOffset.left).css('top', top - parentOffset.top);\n this.hideHandler = this.hide.bind(this);\n $(document).on('mouseup', this.hideHandler);\n }\n showStart(left, top) {\n const $this = this.$();\n this.show(left, $(window).scrollTop() + top - $this.outerHeight() - 5);\n }\n showEnd(right, bottom) {\n const $this = this.$();\n this.show(right - $this.outerWidth(), $(window).scrollTop() + bottom + 5);\n }\n hide() {\n this.$().hide();\n $(document).off('mouseup', this.hideHandler);\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/fragments/PostQuoteButton', PostQuoteButton);","/**\n * Finds the selected text in the provided composer body.\n */\nexport default function selectedText(body) {\n const selection = window.getSelection();\n if (!selection.isCollapsed) {\n const range = selection.getRangeAt(0);\n const parent = range.commonAncestorContainer;\n if (body[0] === parent || $.contains(body[0], parent)) {\n const clone = $('
      ').append(range.cloneContents());\n\n // Replace emoji images with their shortcode (found in alt attribute)\n clone.find('img.emoji').replaceWith(function () {\n return this.alt;\n });\n\n // Replace all other images with a Markdown image\n clone.find('img').replaceWith(function () {\n return \"![](\".concat(this.src, \")\");\n });\n\n // Replace all links with a Markdown link\n clone.find('a').replaceWith(function () {\n return \"[\".concat(this.innerText, \"](\").concat(this.href, \")\");\n });\n return clone.text();\n }\n }\n return '';\n}\nflarum.reg.add('flarum-mentions', 'forum/utils/selectedText', selectedText);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/TextEditorButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","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}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Fragment from 'flarum/common/Fragment';\nexport default class AutocompleteDropdown extends Fragment {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"items\", []);\n _defineProperty(this, \"active\", false);\n _defineProperty(this, \"index\", 0);\n _defineProperty(this, \"keyWasJustPressed\", false);\n }\n view() {\n return m(\"ul\", {\n className: \"Dropdown-menu MentionsDropdown\"\n }, this.items.map(item => m(\"li\", null, item)));\n }\n show(left, top) {\n this.$().show().css({\n left: left + 'px',\n top: top + 'px'\n });\n this.active = true;\n }\n hide() {\n this.$().hide();\n this.active = false;\n }\n navigate(delta) {\n this.keyWasJustPressed = true;\n this.setIndex(this.index + delta, true);\n clearTimeout(this.keyWasJustPressedTimeout);\n this.keyWasJustPressedTimeout = setTimeout(() => this.keyWasJustPressed = false, 500);\n }\n complete() {\n this.$('li').eq(this.index).find('button').click();\n }\n setIndex(index, scrollToItem) {\n if (this.keyWasJustPressed && !scrollToItem) return;\n const $dropdown = this.$();\n const $items = $dropdown.find('li');\n let rangedIndex = index;\n if (rangedIndex < 0) {\n rangedIndex = $items.length - 1;\n } else if (rangedIndex >= $items.length) {\n rangedIndex = 0;\n }\n this.index = rangedIndex;\n const $item = $items.removeClass('active').eq(rangedIndex).addClass('active');\n if (scrollToItem) {\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}\nflarum.reg.add('flarum-mentions', 'forum/fragments/AutocompleteDropdown', AutocompleteDropdown);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Component');","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 MentionsDropdownItem extends Component {\n view(vnode) {\n const {\n mentionable,\n ...attrs\n } = this.attrs;\n const className = classList('MentionsDropdownItem', 'PostPreview', \"MentionsDropdown-\".concat(mentionable.type()));\n return m(\"button\", Object.assign({\n className: className\n }, attrs), m(\"span\", {\n className: \"PostPreview-content\"\n }, vnode.children));\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/components/MentionsDropdownItem', MentionsDropdownItem);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/throttleDebounce');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport MentionsDropdownItem from '../components/MentionsDropdownItem';\nimport { throttle } from 'flarum/common/utils/throttleDebounce';\nexport default class MentionableModels {\n constructor(dropdownItemAttrs) {\n _defineProperty(this, \"mentionables\", void 0);\n /**\n * We store models returned from an API here to preserve order in which they are returned\n * This prevents the list jumping around while models are returned.\n * We also use a hashmap for model IDs to provide O(1) lookup for the users already in the list.\n */\n _defineProperty(this, \"results\", {});\n _defineProperty(this, \"typed\", null);\n _defineProperty(this, \"searched\", []);\n _defineProperty(this, \"dropdownItemAttrs\", {});\n /**\n * Don't send API calls searching for models until at least 2 characters have been typed.\n * This focuses the mention results on models already loaded.\n */\n _defineProperty(this, \"search\", throttle(250, async () => {\n if (!this.typed || this.typed.length <= 1) return;\n const typedLower = this.typed.toLowerCase();\n if (this.searched.includes(typedLower)) return;\n for (const mentionable of this.mentionables) {\n for (const model of await mentionable.search(typedLower)) {\n if (!this.results[mentionable.type()].has(model.id())) {\n this.results[mentionable.type()].set(model.id(), model);\n }\n }\n }\n this.searched.push(typedLower);\n return Promise.resolve();\n }));\n this.dropdownItemAttrs = dropdownItemAttrs;\n }\n init(mentionables) {\n this.typed = null;\n this.mentionables = mentionables;\n for (const mentionable of this.mentionables) {\n this.results[mentionable.type()] = new Map(mentionable.initialResults().map(result => [result.id(), result]));\n }\n }\n matches(mentionable, model) {\n var _this$typed;\n return mentionable.matches(model, ((_this$typed = this.typed) == null ? void 0 : _this$typed.toLowerCase()) || '');\n }\n makeSuggestion(mentionable, model) {\n const content = mentionable.suggestion(model, this.typed);\n const replacement = mentionable.replacement(model);\n const {\n onclick,\n ...attrs\n } = this.dropdownItemAttrs;\n return m(MentionsDropdownItem, Object.assign({\n mentionable: mentionable,\n onclick: () => onclick(replacement)\n }, attrs), content);\n }\n buildSuggestions() {\n const suggestions = [];\n for (const mentionable of this.mentionables) {\n if (!mentionable.enabled()) continue;\n let matches = Array.from(this.results[mentionable.type()].values()).filter(model => this.matches(mentionable, model));\n const max = mentionable.maxStoreMatchedResults();\n if (max) matches = matches.splice(0, max);\n for (const model of matches) {\n const dropdownItem = this.makeSuggestion(mentionable, model);\n suggestions.push(dropdownItem);\n }\n }\n return suggestions;\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/MentionableModels', MentionableModels);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/Notification');","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\nexport default class PostMentionedNotification extends Notification {\n icon() {\n return 'fas fa-reply';\n }\n href() {\n const notification = this.attrs.notification;\n const post = notification.subject();\n const content = notification.content();\n return app.route.discussion(post.discussion(), content && content.replyNumber);\n }\n content() {\n const notification = this.attrs.notification;\n const user = notification.fromUser();\n return app.translator.trans('flarum-mentions.forum.notifications.post_mentioned_text', {\n user,\n count: 1\n });\n }\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain() || '', 200);\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/components/PostMentionedNotification', PostMentionedNotification);","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\nexport default class UserMentionedNotification extends Notification {\n icon() {\n return 'fas fa-at';\n }\n href() {\n const post = this.attrs.notification.subject();\n return app.route.discussion(post.discussion(), post.number());\n }\n content() {\n const user = this.attrs.notification.fromUser();\n return app.translator.trans('flarum-mentions.forum.notifications.user_mentioned_text', {\n user\n });\n }\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain(), 200);\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/components/UserMentionedNotification', UserMentionedNotification);","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { truncate } from 'flarum/common/utils/string';\nexport default class GroupMentionedNotification extends Notification {\n icon() {\n return 'fas fa-at';\n }\n href() {\n const post = this.attrs.notification.subject();\n return app.route.discussion(post.discussion(), post.number());\n }\n content() {\n const user = this.attrs.notification.fromUser();\n return app.translator.trans('flarum-mentions.forum.notifications.group_mentioned_text', {\n user\n });\n }\n excerpt() {\n return truncate(this.attrs.notification.subject().contentPlain(), 200);\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/components/GroupMentionedNotification', GroupMentionedNotification);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class MentionFormat {\n constructor() {\n _defineProperty(this, \"instances\", void 0);\n _defineProperty(this, \"mentionables\", void 0);\n _defineProperty(this, \"extendable\", void 0);\n }\n makeMentionables() {\n var _this$instances;\n return (_this$instances = this.instances) != null ? _this$instances : this.instances = this.mentionables.map(Mentionable => new Mentionable(this));\n }\n getMentionable(type) {\n var _this$makeMentionable;\n return (_this$makeMentionable = this.makeMentionables().find(mentionable => mentionable.type() === type)) != null ? _this$makeMentionable : null;\n }\n extend(mentionable) {\n if (!this.extendable) throw new Error('This mention format does not allow extending.');\n this.mentionables.push(mentionable);\n }\n\n /**\n * Picks the term to search in the API from the typed text.\n * @example:\n * * Full text = `Hello @\"John D`\n * * Typed text = `\"John D`\n * * Query = `John D`\n */\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/formats/MentionFormat', MentionFormat);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Avatar');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/highlight');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class MentionableModel {\n constructor(format) {\n _defineProperty(this, \"format\", void 0);\n this.format = format;\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/MentionableModel', MentionableModel);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","import app from 'flarum/forum/app';\nimport extractText from 'flarum/common/utils/extractText';\n\n/**\n * Whether to use the old mentions format.\n *\n * `'@username'` or `'@\"Display name\"'`\n */\nexport const shouldUseOldFormat = () => app.forum.attribute('allowUsernameMentionFormat') || false;\nconst getDeletedUserText = () => extractText(app.translator.trans('core.lib.username.deleted_text'));\n\n/**\n * Fetches a user's username or display name.\n *\n * Chooses based on the format option set in the admin settings page.\n *\n * @param user An instance of the User model to fetch the username for\n * @param useDisplayName If `true`, uses `user.displayName()`, otherwise, uses `user.username()`\n */\nexport default function getCleanDisplayName(user, useDisplayName) {\n if (useDisplayName === void 0) {\n useDisplayName = true;\n }\n if (!user) return getDeletedUserText().replace(/\"#[a-z]{0,3}[0-9]+/, '_');\n const text = (useDisplayName ? user.displayName() : user.username()) || getDeletedUserText();\n return text.replace(/\"#[a-z]{0,3}[0-9]+/, '_');\n}\nflarum.reg.add('flarum-mentions', 'forum/utils/getCleanDisplayName', getCleanDisplayName);","import app from 'flarum/forum/app';\nimport usernameHelper from 'flarum/common/helpers/username';\nimport Avatar from 'flarum/common/components/Avatar';\nimport highlight from 'flarum/common/helpers/highlight';\nimport MentionableModel from './MentionableModel';\nimport getCleanDisplayName, { shouldUseOldFormat } from '../utils/getCleanDisplayName';\nexport default class UserMention extends MentionableModel {\n type() {\n return 'user';\n }\n initialResults() {\n return Array.from(app.store.all('users'));\n }\n\n /**\n * Automatically determines which mention syntax to be used based on the option in the\n * admin dashboard. Also performs display name clean-up automatically.\n *\n * @\"Display name\"#UserID or `@username`\n *\n * @example New display name syntax\n * // '@\"user\"#1'\n * forUser(User) // User is ID 1, display name is 'User'\n *\n * @example Using old syntax\n * // '@username'\n * forUser(user) // User's username is 'username'\n */\n replacement(user) {\n if (shouldUseOldFormat()) {\n const cleanText = getCleanDisplayName(user, false);\n return this.format.format(cleanText);\n }\n const cleanText = getCleanDisplayName(user);\n return this.format.format(cleanText, '', user.id());\n }\n suggestion(model, typed) {\n const username = usernameHelper(model, name => highlight(name, typed));\n return m('[', null, m(Avatar, {\n user: model\n }), username);\n }\n matches(model, typed) {\n if (!typed) return false;\n const names = [model.username(), model.displayName()];\n return names.some(name => name.toLowerCase().substr(0, typed.length) === typed);\n }\n maxStoreMatchedResults() {\n return null;\n }\n async search(typed) {\n return await app.store.find('users', {\n filter: {\n q: typed\n },\n page: {\n limit: 5\n }\n });\n }\n enabled() {\n return true;\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/UserMention', UserMention);","import app from 'flarum/forum/app';\nimport MentionableModel from './MentionableModel';\nimport usernameHelper from 'flarum/common/helpers/username';\nimport Avatar from 'flarum/common/components/Avatar';\nimport highlight from 'flarum/common/helpers/highlight';\nimport { truncate } from 'flarum/common/utils/string';\nimport getCleanDisplayName from '../utils/getCleanDisplayName';\nexport default class PostMention extends MentionableModel {\n type() {\n return 'post';\n }\n\n /**\n * If the user is replying to a discussion, or if they are editing a\n * post, then we can suggest other posts in the discussion to mention.\n * We will add the 5 most recent comments in the discussion which\n * match any username characters that have been typed.\n */\n initialResults() {\n const EditPostComposer = flarum.reg.checkModule('core', 'forum/components/EditPostComposer');\n const ReplyComposer = flarum.reg.checkModule('core', 'forum/components/ReplyComposer');\n if ((!ReplyComposer || !app.composer.bodyMatches(ReplyComposer)) && (!EditPostComposer || !app.composer.bodyMatches(EditPostComposer))) {\n return [];\n }\n\n // @ts-ignore\n const composerAttrs = app.composer.body.attrs;\n const composerPost = composerAttrs.post;\n const discussion = composerPost && composerPost.discussion() || composerAttrs.discussion;\n return discussion.posts()\n // Filter to only comment posts, and replies before this message\n .filter(post => post && post.contentType() === 'comment' && (!composerPost || post.number() < composerPost.number()))\n // Sort by new to old\n .sort((a, b) => b.createdAt().getTime() - a.createdAt().getTime());\n }\n\n /**\n * Generates the syntax for mentioning of a post. Also cleans up the display name.\n *\n * @example Post mention\n * // '@\"User\"#p13'\n * // @\"Display name\"#pPostID\n * forPostMention(user, 13) // User display name is 'User', post ID is 13\n */\n replacement(post) {\n const user = post.user();\n const cleanText = getCleanDisplayName(user);\n return this.format.format(cleanText, 'p', post.id());\n }\n suggestion(model, typed) {\n var _model$contentPlain;\n const user = model.user() || null;\n const username = usernameHelper(user, name => highlight(name, typed));\n return m('[', null, m(Avatar, {\n user: user\n }), username, [app.translator.trans('flarum-mentions.forum.composer.reply_to_post_text', {\n number: model.number()\n }), ' — ', truncate((_model$contentPlain = model.contentPlain()) != null ? _model$contentPlain : '', 200)]);\n }\n matches(model, typed) {\n const user = model.user();\n const userMentionable = app.mentionFormats.mentionable('user');\n return !typed || user && userMentionable.matches(user, typed);\n }\n maxStoreMatchedResults() {\n return 5;\n }\n\n /**\n * Post mention suggestions are only offered from current discussion posts.\n */\n search(typed) {\n return Promise.resolve([]);\n }\n enabled() {\n return true;\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/PostMention', PostMention);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Group');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Badge');","import app from 'flarum/forum/app';\nimport Group from 'flarum/common/models/Group';\nimport MentionableModel from './MentionableModel';\nimport Badge from 'flarum/common/components/Badge';\nimport highlight from 'flarum/common/helpers/highlight';\nexport default class GroupMention extends MentionableModel {\n type() {\n return 'group';\n }\n initialResults() {\n return Array.from(app.store.all('groups').filter(g => {\n return g.id() !== Group.GUEST_ID && g.id() !== Group.MEMBER_ID;\n }));\n }\n\n /**\n * Generates the mention syntax for a group mention.\n *\n * @\"Name Plural\"#gGroupID\n *\n * @example Group mention\n * // '@\"Mods\"#g4'\n * forGroup(group) // Group display name is 'Mods', group ID is 4\n */\n replacement(group) {\n return this.format.format(group.namePlural(), 'g', group.id());\n }\n suggestion(model, typed) {\n let groupName = model.namePlural();\n if (typed) {\n groupName = highlight(groupName, typed);\n }\n return m('[', null, m(Badge, {\n className: \"Avatar Badge Badge--group--\".concat(model.id(), \" Badge-icon\"),\n color: model.color(),\n type: \"group\",\n icon: model.icon()\n }), m(\"span\", {\n className: \"username\"\n }, groupName));\n }\n matches(model, typed) {\n if (!typed) return false;\n const names = [model.namePlural().toLowerCase(), model.nameSingular().toLowerCase()];\n return names.some(name => name.toLowerCase().substr(0, typed.length) === typed);\n }\n maxStoreMatchedResults() {\n return null;\n }\n\n /**\n * All groups are already loaded, so we don't need to search for them.\n */\n search(typed) {\n return Promise.resolve([]);\n }\n enabled() {\n var _app$session$user$can, _app$session, _app$session$user;\n return (_app$session$user$can = (_app$session = app.session) == null ? void 0 : (_app$session$user = _app$session.user) == null ? void 0 : _app$session$user.canMentionGroups()) != null ? _app$session$user$can : false;\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/GroupMention', GroupMention);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport MentionFormat from './MentionFormat';\nimport UserMention from '../UserMention';\nimport PostMention from '../PostMention';\nimport GroupMention from '../GroupMention';\nexport default class AtMentionFormat extends MentionFormat {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"mentionables\", [UserMention, PostMention, GroupMention]);\n _defineProperty(this, \"extendable\", true);\n }\n trigger() {\n return '@';\n }\n queryFromTyped(typed) {\n const matchTyped = typed.match(/^[\"“]?((?:(?!\"#).)+)$/);\n return matchTyped ? matchTyped[1] : null;\n }\n format(name, char, id) {\n if (char === void 0) {\n char = '';\n }\n if (id === void 0) {\n id = null;\n }\n return {\n simple: \"@\".concat(name),\n safe: \"@\\\"\".concat(name, \"\\\"#\").concat(char).concat(id)\n }[id ? 'safe' : 'simple'];\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/formats/AtMentionFormat', AtMentionFormat);","import app from 'flarum/forum/app';\nimport Badge from 'flarum/common/components/Badge';\nimport highlight from 'flarum/common/helpers/highlight';\nimport MentionableModel from './MentionableModel';\nexport default class TagMention extends MentionableModel {\n type() {\n return 'tag';\n }\n initialResults() {\n return Array.from(app.store.all('tags'));\n }\n\n /**\n * Generates the mention syntax for a tag mention.\n *\n * ~tagSlug\n *\n * @example Tag mention\n * // ~general\n * forTag(tag) // Tag display name is 'Tag', tag ID is 5\n */\n replacement(tag) {\n return this.format.format(tag.slug());\n }\n matches(model, typed) {\n if (!typed) return false;\n const names = [model.name().toLowerCase()];\n return names.some(name => name.toLowerCase().substr(0, typed.length) === typed);\n }\n maxStoreMatchedResults() {\n return null;\n }\n async search(typed) {\n return await app.store.find('tags', {\n filter: {\n q: typed\n },\n page: {\n limit: 5\n }\n });\n }\n suggestion(model, typed) {\n let tagName = model.name();\n if (typed) {\n tagName = highlight(tagName, typed);\n }\n return m('[', null, m(Badge, {\n className: \"Avatar\",\n icon: model.icon(),\n color: model.color(),\n type: \"tag\"\n }), m(\"span\", {\n className: \"username\"\n }, tagName));\n }\n enabled() {\n return 'flarum-tags' in flarum.extensions;\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/TagMention', TagMention);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport MentionFormat from './MentionFormat';\nimport TagMention from '../TagMention';\nexport default class HashMentionFormat extends MentionFormat {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"mentionables\", [TagMention]);\n _defineProperty(this, \"extendable\", true);\n }\n trigger() {\n return '#';\n }\n queryFromTyped(typed) {\n const matchTyped = typed.match(/^[-_\\p{L}\\p{N}\\p{M}]+$/giu);\n return matchTyped ? matchTyped[0] : null;\n }\n format(slug) {\n return \"#\".concat(slug);\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/formats/HashMentionFormat', HashMentionFormat);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AtMentionFormat from './AtMentionFormat';\nimport HashMentionFormat from './HashMentionFormat';\nexport default class MentionFormats {\n constructor() {\n _defineProperty(this, \"formats\", [new AtMentionFormat(), new HashMentionFormat()]);\n }\n get(symbol) {\n var _this$formats$find;\n return (_this$formats$find = this.formats.find(f => f.trigger() === symbol)) != null ? _this$formats$find : null;\n }\n mentionable(type) {\n for (const format of this.formats) {\n const mentionable = format.getMentionable(type);\n if (mentionable) return mentionable;\n }\n return null;\n }\n extend(format) {\n this.formats.push(new format());\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/mentionables/formats/MentionFormats', MentionFormats);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/UserPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LinkButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Post');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/User');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/PostsUserPage');","import app from 'flarum/forum/app';\nimport PostsUserPage from 'flarum/forum/components/PostsUserPage';\n\n/**\n * The `MentionsUserPage` component shows post which user Mentioned at\n */\nexport default class MentionsUserPage extends PostsUserPage {\n /**\n * Load a new page of the user's activity feed.\n *\n * @param {Integer} [offset] The position to start getting results from.\n * @return {Promise}\n * @protected\n */\n loadResults(offset) {\n return app.store.find('posts', {\n filter: {\n type: 'comment',\n mentioned: this.user.id()\n },\n page: {\n offset,\n limit: this.loadLimit\n },\n sort: '-createdAt'\n });\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/components/MentionsUserPage', MentionsUserPage);","import Extend from 'flarum/common/extenders';\nimport Post from 'flarum/common/models/Post';\nimport User from 'flarum/common/models/User';\nimport MentionsUserPage from './components/MentionsUserPage';\nexport default [new Extend.Routes() //\n.add('user.mentions', '/u/:username/mentions', MentionsUserPage), new Extend.Model(Post) //\n.hasMany('mentionedBy').attribute('mentionedByCount'), new Extend.Model(User) //\n.attribute('canMentionGroups')];","import app from 'flarum/forum/app';\nimport username from 'flarum/common/helpers/username';\nimport extractText from 'flarum/common/utils/extractText';\nexport function filterUserMentions(tag) {\n let user;\n if (app.forum.attribute('allowUsernameMentionFormat') && tag.hasAttribute('username')) user = app.store.getBy('users', 'username', tag.getAttribute('username'));else if (tag.hasAttribute('id')) user = app.store.getById('users', tag.getAttribute('id'));\n if (user) {\n tag.setAttribute('id', user.id());\n tag.setAttribute('slug', user.slug());\n tag.setAttribute('displayname', extractText(username(user)));\n return true;\n }\n tag.invalidate();\n}\nexport function postFilterUserMentions(tag) {\n tag.setAttribute('deleted', false);\n}\nexport function filterPostMentions(tag) {\n const post = app.store.getById('posts', tag.getAttribute('id'));\n if (post) {\n tag.setAttribute('discussionid', post.discussion().id());\n tag.setAttribute('number', post.number());\n tag.setAttribute('displayname', extractText(username(post.user())));\n return true;\n }\n}\nexport function postFilterPostMentions(tag) {\n tag.setAttribute('deleted', false);\n}\nexport function filterGroupMentions(tag) {\n var _app$session, _app$session$user;\n if ((_app$session = app.session) != null && (_app$session$user = _app$session.user) != null && _app$session$user.canMentionGroups()) {\n const group = app.store.getById('groups', tag.getAttribute('id'));\n if (group) {\n tag.setAttribute('groupname', extractText(group.namePlural()));\n return true;\n }\n }\n tag.invalidate();\n}\nexport function postFilterGroupMentions(tag) {\n var _app$session2, _app$session2$user;\n if ((_app$session2 = app.session) != null && (_app$session2$user = _app$session2.user) != null && _app$session2$user.canMentionGroups()) {\n const group = app.store.getById('groups', tag.getAttribute('id'));\n tag.setAttribute('color', group.color());\n tag.setAttribute('icon', group.icon());\n tag.setAttribute('deleted', false);\n }\n}\nexport function filterTagMentions(tag) {\n if ('flarum-tags' in flarum.extensions) {\n const model = app.store.getBy('tags', 'slug', tag.getAttribute('slug'));\n if (model) {\n tag.setAttribute('id', model.id());\n tag.setAttribute('tagname', model.name());\n return true;\n }\n }\n tag.invalidate();\n}\nexport function postFilterTagMentions(tag) {\n if ('flarum-tags' in flarum.extensions) {\n const model = app.store.getBy('tags', 'slug', tag.getAttribute('slug'));\n tag.setAttribute('icon', model.icon());\n tag.setAttribute('color', model.color());\n tag.setAttribute('deleted', false);\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/utils/textFormatter', { filterUserMentions: filterUserMentions,postFilterUserMentions: postFilterUserMentions,filterPostMentions: filterPostMentions,postFilterPostMentions: postFilterPostMentions,filterGroupMentions: filterGroupMentions,postFilterGroupMentions: postFilterGroupMentions,filterTagMentions: filterTagMentions,postFilterTagMentions: postFilterTagMentions, });","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class Mentionables {\n constructor() {\n _defineProperty(this, \"formats\", []);\n _defineProperty(this, \"mentionables\", {});\n }\n /**\n * Register a new mention format.\n * Must extend MentionFormat and have a unique unused trigger symbol.\n */\n format(format) {\n this.formats.push(format);\n return this;\n }\n\n /**\n * Register a new mentionable model to a mention format.\n * Only works if the format has already been registered,\n * and the format allows using multiple mentionables.\n *\n * @param symbol The trigger symbol of the format to extend (ex: @).\n * @param mentionable The mentionable instance to register.\n * Must extend MentionableModel.\n */\n mentionable(symbol, mentionable) {\n if (!this.mentionables[symbol]) {\n this.mentionables[symbol] = [];\n }\n this.mentionables[symbol].push(mentionable);\n return this;\n }\n extend(app) {\n for (const format of this.formats) {\n app.mentionFormats.extend(format);\n }\n for (const symbol in this.mentionables) {\n const format = app.mentionFormats.get(symbol);\n if (!format) continue;\n for (const mentionable of this.mentionables[symbol]) {\n format.extend(mentionable);\n }\n }\n }\n}\nflarum.reg.add('flarum-mentions', 'forum/extenders/Mentionables', Mentionables);","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport { getPlainContent } from 'flarum/common/utils/string';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport Post from 'flarum/forum/components/Post';\nimport addPostMentionPreviews from './addPostMentionPreviews';\nimport addMentionedByList from './addMentionedByList';\nimport addPostReplyAction from './addPostReplyAction';\nimport addPostQuoteButton from './addPostQuoteButton';\nimport addComposerAutocomplete from './addComposerAutocomplete';\nimport PostMentionedNotification from './components/PostMentionedNotification';\nimport UserMentionedNotification from './components/UserMentionedNotification';\nimport GroupMentionedNotification from './components/GroupMentionedNotification';\nimport MentionFormats from './mentionables/formats/MentionFormats';\nimport UserPage from 'flarum/forum/components/UserPage';\nimport LinkButton from 'flarum/common/components/LinkButton';\napp.mentionFormats = new MentionFormats();\nexport { default as extend } from './extend';\napp.initializers.add('flarum-mentions', function () {\n // For every mention of a post inside a post's content, set up a hover handler\n // that shows a preview of the mentioned post.\n addPostMentionPreviews();\n\n // In the footer of each post, show information about who has replied (i.e.\n // who the post has been mentioned by).\n addMentionedByList();\n\n // Add a 'reply' control to the footer of each post. When clicked, it will\n // open up the composer and add a post mention to its contents.\n addPostReplyAction();\n\n // Show a Quote button when Post text is selected\n addPostQuoteButton();\n\n // After typing '@' in the composer, show a dropdown suggesting a bunch of\n // posts or users that the user could mention.\n addComposerAutocomplete();\n app.notificationComponents.postMentioned = PostMentionedNotification;\n app.notificationComponents.userMentioned = UserMentionedNotification;\n app.notificationComponents.groupMentioned = GroupMentionedNotification;\n\n // Add notification preferences.\n extend('flarum/forum/components/NotificationGrid', 'notificationTypes', function (items) {\n items.add('postMentioned', {\n name: 'postMentioned',\n icon: 'fas fa-reply',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_post_mentioned_label')\n });\n items.add('userMentioned', {\n name: 'userMentioned',\n icon: 'fas fa-at',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_user_mentioned_label')\n });\n items.add('groupMentioned', {\n name: 'groupMentioned',\n icon: 'fas fa-at',\n label: app.translator.trans('flarum-mentions.forum.settings.notify_group_mentioned_label')\n });\n });\n\n // Add mentions tab in user profile\n extend(UserPage.prototype, 'navItems', function (items) {\n const user = this.user;\n items.add('mentions', m(LinkButton, {\n href: app.route('user.mentions', {\n username: user.slug()\n }),\n name: \"mentions\",\n icon: \"fas fa-at\"\n }, app.translator.trans('flarum-mentions.forum.user.mentions_link')), 80);\n });\n\n // Remove post mentions when rendering post previews.\n getPlainContent.removeSelectors.push('a.PostMention');\n\n // Apply color contrast fix on group mentions.\n extend(Post.prototype, 'oncreate', function () {\n this.$('.GroupMention--colored, .TagMention--colored').each(function () {\n this.classList.add(textContrastClass(getComputedStyle(this).getPropertyValue('--color')));\n });\n });\n});\nexport * from './utils/textFormatter';\nimport './forum';","import { extend } from 'flarum/common/extend';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport PostPreview from 'flarum/forum/components/PostPreview';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nexport default function addPostMentionPreviews() {\n function addPreviews() {\n const contentHtml = this.attrs.post.contentHtml();\n if (contentHtml === this.oldPostContentHtml || this.isEditing()) return;\n this.oldPostContentHtml = contentHtml;\n const parentPost = this.attrs.post;\n const $parentPost = this.$();\n this.$().on('click', '.UserMention:not(.UserMention--deleted), .PostMention:not(.PostMention--deleted), .TagMention:not(.TagMention--deleted)', function (e) {\n m.route.set(this.getAttribute('href'));\n e.preventDefault();\n });\n this.$('.PostMention:not(.PostMention--deleted)').each(function () {\n const $this = $(this);\n const id = $this.data('id');\n let timeout;\n\n // Wrap the mention link in a wrapper element so that we can insert a\n // preview popup as its sibling and relatively position it.\n const $preview = $('
        ');\n $parentPost.append($preview);\n const getPostElement = () => {\n return $(\".PostStream-item[data-id=\\\"\".concat(id, \"\\\"]\"));\n };\n const showPreview = () => {\n // When the user hovers their mouse over the mention, look for the\n // post that it's referring to in the stream, and determine if it's\n // in the viewport. If it is, we will \"pulsate\" it.\n const $post = getPostElement();\n let visible = false;\n if ($post.length) {\n const top = $post.offset().top;\n const scrollTop = window.pageYOffset;\n if (top > scrollTop && top + $post.height() < scrollTop + $(window).height()) {\n $post.addClass('pulsate');\n visible = true;\n }\n }\n\n // Otherwise, we will show a popup preview of the post. If the post\n // hasn't yet been loaded, we will need to do that.\n if (!visible) {\n // Position the preview so that it appears above the mention.\n // (The offsetParent should be .Post-body.)\n const positionPreview = () => {\n const previewHeight = $preview.outerHeight(true);\n let offset = 0;\n\n // If the preview goes off the top of the viewport, reposition it to\n // be below the mention.\n if ($this.offset().top - previewHeight < $(window).scrollTop() + $('#header').outerHeight()) {\n offset += $this.outerHeight(true);\n } else {\n offset -= previewHeight;\n }\n $preview.show().css('top', $this.offset().top - $parentPost.offset().top + offset).css('left', $this.offsetParent().offset().left - $parentPost.offset().left).css('max-width', $this.offsetParent().width());\n };\n const showPost = post => {\n const discussion = post.discussion();\n m.render($preview[0], [discussion !== parentPost.discussion() && m(\"li\", null, m(\"span\", {\n className: \"PostMention-preview-discussion\"\n }, discussion.title())), m(\"li\", null, m(PostPreview, {\n post: post\n }))]);\n positionPreview();\n };\n const post = app.store.getById('posts', id);\n if (post && post.discussion()) {\n showPost(post);\n } else {\n m.render($preview[0], m(LoadingIndicator, null));\n app.store.find('posts', id).then(showPost);\n positionPreview();\n }\n setTimeout(() => $preview.off('transitionend').addClass('in'));\n }\n };\n const hidePreview = () => {\n getPostElement().removeClass('pulsate');\n if ($preview.hasClass('in')) {\n $preview.removeClass('in').one('transitionend', () => $preview.hide());\n }\n };\n\n // On a touch (mobile) device we cannot hover the link to reveal the preview.\n // Instead we cancel the navigation so that a click reveals the preview.\n // Users can then click on the preview to go to the post if desired.\n $this.on('touchend', e => {\n if (e.cancelable) {\n e.preventDefault();\n }\n });\n $this.add($preview).hover(() => {\n clearTimeout(timeout);\n timeout = setTimeout(showPreview, 250);\n }, () => {\n clearTimeout(timeout);\n getPostElement().removeClass('pulsate');\n timeout = setTimeout(hidePreview, 250);\n }).on('touchend', e => {\n showPreview();\n e.stopPropagation();\n });\n $(document).on('touchend', hidePreview);\n });\n }\n extend(CommentPost.prototype, 'oncreate', addPreviews);\n extend(CommentPost.prototype, 'onupdate', addPreviews);\n}","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport Link from 'flarum/common/components/Link';\nimport PostPreview from 'flarum/forum/components/PostPreview';\nimport punctuateSeries from 'flarum/common/helpers/punctuateSeries';\nimport username from 'flarum/common/helpers/username';\nimport Icon from 'flarum/common/components/Icon';\nimport Button from 'flarum/common/components/Button';\nimport MentionedByModal from './components/MentionedByModal';\nexport default function addMentionedByList() {\n function hidePreview() {\n this.$('.Post-mentionedBy-preview').removeClass('in').one('transitionend', function () {\n $(this).hide();\n });\n }\n extend(CommentPost.prototype, 'oncreate', function () {\n let timeout;\n const post = this.attrs.post;\n const replies = post.mentionedBy();\n if (replies && replies.length) {\n const $preview = $('
          ');\n this.$().append($preview);\n const $parentPost = this.$();\n const $this = this.$('.Post-mentionedBy');\n const showPreview = () => {\n if (!$preview.hasClass('in') && $preview.is(':visible')) return;\n\n // When the user hovers their mouse over the list of people who have\n // replied to the post, render a list of reply previews into a\n // popup.\n m.render($preview[0], m('[', null, replies.map(reply => m(\"li\", {\n \"data-number\": reply.number()\n }, m(PostPreview, {\n post: reply,\n onclick: hidePreview.bind(this)\n }))), replies.length < post.mentionedByCount() && m(\"li\", {\n className: \"Post-mentionedBy-preview-more\"\n }, m(Button, {\n className: \"PostPreview Button\",\n onclick: () => {\n hidePreview.call(this);\n app.modal.show(MentionedByModal, {\n post\n });\n }\n }, m(\"span\", {\n className: \"PostPreview-content\"\n }, m(\"span\", {\n className: \"PostPreview-badge Avatar\"\n }, m(Icon, {\n name: 'fas fa-reply-all'\n })), m(\"span\", null, app.translator.trans('flarum-mentions.forum.post.mentioned_by_more_text', {\n count: post.mentionedByCount() - replies.length\n })))))));\n $preview.show().css('top', $this.offset().top - $parentPost.offset().top + $this.outerHeight(true)).css('left', $this.offsetParent().offset().left - $parentPost.offset().left).css('max-width', $parentPost.width());\n setTimeout(() => $preview.off('transitionend').addClass('in'));\n };\n $this.add($preview).hover(() => {\n clearTimeout(timeout);\n timeout = setTimeout(showPreview, 250);\n }, () => {\n clearTimeout(timeout);\n timeout = setTimeout(hidePreview, 250);\n });\n\n // Whenever the user hovers their mouse over a particular name in the\n // list of repliers, highlight the corresponding post in the preview\n // popup.\n this.$().find('.Post-mentionedBy-summary a').hover(function () {\n $preview.find('[data-number=\"' + $(this).data('number') + '\"]').addClass('active');\n }, function () {\n $preview.find('[data-number]').removeClass('active');\n });\n }\n });\n extend(CommentPost.prototype, 'footerItems', function (items) {\n const post = this.attrs.post;\n const replies = post.mentionedBy();\n if (replies && replies.length) {\n const users = [];\n const repliers = replies.sort(reply => reply.user() === app.session.user ? -1 : 0).filter(reply => {\n const user = reply.user();\n if (users.indexOf(user) === -1) {\n users.push(user);\n return true;\n }\n });\n const limit = 4;\n const overLimit = post.mentionedByCount() > limit;\n\n // Create a list of unique users who have replied. So even if a user has\n // replied twice, they will only be in this array once.\n const names = repliers.slice(0, overLimit ? limit - 1 : limit).map(reply => {\n const user = reply.user();\n return m(Link, {\n href: app.route.post(reply),\n onclick: hidePreview.bind(this),\n \"data-number\": reply.number()\n }, app.session.user === user ? app.translator.trans('flarum-mentions.forum.post.you_text') : username(user));\n });\n\n // If there are more users that we've run out of room to display, add a \"x\n // others\" name to the end of the list. Clicking on it will display a modal\n // with a full list of names.\n if (overLimit) {\n const count = post.mentionedByCount() - names.length;\n names.push(app.translator.trans('flarum-mentions.forum.post.others_text', {\n count\n }));\n }\n items.add('replies', m(\"div\", {\n className: \"Post-mentionedBy\"\n }, m(\"span\", {\n className: \"Post-mentionedBy-summary\"\n }, m(Icon, {\n name: 'fas fa-reply'\n }), app.translator.trans(\"flarum-mentions.forum.post.mentioned_by\".concat(repliers[0].user() === app.session.user ? '_self' : '', \"_text\"), {\n count: names.length,\n users: punctuateSeries(names)\n }))));\n }\n });\n}","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport Button from 'flarum/common/components/Button';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport reply from './utils/reply';\nexport default function addPostReplyAction() {\n extend(CommentPost.prototype, 'actionItems', function (items) {\n const post = this.attrs.post;\n if (post.isHidden() || app.session.user && !post.discussion().canReply()) return;\n items.add('reply', m(Button, {\n className: \"Button Button--link\",\n onclick: () => reply(post)\n }, app.translator.trans('flarum-mentions.forum.post.reply_link')));\n });\n}","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport CommentPost from 'flarum/forum/components/CommentPost';\nimport PostQuoteButton from './fragments/PostQuoteButton';\nimport selectedText from './utils/selectedText';\nexport default function addPostQuoteButton() {\n extend(CommentPost.prototype, 'oncreate', function () {\n const post = this.attrs.post;\n if (post.isHidden() || app.session.user && !post.discussion().canReply()) return;\n const $postBody = this.$('.Post-body');\n\n // Wrap the quote button in a wrapper element so that we can render\n // button into it.\n const $container = $('
          ');\n const button = new PostQuoteButton(post);\n const handler = function (e) {\n setTimeout(() => {\n const content = selectedText($postBody);\n if (content) {\n button.content = content;\n m.render($container[0], button.render());\n const rects = window.getSelection().getRangeAt(0).getClientRects();\n const firstRect = rects[0];\n if (e.clientY < firstRect.bottom && e.clientX - firstRect.right < firstRect.left - e.clientX) {\n button.showStart(firstRect.left, firstRect.top);\n } else {\n const lastRect = rects[rects.length - 1];\n button.showEnd(lastRect.right, lastRect.bottom);\n }\n }\n }, 1);\n };\n this.$().after($container).on('mouseup', handler);\n if ('ontouchstart' in window) {\n document.addEventListener('selectionchange', handler, false);\n }\n });\n}","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport TextEditorButton from 'flarum/common/components/TextEditorButton';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport AutocompleteDropdown from './fragments/AutocompleteDropdown';\nimport MentionableModels from './mentionables/MentionableModels';\nexport default function addComposerAutocomplete() {\n extend('flarum/common/components/TextEditor', 'onbuild', function () {\n this.mentionsDropdown = new AutocompleteDropdown();\n const $editor = this.$('.TextEditor-editor').wrap('
          ');\n this.navigator = new KeyboardNavigatable();\n this.navigator.when(() => this.mentionsDropdown.active).onUp(() => this.mentionsDropdown.navigate(-1)).onDown(() => this.mentionsDropdown.navigate(1)).onSelect(this.mentionsDropdown.complete.bind(this.mentionsDropdown)).onCancel(this.mentionsDropdown.hide.bind(this.mentionsDropdown)).bindTo($editor);\n $editor.after($('
          '));\n });\n extend('flarum/common/components/TextEditor', 'buildEditorParams', function (params) {\n let relMentionStart;\n let absMentionStart;\n let matchTyped;\n let mentionables = new MentionableModels({\n onmouseenter: function () {\n this.mentionsDropdown.setIndex($(this).parent().index());\n },\n onclick: replacement => {\n this.attrs.composer.editor.replaceBeforeCursor(absMentionStart - 1, replacement + ' ');\n this.mentionsDropdown.hide();\n }\n });\n const suggestionsInputListener = () => {\n const selection = this.attrs.composer.editor.getSelectionRange();\n const cursor = selection[0];\n if (selection[1] - cursor > 0) return;\n\n // Search backwards from the cursor for a mention triggering symbol. If we find one,\n // we will want to show the correct autocomplete dropdown!\n // Check classes implementing the IMentionableModel interface to see triggering symbols.\n const lastChunk = this.attrs.composer.editor.getLastNChars(30);\n absMentionStart = 0;\n let activeFormat = null;\n for (let i = lastChunk.length - 1; i >= 0; i--) {\n const character = lastChunk.substr(i, 1);\n activeFormat = app.mentionFormats.get(character);\n if (activeFormat && (i === 0 || /\\s/.test(lastChunk.substr(i - 1, 1)))) {\n relMentionStart = i + 1;\n absMentionStart = cursor - lastChunk.length + i + 1;\n mentionables.init(activeFormat.makeMentionables());\n break;\n }\n }\n this.mentionsDropdown.hide();\n this.mentionsDropdown.active = false;\n if (absMentionStart) {\n var _mentionables$search;\n const typed = lastChunk.substring(relMentionStart).toLowerCase();\n matchTyped = activeFormat.queryFromTyped(typed);\n if (!matchTyped) return;\n mentionables.typed = matchTyped;\n const buildSuggestions = () => {\n // If the user has started to type a mention,\n // then suggest models matching.\n const suggestions = mentionables.buildSuggestions();\n if (suggestions.length) {\n this.mentionsDropdown.items = suggestions;\n m.render(this.$('.ComposerBody-mentionsDropdownContainer')[0], this.mentionsDropdown.render());\n this.mentionsDropdown.show();\n const coordinates = this.attrs.composer.editor.getCaretCoordinates(absMentionStart);\n const width = this.mentionsDropdown.$().outerWidth();\n const height = this.mentionsDropdown.$().outerHeight();\n const parent = this.mentionsDropdown.$().offsetParent();\n let left = coordinates.left;\n let top = coordinates.top + 15;\n\n // Keep the dropdown inside the editor.\n if (top + height > parent.height()) {\n top = coordinates.top - height - 15;\n }\n if (left + width > parent.width()) {\n left = parent.width() - width;\n }\n\n // Prevent the dropdown from going off screen on mobile\n top = Math.max(-(parent.offset().top - $(document).scrollTop()), top);\n left = Math.max(-parent.offset().left, left);\n this.mentionsDropdown.show(left, top);\n } else {\n this.mentionsDropdown.active = false;\n this.mentionsDropdown.hide();\n }\n };\n this.mentionsDropdown.active = true;\n buildSuggestions();\n this.mentionsDropdown.setIndex(0);\n this.mentionsDropdown.$().scrollTop(0);\n (_mentionables$search = mentionables.search()) == null ? void 0 : _mentionables$search.then(buildSuggestions);\n }\n };\n params.inputListeners.push(suggestionsInputListener);\n });\n extend('flarum/common/components/TextEditor', 'toolbarItems', function (items) {\n items.add('mention', m(TextEditorButton, {\n onclick: () => this.attrs.composer.editor.insertAtCursor(' @'),\n icon: \"fas fa-at\"\n }, app.translator.trans('flarum-mentions.forum.composer.mention_tooltip')));\n });\n}"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","MentionedByModalState","constructor","params","page","limit","super","type","add","MentionedByModal","oninit","vnode","this","state","filter","mentionedPost","attrs","post","id","sort","refresh","className","title","content","m","isInitialLoading","getPages","map","items","reply","number","onclick","hasNext","loadNext","loading","isLoadingNext","insertMention","composer","quote","Promise","resolve","mention","replacement","fields","body","originalContent","cursorPosition","editor","getSelectionRange","preceding","slice","precedingNewlines","length","match","insertAtCursor","Array","join","trim","replace","EditPostComposer","checkModule","discussion","then","PostQuoteButton","view","name","show","left","top","$this","$","parentOffset","offsetParent","offset","css","hideHandler","hide","bind","document","on","showStart","window","scrollTop","outerHeight","showEnd","right","bottom","outerWidth","off","selectedText","selection","getSelection","isCollapsed","range","getRangeAt","parent","commonAncestorContainer","contains","clone","append","cloneContents","find","replaceWith","alt","concat","src","innerText","href","text","_typeof","iterator","_defineProperty","arg","input","hint","prim","toPrimitive","undefined","res","TypeError","String","toPropertyKey","configurable","writable","AutocompleteDropdown","arguments","item","active","navigate","delta","keyWasJustPressed","setIndex","index","clearTimeout","keyWasJustPressedTimeout","setTimeout","complete","eq","click","scrollToItem","$dropdown","$items","rangedIndex","$item","removeClass","addClass","dropdownScroll","dropdownTop","dropdownBottom","itemTop","itemBottom","parseInt","stop","animate","MentionsDropdownItem","mentionable","assign","children","MentionableModels","dropdownItemAttrs","throttle","async","typed","typedLower","toLowerCase","searched","includes","mentionables","model","search","results","has","set","push","init","Map","initialResults","result","matches","_this$typed","makeSuggestion","suggestion","buildSuggestions","suggestions","enabled","from","values","max","maxStoreMatchedResults","splice","dropdownItem","PostMentionedNotification","icon","notification","subject","replyNumber","user","fromUser","count","excerpt","truncate","contentPlain","UserMentionedNotification","GroupMentionedNotification","MentionFormat","makeMentionables","_this$instances","instances","Mentionable","getMentionable","_this$makeMentionable","extend","extendable","Error","MentionableModel","format","getDeletedUserText","getCleanDisplayName","useDisplayName","displayName","username","UserMention","cleanText","some","substr","q","PostMention","ReplyComposer","composerAttrs","composerPost","posts","contentType","b","createdAt","getTime","_model$contentPlain","userMentionable","GroupMention","g","group","namePlural","groupName","color","nameSingular","_app$session$user$can","_app$session","_app$session$user","canMentionGroups","AtMentionFormat","trigger","queryFromTyped","matchTyped","char","simple","safe","TagMention","tag","slug","tagName","extensions","HashMentionFormat","MentionFormats","symbol","_this$formats$find","formats","f","MentionsUserPage","loadResults","mentioned","loadLimit","hasMany","attribute","filterUserMentions","hasAttribute","getAttribute","setAttribute","invalidate","postFilterUserMentions","filterPostMentions","postFilterPostMentions","filterGroupMentions","postFilterGroupMentions","_app$session2","_app$session2$user","filterTagMentions","postFilterTagMentions","app","mentionFormats","addPreviews","contentHtml","oldPostContentHtml","isEditing","parentPost","$parentPost","e","route","preventDefault","each","data","timeout","$preview","getPostElement","showPreview","$post","visible","pageYOffset","height","positionPreview","previewHeight","width","showPost","render","store","getById","hidePreview","hasClass","one","cancelable","hover","stopPropagation","addPostMentionPreviews","replies","mentionedBy","is","mentionedByCount","users","repliers","indexOf","overLimit","names","addMentionedByList","isHidden","canReply","$postBody","$container","button","handler","rects","getClientRects","firstRect","clientY","clientX","lastRect","after","addEventListener","mentionsDropdown","$editor","wrap","navigator","when","onUp","onDown","onSelect","onCancel","bindTo","relMentionStart","absMentionStart","onmouseenter","replaceBeforeCursor","inputListeners","cursor","lastChunk","getLastNChars","activeFormat","i","character","test","_mentionables$search","substring","coordinates","getCaretCoordinates","Math","label","getPlainContent","classList","getComputedStyle","getPropertyValue"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/mentions/js/src/forum/addComposerAutocomplete.js b/extensions/mentions/js/src/forum/addComposerAutocomplete.js index 5212dd5fc0..b7344c1f49 100644 --- a/extensions/mentions/js/src/forum/addComposerAutocomplete.js +++ b/extensions/mentions/js/src/forum/addComposerAutocomplete.js @@ -7,22 +7,20 @@ import AutocompleteDropdown from './fragments/AutocompleteDropdown'; import MentionableModels from './mentionables/MentionableModels'; export default function addComposerAutocomplete() { - const $container = $('
          '); - const dropdown = new AutocompleteDropdown(); - extend('flarum/common/components/TextEditor', 'onbuild', function () { + this.mentionsDropdown = new AutocompleteDropdown(); const $editor = this.$('.TextEditor-editor').wrap('
          '); this.navigator = new KeyboardNavigatable(); this.navigator - .when(() => dropdown.active) - .onUp(() => dropdown.navigate(-1)) - .onDown(() => dropdown.navigate(1)) - .onSelect(dropdown.complete.bind(dropdown)) - .onCancel(dropdown.hide.bind(dropdown)) + .when(() => this.mentionsDropdown.active) + .onUp(() => this.mentionsDropdown.navigate(-1)) + .onDown(() => this.mentionsDropdown.navigate(1)) + .onSelect(this.mentionsDropdown.complete.bind(this.mentionsDropdown)) + .onCancel(this.mentionsDropdown.hide.bind(this.mentionsDropdown)) .bindTo($editor); - $editor.after($container); + $editor.after($('
          ')); }); extend('flarum/common/components/TextEditor', 'buildEditorParams', function (params) { @@ -32,12 +30,12 @@ export default function addComposerAutocomplete() { let mentionables = new MentionableModels({ onmouseenter: function () { - dropdown.setIndex($(this).parent().index()); + this.mentionsDropdown.setIndex($(this).parent().index()); }, onclick: (replacement) => { this.attrs.composer.editor.replaceBeforeCursor(absMentionStart - 1, replacement + ' '); - dropdown.hide(); + this.mentionsDropdown.hide(); }, }); @@ -66,8 +64,8 @@ export default function addComposerAutocomplete() { } } - dropdown.hide(); - dropdown.active = false; + this.mentionsDropdown.hide(); + this.mentionsDropdown.active = false; if (absMentionStart) { const typed = lastChunk.substring(relMentionStart).toLowerCase(); @@ -83,14 +81,14 @@ export default function addComposerAutocomplete() { const suggestions = mentionables.buildSuggestions(); if (suggestions.length) { - dropdown.items = suggestions; - m.render($container[0], dropdown.render()); + this.mentionsDropdown.items = suggestions; + m.render(this.$('.ComposerBody-mentionsDropdownContainer')[0], this.mentionsDropdown.render()); - dropdown.show(); + this.mentionsDropdown.show(); const coordinates = this.attrs.composer.editor.getCaretCoordinates(absMentionStart); - const width = dropdown.$().outerWidth(); - const height = dropdown.$().outerHeight(); - const parent = dropdown.$().offsetParent(); + const width = this.mentionsDropdown.$().outerWidth(); + const height = this.mentionsDropdown.$().outerHeight(); + const parent = this.mentionsDropdown.$().offsetParent(); let left = coordinates.left; let top = coordinates.top + 15; @@ -106,19 +104,19 @@ export default function addComposerAutocomplete() { top = Math.max(-(parent.offset().top - $(document).scrollTop()), top); left = Math.max(-parent.offset().left, left); - dropdown.show(left, top); + this.mentionsDropdown.show(left, top); } else { - dropdown.active = false; - dropdown.hide(); + this.mentionsDropdown.active = false; + this.mentionsDropdown.hide(); } }; - dropdown.active = true; + this.mentionsDropdown.active = true; buildSuggestions(); - dropdown.setIndex(0); - dropdown.$().scrollTop(0); + this.mentionsDropdown.setIndex(0); + this.mentionsDropdown.$().scrollTop(0); mentionables.search()?.then(buildSuggestions); } diff --git a/extensions/mentions/js/src/forum/forum.js b/extensions/mentions/js/src/forum/forum.js index c3f371897f..a298d08a32 100644 --- a/extensions/mentions/js/src/forum/forum.js +++ b/extensions/mentions/js/src/forum/forum.js @@ -5,7 +5,6 @@ import './components/UserMentionedNotification'; import './fragments/AutocompleteDropdown'; import './fragments/PostQuoteButton'; import './utils/getCleanDisplayName'; -import './utils/getMentionText'; import './utils/reply'; import './utils/selectedText'; import './utils/textFormatter'; diff --git a/extensions/mentions/js/src/forum/utils/getMentionText.js b/extensions/mentions/js/src/forum/utils/getMentionText.js deleted file mode 100644 index 446ffca844..0000000000 --- a/extensions/mentions/js/src/forum/utils/getMentionText.js +++ /dev/null @@ -1,21 +0,0 @@ -import app from 'flarum/forum/app'; - -/** - * Fetches the mention text for a specified user (and optionally a post ID for replies or group). - * - * Automatically determines which mention syntax to be used based on the option in the - * admin dashboard. Also performs display name clean-up automatically. - * - * @deprecated Use `app.mentionables.get('user').replacement(user)` instead. Will be removed in 2.0. - */ -export default function getMentionText(user, postId, group) { - if (user !== undefined && postId === undefined) { - return app.mentionables.get('user').replacement(user); - } else if (user !== undefined && postId !== undefined) { - return app.mentionables.get('post').replacement(app.store.getById('posts', postId)); - } else if (group !== undefined) { - return app.mentionables.get('group').replacement(group); - } - - throw 'No parameters were passed'; -} diff --git a/extensions/nicknames/extend.php b/extensions/nicknames/extend.php index 99fb7ab7bf..4cd3589c25 100644 --- a/extensions/nicknames/extend.php +++ b/extensions/nicknames/extend.php @@ -44,7 +44,8 @@ ->default('flarum-nicknames.set_on_registration', true) ->default('flarum-nicknames.min', 1) ->default('flarum-nicknames.max', 150) - ->serializeToForum('displayNameDriver', 'display_name_driver', null, 'username') + ->default('display_name_driver', 'username') + ->serializeToForum('displayNameDriver', 'display_name_driver') ->serializeToForum('setNicknameOnRegistration', 'flarum-nicknames.set_on_registration', 'boolval') ->serializeToForum('randomizeUsernameOnRegistration', 'flarum-nicknames.random_username', 'boolval'), diff --git a/extensions/nicknames/js/dist/forum.js b/extensions/nicknames/js/dist/forum.js index 27c062d518..ac54f70785 100644 --- a/extensions/nicknames/js/dist/forum.js +++ b/extensions/nicknames/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t),e.d(t,{extend:()=>_});const n=flarum.reg.get("core","forum/app");var r=e.n(n);const a=flarum.reg.get("core","common/extend"),o=flarum.reg.get("core","common/components/Button");var i=e.n(o);const s=flarum.reg.get("core","common/utils/extractText");var c=e.n(s);const u=flarum.reg.get("core","common/utils/Stream");var l=e.n(u);const d=flarum.reg.get("core","common/components/Modal");var f=e.n(d);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function h(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==p(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t);if("object"!==p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"===p(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class b{constructor(){h(this,"element",void 0),h(this,"attrs",void 0),h(this,"state",void 0)}oninit(e){this.setAttrs(e.attrs)}oncreate(e){this.element=e.dom}onbeforeupdate(e){this.setAttrs(e.attrs)}onupdate(e){}onbeforeremove(e){}onremove(e){}$(e){const t=$(this.element);return e?t.find(e):t}static component(e,t){void 0===e&&(e={}),void 0===t&&(t=null);const n={...e};return m(this,n,t)}setAttrs(e){if(void 0===e&&(e={}),this.constructor.initAttrs(e),e){if("children"in e)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 e)throw new Error("[".concat(this.constructor.name,'] You cannot use the "tag" attribute name with Mithril 2.'))}this.attrs=e}static initAttrs(e){}}function g(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t{this.loading=!1,m.redraw()}))):this.hide()}}flarum.reg.add("flarum-nicknames","forum/components/NicknameModal",N);const x=flarum.reg.get("core","common/extenders");var S=e.n(x);const w=flarum.reg.get("core","common/models/User");var M=e.n(w);const _=[new(S().Model)(M()).attribute("canEditNickname")];r().initializers.add("flarum/nicknames",(()=>{(0,a.extend)("flarum/forum/components/SettingsPage","accountItems",(function(e){"nickname"===r().forum.attribute("displayNameDriver")&&this.user.canEditNickname()&&e.add("changeNickname",m(i(),{className:"Button",onclick:()=>r().modal.show(N)},r().translator.trans("flarum-nicknames.forum.settings.change_nickname_button")))})),(0,a.extend)("flarum/common/components/EditUserModal","oninit",(function(){this.nickname=l()(this.attrs.user.displayName())})),(0,a.extend)("flarum/common/components/EditUserModal","fields",(function(e){"nickname"===r().forum.attribute("displayNameDriver")&&this.attrs.user.canEditNickname()&&e.add("nickname",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-nicknames.forum.edit_user.nicknames_heading")),m("input",{className:"FormControl",placeholder:c()(r().translator.trans("flarum-nicknames.forum.edit_user.nicknames_text")),bidi:this.nickname})),100)})),(0,a.extend)("flarum/common/components/EditUserModal","data",(function(e){"nickname"===r().forum.attribute("displayNameDriver")&&this.attrs.user.canEditNickname()&&this.nickname()!==this.attrs.user.displayName()&&(e.nickname=this.nickname())})),(0,a.extend)("flarum/forum/components/SignUpModal","oninit",(function(){"nickname"===r().forum.attribute("displayNameDriver")&&(this.nickname=l()(this.attrs.username||""))})),(0,a.extend)("flarum/forum/components/SignUpModal","onready",(function(){"nickname"===r().forum.attribute("displayNameDriver")&&r().forum.attribute("setNicknameOnRegistration")&&r().forum.attribute("randomizeUsernameOnRegistration")&&this.$("[name=nickname]").select()})),(0,a.extend)("flarum/forum/components/SignUpModal","fields",(function(e){"nickname"===r().forum.attribute("displayNameDriver")&&r().forum.attribute("setNicknameOnRegistration")&&(e.add("nickname",m("div",{className:"Form-group"},m("input",{className:"FormControl",name:"nickname",type:"text",placeholder:c()(r().translator.trans("flarum-nicknames.forum.sign_up.nickname_placeholder")),bidi:this.nickname,disabled:this.loading||this.isProvided("nickname"),required:r().forum.attribute("randomizeUsernameOnRegistration")})),25),r().forum.attribute("randomizeUsernameOnRegistration")&&e.remove("username"))})),(0,a.extend)("flarum/forum/components/SignUpModal","submitData",(function(e){if("nickname"===r().forum.attribute("displayNameDriver")&&r().forum.attribute("setNicknameOnRegistration")&&(e.nickname=this.nickname(),r().forum.attribute("randomizeUsernameOnRegistration"))){const t=new Uint32Array(2);crypto.getRandomValues(t),e.username=t.join("")}}))}))})(),module.exports=t})(); +(()=>{var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t),e.d(t,{extend:()=>_});const n=flarum.reg.get("core","forum/app");var r=e.n(n);const a=flarum.reg.get("core","common/extend"),o=flarum.reg.get("core","common/components/Button");var i=e.n(o);const s=flarum.reg.get("core","common/utils/extractText");var c=e.n(s);const u=flarum.reg.get("core","common/utils/Stream");var l=e.n(u);const d=flarum.reg.get("core","common/components/FormModal");var f=e.n(d);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function h(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==p(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t);if("object"!==p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"===p(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class b{constructor(){h(this,"element",void 0),h(this,"attrs",void 0),h(this,"state",void 0)}oninit(e){this.setAttrs(e.attrs)}oncreate(e){this.element=e.dom}onbeforeupdate(e){this.setAttrs(e.attrs)}onupdate(e){}onbeforeremove(e){}onremove(e){}$(e){const t=$(this.element);return e?t.find(e):t}static component(e,t){void 0===e&&(e={}),void 0===t&&(t=null);const n={...e};return m(this,n,t)}setAttrs(e){if(void 0===e&&(e={}),this.constructor.initAttrs(e),e){if("children"in e)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 e)throw new Error("[".concat(this.constructor.name,'] You cannot use the "tag" attribute name with Mithril 2.'))}this.attrs=e}static initAttrs(e){}}function g(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t{this.loading=!1,m.redraw()}))):this.hide()}}flarum.reg.add("flarum-nicknames","forum/components/NicknameModal",N);const x=flarum.reg.get("core","common/extenders");var S=e.n(x);const w=flarum.reg.get("core","common/models/User");var M=e.n(w);const _=[new(S().Model)(M()).attribute("canEditNickname")];r().initializers.add("flarum/nicknames",(()=>{(0,a.extend)("flarum/forum/components/SettingsPage","accountItems",(function(e){"nickname"===r().forum.attribute("displayNameDriver")&&this.user.canEditNickname()&&e.add("changeNickname",m(i(),{className:"Button",onclick:()=>r().modal.show(N)},r().translator.trans("flarum-nicknames.forum.settings.change_nickname_button")))})),(0,a.extend)("flarum/common/components/EditUserModal","oninit",(function(){this.nickname=l()(this.attrs.user.displayName())})),(0,a.extend)("flarum/common/components/EditUserModal","fields",(function(e){"nickname"===r().forum.attribute("displayNameDriver")&&this.attrs.user.canEditNickname()&&e.add("nickname",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-nicknames.forum.edit_user.nicknames_heading")),m("input",{className:"FormControl",placeholder:c()(r().translator.trans("flarum-nicknames.forum.edit_user.nicknames_text")),bidi:this.nickname})),100)})),(0,a.extend)("flarum/common/components/EditUserModal","data",(function(e){"nickname"===r().forum.attribute("displayNameDriver")&&this.attrs.user.canEditNickname()&&this.nickname()!==this.attrs.user.displayName()&&(e.nickname=this.nickname())})),(0,a.extend)("flarum/forum/components/SignUpModal","oninit",(function(){"nickname"===r().forum.attribute("displayNameDriver")&&(this.nickname=l()(this.attrs.username||""))})),(0,a.extend)("flarum/forum/components/SignUpModal","onready",(function(){"nickname"===r().forum.attribute("displayNameDriver")&&r().forum.attribute("setNicknameOnRegistration")&&r().forum.attribute("randomizeUsernameOnRegistration")&&this.$("[name=nickname]").select()})),(0,a.extend)("flarum/forum/components/SignUpModal","fields",(function(e){"nickname"===r().forum.attribute("displayNameDriver")&&r().forum.attribute("setNicknameOnRegistration")&&(e.add("nickname",m("div",{className:"Form-group"},m("input",{className:"FormControl",name:"nickname",type:"text",placeholder:c()(r().translator.trans("flarum-nicknames.forum.sign_up.nickname_placeholder")),bidi:this.nickname,disabled:this.loading||this.isProvided("nickname"),required:r().forum.attribute("randomizeUsernameOnRegistration")})),25),r().forum.attribute("randomizeUsernameOnRegistration")&&e.remove("username"))})),(0,a.extend)("flarum/forum/components/SignUpModal","submitData",(function(e){if("nickname"===r().forum.attribute("displayNameDriver")&&r().forum.attribute("setNicknameOnRegistration")&&(e.nickname=this.nickname(),r().forum.attribute("randomizeUsernameOnRegistration"))){const t=new Uint32Array(2);crypto.getRandomValues(t),e.username=t.join("")}}))}))})(),module.exports=t})(); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/extensions/nicknames/js/dist/forum.js.map b/extensions/nicknames/js/dist/forum.js.map index d5bd6bd3c3..f6134ab089 100644 --- a/extensions/nicknames/js/dist/forum.js.map +++ b/extensions/nicknames/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/nicknames/webpack/bootstrap","webpack://@flarum/nicknames/webpack/runtime/compat get default export","webpack://@flarum/nicknames/webpack/runtime/define property getters","webpack://@flarum/nicknames/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/nicknames/webpack/runtime/make namespace object","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/components/Modal')\"","webpack://@flarum/nicknames/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/nicknames/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/nicknames/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/nicknames/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/nicknames/../../../framework/core/js/src/common/Component.ts","webpack://@flarum/nicknames/../../../node_modules/clsx/dist/clsx.m.js","webpack://@flarum/nicknames/../../../framework/core/js/src/common/utils/classList.ts","webpack://@flarum/nicknames/../../../framework/core/js/src/common/components/Form.tsx","webpack://@flarum/nicknames/./src/forum/components/NicknameModal.js","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/models/User')\"","webpack://@flarum/nicknames/./src/forum/extend.ts","webpack://@flarum/nicknames/./src/forum/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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', 'forum/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/Stream');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Modal');","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}","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-nicknames', '../../../../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 {\n this.loading = false;\n m.redraw();\n });\n }\n}\nflarum.reg.add('flarum-nicknames', 'forum/components/NicknameModal', NicknameModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/User');","import Extend from 'flarum/common/extenders';\nimport User from 'flarum/common/models/User';\nexport default [new Extend.Model(User) //\n.attribute('canEditNickname')];","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\nimport Stream from 'flarum/common/utils/Stream';\nimport NickNameModal from './components/NicknameModal';\nexport { default as extend } from './extend';\napp.initializers.add('flarum/nicknames', () => {\n extend('flarum/forum/components/SettingsPage', 'accountItems', function (items) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n if (this.user.canEditNickname()) {\n items.add('changeNickname', m(Button, {\n className: \"Button\",\n onclick: () => app.modal.show(NickNameModal)\n }, app.translator.trans('flarum-nicknames.forum.settings.change_nickname_button')));\n }\n });\n extend('flarum/common/components/EditUserModal', 'oninit', function () {\n this.nickname = Stream(this.attrs.user.displayName());\n });\n extend('flarum/common/components/EditUserModal', 'fields', function (items) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n if (!this.attrs.user.canEditNickname()) return;\n items.add('nickname', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-nicknames.forum.edit_user.nicknames_heading')), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(app.translator.trans('flarum-nicknames.forum.edit_user.nicknames_text')),\n bidi: this.nickname\n })), 100);\n });\n extend('flarum/common/components/EditUserModal', 'data', function (data) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n if (!this.attrs.user.canEditNickname()) return;\n if (this.nickname() !== this.attrs.user.displayName()) {\n data.nickname = this.nickname();\n }\n });\n extend('flarum/forum/components/SignUpModal', 'oninit', function () {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n this.nickname = Stream(this.attrs.username || '');\n });\n extend('flarum/forum/components/SignUpModal', 'onready', function () {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n if (app.forum.attribute('setNicknameOnRegistration') && app.forum.attribute('randomizeUsernameOnRegistration')) {\n this.$('[name=nickname]').select();\n }\n });\n extend('flarum/forum/components/SignUpModal', 'fields', function (items) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n if (app.forum.attribute('setNicknameOnRegistration')) {\n items.add('nickname', m(\"div\", {\n className: \"Form-group\"\n }, m(\"input\", {\n className: \"FormControl\",\n name: \"nickname\",\n type: \"text\",\n placeholder: extractText(app.translator.trans('flarum-nicknames.forum.sign_up.nickname_placeholder')),\n bidi: this.nickname,\n disabled: this.loading || this.isProvided('nickname'),\n required: app.forum.attribute('randomizeUsernameOnRegistration')\n })), 25);\n if (app.forum.attribute('randomizeUsernameOnRegistration')) {\n items.remove('username');\n }\n }\n });\n extend('flarum/forum/components/SignUpModal', 'submitData', function (data) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n if (app.forum.attribute('setNicknameOnRegistration')) {\n data.nickname = this.nickname();\n if (app.forum.attribute('randomizeUsernameOnRegistration')) {\n const arr = new Uint32Array(2);\n crypto.getRandomValues(arr);\n data.username = arr.join('');\n }\n }\n });\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","_typeof","iterator","constructor","_defineProperty","arg","input","hint","prim","toPrimitive","undefined","res","TypeError","String","toPropertyKey","configurable","writable","Component","this","oninit","vnode","setAttrs","attrs","oncreate","element","dom","onbeforeupdate","onupdate","onbeforeremove","onremove","$","selector","$element","find","static","children","componentAttrs","m","initAttrs","Error","concat","name","r","e","t","f","n","Array","isArray","length","add","classList","arguments","Form","view","label","description","className","assign","NicknameModal","super","nickname","title","content","type","autocomplete","bidi","disabled","loading","onsubmit","preventDefault","errorHandler","onerror","bind","then","hide","catch","redraw","attribute","extend","items","user","canEditNickname","onclick","displayName","placeholder","data","username","select","isProvided","required","remove","arr","Uint32Array","crypto","getRandomValues","join"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/nicknames/webpack/bootstrap","webpack://@flarum/nicknames/webpack/runtime/compat get default export","webpack://@flarum/nicknames/webpack/runtime/define property getters","webpack://@flarum/nicknames/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/nicknames/webpack/runtime/make namespace object","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/nicknames/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/nicknames/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/nicknames/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/nicknames/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/nicknames/../../../framework/core/js/src/common/Component.ts","webpack://@flarum/nicknames/../../../node_modules/clsx/dist/clsx.m.js","webpack://@flarum/nicknames/../../../framework/core/js/src/common/utils/classList.ts","webpack://@flarum/nicknames/../../../framework/core/js/src/common/components/Form.tsx","webpack://@flarum/nicknames/./src/forum/components/NicknameModal.js","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/models/User')\"","webpack://@flarum/nicknames/./src/forum/extend.ts","webpack://@flarum/nicknames/./src/forum/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\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', 'forum/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/Stream');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormModal');","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}","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-nicknames', '../../../../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 {\n this.loading = false;\n m.redraw();\n });\n }\n}\nflarum.reg.add('flarum-nicknames', 'forum/components/NicknameModal', NicknameModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/User');","import Extend from 'flarum/common/extenders';\nimport User from 'flarum/common/models/User';\nexport default [new Extend.Model(User) //\n.attribute('canEditNickname')];","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\nimport Stream from 'flarum/common/utils/Stream';\nimport NickNameModal from './components/NicknameModal';\nexport { default as extend } from './extend';\napp.initializers.add('flarum/nicknames', () => {\n extend('flarum/forum/components/SettingsPage', 'accountItems', function (items) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n if (this.user.canEditNickname()) {\n items.add('changeNickname', m(Button, {\n className: \"Button\",\n onclick: () => app.modal.show(NickNameModal)\n }, app.translator.trans('flarum-nicknames.forum.settings.change_nickname_button')));\n }\n });\n extend('flarum/common/components/EditUserModal', 'oninit', function () {\n this.nickname = Stream(this.attrs.user.displayName());\n });\n extend('flarum/common/components/EditUserModal', 'fields', function (items) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n if (!this.attrs.user.canEditNickname()) return;\n items.add('nickname', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-nicknames.forum.edit_user.nicknames_heading')), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(app.translator.trans('flarum-nicknames.forum.edit_user.nicknames_text')),\n bidi: this.nickname\n })), 100);\n });\n extend('flarum/common/components/EditUserModal', 'data', function (data) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n if (!this.attrs.user.canEditNickname()) return;\n if (this.nickname() !== this.attrs.user.displayName()) {\n data.nickname = this.nickname();\n }\n });\n extend('flarum/forum/components/SignUpModal', 'oninit', function () {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n this.nickname = Stream(this.attrs.username || '');\n });\n extend('flarum/forum/components/SignUpModal', 'onready', function () {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n if (app.forum.attribute('setNicknameOnRegistration') && app.forum.attribute('randomizeUsernameOnRegistration')) {\n this.$('[name=nickname]').select();\n }\n });\n extend('flarum/forum/components/SignUpModal', 'fields', function (items) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n if (app.forum.attribute('setNicknameOnRegistration')) {\n items.add('nickname', m(\"div\", {\n className: \"Form-group\"\n }, m(\"input\", {\n className: \"FormControl\",\n name: \"nickname\",\n type: \"text\",\n placeholder: extractText(app.translator.trans('flarum-nicknames.forum.sign_up.nickname_placeholder')),\n bidi: this.nickname,\n disabled: this.loading || this.isProvided('nickname'),\n required: app.forum.attribute('randomizeUsernameOnRegistration')\n })), 25);\n if (app.forum.attribute('randomizeUsernameOnRegistration')) {\n items.remove('username');\n }\n }\n });\n extend('flarum/forum/components/SignUpModal', 'submitData', function (data) {\n if (app.forum.attribute('displayNameDriver') !== 'nickname') return;\n if (app.forum.attribute('setNicknameOnRegistration')) {\n data.nickname = this.nickname();\n if (app.forum.attribute('randomizeUsernameOnRegistration')) {\n const arr = new Uint32Array(2);\n crypto.getRandomValues(arr);\n data.username = arr.join('');\n }\n }\n });\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","_typeof","iterator","constructor","_defineProperty","arg","input","hint","prim","toPrimitive","undefined","res","TypeError","String","toPropertyKey","configurable","writable","Component","this","oninit","vnode","setAttrs","attrs","oncreate","element","dom","onbeforeupdate","onupdate","onbeforeremove","onremove","$","selector","$element","find","static","children","componentAttrs","m","initAttrs","Error","concat","name","r","e","t","f","n","Array","isArray","length","add","classList","arguments","Form","view","label","description","className","assign","NicknameModal","super","nickname","title","content","type","autocomplete","bidi","disabled","loading","onsubmit","preventDefault","errorHandler","onerror","bind","then","hide","catch","redraw","attribute","extend","items","user","canEditNickname","onclick","displayName","placeholder","data","username","select","isProvided","required","remove","arr","Uint32Array","crypto","getRandomValues","join"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/nicknames/js/src/forum/components/NicknameModal.js b/extensions/nicknames/js/src/forum/components/NicknameModal.js index cf6484e05b..2304a78bfe 100644 --- a/extensions/nicknames/js/src/forum/components/NicknameModal.js +++ b/extensions/nicknames/js/src/forum/components/NicknameModal.js @@ -1,10 +1,10 @@ import app from 'flarum/forum/app'; -import Modal from 'flarum/common/components/Modal'; +import FormModal from 'flarum/common/components/FormModal'; import Button from 'flarum/common/components/Button'; import Stream from 'flarum/common/utils/Stream'; import Form from '@flarum/core/src/common/components/Form'; -export default class NicknameModal extends Modal { +export default class NicknameModal extends FormModal { oninit(vnode) { super.oninit(vnode); this.nickname = Stream(app.session.user.displayName()); diff --git a/extensions/package-manager/js/src/admin/states/QueueState.ts b/extensions/package-manager/js/src/admin/states/QueueState.ts index 492e415a7a..dde5713a6b 100644 --- a/extensions/package-manager/js/src/admin/states/QueueState.ts +++ b/extensions/package-manager/js/src/admin/states/QueueState.ts @@ -21,7 +21,7 @@ export default class QueueState { return app.store.find('package-manager-tasks', params || {}).then((data) => { this.tasks = data; - this.total = data.payload.meta?.total; + this.total = data.payload.meta?.total!; m.redraw(); diff --git a/extensions/statistics/js/dist-typings/components/StatisticsWidgetDateSelectionModal.d.ts b/extensions/statistics/js/dist-typings/components/StatisticsWidgetDateSelectionModal.d.ts index 767d840a58..dcbf5a6271 100644 --- a/extensions/statistics/js/dist-typings/components/StatisticsWidgetDateSelectionModal.d.ts +++ b/extensions/statistics/js/dist-typings/components/StatisticsWidgetDateSelectionModal.d.ts @@ -1,5 +1,5 @@ import ItemList from 'flarum/common/utils/ItemList'; -import Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal'; +import FormModal, { IFormModalAttrs } from 'flarum/common/components/FormModal'; import Mithril from 'mithril'; export interface IDateSelection { /** @@ -11,7 +11,7 @@ export interface IDateSelection { */ end: number; } -export interface IStatisticsWidgetDateSelectionModalAttrs extends IInternalModalAttrs { +export interface IStatisticsWidgetDateSelectionModalAttrs extends IFormModalAttrs { onModalSubmit: (dates: IDateSelection) => void; value?: IDateSelection; } @@ -25,7 +25,7 @@ interface IStatisticsWidgetDateSelectionModalState { endDate: string; }; } -export default class StatisticsWidgetDateSelectionModal extends Modal { +export default class StatisticsWidgetDateSelectionModal extends FormModal { state: IStatisticsWidgetDateSelectionModalState; oninit(vnode: Mithril.Vnode): void; className(): string; diff --git a/extensions/statistics/js/dist/admin.js b/extensions/statistics/js/dist/admin.js index ae6fea4ade..3322a2c2d4 100644 --- a/extensions/statistics/js/dist/admin.js +++ b/extensions/statistics/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var t={860:function(t){t.exports=function(){"use strict";var t=6e4,e=36e5,i="millisecond",n="second",s="minute",a="hour",r="day",o="week",l="month",u="quarter",c="year",h="date",d="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,p=/\[([^\]]+)]|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,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],i=t%100;return"["+t+(e[(i-20)%10]||e[i]||e[0])+"]"}},v=function(t,e,i){var n=String(t);return!n||n.length>=e?t:""+Array(e+1-n.length).join(i)+t},g={s:v,z:function(t){var e=-t.utcOffset(),i=Math.abs(e),n=Math.floor(i/60),s=i%60;return(e<=0?"+":"-")+v(n,2,"0")+":"+v(s,2,"0")},m:function t(e,i){if(e.date()1)return t(r[0])}else{var o=e.name;b[o]=e,s=o}return!n&&s&&(y=s),s||!n&&y},w=function(t,e){if(x(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new M(i)},D=g;D.l=k,D.i=x,D.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var M=function(){function m(t){this.$L=k(t.locale,null,!0),this.parse(t)}var v=m.prototype;return v.parse=function(t){this.$d=function(t){var e=t.date,i=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var n=e.match(f);if(n){var s=n[2]-1||0,a=(n[7]||"0").substring(0,3);return i?new Date(Date.UTC(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)):new Date(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},v.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},v.$utils=function(){return D},v.isValid=function(){return!(this.$d.toString()===d)},v.isSame=function(t,e){var i=w(t);return this.startOf(e)<=i&&i<=this.endOf(e)},v.isAfter=function(t,e){return w(t)=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function s(t){return t.titleHeight+t.margins.top+t.paddings.top}function a(t){return t.margins.left+t.paddings.left}function r(t){return t.margins.top+t.margins.bottom+t.paddings.top+t.paddings.bottom+t.titleHeight+t.legendHeight}function o(t){return t.margins.left+t.margins.right+t.paddings.left+t.paddings.right}function l(t){return parseFloat(t.toFixed(2))}function u(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=n?t[0]:t[t.length-1]);var s=new Array(Math.abs(e)).fill(i);return n?s.concat(t):t.concat(s)}function c(t,e){return(t+"").length*e}function h(t,e){return{x:Math.sin(t*wt)*e,y:Math.cos(t*wt)*e}}function d(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!(Number.isNaN(t)||void 0===t||!Number.isFinite(t)||e&&t<0)}function f(t){var e=void 0,i=void 0,n=void 0;if(t instanceof Date)return new Date(t.getTime());if("object"!==(void 0===t?"undefined":lt(t))||null===t)return t;for(n in e=Array.isArray(t)?[]:{},t)i=t[n],e[n]=f(i);return e}function p(t,e){var i=void 0,n=void 0;return t<=e?(i=e-t,n=t):(i=t-e,n=e),[i,n]}function m(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=u(t,i):e=u(e,i),[t,e]}function v(t,e){if(t)return t.length>e?t.slice(0,e-3)+"...":t}function g(t){var e=void 0;if("number"==typeof t)e=t;else if("string"==typeof t&&(e=Number(t),Number.isNaN(e)))return t;var i=Math.floor(Math.log10(Math.abs(e)));if(i<=2)return e;var n=Math.floor(i/3),s=Math.pow(10,i-3*n)*+(e/Math.pow(10,i)).toFixed(1);return Math.round(100*s)/100+" "+["","K","M","B","T"][n]}function y(t,e){for(var i=[],n=0;n255?255:t<0?0:t}function x(t,e){var i=Pt(t),n=!1;"#"==i[0]&&(i=i.slice(1),n=!0);var s=parseInt(i,16),a=b((s>>16)+e),r=b((s>>8&255)+e);return(n?"#":"")+(b((255&s)+e)|r<<8|a<<16).toString(16)}function k(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function w(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var n in e){var s=e[n];if("inside"===n)k(s).appendChild(i);else if("around"===n){var a=k(s);a.parentNode.insertBefore(i,a),i.appendChild(a)}else"styles"===n?"object"===(void 0===s?"undefined":lt(s))&&Object.keys(s).map((function(t){i.style[t]=s[t]})):("className"===n&&(n="class"),"innerHTML"===n?i.textContent=s:i.setAttribute(n,s))}return i}function D(t,e){return w("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function M(t,e,i,n){return w("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":n})}function P(t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,i={className:t,transform:arguments.length>1&&void 0!==arguments[1]?arguments[1]:""};return e&&(i.inside=e),w("g",i)}function S(t){return w("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none","stroke-width":arguments.length>4&&void 0!==arguments[4]?arguments[4]:2}})}function A(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n="path-fill-gradient-"+e+"-"+(i?"lighter":"default"),s=D(t,n),a=[1,.6,.2];return i&&(a=[.4,.2,0]),M(s,"0%",e,a[0]),M(s,"50%",e,a[1]),M(s,"100%",e,a[2]),n}function T(t,e,i,n,s){var a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},r={className:t,x:e,y:i,width:n,height:n,rx:s,fill:arguments.length>5&&void 0!==arguments[5]?arguments[5]:"none"};return Object.keys(a).map((function(t){r[t]=a[t]})),w("rect",r)}function O(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=s.fontSize||Ot;return w("text",{className:t,x:e,y:i,dy:(void 0!==s.dy?s.dy:a/2)+"px","font-size":a+"px",fill:s.fill||Ct,"text-anchor":s.textAnchor||"start",innerHTML:n})}function L(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};s.stroke||(s.stroke=Lt);var a=w("line",{className:"line-vertical "+s.className,x1:0,x2:0,y1:i,y2:n,styles:{stroke:s.stroke}}),r=w("text",{x:0,y:i>n?i+At:i-At-Ot,dy:Ot+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:e+""}),o=w("g",{transform:"translate("+t+", 0)"});return o.appendChild(a),o.appendChild(r),o}function C(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};s.stroke||(s.stroke=Lt),s.lineType||(s.lineType=""),s.shortenNumbers&&(e=g(e));var a=w("line",{className:"line-horizontal "+s.className+("dashed"===s.lineType?"dashed":""),x1:i,x2:n,y1:0,y2:0,styles:{stroke:s.stroke}}),r=w("text",{x:i4&&void 0!==arguments[4]?arguments[4]:0,a=p(i,(arguments.length>5&&void 0!==arguments[5]?arguments[5]:{}).zeroLine),r=pt(a,2),o=r[0],l=r[1];return l-=s,"rect"!==t.nodeName?[[t.childNodes[0],{width:n,height:o},$t,zt],N(t,t.getAttribute("transform").split("(")[1].slice(0,-1),[e,l],Yt)]:[[t,{width:n,height:o,x:e,y:l},$t,zt]]}function E(t,e){return[t,{d:e},$t,zt]}function Y(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var u=void 0;u="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var c=a[l]||t.getAttribute(l),h=e[l],d={attributeName:l,from:c,to:h,begin:"0s",dur:i/1e3+"s",values:c+";"+h,keySplines:Ht[n],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};for(var f in s&&(d.type=s),d)u.setAttribute(f,d[f]);r.appendChild(u),s?o.setAttribute(l,"translate("+h+")"):o.setAttribute(l,h)}return[r,o]}function W(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function z(t,e){var i=[],n=[];e.map((function(t){var e,s,a=t[0],r=a.parentNode;t[0]=a;var o=Y.apply(void 0,mt(t)),l=pt(o,2);e=l[0],s=l[1],i.push(s),n.push([e,r]),r&&r.replaceChild(e,a)}));var s=t.cloneNode(!0);return n.map((function(t,n){t[1]&&(t[1].replaceChild(i[n],t[0]),e[n][0]=i[n])})),s}function H(t,e,i){if(0!==i.length){var n=z(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(n)),setTimeout((function(){n.parentNode==t&&(t.removeChild(n),t.appendChild(e))}),Wt)}}function F(e){var i=e.cloneNode(!0);i.classList.add("chart-container"),i.setAttribute("xmlns","http://www.w3.org/2000/svg"),i.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink");var n=t.create("style",{innerHTML:Ft});i.insertBefore(n,i.firstChild);var s=t.create("div");return s.appendChild(i),s.innerHTML}function j(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function I(t){var e=t.getDate(),i=t.getMonth()+1;return[t.getFullYear(),(i>9?"":"0")+i,(e>9?"":"0")+e].join("-")}function R(t){return new Date(t.getTime())}function U(t,e){var i=q(t);return Math.ceil(function(t,e){var i=Vt*Ut;return(j(e)-j(t))/i}(i,e)/Rt)}function V(t,e){return t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()}function B(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=Bt[t];return e?i.slice(0,3):i}function G(t,e){return new Date(e,t+1,0)}function q(t){var e=R(t),i=e.getDay();return 0!==i&&J(e,-1*i),e}function J(t,e){t.setDate(t.getDate()+e)}function X(t,e,i){var n=Object.keys(Jt).filter((function(e){return t.includes(e)})),s=Jt[n[0]];return Object.assign(s,{constants:e,getData:i}),new qt(s)}function Z(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function K(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),n=Math.floor(e),s=i-n,a=s,r=1;s>5&&(s%2!=0&&(s=++i-n),a=s/2,r=2),s<=2&&(r=s/(a=4)),0===s&&(a=5,r=1);for(var o=[],l=0;l<=a;l++)o.push(n+r*l);return o}function Q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Z(t),n=pt(i,2),s=n[0],a=n[1],r=e?e/Math.pow(10,a):0,o=K(s=s.toFixed(6),r);return o.map((function(t){return t*Math.pow(10,a)}))}function tt(t){function e(t,e){for(var i=Q(t),n=i[1]-i[0],s=0,a=1;s1&&void 0!==arguments[1]&&arguments[1],n=Math.max.apply(Math,mt(t)),s=Math.min.apply(Math,mt(t)),a=[];if(n>=0&&s>=0)Z(n)[1],a=i?Q(n,s):Q(n);else if(n>0&&s<0){var r=Math.abs(s);n>=r?(Z(n)[1],a=e(n,r)):(Z(r)[1],a=e(r,n).reverse().map((function(t){return-1*t})))}else if(n<=0&&s<=0){var o=Math.abs(s),l=Math.abs(n);Z(o)[1],a=(a=i?Q(o,l):Q(o)).reverse().map((function(t){return-1*t}))}return a}function et(t){var e=it(t);return t.indexOf(0)>=0?t.indexOf(0):t[0]>0?-1*t[0]/e:-1*t[t.length-1]/e+(t.length-1)}function it(t){return t[1]-t[0]}function nt(t){return t[t.length-1]-t[0]}function st(t,e){return l(e.zeroLine-t*e.scaleMultiplier)}function at(t,e){return e.filter((function(e){return ei?n.slice(0,i):u(n,i-n.length,0),t.values=n}else t.values=s;t.chartType||(gt.includes(e),t.chartType=e)})),t.yRegions&&t.yRegions.map((function(t){if(t.end\n\t\t\t\t
            \n\t\t\t\t
            '}),this.hideTip(),this.title=this.container.querySelector(".title"),this.dataPointList=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",(function(){e.hideTip()}))}},{key:"fill",value:function(){var e,i=this;this.index&&this.container.setAttribute("data-point-index",this.index),e=this.titleValueFirst?""+this.titleValue+""+this.titleName:this.titleName+""+this.titleValue+"",this.title.innerHTML=e,this.dataPointList.innerHTML="",this.listValues.map((function(e,n){var s=i.colors[n]||"black",a=0===e.formatted||e.formatted?e.formatted:e.value,r=t.create("li",{styles:{"border-top":"3px solid "+s},innerHTML:''+(0===a||a?a:"")+"\n\t\t\t\t\t"+(e.title?e.title:"")});i.dataPointList.appendChild(r)}))}},{key:"calcPosition",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight-5,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var n="calc(50% + "+(this.left-e)+"px)";i.style.left=n,this.left=e}else i.style.left="50%"}},{key:"setValues",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1;this.titleName=i.name,this.titleValue=i.value,this.listValues=n,this.x=t,this.y=e,this.titleValueFirst=i.valueFirst||0,this.index=s,this.refresh()}},{key:"hideTip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"showTip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),e}(),Mt={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},Pt=function(t){return/rgb[a]{0,1}\([\d, ]+\)/gim.test(t)?/\D+(\d*)\D+(\d*)\D+(\d*)/gim.exec(t).map((function(t,e){return 0!==e?Number(t).toString(16):"#"})).reduce((function(t,e){return""+t+e})):Mt[t]||t},St=6,At=4,Tt=15,Ot=10,Lt="#dadada",Ct="#555b51",Nt={bar:function(t){var e=void 0;"rect"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode();return i.style.fill="#000000",i.style.opacity="0.4",e&&i.setAttribute("transform",e),i},dot:function(t){var e=void 0;"circle"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode(),n=t.getAttribute("r"),s=t.getAttribute("fill");return i.setAttribute("r",parseInt(n)+4),i.setAttribute("fill",s),i.style.opacity="0.6",e&&i.setAttribute("transform",e),i},heat_square:function(t){var e=void 0;"circle"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode(),n=t.getAttribute("r"),s=t.getAttribute("fill");return i.setAttribute("r",parseInt(n)+4),i.setAttribute("fill",s),i.style.opacity="0.6",e&&i.setAttribute("transform",e),i}},_t={bar:function(t,e){var i=void 0;"rect"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["x","y","width","height"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)},dot:function(t,e){var i=void 0;"circle"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["cx","cy"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)},heat_square:function(t,e){var i=void 0;"circle"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["cx","cy"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)}},$t=350,Et=350,Yt=$t,Wt=250,zt="easein",Ht={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},Ft=".chart-container{position:relative;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Roboto','Oxygen','Ubuntu','Cantarell','Fira Sans','Droid Sans','Helvetica Neue',sans-serif}.chart-container .axis,.chart-container .chart-label{fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .dataset-units circle{stroke:#fff;stroke-width:2}.chart-container .dataset-units path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container .dataset-path{stroke-width:2px}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .axis-line .specific-value{text-anchor:start}.chart-container .axis-line .y-line{text-anchor:end}.chart-container .axis-line .x-line{text-anchor:middle}.chart-container .legend-dataset-text{fill:#6c7680;font-weight:600}.graph-svg-tip{position:absolute;z-index:99999;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.graph-svg-tip ul{padding-left:0;display:flex}.graph-svg-tip ol{padding-left:0;display:flex}.graph-svg-tip ul.data-point-list li{min-width:90px;flex:1;font-weight:600}.graph-svg-tip strong{color:#dfe2e5;font-weight:600}.graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:' ';border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}",jt=function(){function e(t,i){if(ut(this,e),i=f(i),this.parent="string"==typeof t?document.querySelector(t):t,!(this.parent instanceof HTMLElement))throw new Error("No `parent` element to render on was provided.");this.rawChartArgs=i,this.title=i.title||"",this.type=i.type||"",this.realData=this.prepareData(i.data),this.data=this.prepareFirstData(this.realData),this.colors=this.validateColors(i.colors,this.type),this.config={showTooltip:1,showLegend:1,isNavigable:i.isNavigable||0,animate:void 0!==i.animate?i.animate:1,truncateLegends:i.truncateLegends||1},this.measures=JSON.parse(JSON.stringify(vt));var n=this.measures;this.setMeasures(i),this.title.length||(n.titleHeight=0),this.config.showLegend||(n.legendHeight=0),this.argHeight=i.height||n.baseHeight,this.state={},this.options={},this.initTimeout=700,this.config.isNavigable&&(this.overlays=[]),this.configure(i)}return ct(e,[{key:"prepareData",value:function(t){return t}},{key:"prepareFirstData",value:function(t){return t}},{key:"validateColors",value:function(t,e){var i=[];return(t=(t||[]).concat(kt[e])).forEach((function(t){var e=Pt(t);!function(t){return/(^\s*)(#)((?:[A-Fa-f0-9]{3}){1,2})$/i.test(t)||/(^\s*)(rgb|hsl)(a?)[(]\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*(?:,\s*([\d.]+)\s*)?[)]$/i.test(t)}(e)?console.warn('"'+t+'" is not a valid color.'):i.push(e)})),i}},{key:"setMeasures",value:function(){}},{key:"configure",value:function(){var t=this,e=this.argHeight;this.baseHeight=e,this.height=e-r(this.measures),this.boundDrawFn=function(){return t.draw(!0)},ResizeObserver&&(this.resizeObserver=new ResizeObserver(this.boundDrawFn),this.resizeObserver.observe(this.parent)),window.addEventListener("resize",this.boundDrawFn),window.addEventListener("orientationchange",this.boundDrawFn)}},{key:"destroy",value:function(){this.resizeObserver&&this.resizeObserver.disconnect(),window.removeEventListener("resize",this.boundDrawFn),window.removeEventListener("orientationchange",this.boundDrawFn)}},{key:"setup",value:function(){this.makeContainer(),this.updateWidth(),this.makeTooltip(),this.draw(!1,!0)}},{key:"makeContainer",value:function(){this.parent.innerHTML="";var e={inside:this.parent,className:"chart-container"};this.independentWidth&&(e.styles={width:this.independentWidth+"px"}),this.container=t.create("div",e)}},{key:"makeTooltip",value:function(){this.tip=new Dt({parent:this.container,colors:this.colors}),this.bindTooltip()}},{key:"bindTooltip",value:function(){}},{key:"draw",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e&&i(this.parent)||(this.updateWidth(),this.calc(e),this.makeChartArea(),this.setupComponents(),this.components.forEach((function(e){return e.setup(t.drawArea)})),this.render(this.components,!1),n&&(this.data=this.realData,setTimeout((function(){t.update(t.data)}),this.initTimeout)),this.renderLegend(),this.setupNavigation(n))}},{key:"calc",value:function(){}},{key:"updateWidth",value:function(){this.baseWidth=function(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}(this.parent),this.width=this.baseWidth-o(this.measures)}},{key:"makeChartArea",value:function(){this.svg&&this.container.removeChild(this.svg);var t=this.measures;this.svg=function(t,e,i,n){return w("svg",{className:e,inside:t,width:i,height:n})}(this.container,"frappe-chart chart",this.baseWidth,this.baseHeight),this.svgDefs=function(t){return w("defs",{inside:t})}(this.svg),this.title.length&&(this.titleEL=O("title",t.margins.left,t.margins.top,this.title,{fontSize:t.titleFontSize,fill:"#666666",dy:t.titleFontSize}));var e=s(t);this.drawArea=P(this.type+"-chart chart-draw-area","translate("+a(t)+", "+e+")"),this.config.showLegend&&(e+=this.height+t.paddings.bottom,this.legendArea=P("chart-legend","translate("+a(t)+", "+e+")")),this.title.length&&this.svg.appendChild(this.titleEL),this.svg.appendChild(this.drawArea),this.config.showLegend&&this.svg.appendChild(this.legendArea),this.updateTipOffset(a(t),s(t))}},{key:"updateTipOffset",value:function(t,e){this.tip.offset={x:t,y:e}}},{key:"setupComponents",value:function(){this.components=new Map}},{key:"update",value:function(t){t||console.error("No data to update."),this.data=this.prepareData(t),this.calc(),this.render(this.components,this.config.animate),this.renderLegend()}},{key:"render",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.components,i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.config.isNavigable&&this.overlays.map((function(t){return t.parentNode.removeChild(t)}));var n=[];e.forEach((function(t){n=n.concat(t.update(i))})),n.length>0?(H(this.container,this.svg,n),setTimeout((function(){e.forEach((function(t){return t.make()})),t.updateNav()}),400)):(e.forEach((function(t){return t.make()})),this.updateNav())}},{key:"updateNav",value:function(){this.config.isNavigable&&(this.makeOverlay(),this.bindUnits())}},{key:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.config.isNavigable&&e&&(this.bindOverlay(),this.keyActions={13:this.onEnterKey.bind(this),37:this.onLeftArrow.bind(this),38:this.onUpArrow.bind(this),39:this.onRightArrow.bind(this),40:this.onDownArrow.bind(this)},document.addEventListener("keydown",(function(e){n(t.container)&&(e=e||window.event,t.keyActions[e.keyCode]&&t.keyActions[e.keyCode]())})))}},{key:"makeOverlay",value:function(){}},{key:"updateOverlay",value:function(){}},{key:"bindOverlay",value:function(){}},{key:"bindUnits",value:function(){}},{key:"onLeftArrow",value:function(){}},{key:"onRightArrow",value:function(){}},{key:"onUpArrow",value:function(){}},{key:"onDownArrow",value:function(){}},{key:"onEnterKey",value:function(){}},{key:"addDataPoint",value:function(){}},{key:"removeDataPoint",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"setCurrentDataPoint",value:function(){}},{key:"updateDataset",value:function(){}},{key:"export",value:function(){var t=F(this.svg);!function(t,e){var i=document.createElement("a");i.style="display: none";var n=new Blob(e,{type:"image/svg+xml; charset=utf-8"}),s=window.URL.createObjectURL(n);i.href=s,i.download=t,document.body.appendChild(i),i.click(),setTimeout((function(){document.body.removeChild(i),window.URL.revokeObjectURL(s)}),300)}(this.title||"Chart",[t])}}]),e}(),It=function(t){function e(t,i){return ut(this,e),ft(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i))}return dt(e,t),ct(e,[{key:"configure",value:function(t){ht(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"configure",this).call(this,t),this.config.formatTooltipY=(t.tooltipOptions||{}).formatTooltipY,this.config.maxSlices=t.maxSlices||20,this.config.maxLegendPoints=t.maxLegendPoints||20}},{key:"calc",value:function(){var t=this,e=this.state,i=this.config.maxSlices;e.sliceTotals=[];var n=this.data.labels.map((function(e,i){var n=0;return t.data.datasets.map((function(t){n+=t.values[i]})),[n,e]})).filter((function(t){return t[0]>=0})),s=n;if(n.length>i){n.sort((function(t,e){return e[0]-t[0]})),s=n.slice(0,i-1);var a=0;n.slice(i-1).map((function(t){a+=t[0]})),s.push([a,"Rest"]),this.colors[i-1]="grey"}e.labels=[],s.map((function(t){e.sliceTotals.push(function(t){return Number(Math.round(t+"e4")+"e-4")}(t[0])),e.labels.push(t[1])})),e.grandTotal=e.sliceTotals.reduce((function(t,e){return t+e}),0),this.center={x:this.width/2,y:this.height/2}}},{key:"renderLegend",value:function(){var t=this,e=this.state;this.legendArea.textContent="",this.legendTotals=e.sliceTotals.slice(0,this.config.maxLegendPoints);var i=0,n=0;this.legendTotals.map((function(s,a){var r=150,l=Math.floor((t.width-o(t.measures))/r);t.legendTotals.lengthl&&(i=0,n+=20);var u=r*i+5,c=t.config.truncateLegends?v(e.labels[a],r/10):e.labels[a],h=t.config.formatTooltipY?t.config.formatTooltipY(s):s,d=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",s=arguments[4];s=arguments.length>5&&void 0!==arguments[5]&&arguments[5]?v(s,Tt):s;var a={className:"legend-dot",cx:0,cy:0,r:i,fill:n},r=w("text",{className:"legend-dataset-text",x:0,y:0,dx:Ot+"px",dy:Ot/3+"px","font-size":1.2*Ot+"px","text-anchor":"start",fill:Ct,innerHTML:s}),o=w("g",{transform:"translate("+t+", "+e+")"});return o.appendChild(w("circle",a)),o.appendChild(r),o}(u,n,5,t.colors[a],c+": "+h,!1);t.legendArea.appendChild(d),i++}))}}]),e}(jt),Rt=7,Ut=1e3,Vt=86400,Bt=["January","February","March","April","May","June","July","August","September","October","November","December"],Gt=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],qt=function(){function t(e){var i=e.layerClass,n=void 0===i?"":i,s=e.layerTransform,a=void 0===s?"":s,r=e.constants,o=e.getData,l=e.makeElements,u=e.animateElements;ut(this,t),this.layerTransform=a,this.constants=r,this.makeElements=l,this.getData=o,this.animateElements=u,this.store=[],this.labels=[],this.layerClass=n,this.layerClass="function"==typeof this.layerClass?this.layerClass():this.layerClass,this.refresh()}return ct(t,[{key:"refresh",value:function(t){this.data=t||this.getData()}},{key:"setup",value:function(t){this.layer=P(this.layerClass,this.layerTransform,t)}},{key:"make",value:function(){this.render(this.data),this.oldData=this.data}},{key:"render",value:function(t){var e=this;this.store=this.makeElements(t),this.layer.textContent="",this.store.forEach((function(t){e.layer.appendChild(t)})),this.labels.forEach((function(t){e.layer.appendChild(t)}))}},{key:"update",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.refresh();var e=[];return t&&(e=this.animateElements(this.data)||[]),e}}]),t}(),Jt={donutSlices:{layerClass:"donut-slices",makeElements:function(t){return t.sliceStrings.map((function(e,i){var n=S(e,"donut-path",t.colors[i],"none",t.strokeWidth);return n.style.transition="transform .3s;",n}))},animateElements:function(t){return this.store.map((function(e,i){return E(e,t.sliceStrings[i])}))}},pieSlices:{layerClass:"pie-slices",makeElements:function(t){return t.sliceStrings.map((function(e,i){var n=S(e,"pie-path","none",t.colors[i]);return n.style.transition="transform .3s;",n}))},animateElements:function(t){return this.store.map((function(e,i){return E(e,t.sliceStrings[i])}))}},percentageBars:{layerClass:"percentage-bars",makeElements:function(t){var e=this;return t.xPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:yt,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"none";return w("rect",{className:"percentage-bar",x:t,y:e,width:i,height:n,fill:a,styles:{stroke:x(a,-25),"stroke-dasharray":"0, "+(n+i)+", "+i+", "+n,"stroke-width":s}})}(i,0,t.widths[n],e.constants.barHeight,e.constants.barDepth,t.colors[n])}))},animateElements:function(t){if(t)return[]}},yAxis:{layerClass:"y axis",makeElements:function(t){var e=this;return t.positions.map((function(i,n){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};d(t)||(t=0),n.pos||(n.pos="left"),n.offset||(n.offset=0),n.mode||(n.mode="span"),n.stroke||(n.stroke=Lt),n.className||(n.className="");var s=-1*St,a="span"===n.mode?i+St:0;return"tick"===n.mode&&"right"===n.pos&&(s=i+St,a=i),C(t,e,s+=n.offset,a+=n.offset,{stroke:n.stroke,className:n.className,lineType:n.lineType,shortenNumbers:n.shortenNumbers})}(i,t.labels[n],e.constants.width,{mode:e.constants.mode,pos:e.constants.pos,shortenNumbers:e.constants.shortenNumbers})}))},animateElements:function(t){var e=t.positions,i=t.labels,n=this.oldData.positions,s=this.oldData.labels,a=m(n,e),r=pt(a,2);n=r[0],e=r[1];var o=m(s,i),l=pt(o,2);return s=l[0],i=l[1],this.render({positions:n,labels:i}),this.store.map((function(t,i){return _(t,e[i],n[i])}))}},xAxis:{layerClass:"x axis",makeElements:function(t){var e=this;return t.positions.map((function(i,n){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};d(t)||(t=0),n.pos||(n.pos="bottom"),n.offset||(n.offset=0),n.mode||(n.mode="span"),n.stroke||(n.stroke=Lt),n.className||(n.className="");var s=i+St,a="span"===n.mode?-1*St:i;return"tick"===n.mode&&"top"===n.pos&&(s=-1*St,a=0),L(t,e,s,a,{stroke:n.stroke,className:n.className,lineType:n.lineType})}(i,t.calcLabels[n],e.constants.height,{mode:e.constants.mode,pos:e.constants.pos})}))},animateElements:function(t){var e=t.positions,i=t.calcLabels,n=this.oldData.positions,s=this.oldData.calcLabels,a=m(n,e),r=pt(a,2);n=r[0],e=r[1];var o=m(s,i),l=pt(o,2);return s=l[0],i=l[1],this.render({positions:n,calcLabels:i}),this.store.map((function(t,i){return function(t,e,i){return N(t,[i,0],[e,0],Yt)}(t,e[i],n[i])}))}},yMarkers:{layerClass:"y-markers",makeElements:function(t){var e=this;return t.map((function(t){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};n.labelPos||(n.labelPos="right");var s=w("text",{className:"chart-label",x:"left"===n.labelPos?At:i-c(e,5)-At,y:0,dy:Ot/-2+"px","font-size":Ot+"px","text-anchor":"start",innerHTML:e+""}),a=C(t,"",0,i,{stroke:n.stroke||Lt,className:n.className||"",lineType:n.lineType});return a.appendChild(s),a}(t.position,t.label,e.constants.width,{labelPos:t.options.labelPos,mode:"span",lineType:"dashed"})}))},animateElements:function(t){var e=m(this.oldData,t),i=pt(e,2);this.oldData=i[0];var n=(t=i[1]).map((function(t){return t.position})),s=t.map((function(t){return t.label})),a=t.map((function(t){return t.options})),r=this.oldData.map((function(t){return t.position}));return this.render(r.map((function(t,e){return{position:r[e],label:s[e],options:a[e]}}))),this.store.map((function(t,e){return _(t,n[e],r[e])}))}},yRegions:{layerClass:"y-regions",makeElements:function(t){var e=this;return t.map((function(t){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=t-e,r=w("rect",{className:"bar mini",styles:{fill:"rgba(228, 234, 239, 0.49)",stroke:Lt,"stroke-dasharray":i+", "+a},x:0,y:0,width:i,height:a});s.labelPos||(s.labelPos="right");var o=w("text",{className:"chart-label",x:"left"===s.labelPos?At:i-c(n+"",4.5)-At,y:0,dy:Ot/-2+"px","font-size":Ot+"px","text-anchor":"start",innerHTML:n+""}),l=w("g",{transform:"translate(0, "+e+")"});return l.appendChild(r),l.appendChild(o),l}(t.startPos,t.endPos,e.constants.width,t.label,{labelPos:t.options.labelPos})}))},animateElements:function(t){var e=m(this.oldData,t),i=pt(e,2);this.oldData=i[0];var n=(t=i[1]).map((function(t){return t.endPos})),s=t.map((function(t){return t.label})),a=t.map((function(t){return t.startPos})),r=t.map((function(t){return t.options})),o=this.oldData.map((function(t){return t.endPos})),l=this.oldData.map((function(t){return t.startPos}));this.render(o.map((function(t,e){return{startPos:l[e],endPos:o[e],label:s[e],options:r[e]}})));var u=[];return this.store.map((function(t,e){u=u.concat(function(t,e,i,n){var s=e-i,a=t.childNodes[0];return[[a,{height:s,"stroke-dasharray":a.getAttribute("width")+", "+s},Yt,zt],N(t,[0,n],[0,i],Yt)]}(t,a[e],n[e],o[e]))})),u}},heatDomain:{layerClass:function(){return"heat-domain domain-"+this.constants.index},makeElements:function(t){var e=this,i=this.constants,n=i.index,s=i.colWidth,a=i.rowHeight,r=i.squareSize,o=i.radius,l=i.xTranslate,u=0;return this.serializedSubDomains=[],t.cols.map((function(t,i){1===i&&e.labels.push(O("domain-name",l,-12,B(n,!0).toUpperCase(),{fontSize:9})),t.map((function(t,i){if(t.fill){var n={"data-date":t.yyyyMmDd,"data-value":t.dataValue,"data-day":i},s=T("day",l,u,r,o,t.fill,n);e.serializedSubDomains.push(s)}u+=a})),u=0,l+=s})),this.serializedSubDomains},animateElements:function(t){if(t)return[]}},barGraph:{layerClass:function(){return"dataset-units dataset-bars dataset-"+this.constants.index},makeElements:function(t){var e=this.constants;return this.unitType="bar",this.units=t.yPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{},l=p(e,o.zeroLine),u=pt(l,2),c=u[0],h=u[1];h-=r,0===c&&(c=o.minHeight,h-=o.minHeight),d(t)||(t=0),d(h)||(h=0),d(c,!0)||(c=0),d(i,!0)||(i=0);var f=w("rect",{className:"bar mini",style:"fill: "+n,"data-point-index":a,x:t,y:h,width:i,height:c});if((s+="")||s.length){f.setAttribute("y",0),f.setAttribute("x",0);var m=w("text",{className:"data-point-value",x:i/2,y:0,dy:Ot/2*-1+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:s}),v=w("g",{"data-point-index":a,transform:"translate("+t+", "+h+")"});return v.appendChild(f),v.appendChild(m),v}return f}(t.xPositions[n],i,t.barWidth,e.color,t.labels[n],n,t.offsets[n],{zeroLine:t.zeroLine,barsWidth:t.barsWidth,minHeight:e.minHeight})})),this.units},animateElements:function(t){var e=t.xPositions,i=t.yPositions,n=t.offsets,s=t.labels,a=this.oldData.xPositions,r=this.oldData.yPositions,o=this.oldData.offsets,l=this.oldData.labels,u=m(a,e),c=pt(u,2);a=c[0],e=c[1];var h=m(r,i),d=pt(h,2);r=d[0],i=d[1];var f=m(o,n),p=pt(f,2);o=p[0],n=p[1];var v=m(l,s),g=pt(v,2);l=g[0],s=g[1],this.render({xPositions:a,yPositions:r,offsets:o,labels:s,zeroLine:this.oldData.zeroLine,barsWidth:this.oldData.barsWidth,barWidth:this.oldData.barWidth});var y=[];return this.store.map((function(s,a){y=y.concat($(s,e[a],i[a],t.barWidth,n[a],{zeroLine:t.zeroLine}))})),y}},lineGraph:{layerClass:function(){return"dataset-units dataset-line dataset-"+this.constants.index},makeElements:function(t){var e=this.constants;return this.unitType="dot",this.paths={},e.hideLine||(this.paths=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=e.map((function(e,i){return t[i]+","+e})).join("L");n.spline&&(a=y(t,e));var r=S("M"+a,"line-graph-path",i);if(n.heatline){var o=A(s.svgDefs,i);r.style.stroke="url(#"+o+")"}var l={path:r};if(n.regionFill){var u=A(s.svgDefs,i,!0),c="M"+t[0]+","+s.zeroLine+"L"+a+"L"+t.slice(-1)[0]+","+s.zeroLine;l.region=S(c,"region-fill","none","url(#"+u+")")}return l}(t.xPositions,t.yPositions,e.color,{heatline:e.heatline,regionFill:e.regionFill,spline:e.spline},{svgDefs:e.svgDefs,zeroLine:t.zeroLine})),this.units=[],e.hideDots||(this.units=t.yPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=w("circle",{style:"fill: "+n,"data-point-index":a,cx:t,cy:e,r:i});if((s+="")||s.length){r.setAttribute("cy",0),r.setAttribute("cx",0);var o=w("text",{className:"data-point-value",x:0,y:0,dy:Ot/2*-1-i+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:s}),l=w("g",{"data-point-index":a,transform:"translate("+t+", "+e+")"});return l.appendChild(r),l.appendChild(o),l}return r}(t.xPositions[n],i,t.radius,e.color,e.valuesOverPoints?t.values[n]:"",n)}))),Object.values(this.paths).concat(this.units)},animateElements:function(t){var e=t.xPositions,i=t.yPositions,n=t.values,s=this.oldData.xPositions,a=this.oldData.yPositions,r=this.oldData.values,o=m(s,e),l=pt(o,2);s=l[0],e=l[1];var u=m(a,i),c=pt(u,2);a=c[0],i=c[1];var h=m(r,n),d=pt(h,2);r=d[0],n=d[1],this.render({xPositions:s,yPositions:a,values:n,zeroLine:this.oldData.zeroLine,radius:this.oldData.radius});var f=[];return Object.keys(this.paths).length&&(f=f.concat(function(t,e,i,n,s){var a=[],r=i.map((function(t,i){return e[i]+","+t})).join("L");s&&(r=y(e,i));var o=[t.path,{d:"M"+r},Et,zt];if(a.push(o),t.region){var l=e[0]+","+n+"L",u="L"+e.slice(-1)[0]+", "+n,c=[t.region,{d:"M"+l+r+u},Et,zt];a.push(c)}return a}(this.paths,e,i,t.zeroLine,this.constants.spline))),this.units.length&&this.units.map((function(t,n){f=f.concat(function(t,e,i){return"circle"!==t.nodeName?[N(t,t.getAttribute("transform").split("(")[1].slice(0,-1),[e,i],Yt)]:[[t,{cx:e,cy:i},$t,zt]]}(t,e[n],i[n]))})),f}}},Xt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="percentage",n.setup(),n}return dt(i,t),ct(i,[{key:"setMeasures",value:function(t){var e=this.measures;this.barOptions=t.barOptions||{};var i=this.barOptions;i.height=i.height||20,i.depth=i.depth||yt,e.paddings.right=30,e.legendHeight=60,e.baseHeight=8*(i.height+.5*i.depth)}},{key:"setupComponents",value:function(){var t=this.state,e=[["percentageBars",{barHeight:this.barOptions.height,barDepth:this.barOptions.depth},function(){return{xPositions:t.xPositions,widths:t.widths,colors:this.colors}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;e.xPositions=[],e.widths=[];var n=0;e.sliceTotals.map((function(i){var s=t.width*i/e.grandTotal;e.widths.push(s),e.xPositions.push(n),n+=s}))}},{key:"makeDataByIndex",value:function(){}},{key:"bindTooltip",value:function(){var t=this,i=this.state;this.container.addEventListener("mousemove",(function(n){var s=t.components.get("percentageBars").store,a=n.target;if(s.includes(a)){var r=s.indexOf(a),o=e(t.container),l=e(a),u=l.left-o.left+parseInt(a.getAttribute("width"))/2,c=l.top-o.top,h=(t.formattedLabels&&t.formattedLabels.length>0?t.formattedLabels[r]:t.state.labels[r])+": ",d=i.sliceTotals[r]/i.grandTotal;t.tip.setValues(u,c,{name:h,value:(100*d).toFixed(1)+"%"}),t.tip.showTip()}}))}}]),i}(It),Zt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="pie",n.initTimeout=0,n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),this.mouseMove=this.mouseMove.bind(this),this.mouseLeave=this.mouseLeave.bind(this),this.hoverRadio=t.hoverRadio||.1,this.config.startAngle=t.startAngle||0,this.clockWise=t.clockWise||!1}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;this.radius=this.height>this.width?this.center.x:this.center.y;var n=this.radius,s=this.clockWise,a=e.slicesProperties||[];e.sliceStrings=[],e.slicesProperties=[];var r=180-this.config.startAngle;e.sliceTotals.map((function(i,o){var l=r,u=i/e.grandTotal*360,c=u>180?1:0,d=s?-u:u,f=r+=d,p=h(l,n),m=h(f,n),v=t.init&&a[o],g=void 0,y=void 0;t.init?(g=v?v.startPosition:p,y=v?v.endPosition:p):(g=p,y=m);var b=360===u?function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=2*i.y,c=i.y+e.y;return"M"+i.x+" "+i.y+"\n\t\tL"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+" z\n\t\tL"+r+" "+u+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+c+" z"}(g,y,t.center,t.radius,s,c):function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=i.y+e.y;return"M"+i.x+" "+i.y+"\n\t\tL"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+" z"}(g,y,t.center,t.radius,s,c);e.sliceStrings.push(b),e.slicesProperties.push({startPosition:p,endPosition:m,value:i,total:e.grandTotal,startAngle:l,endAngle:f,angle:d})})),this.init=0}},{key:"setupComponents",value:function(){var t=this.state,e=[["pieSlices",{},function(){return{sliceStrings:t.sliceStrings,colors:this.colors}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=h(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,s){if(t){var a=this.colors[i];if(n){W(t,this.calTranslateByAngle(this.state.slicesProperties[i])),t.style.fill=x(a,50);var r=e(this.svg),o=s.pageX-r.left+10,l=s.pageY-r.top-10,u=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.state.labels[i])+": ",c=(100*this.state.sliceTotals[i]/this.state.grandTotal).toFixed(1);this.tip.setValues(o,l,{name:u,value:c+"%"}),this.tip.showTip()}else W(t,"translate3d(0,0,0)"),this.tip.hideTip(),t.style.fill=a}}},{key:"bindTooltip",value:function(){this.container.addEventListener("mousemove",this.mouseMove),this.container.addEventListener("mouseleave",this.mouseLeave)}},{key:"mouseMove",value:function(t){var e=t.target,i=this.components.get("pieSlices").store,n=this.curActiveSliceIndex,s=this.curActiveSlice;if(i.includes(e)){var a=i.indexOf(e);this.hoverSlice(s,n,!1),this.curActiveSlice=e,this.curActiveSliceIndex=a,this.hoverSlice(e,a,!0,t)}else this.mouseLeave()}},{key:"mouseLeave",value:function(){this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,!1)}}]),i}(It),Kt=function(t){function e(t,i){ut(this,e);var n=ft(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i));n.type="heatmap",n.countLabel=i.countLabel||"";var s=["Sunday","Monday"],a=s.includes(i.startSubDomain)?i.startSubDomain:"Sunday";return n.startSubDomainIndex=s.indexOf(a),n.setup(),n}return dt(e,t),ct(e,[{key:"setMeasures",value:function(t){var e=this.measures;this.discreteDomains=0===t.discreteDomains?0:1,e.paddings.top=36,e.paddings.bottom=0,e.legendHeight=24,e.baseHeight=12*Rt+r(e);var i=this.data,n=this.discreteDomains?12:0;this.independentWidth=12*(U(i.start,i.end)+n)+o(e)}},{key:"updateWidth",value:function(){var t=this.discreteDomains?12:0,e=this.state.noOfWeeks?this.state.noOfWeeks:52;this.baseWidth=12*(e+t)+o(this.measures)}},{key:"prepareData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data;if(t.start&&t.end&&t.start>t.end)throw new Error("Start date cannot be greater than end date.");if(t.start||(t.start=new Date,t.start.setFullYear(t.start.getFullYear()-1)),t.end||(t.end=new Date),t.dataPoints=t.dataPoints||{},parseInt(Object.keys(t.dataPoints)[0])>1e5){var e={};Object.keys(t.dataPoints).forEach((function(i){var n=new Date(i*Ut);e[I(n)]=t.dataPoints[i]})),t.dataPoints=e}return t}},{key:"calc",value:function(){var t=this.state;t.start=R(this.data.start),t.end=R(this.data.end),t.firstWeekStart=R(t.start),t.noOfWeeks=U(t.start,t.end),t.distribution=function(t,e){for(var i=Math.max.apply(Math,mt(t)),n=1/(e-1),s=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:"",i=[t.getMonth(),t.getFullYear()],n=i[0],s=i[1],a=q(t),r={index:n,cols:[]};J(e=R(e)||G(n,s),1);for(var o=U(a,e),l=[],u=void 0,c=0;c2&&void 0!==arguments[2]&&arguments[2],n=this.state,s=R(t),a=[],r=0;r=n.start&&s<=n.end;i||s.getMonth()!==e||!l?o.yyyyMmDd=I(s):o=this.getSubDomainConfig(s),a.push(o)}return a}},{key:"getSubDomainConfig",value:function(t){var e=I(t),i=this.data.dataPoints[e];return{yyyyMmDd:e,dataValue:i||0,fill:this.colors[at(i,this.state.distribution)]}}}]),e}(jt),Qt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.barOptions=e.barOptions||{},n.lineOptions=e.lineOptions||{},n.type=e.type||"line",n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"setMeasures",value:function(){this.data.datasets.length<=1&&(this.config.showLegend=0,this.measures.paddings.bottom=30)}},{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),t.axisOptions=t.axisOptions||{},t.tooltipOptions=t.tooltipOptions||{},this.config.xAxisMode=t.axisOptions.xAxisMode||"span",this.config.yAxisMode=t.axisOptions.yAxisMode||"span",this.config.xIsSeries=t.axisOptions.xIsSeries||0,this.config.shortenYAxisNumbers=t.axisOptions.shortenYAxisNumbers||0,this.config.formatTooltipX=t.tooltipOptions.formatTooltipX,this.config.formatTooltipY=t.tooltipOptions.formatTooltipY,this.config.valuesOverPoints=t.valuesOverPoints}},{key:"prepareData",value:function(){return rt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data,this.type)}},{key:"prepareFirstData",value:function(){return ot(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data)}},{key:"calc",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.calcXPositions(),t||this.calcYAxisParameters(this.getAllYValues(),"line"===this.type),this.makeDataByIndex()}},{key:"calcXPositions",value:function(){var t=this.state,e=this.data.labels;t.datasetLength=e.length,t.unitWidth=this.width/t.datasetLength,t.xOffset=t.unitWidth/2,t.xAxis={labels:e,positions:e.map((function(e,i){return l(t.xOffset+i*t.unitWidth)}))}}},{key:"calcYAxisParameters",value:function(t){var e=tt(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"false"),i=this.height/nt(e),n=it(e)*i,s=this.height-et(e)*n;this.state.yAxis={labels:e,positions:e.map((function(t){return s-t*i})),scaleMultiplier:i,zeroLine:s},this.calcDatasetPoints(),this.calcYExtremes(),this.calcYRegions()}},{key:"calcDatasetPoints",value:function(){var t=this.state,e=function(e){return e.map((function(e){return st(e,t.yAxis)}))};t.datasets=this.data.datasets.map((function(t,i){var n=t.values,s=t.cumulativeYs||[];return{name:t.name&&t.name.replace(/<|>|&/g,(function(t){return"&"==t?"&":"<"==t?"<":">"})),index:i,chartType:t.chartType,values:n,yPositions:e(n),cumulativeYs:s,cumulativeYPos:e(s)}}))}},{key:"calcYExtremes",value:function(){var t=this.state;this.barOptions.stacked?t.yExtremes=t.datasets[t.datasets.length-1].cumulativeYPos:(t.yExtremes=new Array(t.datasetLength).fill(9999),t.datasets.map((function(e){e.yPositions.map((function(e,i){e1&&void 0!==arguments[1]?arguments[1]:[],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=t/e.length;n<=0&&(n=1);var s=n/bt,a=void 0;if(i){var r=Math.max.apply(Math,mt(e.map((function(t){return t.length}))));a=Math.ceil(r/s)}return e.map((function(t,e){return(t+="").length>s&&(i?e%a!=0&&(t=""):t=s-3>0?t.slice(0,s-3)+" ...":t.slice(0,s)+".."),t}))}(this.width,t.xAxis.labels,this.config.xIsSeries),t.xAxis}.bind(this)],["yRegions",{width:this.width,pos:"right"},function(){return this.state.yRegions}.bind(this)]],i=this.state.datasets.filter((function(t){return"bar"===t.chartType})),n=this.state.datasets.filter((function(t){return"line"===t.chartType})),s=i.map((function(e){var n=e.index;return["barGraph-"+e.index,{index:n,color:t.colors[n],stacked:t.barOptions.stacked,valuesOverPoints:t.config.valuesOverPoints,minHeight:0*t.height},function(){var t=this.state,e=t.datasets[n],s=this.barOptions.stacked,a=this.barOptions.spaceRatio||.5,r=t.unitWidth*(1-a),o=r/(s?1:i.length),l=t.xAxis.positions.map((function(t){return t-r/2}));s||(l=l.map((function(t){return t+o*n})));var u=new Array(t.datasetLength).fill("");this.config.valuesOverPoints&&(u=s&&e.index===t.datasets.length-1?e.cumulativeYs:e.values);var c=new Array(t.datasetLength).fill(0);return s&&(c=e.yPositions.map((function(t,i){return t-e.cumulativeYPos[i]}))),{xPositions:l,yPositions:e.yPositions,offsets:c,labels:u,zeroLine:t.yAxis.zeroLine,barsWidth:r,barWidth:o}}.bind(t)]})),a=n.map((function(e){var i=e.index;return["lineGraph-"+e.index,{index:i,color:t.colors[i],svgDefs:t.svgDefs,heatline:t.lineOptions.heatline,regionFill:t.lineOptions.regionFill,spline:t.lineOptions.spline,hideDots:t.lineOptions.hideDots,hideLine:t.lineOptions.hideLine,valuesOverPoints:t.config.valuesOverPoints},function(){var t=this.state,e=t.datasets[i],n=t.yAxis.positions[0]s(n)?t.mapTooltipXPosition(o):t.tip.hideTip()}))}},{key:"mapTooltipXPosition",value:function(t){var e=this.state;if(e.yExtremes){var i=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.reduce((function(e,i){return Math.abs(i-t)=0){var n=this.dataByIndex[i];this.tip.setValues(n.xPos+this.tip.offset.x,n.yExtreme+this.tip.offset.y,{name:n.formattedLabel,value:""},n.values,i),this.tip.showTip()}}}},{key:"renderLegend",value:function(){var t=this,e=this.data;e.datasets.length>1&&(this.legendArea.textContent="",e.datasets.map((function(e,i){var n=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",s=arguments[4];s=arguments.length>5&&void 0!==arguments[5]&&arguments[5]?v(s,Tt):s;var a={className:"legend-bar",x:0,y:0,width:i,height:"2px",fill:n},r=w("text",{className:"legend-dataset-text",x:0,y:0,dy:2*Ot+"px","font-size":1.2*Ot+"px","text-anchor":"start",fill:Ct,innerHTML:s}),o=w("g",{transform:"translate("+t+", "+e+")"});return o.appendChild(w("rect",a)),o.appendChild(r),o}(100*i,"0",100,t.colors[i],e.name,t.config.truncateLegends);t.legendArea.appendChild(n)})))}},{key:"makeOverlay",value:function(){var t=this;this.init?this.init=0:(this.overlayGuides&&this.overlayGuides.forEach((function(t){var e=t.overlay;e.parentNode.removeChild(e)})),this.overlayGuides=this.dataUnitComponents.map((function(t){return{type:t.unitType,overlay:void 0,units:t.units}})),void 0===this.state.currentIndex&&(this.state.currentIndex=this.state.datasetLength-1),this.overlayGuides.map((function(e){var i=e.units[t.state.currentIndex];e.overlay=Nt[e.type](i),t.drawArea.appendChild(e.overlay)})))}},{key:"updateOverlayGuides",value:function(){this.overlayGuides&&this.overlayGuides.forEach((function(t){var e=t.overlay;e.parentNode.removeChild(e)}))}},{key:"bindOverlay",value:function(){var t=this;this.parent.addEventListener("data-select",(function(){t.updateOverlay()}))}},{key:"bindUnits",value:function(){var t=this;this.dataUnitComponents.map((function(e){e.units.map((function(e){e.addEventListener("click",(function(){var i=e.getAttribute("data-point-index");t.setCurrentDataPoint(i)}))}))})),this.tip.container.addEventListener("click",(function(){var e=t.tip.container.getAttribute("data-point-index");t.setCurrentDataPoint(e)}))}},{key:"updateOverlay",value:function(){var t=this;this.overlayGuides.map((function(e){var i=e.units[t.state.currentIndex];_t[e.type](i,e.overlay)}))}},{key:"onLeftArrow",value:function(){this.setCurrentDataPoint(this.state.currentIndex-1)}},{key:"onRightArrow",value:function(){this.setCurrentDataPoint(this.state.currentIndex+1)}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.currentIndex,e=this.state;return{index:t,label:e.xAxis.labels[t],values:e.datasets.map((function(e){return e.values[t]}))}}},{key:"setCurrentDataPoint",value:function(t){var e=this.state;(t=parseInt(t))<0&&(t=0),t>=e.xAxis.labels.length&&(t=e.xAxis.labels.length-1),t!==e.currentIndex&&(e.currentIndex=t,function(t,e,i){var n=document.createEvent("HTMLEvents");for(var s in n.initEvent(e,!0,!0),i)n[s]=i[s];t.dispatchEvent(n)}(this.parent,"data-select",this.getDataPoint()))}},{key:"addDataPoint",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.state.datasetLength;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"addDataPoint",this).call(this,t,e,n),this.data.labels.splice(n,0,t),this.data.datasets.map((function(t,i){t.values.splice(n,0,e[i])})),this.update(this.data)}},{key:"removeDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.datasetLength-1;this.data.labels.length<=1||(ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"removeDataPoint",this).call(this,t),this.data.labels.splice(t,1),this.data.datasets.map((function(e){e.values.splice(t,1)})),this.update(this.data))}},{key:"updateDataset",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;this.data.datasets[e].values=t,this.update(this.data)}},{key:"updateDatasets",value:function(t){this.data.datasets.map((function(e,i){t[i]&&(e.values=t[i])})),this.update(this.data)}}]),i}(jt),te=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="donut",n.initTimeout=0,n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),this.mouseMove=this.mouseMove.bind(this),this.mouseLeave=this.mouseLeave.bind(this),this.hoverRadio=t.hoverRadio||.1,this.config.startAngle=t.startAngle||0,this.clockWise=t.clockWise||!1,this.strokeWidth=t.strokeWidth||30}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;this.radius=this.height>this.width?this.center.x-this.strokeWidth/2:this.center.y-this.strokeWidth/2;var n=this.radius,s=this.clockWise,a=e.slicesProperties||[];e.sliceStrings=[],e.slicesProperties=[];var r=180-this.config.startAngle;e.sliceTotals.map((function(i,o){var l=r,u=i/e.grandTotal*360,c=u>180?1:0,d=s?-u:u,f=r+=d,p=h(l,n),m=h(f,n),v=t.init&&a[o],g=void 0,y=void 0;t.init?(g=v?v.startPosition:p,y=v?v.endPosition:p):(g=p,y=m);var b=360===u?function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=2*n+o;return"M"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+"\n\t\tM"+r+" "+u+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+(i.y+t.y)}(g,y,t.center,t.radius,t.clockWise,c):function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;return"M"+(i.x+t.x)+" "+(i.y+t.y)+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+(i.x+e.x)+" "+(i.y+e.y)}(g,y,t.center,t.radius,t.clockWise,c);e.sliceStrings.push(b),e.slicesProperties.push({startPosition:p,endPosition:m,value:i,total:e.grandTotal,startAngle:l,endAngle:f,angle:d})})),this.init=0}},{key:"setupComponents",value:function(){var t=this.state,e=[["donutSlices",{},function(){return{sliceStrings:t.sliceStrings,colors:this.colors,strokeWidth:this.strokeWidth}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=h(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,s){if(t){var a=this.colors[i];if(n){W(t,this.calTranslateByAngle(this.state.slicesProperties[i])),t.style.stroke=x(a,50);var r=e(this.svg),o=s.pageX-r.left+10,l=s.pageY-r.top-10,u=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.state.labels[i])+": ",c=(100*this.state.sliceTotals[i]/this.state.grandTotal).toFixed(1);this.tip.setValues(o,l,{name:u,value:c+"%"}),this.tip.showTip()}else W(t,"translate3d(0,0,0)"),this.tip.hideTip(),t.style.stroke=a}}},{key:"bindTooltip",value:function(){this.container.addEventListener("mousemove",this.mouseMove),this.container.addEventListener("mouseleave",this.mouseLeave)}},{key:"mouseMove",value:function(t){var e=t.target,i=this.components.get("donutSlices").store,n=this.curActiveSliceIndex,s=this.curActiveSlice;if(i.includes(e)){var a=i.indexOf(e);this.hoverSlice(s,n,!1),this.curActiveSlice=e,this.curActiveSliceIndex=a,this.hoverSlice(e,a,!0,t)}else this.mouseLeave()}},{key:"mouseLeave",value:function(){this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,!1)}}]),i}(It),ee={bar:Qt,line:Qt,percentage:Xt,heatmap:Kt,pie:Zt,donut:te},ie=Object.freeze({Chart:function t(e,i){return ut(this,t),function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1],i=arguments[2];return"axis-mixed"===t?(i.type="line",new Qt(e,i)):ee[t]?new ee[t](e,i):void console.error("Undefined chart type: "+t)}(i.type,e,i)},PercentageChart:Xt,PieChart:Zt,Heatmap:Kt,AxisChart:Qt});return Object.assign({},{NAME:"Frappe Charts",VERSION:"1.6.2"},ie)}()}},e={};function i(n){var s=e[n];if(void 0!==s)return s.exports;var a=e[n]={exports:{}};return t[n].call(a.exports,a,a.exports,i),a.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";i.r(n);const t=flarum.reg.get("core","admin/app");var e=i.n(t);const s=flarum.reg.get("core","common/extend"),a=flarum.reg.get("core","admin/components/DashboardPage");var r=i.n(a);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 l(t,e,i){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var n=i.call(t,e);if("object"!==o(n))return n;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:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}const u=flarum.reg.get("core","admin/components/DashboardWidget");var c=i.n(u);const h=flarum.reg.get("core","common/components/LoadingIndicator");var d=i.n(h);const f=flarum.reg.get("core","common/components/Link");var p=i.n(f);const v=flarum.reg.get("core","common/utils/abbreviateNumber");var g=i.n(v);class y extends(c()){constructor(){super(...arguments),l(this,"entities",["users","discussions","posts"]),l(this,"lifetimeData",void 0),l(this,"loadingLifetime",!0)}oncreate(t){super.oncreate(t),this.loadLifetimeData()}async loadLifetimeData(){this.loadingLifetime=!0,m.redraw();const t=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"lifetime"}});this.lifetimeData=t,this.loadingLifetime=!1,m.redraw()}className(){return"StatisticsWidget StatisticsWidget--mini"}content(){return m("div",{className:"StatisticsWidget-table"},m("h4",{className:"StatisticsWidget-title"},e().translator.trans("flarum-statistics.admin.statistics.mini_heading")),m("div",{className:"StatisticsWidget-entities"},m("div",{className:"StatisticsWidget-labels"},m("div",{className:"StatisticsWidget-label"},e().translator.trans("flarum-statistics.admin.statistics.total_label"))),this.entities.map((t=>{const i=this.loadingLifetime?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getTotalCount(t);return m("div",{className:"StatisticsWidget-entity"},m("h3",{className:"StatisticsWidget-heading"},e().translator.trans("flarum-statistics.admin.statistics."+t+"_heading")),m("div",{className:"StatisticsWidget-total",title:i},this.loadingLifetime?m(d(),{display:"inline"}):g()(i)))}))),m("div",{className:"StatisticsWidget-viewFull"},m(p(),{href:e().route("extension",{id:"flarum-statistics"})},e().translator.trans("flarum-statistics.admin.statistics.view_full"))))}getTotalCount(t){return this.lifetimeData[t]}}flarum.reg.add("flarum-statistics","admin/components/MiniStatisticsWidget",y);const b=flarum.reg.get("core","admin/components/ExtensionPage");var x=i.n(b);const k=flarum.reg.get("core","common/components/SelectDropdown");var w=i.n(k);const D=flarum.reg.get("core","common/components/Button");var M=i.n(D);const P=flarum.reg.get("core","common/utils/extractText");var S=i.n(P);const A=flarum.reg.get("core","common/components/Placeholder");var T=i.n(A);const O=flarum.reg.get("core","common/components/Icon");var L=i.n(O);const C=flarum.reg.get("core","common/utils/classList");var N=i.n(C);const _=flarum.reg.get("core","common/utils/ItemList");var $=i.n(_);const E=flarum.reg.get("core","admin/utils/generateElementId");var Y=i.n(E);const W=flarum.reg.get("core","common/components/Modal");var z=i.n(W),H=i(860),F=i.n(H),j=i(329),I=i.n(j);F().extend(I());class R extends(z()){constructor(){super(...arguments),l(this,"state",{inputs:{startDateVal:F()().format("YYYY-MM-DD"),endDateVal:F()().format("YYYY-MM-DD")},ids:{startDate:Y()(),endDate:Y()()}})}oninit(t){super.oninit(t),this.attrs.value&&(this.state.inputs={startDateVal:F().utc(1e3*this.attrs.value.start).format("YYYY-MM-DD"),endDateVal:F().utc(1e3*this.attrs.value.end).format("YYYY-MM-DD")})}className(){return"StatisticsWidgetDateSelectionModal Modal--small"}title(){return e().translator.trans("flarum-statistics.admin.date_selection_modal.title")}content(){return m("div",{className:"Modal-body"},this.items().toArray())}items(){const t=new($());return t.add("intro",m("p",null,e().translator.trans("flarum-statistics.admin.date_selection_modal.description")),100),t.add("date_start",m("div",{className:"Form-group"},m("label",{htmlFor:this.state.ids.startDate},e().translator.trans("flarum-statistics.admin.date_selection_modal.start_date")),m("input",{type:"date",id:this.state.ids.startDate,value:this.state.inputs.startDateVal,onchange:this.updateState("startDateVal"),className:"FormControl"})),90),t.add("date_end",m("div",{className:"Form-group"},m("label",{htmlFor:this.state.ids.endDate},e().translator.trans("flarum-statistics.admin.date_selection_modal.end_date")),m("input",{type:"date",id:this.state.ids.endDate,value:this.state.inputs.endDateVal,onchange:this.updateState("endDateVal"),className:"FormControl"})),80),t.add("submit",m(M(),{className:"Button Button--primary",type:"submit"},e().translator.trans("flarum-statistics.admin.date_selection_modal.submit_button")),0),t}updateState(t){return e=>{this.state.inputs[t]=e.currentTarget.value}}submitData(){return{start:Math.floor(+F().utc(this.state.inputs.startDateVal+"Z")/1e3),end:Math.floor(+F().utc(this.state.inputs.endDateVal+"Z").hour(23).minute(59).second(59).millisecond(999)/1e3)}}onsubmit(t){t.preventDefault();const i=this.submitData();i.end(t[e]="unloaded",t)),{})),l(this,"loadingCustom",this.entities.reduce(((t,e)=>(t[e]="unloaded",t)),{})),l(this,"selectedEntity","users"),l(this,"selectedPeriod",void 0),l(this,"chartEntity",void 0),l(this,"chartPeriod",void 0)}oncreate(t){super.oncreate(t),this.loadLifetimeData()}async loadLifetimeData(){this.loadingLifetime=!0,m.redraw();const t=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"lifetime"}});this.lifetimeData=t,this.loadingLifetime=!1,m.redraw()}async loadTimedData(t){this.loadingTimed[t]="loading",m.redraw();try{const i=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"timed",model:t}});this.timedData[t]=i,this.loadingTimed[t]="loaded";let n=new Date;n.setUTCHours(0,0,0,0);const s=n.getTime()/1e3;this.periods={today:{start:s,end:s+86400,step:3600},last_7_days:{start:s-604800,end:s,step:86400},previous_7_days:{start:s-1209600,end:s-604800,step:86400},last_28_days:{start:s-2419200,end:s,step:86400},previous_28_days:{start:s-4838400,end:s-2419200,step:86400},last_12_months:{start:s-31449600,end:s,step:604800}},this.selectedPeriod="last_7_days"}catch(e){console.error(e),this.loadingTimed[t]="fail"}m.redraw()}async loadCustomRangeData(t){this.loadingCustom[t]="loading",m.redraw();const i={...this.customPeriod};try{const n=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"custom",model:t,dateRange:{start:i.start,end:i.end}}});if(JSON.stringify(i)!==JSON.stringify(this.customPeriod))return;this.customPeriodData[t]=n,this.loadingCustom[t]="loaded",m.redraw()}catch(e){if(JSON.stringify(i)!==JSON.stringify(this.customPeriod))return;console.error(e),this.loadingCustom[t]="fail"}}className(){return"StatisticsWidget"}content(){var t,i;const n="loaded"!==("custom"===this.selectedPeriod?this.loadingCustom:this.loadingTimed)[this.selectedEntity],s=n?null:"custom"===this.selectedPeriod?{start:null==(t=this.customPeriod)?void 0:t.end,end:null==(i=this.customPeriod)?void 0:i.end,step:86400}:this.periods[this.selectedPeriod];return"custom"===this.selectedPeriod?this.customPeriodData[this.selectedEntity]||"unloaded"!==this.loadingCustom[this.selectedEntity]||this.loadCustomRangeData(this.selectedEntity):this.timedData[this.selectedEntity]||"unloaded"!==this.loadingTimed[this.selectedEntity]||this.loadTimedData(this.selectedEntity),m("div",{className:"StatisticsWidget-table"},m("div",{className:"StatisticsWidget-entities"},m("div",{className:"StatisticsWidget-labels"},m("div",{className:"StatisticsWidget-label"},e().translator.trans("flarum-statistics.admin.statistics.total_label")),m("div",{className:"StatisticsWidget-label"},n?m(d(),{size:"small",display:"inline"}):m(w(),{disabled:n,buttonClassName:"Button Button--text",caretIcon:"fas fa-caret-down"},Object.keys(this.periods).map((t=>m(M(),{key:t,active:t===this.selectedPeriod,onclick:this.changePeriod.bind(this,t),icon:t!==this.selectedPeriod||"fas fa-check"},e().translator.trans("flarum-statistics.admin.statistics.".concat(t,"_label"))))).concat([m(M(),{key:"custom",active:"custom"===this.selectedPeriod,onclick:()=>{const t={onModalSubmit:t=>{JSON.stringify(t)!==JSON.stringify(this.customPeriod)&&(this.customPeriodData={},Object.keys(this.loadingCustom).forEach((t=>this.loadingCustom[t]="unloaded")),this.customPeriod=t,this.changePeriod("custom"))}};this.customPeriod&&(t.value=this.customPeriod),e().modal.show(R,t)},icon:"custom"!==this.selectedPeriod||"fas fa-check"},"custom"===this.selectedPeriod?S()(e().translator.trans("flarum-statistics.admin.statistics.custom_label_specified",{fromDate:F().utc(1e3*this.customPeriod.start).format("ll"),toDate:F().utc(1e3*this.customPeriod.end).format("ll")})):e().translator.trans("flarum-statistics.admin.statistics.custom_label"))])))),this.entities.map((t=>{const i=this.loadingLifetime?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getTotalCount(t),a=n?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getPeriodCount(t,s),r="custom"===this.selectedPeriod?null:n?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getPeriodCount(t,this.getLastPeriod(s)),o=n||0===r||null===r?0:(a-r)/r*100;return m("button",{className:N()("Button--ua-reset StatisticsWidget-entity",{active:this.selectedEntity===t}),onclick:this.changeEntity.bind(this,t)},m("h3",{className:"StatisticsWidget-heading"},e().translator.trans("flarum-statistics.admin.statistics."+t+"_heading")),m("div",{className:"StatisticsWidget-total",title:i},this.loadingLifetime?m(d(),{display:"inline"}):g()(i)),m("div",{className:"StatisticsWidget-period",title:a},n?m(d(),{display:"inline"}):g()(a),0!==o&&m("[",null," ",m("span",{className:"StatisticsWidget-change StatisticsWidget-change--"+(o>0?"up":"down")},m(L(),{name:"fas fa-arrow-"+(o>0?"up":"down")}),Math.abs(o).toFixed(1),"%"))))}))),m("[",null,n?m("div",{key:"loading",className:"StatisticsWidget-chart","data-loading":"true"},m(d(),{size:"large"})):m("div",{key:"loaded",className:"StatisticsWidget-chart","data-loading":"false",oncreate:this.drawChart.bind(this),onupdate:this.drawChart.bind(this)})),this.noData&&m(T(),{text:e().translator.trans("flarum-statistics.admin.statistics.no_data")}),!this.noData&&!!this.chart&&m(M(),{className:"StatisticsWidget-chartExport Button",icon:"fas fa-file-export",onclick:()=>{this.chart.export()}},e().translator.trans("flarum-statistics.admin.statistics.export_chart_button")))}drawChart(t){var i,n;if(this.chart&&this.chartEntity===this.selectedEntity&&this.chartPeriod===this.selectedPeriod)return;const s="custom"===this.selectedPeriod?{start:null==(i=this.customPeriod)?void 0:i.start,end:null==(n=this.customPeriod)?void 0:n.end,step:86400}:this.periods[this.selectedPeriod],a=s.end-s.start,r=[],o=[],l=[];for(let t=s.start;t86400&&(e+=" - "+F().unix(t+s.step-1).utc().format("D MMM"))),r.push(e),o.push(this.getPeriodCount(this.selectedEntity,{start:t,end:t+s.step})),l.push(this.getPeriodCount(this.selectedEntity,{start:t-a,end:t-a}))}if(0===o.length)return this.noData=!0,void m.redraw();this.noData=!1,m.redraw();const u={labels:r,datasets:[{name:S()(e().translator.trans("flarum-statistics.admin.statistics.current_period")),values:o},{name:S()(e().translator.trans("flarum-statistics.admin.statistics.previous_period")),values:l}]};this.chart&&16&document.compareDocumentPosition(this.chart.parent)?this.chart.update(u):this.chart=new B.Chart(t.dom,{data:u,type:"line",height:280,axisOptions:{xAxisMode:"tick",yAxisMode:"span",xIsSeries:!0},lineOptions:{hideDots:1,regionFill:1},colors:[e().forum.attribute("themePrimaryColor"),"black"]}),this.chartEntity=this.selectedEntity,this.chartPeriod=this.selectedPeriod}changeEntity(t){this.selectedEntity=t}changePeriod(t){this.selectedPeriod=t}getTotalCount(t){return this.lifetimeData[t]}getPeriodCount(t,e){const i=("custom"===this.selectedPeriod?this.customPeriodData:this.timedData)[t];let n=0;for(const t in i){const s=parseInt(t);s>=e.start&&s{(0,s.extend)(r().prototype,"availableWidgets",(function(t){t.add("statistics",m(y,null),20)})),e().extensionData.for("flarum-statistics").registerPage(q)}))})(),module.exports=n})(); +(()=>{var t={860:function(t){t.exports=function(){"use strict";var t=6e4,e=36e5,i="millisecond",n="second",s="minute",a="hour",r="day",o="week",l="month",u="quarter",c="year",h="date",d="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,p=/\[([^\]]+)]|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,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],i=t%100;return"["+t+(e[(i-20)%10]||e[i]||e[0])+"]"}},v=function(t,e,i){var n=String(t);return!n||n.length>=e?t:""+Array(e+1-n.length).join(i)+t},g={s:v,z:function(t){var e=-t.utcOffset(),i=Math.abs(e),n=Math.floor(i/60),s=i%60;return(e<=0?"+":"-")+v(n,2,"0")+":"+v(s,2,"0")},m:function t(e,i){if(e.date()1)return t(r[0])}else{var o=e.name;b[o]=e,s=o}return!n&&s&&(y=s),s||!n&&y},w=function(t,e){if(x(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new M(i)},D=g;D.l=k,D.i=x,D.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var M=function(){function m(t){this.$L=k(t.locale,null,!0),this.parse(t)}var v=m.prototype;return v.parse=function(t){this.$d=function(t){var e=t.date,i=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var n=e.match(f);if(n){var s=n[2]-1||0,a=(n[7]||"0").substring(0,3);return i?new Date(Date.UTC(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)):new Date(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},v.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},v.$utils=function(){return D},v.isValid=function(){return!(this.$d.toString()===d)},v.isSame=function(t,e){var i=w(t);return this.startOf(e)<=i&&i<=this.endOf(e)},v.isAfter=function(t,e){return w(t)=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function s(t){return t.titleHeight+t.margins.top+t.paddings.top}function a(t){return t.margins.left+t.paddings.left}function r(t){return t.margins.top+t.margins.bottom+t.paddings.top+t.paddings.bottom+t.titleHeight+t.legendHeight}function o(t){return t.margins.left+t.margins.right+t.paddings.left+t.paddings.right}function l(t){return parseFloat(t.toFixed(2))}function u(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=n?t[0]:t[t.length-1]);var s=new Array(Math.abs(e)).fill(i);return n?s.concat(t):t.concat(s)}function c(t,e){return(t+"").length*e}function h(t,e){return{x:Math.sin(t*wt)*e,y:Math.cos(t*wt)*e}}function d(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!(Number.isNaN(t)||void 0===t||!Number.isFinite(t)||e&&t<0)}function f(t){var e=void 0,i=void 0,n=void 0;if(t instanceof Date)return new Date(t.getTime());if("object"!==(void 0===t?"undefined":lt(t))||null===t)return t;for(n in e=Array.isArray(t)?[]:{},t)i=t[n],e[n]=f(i);return e}function p(t,e){var i=void 0,n=void 0;return t<=e?(i=e-t,n=t):(i=t-e,n=e),[i,n]}function m(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=u(t,i):e=u(e,i),[t,e]}function v(t,e){if(t)return t.length>e?t.slice(0,e-3)+"...":t}function g(t){var e=void 0;if("number"==typeof t)e=t;else if("string"==typeof t&&(e=Number(t),Number.isNaN(e)))return t;var i=Math.floor(Math.log10(Math.abs(e)));if(i<=2)return e;var n=Math.floor(i/3),s=Math.pow(10,i-3*n)*+(e/Math.pow(10,i)).toFixed(1);return Math.round(100*s)/100+" "+["","K","M","B","T"][n]}function y(t,e){for(var i=[],n=0;n255?255:t<0?0:t}function x(t,e){var i=Pt(t),n=!1;"#"==i[0]&&(i=i.slice(1),n=!0);var s=parseInt(i,16),a=b((s>>16)+e),r=b((s>>8&255)+e);return(n?"#":"")+(b((255&s)+e)|r<<8|a<<16).toString(16)}function k(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function w(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var n in e){var s=e[n];if("inside"===n)k(s).appendChild(i);else if("around"===n){var a=k(s);a.parentNode.insertBefore(i,a),i.appendChild(a)}else"styles"===n?"object"===(void 0===s?"undefined":lt(s))&&Object.keys(s).map((function(t){i.style[t]=s[t]})):("className"===n&&(n="class"),"innerHTML"===n?i.textContent=s:i.setAttribute(n,s))}return i}function D(t,e){return w("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function M(t,e,i,n){return w("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":n})}function P(t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,i={className:t,transform:arguments.length>1&&void 0!==arguments[1]?arguments[1]:""};return e&&(i.inside=e),w("g",i)}function S(t){return w("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none","stroke-width":arguments.length>4&&void 0!==arguments[4]?arguments[4]:2}})}function A(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n="path-fill-gradient-"+e+"-"+(i?"lighter":"default"),s=D(t,n),a=[1,.6,.2];return i&&(a=[.4,.2,0]),M(s,"0%",e,a[0]),M(s,"50%",e,a[1]),M(s,"100%",e,a[2]),n}function T(t,e,i,n,s){var a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},r={className:t,x:e,y:i,width:n,height:n,rx:s,fill:arguments.length>5&&void 0!==arguments[5]?arguments[5]:"none"};return Object.keys(a).map((function(t){r[t]=a[t]})),w("rect",r)}function O(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=s.fontSize||Ot;return w("text",{className:t,x:e,y:i,dy:(void 0!==s.dy?s.dy:a/2)+"px","font-size":a+"px",fill:s.fill||Ct,"text-anchor":s.textAnchor||"start",innerHTML:n})}function L(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};s.stroke||(s.stroke=Lt);var a=w("line",{className:"line-vertical "+s.className,x1:0,x2:0,y1:i,y2:n,styles:{stroke:s.stroke}}),r=w("text",{x:0,y:i>n?i+At:i-At-Ot,dy:Ot+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:e+""}),o=w("g",{transform:"translate("+t+", 0)"});return o.appendChild(a),o.appendChild(r),o}function C(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};s.stroke||(s.stroke=Lt),s.lineType||(s.lineType=""),s.shortenNumbers&&(e=g(e));var a=w("line",{className:"line-horizontal "+s.className+("dashed"===s.lineType?"dashed":""),x1:i,x2:n,y1:0,y2:0,styles:{stroke:s.stroke}}),r=w("text",{x:i4&&void 0!==arguments[4]?arguments[4]:0,a=p(i,(arguments.length>5&&void 0!==arguments[5]?arguments[5]:{}).zeroLine),r=pt(a,2),o=r[0],l=r[1];return l-=s,"rect"!==t.nodeName?[[t.childNodes[0],{width:n,height:o},$t,zt],N(t,t.getAttribute("transform").split("(")[1].slice(0,-1),[e,l],Yt)]:[[t,{width:n,height:o,x:e,y:l},$t,zt]]}function E(t,e){return[t,{d:e},$t,zt]}function Y(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var u=void 0;u="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var c=a[l]||t.getAttribute(l),h=e[l],d={attributeName:l,from:c,to:h,begin:"0s",dur:i/1e3+"s",values:c+";"+h,keySplines:Ht[n],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};for(var f in s&&(d.type=s),d)u.setAttribute(f,d[f]);r.appendChild(u),s?o.setAttribute(l,"translate("+h+")"):o.setAttribute(l,h)}return[r,o]}function W(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function z(t,e){var i=[],n=[];e.map((function(t){var e,s,a=t[0],r=a.parentNode;t[0]=a;var o=Y.apply(void 0,mt(t)),l=pt(o,2);e=l[0],s=l[1],i.push(s),n.push([e,r]),r&&r.replaceChild(e,a)}));var s=t.cloneNode(!0);return n.map((function(t,n){t[1]&&(t[1].replaceChild(i[n],t[0]),e[n][0]=i[n])})),s}function H(t,e,i){if(0!==i.length){var n=z(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(n)),setTimeout((function(){n.parentNode==t&&(t.removeChild(n),t.appendChild(e))}),Wt)}}function F(e){var i=e.cloneNode(!0);i.classList.add("chart-container"),i.setAttribute("xmlns","http://www.w3.org/2000/svg"),i.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink");var n=t.create("style",{innerHTML:Ft});i.insertBefore(n,i.firstChild);var s=t.create("div");return s.appendChild(i),s.innerHTML}function j(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function I(t){var e=t.getDate(),i=t.getMonth()+1;return[t.getFullYear(),(i>9?"":"0")+i,(e>9?"":"0")+e].join("-")}function R(t){return new Date(t.getTime())}function U(t,e){var i=q(t);return Math.ceil(function(t,e){var i=Vt*Ut;return(j(e)-j(t))/i}(i,e)/Rt)}function V(t,e){return t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()}function B(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=Bt[t];return e?i.slice(0,3):i}function G(t,e){return new Date(e,t+1,0)}function q(t){var e=R(t),i=e.getDay();return 0!==i&&J(e,-1*i),e}function J(t,e){t.setDate(t.getDate()+e)}function X(t,e,i){var n=Object.keys(Jt).filter((function(e){return t.includes(e)})),s=Jt[n[0]];return Object.assign(s,{constants:e,getData:i}),new qt(s)}function Z(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function K(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),n=Math.floor(e),s=i-n,a=s,r=1;s>5&&(s%2!=0&&(s=++i-n),a=s/2,r=2),s<=2&&(r=s/(a=4)),0===s&&(a=5,r=1);for(var o=[],l=0;l<=a;l++)o.push(n+r*l);return o}function Q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Z(t),n=pt(i,2),s=n[0],a=n[1],r=e?e/Math.pow(10,a):0,o=K(s=s.toFixed(6),r);return o.map((function(t){return t*Math.pow(10,a)}))}function tt(t){function e(t,e){for(var i=Q(t),n=i[1]-i[0],s=0,a=1;s1&&void 0!==arguments[1]&&arguments[1],n=Math.max.apply(Math,mt(t)),s=Math.min.apply(Math,mt(t)),a=[];if(n>=0&&s>=0)Z(n)[1],a=i?Q(n,s):Q(n);else if(n>0&&s<0){var r=Math.abs(s);n>=r?(Z(n)[1],a=e(n,r)):(Z(r)[1],a=e(r,n).reverse().map((function(t){return-1*t})))}else if(n<=0&&s<=0){var o=Math.abs(s),l=Math.abs(n);Z(o)[1],a=(a=i?Q(o,l):Q(o)).reverse().map((function(t){return-1*t}))}return a}function et(t){var e=it(t);return t.indexOf(0)>=0?t.indexOf(0):t[0]>0?-1*t[0]/e:-1*t[t.length-1]/e+(t.length-1)}function it(t){return t[1]-t[0]}function nt(t){return t[t.length-1]-t[0]}function st(t,e){return l(e.zeroLine-t*e.scaleMultiplier)}function at(t,e){return e.filter((function(e){return ei?n.slice(0,i):u(n,i-n.length,0),t.values=n}else t.values=s;t.chartType||(gt.includes(e),t.chartType=e)})),t.yRegions&&t.yRegions.map((function(t){if(t.end\n\t\t\t\t
              \n\t\t\t\t
              '}),this.hideTip(),this.title=this.container.querySelector(".title"),this.dataPointList=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",(function(){e.hideTip()}))}},{key:"fill",value:function(){var e,i=this;this.index&&this.container.setAttribute("data-point-index",this.index),e=this.titleValueFirst?""+this.titleValue+""+this.titleName:this.titleName+""+this.titleValue+"",this.title.innerHTML=e,this.dataPointList.innerHTML="",this.listValues.map((function(e,n){var s=i.colors[n]||"black",a=0===e.formatted||e.formatted?e.formatted:e.value,r=t.create("li",{styles:{"border-top":"3px solid "+s},innerHTML:''+(0===a||a?a:"")+"\n\t\t\t\t\t"+(e.title?e.title:"")});i.dataPointList.appendChild(r)}))}},{key:"calcPosition",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight-5,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var n="calc(50% + "+(this.left-e)+"px)";i.style.left=n,this.left=e}else i.style.left="50%"}},{key:"setValues",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1;this.titleName=i.name,this.titleValue=i.value,this.listValues=n,this.x=t,this.y=e,this.titleValueFirst=i.valueFirst||0,this.index=s,this.refresh()}},{key:"hideTip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"showTip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),e}(),Mt={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},Pt=function(t){return/rgb[a]{0,1}\([\d, ]+\)/gim.test(t)?/\D+(\d*)\D+(\d*)\D+(\d*)/gim.exec(t).map((function(t,e){return 0!==e?Number(t).toString(16):"#"})).reduce((function(t,e){return""+t+e})):Mt[t]||t},St=6,At=4,Tt=15,Ot=10,Lt="#dadada",Ct="#555b51",Nt={bar:function(t){var e=void 0;"rect"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode();return i.style.fill="#000000",i.style.opacity="0.4",e&&i.setAttribute("transform",e),i},dot:function(t){var e=void 0;"circle"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode(),n=t.getAttribute("r"),s=t.getAttribute("fill");return i.setAttribute("r",parseInt(n)+4),i.setAttribute("fill",s),i.style.opacity="0.6",e&&i.setAttribute("transform",e),i},heat_square:function(t){var e=void 0;"circle"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode(),n=t.getAttribute("r"),s=t.getAttribute("fill");return i.setAttribute("r",parseInt(n)+4),i.setAttribute("fill",s),i.style.opacity="0.6",e&&i.setAttribute("transform",e),i}},_t={bar:function(t,e){var i=void 0;"rect"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["x","y","width","height"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)},dot:function(t,e){var i=void 0;"circle"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["cx","cy"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)},heat_square:function(t,e){var i=void 0;"circle"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["cx","cy"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)}},$t=350,Et=350,Yt=$t,Wt=250,zt="easein",Ht={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},Ft=".chart-container{position:relative;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Roboto','Oxygen','Ubuntu','Cantarell','Fira Sans','Droid Sans','Helvetica Neue',sans-serif}.chart-container .axis,.chart-container .chart-label{fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .dataset-units circle{stroke:#fff;stroke-width:2}.chart-container .dataset-units path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container .dataset-path{stroke-width:2px}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .axis-line .specific-value{text-anchor:start}.chart-container .axis-line .y-line{text-anchor:end}.chart-container .axis-line .x-line{text-anchor:middle}.chart-container .legend-dataset-text{fill:#6c7680;font-weight:600}.graph-svg-tip{position:absolute;z-index:99999;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.graph-svg-tip ul{padding-left:0;display:flex}.graph-svg-tip ol{padding-left:0;display:flex}.graph-svg-tip ul.data-point-list li{min-width:90px;flex:1;font-weight:600}.graph-svg-tip strong{color:#dfe2e5;font-weight:600}.graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:' ';border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}",jt=function(){function e(t,i){if(ut(this,e),i=f(i),this.parent="string"==typeof t?document.querySelector(t):t,!(this.parent instanceof HTMLElement))throw new Error("No `parent` element to render on was provided.");this.rawChartArgs=i,this.title=i.title||"",this.type=i.type||"",this.realData=this.prepareData(i.data),this.data=this.prepareFirstData(this.realData),this.colors=this.validateColors(i.colors,this.type),this.config={showTooltip:1,showLegend:1,isNavigable:i.isNavigable||0,animate:void 0!==i.animate?i.animate:1,truncateLegends:i.truncateLegends||1},this.measures=JSON.parse(JSON.stringify(vt));var n=this.measures;this.setMeasures(i),this.title.length||(n.titleHeight=0),this.config.showLegend||(n.legendHeight=0),this.argHeight=i.height||n.baseHeight,this.state={},this.options={},this.initTimeout=700,this.config.isNavigable&&(this.overlays=[]),this.configure(i)}return ct(e,[{key:"prepareData",value:function(t){return t}},{key:"prepareFirstData",value:function(t){return t}},{key:"validateColors",value:function(t,e){var i=[];return(t=(t||[]).concat(kt[e])).forEach((function(t){var e=Pt(t);!function(t){return/(^\s*)(#)((?:[A-Fa-f0-9]{3}){1,2})$/i.test(t)||/(^\s*)(rgb|hsl)(a?)[(]\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*(?:,\s*([\d.]+)\s*)?[)]$/i.test(t)}(e)?console.warn('"'+t+'" is not a valid color.'):i.push(e)})),i}},{key:"setMeasures",value:function(){}},{key:"configure",value:function(){var t=this,e=this.argHeight;this.baseHeight=e,this.height=e-r(this.measures),this.boundDrawFn=function(){return t.draw(!0)},ResizeObserver&&(this.resizeObserver=new ResizeObserver(this.boundDrawFn),this.resizeObserver.observe(this.parent)),window.addEventListener("resize",this.boundDrawFn),window.addEventListener("orientationchange",this.boundDrawFn)}},{key:"destroy",value:function(){this.resizeObserver&&this.resizeObserver.disconnect(),window.removeEventListener("resize",this.boundDrawFn),window.removeEventListener("orientationchange",this.boundDrawFn)}},{key:"setup",value:function(){this.makeContainer(),this.updateWidth(),this.makeTooltip(),this.draw(!1,!0)}},{key:"makeContainer",value:function(){this.parent.innerHTML="";var e={inside:this.parent,className:"chart-container"};this.independentWidth&&(e.styles={width:this.independentWidth+"px"}),this.container=t.create("div",e)}},{key:"makeTooltip",value:function(){this.tip=new Dt({parent:this.container,colors:this.colors}),this.bindTooltip()}},{key:"bindTooltip",value:function(){}},{key:"draw",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e&&i(this.parent)||(this.updateWidth(),this.calc(e),this.makeChartArea(),this.setupComponents(),this.components.forEach((function(e){return e.setup(t.drawArea)})),this.render(this.components,!1),n&&(this.data=this.realData,setTimeout((function(){t.update(t.data)}),this.initTimeout)),this.renderLegend(),this.setupNavigation(n))}},{key:"calc",value:function(){}},{key:"updateWidth",value:function(){this.baseWidth=function(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}(this.parent),this.width=this.baseWidth-o(this.measures)}},{key:"makeChartArea",value:function(){this.svg&&this.container.removeChild(this.svg);var t=this.measures;this.svg=function(t,e,i,n){return w("svg",{className:e,inside:t,width:i,height:n})}(this.container,"frappe-chart chart",this.baseWidth,this.baseHeight),this.svgDefs=function(t){return w("defs",{inside:t})}(this.svg),this.title.length&&(this.titleEL=O("title",t.margins.left,t.margins.top,this.title,{fontSize:t.titleFontSize,fill:"#666666",dy:t.titleFontSize}));var e=s(t);this.drawArea=P(this.type+"-chart chart-draw-area","translate("+a(t)+", "+e+")"),this.config.showLegend&&(e+=this.height+t.paddings.bottom,this.legendArea=P("chart-legend","translate("+a(t)+", "+e+")")),this.title.length&&this.svg.appendChild(this.titleEL),this.svg.appendChild(this.drawArea),this.config.showLegend&&this.svg.appendChild(this.legendArea),this.updateTipOffset(a(t),s(t))}},{key:"updateTipOffset",value:function(t,e){this.tip.offset={x:t,y:e}}},{key:"setupComponents",value:function(){this.components=new Map}},{key:"update",value:function(t){t||console.error("No data to update."),this.data=this.prepareData(t),this.calc(),this.render(this.components,this.config.animate),this.renderLegend()}},{key:"render",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.components,i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.config.isNavigable&&this.overlays.map((function(t){return t.parentNode.removeChild(t)}));var n=[];e.forEach((function(t){n=n.concat(t.update(i))})),n.length>0?(H(this.container,this.svg,n),setTimeout((function(){e.forEach((function(t){return t.make()})),t.updateNav()}),400)):(e.forEach((function(t){return t.make()})),this.updateNav())}},{key:"updateNav",value:function(){this.config.isNavigable&&(this.makeOverlay(),this.bindUnits())}},{key:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.config.isNavigable&&e&&(this.bindOverlay(),this.keyActions={13:this.onEnterKey.bind(this),37:this.onLeftArrow.bind(this),38:this.onUpArrow.bind(this),39:this.onRightArrow.bind(this),40:this.onDownArrow.bind(this)},document.addEventListener("keydown",(function(e){n(t.container)&&(e=e||window.event,t.keyActions[e.keyCode]&&t.keyActions[e.keyCode]())})))}},{key:"makeOverlay",value:function(){}},{key:"updateOverlay",value:function(){}},{key:"bindOverlay",value:function(){}},{key:"bindUnits",value:function(){}},{key:"onLeftArrow",value:function(){}},{key:"onRightArrow",value:function(){}},{key:"onUpArrow",value:function(){}},{key:"onDownArrow",value:function(){}},{key:"onEnterKey",value:function(){}},{key:"addDataPoint",value:function(){}},{key:"removeDataPoint",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"setCurrentDataPoint",value:function(){}},{key:"updateDataset",value:function(){}},{key:"export",value:function(){var t=F(this.svg);!function(t,e){var i=document.createElement("a");i.style="display: none";var n=new Blob(e,{type:"image/svg+xml; charset=utf-8"}),s=window.URL.createObjectURL(n);i.href=s,i.download=t,document.body.appendChild(i),i.click(),setTimeout((function(){document.body.removeChild(i),window.URL.revokeObjectURL(s)}),300)}(this.title||"Chart",[t])}}]),e}(),It=function(t){function e(t,i){return ut(this,e),ft(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i))}return dt(e,t),ct(e,[{key:"configure",value:function(t){ht(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"configure",this).call(this,t),this.config.formatTooltipY=(t.tooltipOptions||{}).formatTooltipY,this.config.maxSlices=t.maxSlices||20,this.config.maxLegendPoints=t.maxLegendPoints||20}},{key:"calc",value:function(){var t=this,e=this.state,i=this.config.maxSlices;e.sliceTotals=[];var n=this.data.labels.map((function(e,i){var n=0;return t.data.datasets.map((function(t){n+=t.values[i]})),[n,e]})).filter((function(t){return t[0]>=0})),s=n;if(n.length>i){n.sort((function(t,e){return e[0]-t[0]})),s=n.slice(0,i-1);var a=0;n.slice(i-1).map((function(t){a+=t[0]})),s.push([a,"Rest"]),this.colors[i-1]="grey"}e.labels=[],s.map((function(t){e.sliceTotals.push(function(t){return Number(Math.round(t+"e4")+"e-4")}(t[0])),e.labels.push(t[1])})),e.grandTotal=e.sliceTotals.reduce((function(t,e){return t+e}),0),this.center={x:this.width/2,y:this.height/2}}},{key:"renderLegend",value:function(){var t=this,e=this.state;this.legendArea.textContent="",this.legendTotals=e.sliceTotals.slice(0,this.config.maxLegendPoints);var i=0,n=0;this.legendTotals.map((function(s,a){var r=150,l=Math.floor((t.width-o(t.measures))/r);t.legendTotals.lengthl&&(i=0,n+=20);var u=r*i+5,c=t.config.truncateLegends?v(e.labels[a],r/10):e.labels[a],h=t.config.formatTooltipY?t.config.formatTooltipY(s):s,d=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",s=arguments[4];s=arguments.length>5&&void 0!==arguments[5]&&arguments[5]?v(s,Tt):s;var a={className:"legend-dot",cx:0,cy:0,r:i,fill:n},r=w("text",{className:"legend-dataset-text",x:0,y:0,dx:Ot+"px",dy:Ot/3+"px","font-size":1.2*Ot+"px","text-anchor":"start",fill:Ct,innerHTML:s}),o=w("g",{transform:"translate("+t+", "+e+")"});return o.appendChild(w("circle",a)),o.appendChild(r),o}(u,n,5,t.colors[a],c+": "+h,!1);t.legendArea.appendChild(d),i++}))}}]),e}(jt),Rt=7,Ut=1e3,Vt=86400,Bt=["January","February","March","April","May","June","July","August","September","October","November","December"],Gt=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],qt=function(){function t(e){var i=e.layerClass,n=void 0===i?"":i,s=e.layerTransform,a=void 0===s?"":s,r=e.constants,o=e.getData,l=e.makeElements,u=e.animateElements;ut(this,t),this.layerTransform=a,this.constants=r,this.makeElements=l,this.getData=o,this.animateElements=u,this.store=[],this.labels=[],this.layerClass=n,this.layerClass="function"==typeof this.layerClass?this.layerClass():this.layerClass,this.refresh()}return ct(t,[{key:"refresh",value:function(t){this.data=t||this.getData()}},{key:"setup",value:function(t){this.layer=P(this.layerClass,this.layerTransform,t)}},{key:"make",value:function(){this.render(this.data),this.oldData=this.data}},{key:"render",value:function(t){var e=this;this.store=this.makeElements(t),this.layer.textContent="",this.store.forEach((function(t){e.layer.appendChild(t)})),this.labels.forEach((function(t){e.layer.appendChild(t)}))}},{key:"update",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.refresh();var e=[];return t&&(e=this.animateElements(this.data)||[]),e}}]),t}(),Jt={donutSlices:{layerClass:"donut-slices",makeElements:function(t){return t.sliceStrings.map((function(e,i){var n=S(e,"donut-path",t.colors[i],"none",t.strokeWidth);return n.style.transition="transform .3s;",n}))},animateElements:function(t){return this.store.map((function(e,i){return E(e,t.sliceStrings[i])}))}},pieSlices:{layerClass:"pie-slices",makeElements:function(t){return t.sliceStrings.map((function(e,i){var n=S(e,"pie-path","none",t.colors[i]);return n.style.transition="transform .3s;",n}))},animateElements:function(t){return this.store.map((function(e,i){return E(e,t.sliceStrings[i])}))}},percentageBars:{layerClass:"percentage-bars",makeElements:function(t){var e=this;return t.xPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:yt,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"none";return w("rect",{className:"percentage-bar",x:t,y:e,width:i,height:n,fill:a,styles:{stroke:x(a,-25),"stroke-dasharray":"0, "+(n+i)+", "+i+", "+n,"stroke-width":s}})}(i,0,t.widths[n],e.constants.barHeight,e.constants.barDepth,t.colors[n])}))},animateElements:function(t){if(t)return[]}},yAxis:{layerClass:"y axis",makeElements:function(t){var e=this;return t.positions.map((function(i,n){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};d(t)||(t=0),n.pos||(n.pos="left"),n.offset||(n.offset=0),n.mode||(n.mode="span"),n.stroke||(n.stroke=Lt),n.className||(n.className="");var s=-1*St,a="span"===n.mode?i+St:0;return"tick"===n.mode&&"right"===n.pos&&(s=i+St,a=i),C(t,e,s+=n.offset,a+=n.offset,{stroke:n.stroke,className:n.className,lineType:n.lineType,shortenNumbers:n.shortenNumbers})}(i,t.labels[n],e.constants.width,{mode:e.constants.mode,pos:e.constants.pos,shortenNumbers:e.constants.shortenNumbers})}))},animateElements:function(t){var e=t.positions,i=t.labels,n=this.oldData.positions,s=this.oldData.labels,a=m(n,e),r=pt(a,2);n=r[0],e=r[1];var o=m(s,i),l=pt(o,2);return s=l[0],i=l[1],this.render({positions:n,labels:i}),this.store.map((function(t,i){return _(t,e[i],n[i])}))}},xAxis:{layerClass:"x axis",makeElements:function(t){var e=this;return t.positions.map((function(i,n){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};d(t)||(t=0),n.pos||(n.pos="bottom"),n.offset||(n.offset=0),n.mode||(n.mode="span"),n.stroke||(n.stroke=Lt),n.className||(n.className="");var s=i+St,a="span"===n.mode?-1*St:i;return"tick"===n.mode&&"top"===n.pos&&(s=-1*St,a=0),L(t,e,s,a,{stroke:n.stroke,className:n.className,lineType:n.lineType})}(i,t.calcLabels[n],e.constants.height,{mode:e.constants.mode,pos:e.constants.pos})}))},animateElements:function(t){var e=t.positions,i=t.calcLabels,n=this.oldData.positions,s=this.oldData.calcLabels,a=m(n,e),r=pt(a,2);n=r[0],e=r[1];var o=m(s,i),l=pt(o,2);return s=l[0],i=l[1],this.render({positions:n,calcLabels:i}),this.store.map((function(t,i){return function(t,e,i){return N(t,[i,0],[e,0],Yt)}(t,e[i],n[i])}))}},yMarkers:{layerClass:"y-markers",makeElements:function(t){var e=this;return t.map((function(t){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};n.labelPos||(n.labelPos="right");var s=w("text",{className:"chart-label",x:"left"===n.labelPos?At:i-c(e,5)-At,y:0,dy:Ot/-2+"px","font-size":Ot+"px","text-anchor":"start",innerHTML:e+""}),a=C(t,"",0,i,{stroke:n.stroke||Lt,className:n.className||"",lineType:n.lineType});return a.appendChild(s),a}(t.position,t.label,e.constants.width,{labelPos:t.options.labelPos,mode:"span",lineType:"dashed"})}))},animateElements:function(t){var e=m(this.oldData,t),i=pt(e,2);this.oldData=i[0];var n=(t=i[1]).map((function(t){return t.position})),s=t.map((function(t){return t.label})),a=t.map((function(t){return t.options})),r=this.oldData.map((function(t){return t.position}));return this.render(r.map((function(t,e){return{position:r[e],label:s[e],options:a[e]}}))),this.store.map((function(t,e){return _(t,n[e],r[e])}))}},yRegions:{layerClass:"y-regions",makeElements:function(t){var e=this;return t.map((function(t){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=t-e,r=w("rect",{className:"bar mini",styles:{fill:"rgba(228, 234, 239, 0.49)",stroke:Lt,"stroke-dasharray":i+", "+a},x:0,y:0,width:i,height:a});s.labelPos||(s.labelPos="right");var o=w("text",{className:"chart-label",x:"left"===s.labelPos?At:i-c(n+"",4.5)-At,y:0,dy:Ot/-2+"px","font-size":Ot+"px","text-anchor":"start",innerHTML:n+""}),l=w("g",{transform:"translate(0, "+e+")"});return l.appendChild(r),l.appendChild(o),l}(t.startPos,t.endPos,e.constants.width,t.label,{labelPos:t.options.labelPos})}))},animateElements:function(t){var e=m(this.oldData,t),i=pt(e,2);this.oldData=i[0];var n=(t=i[1]).map((function(t){return t.endPos})),s=t.map((function(t){return t.label})),a=t.map((function(t){return t.startPos})),r=t.map((function(t){return t.options})),o=this.oldData.map((function(t){return t.endPos})),l=this.oldData.map((function(t){return t.startPos}));this.render(o.map((function(t,e){return{startPos:l[e],endPos:o[e],label:s[e],options:r[e]}})));var u=[];return this.store.map((function(t,e){u=u.concat(function(t,e,i,n){var s=e-i,a=t.childNodes[0];return[[a,{height:s,"stroke-dasharray":a.getAttribute("width")+", "+s},Yt,zt],N(t,[0,n],[0,i],Yt)]}(t,a[e],n[e],o[e]))})),u}},heatDomain:{layerClass:function(){return"heat-domain domain-"+this.constants.index},makeElements:function(t){var e=this,i=this.constants,n=i.index,s=i.colWidth,a=i.rowHeight,r=i.squareSize,o=i.radius,l=i.xTranslate,u=0;return this.serializedSubDomains=[],t.cols.map((function(t,i){1===i&&e.labels.push(O("domain-name",l,-12,B(n,!0).toUpperCase(),{fontSize:9})),t.map((function(t,i){if(t.fill){var n={"data-date":t.yyyyMmDd,"data-value":t.dataValue,"data-day":i},s=T("day",l,u,r,o,t.fill,n);e.serializedSubDomains.push(s)}u+=a})),u=0,l+=s})),this.serializedSubDomains},animateElements:function(t){if(t)return[]}},barGraph:{layerClass:function(){return"dataset-units dataset-bars dataset-"+this.constants.index},makeElements:function(t){var e=this.constants;return this.unitType="bar",this.units=t.yPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{},l=p(e,o.zeroLine),u=pt(l,2),c=u[0],h=u[1];h-=r,0===c&&(c=o.minHeight,h-=o.minHeight),d(t)||(t=0),d(h)||(h=0),d(c,!0)||(c=0),d(i,!0)||(i=0);var f=w("rect",{className:"bar mini",style:"fill: "+n,"data-point-index":a,x:t,y:h,width:i,height:c});if((s+="")||s.length){f.setAttribute("y",0),f.setAttribute("x",0);var m=w("text",{className:"data-point-value",x:i/2,y:0,dy:Ot/2*-1+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:s}),v=w("g",{"data-point-index":a,transform:"translate("+t+", "+h+")"});return v.appendChild(f),v.appendChild(m),v}return f}(t.xPositions[n],i,t.barWidth,e.color,t.labels[n],n,t.offsets[n],{zeroLine:t.zeroLine,barsWidth:t.barsWidth,minHeight:e.minHeight})})),this.units},animateElements:function(t){var e=t.xPositions,i=t.yPositions,n=t.offsets,s=t.labels,a=this.oldData.xPositions,r=this.oldData.yPositions,o=this.oldData.offsets,l=this.oldData.labels,u=m(a,e),c=pt(u,2);a=c[0],e=c[1];var h=m(r,i),d=pt(h,2);r=d[0],i=d[1];var f=m(o,n),p=pt(f,2);o=p[0],n=p[1];var v=m(l,s),g=pt(v,2);l=g[0],s=g[1],this.render({xPositions:a,yPositions:r,offsets:o,labels:s,zeroLine:this.oldData.zeroLine,barsWidth:this.oldData.barsWidth,barWidth:this.oldData.barWidth});var y=[];return this.store.map((function(s,a){y=y.concat($(s,e[a],i[a],t.barWidth,n[a],{zeroLine:t.zeroLine}))})),y}},lineGraph:{layerClass:function(){return"dataset-units dataset-line dataset-"+this.constants.index},makeElements:function(t){var e=this.constants;return this.unitType="dot",this.paths={},e.hideLine||(this.paths=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=e.map((function(e,i){return t[i]+","+e})).join("L");n.spline&&(a=y(t,e));var r=S("M"+a,"line-graph-path",i);if(n.heatline){var o=A(s.svgDefs,i);r.style.stroke="url(#"+o+")"}var l={path:r};if(n.regionFill){var u=A(s.svgDefs,i,!0),c="M"+t[0]+","+s.zeroLine+"L"+a+"L"+t.slice(-1)[0]+","+s.zeroLine;l.region=S(c,"region-fill","none","url(#"+u+")")}return l}(t.xPositions,t.yPositions,e.color,{heatline:e.heatline,regionFill:e.regionFill,spline:e.spline},{svgDefs:e.svgDefs,zeroLine:t.zeroLine})),this.units=[],e.hideDots||(this.units=t.yPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=w("circle",{style:"fill: "+n,"data-point-index":a,cx:t,cy:e,r:i});if((s+="")||s.length){r.setAttribute("cy",0),r.setAttribute("cx",0);var o=w("text",{className:"data-point-value",x:0,y:0,dy:Ot/2*-1-i+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:s}),l=w("g",{"data-point-index":a,transform:"translate("+t+", "+e+")"});return l.appendChild(r),l.appendChild(o),l}return r}(t.xPositions[n],i,t.radius,e.color,e.valuesOverPoints?t.values[n]:"",n)}))),Object.values(this.paths).concat(this.units)},animateElements:function(t){var e=t.xPositions,i=t.yPositions,n=t.values,s=this.oldData.xPositions,a=this.oldData.yPositions,r=this.oldData.values,o=m(s,e),l=pt(o,2);s=l[0],e=l[1];var u=m(a,i),c=pt(u,2);a=c[0],i=c[1];var h=m(r,n),d=pt(h,2);r=d[0],n=d[1],this.render({xPositions:s,yPositions:a,values:n,zeroLine:this.oldData.zeroLine,radius:this.oldData.radius});var f=[];return Object.keys(this.paths).length&&(f=f.concat(function(t,e,i,n,s){var a=[],r=i.map((function(t,i){return e[i]+","+t})).join("L");s&&(r=y(e,i));var o=[t.path,{d:"M"+r},Et,zt];if(a.push(o),t.region){var l=e[0]+","+n+"L",u="L"+e.slice(-1)[0]+", "+n,c=[t.region,{d:"M"+l+r+u},Et,zt];a.push(c)}return a}(this.paths,e,i,t.zeroLine,this.constants.spline))),this.units.length&&this.units.map((function(t,n){f=f.concat(function(t,e,i){return"circle"!==t.nodeName?[N(t,t.getAttribute("transform").split("(")[1].slice(0,-1),[e,i],Yt)]:[[t,{cx:e,cy:i},$t,zt]]}(t,e[n],i[n]))})),f}}},Xt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="percentage",n.setup(),n}return dt(i,t),ct(i,[{key:"setMeasures",value:function(t){var e=this.measures;this.barOptions=t.barOptions||{};var i=this.barOptions;i.height=i.height||20,i.depth=i.depth||yt,e.paddings.right=30,e.legendHeight=60,e.baseHeight=8*(i.height+.5*i.depth)}},{key:"setupComponents",value:function(){var t=this.state,e=[["percentageBars",{barHeight:this.barOptions.height,barDepth:this.barOptions.depth},function(){return{xPositions:t.xPositions,widths:t.widths,colors:this.colors}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;e.xPositions=[],e.widths=[];var n=0;e.sliceTotals.map((function(i){var s=t.width*i/e.grandTotal;e.widths.push(s),e.xPositions.push(n),n+=s}))}},{key:"makeDataByIndex",value:function(){}},{key:"bindTooltip",value:function(){var t=this,i=this.state;this.container.addEventListener("mousemove",(function(n){var s=t.components.get("percentageBars").store,a=n.target;if(s.includes(a)){var r=s.indexOf(a),o=e(t.container),l=e(a),u=l.left-o.left+parseInt(a.getAttribute("width"))/2,c=l.top-o.top,h=(t.formattedLabels&&t.formattedLabels.length>0?t.formattedLabels[r]:t.state.labels[r])+": ",d=i.sliceTotals[r]/i.grandTotal;t.tip.setValues(u,c,{name:h,value:(100*d).toFixed(1)+"%"}),t.tip.showTip()}}))}}]),i}(It),Zt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="pie",n.initTimeout=0,n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),this.mouseMove=this.mouseMove.bind(this),this.mouseLeave=this.mouseLeave.bind(this),this.hoverRadio=t.hoverRadio||.1,this.config.startAngle=t.startAngle||0,this.clockWise=t.clockWise||!1}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;this.radius=this.height>this.width?this.center.x:this.center.y;var n=this.radius,s=this.clockWise,a=e.slicesProperties||[];e.sliceStrings=[],e.slicesProperties=[];var r=180-this.config.startAngle;e.sliceTotals.map((function(i,o){var l=r,u=i/e.grandTotal*360,c=u>180?1:0,d=s?-u:u,f=r+=d,p=h(l,n),m=h(f,n),v=t.init&&a[o],g=void 0,y=void 0;t.init?(g=v?v.startPosition:p,y=v?v.endPosition:p):(g=p,y=m);var b=360===u?function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=2*i.y,c=i.y+e.y;return"M"+i.x+" "+i.y+"\n\t\tL"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+" z\n\t\tL"+r+" "+u+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+c+" z"}(g,y,t.center,t.radius,s,c):function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=i.y+e.y;return"M"+i.x+" "+i.y+"\n\t\tL"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+" z"}(g,y,t.center,t.radius,s,c);e.sliceStrings.push(b),e.slicesProperties.push({startPosition:p,endPosition:m,value:i,total:e.grandTotal,startAngle:l,endAngle:f,angle:d})})),this.init=0}},{key:"setupComponents",value:function(){var t=this.state,e=[["pieSlices",{},function(){return{sliceStrings:t.sliceStrings,colors:this.colors}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=h(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,s){if(t){var a=this.colors[i];if(n){W(t,this.calTranslateByAngle(this.state.slicesProperties[i])),t.style.fill=x(a,50);var r=e(this.svg),o=s.pageX-r.left+10,l=s.pageY-r.top-10,u=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.state.labels[i])+": ",c=(100*this.state.sliceTotals[i]/this.state.grandTotal).toFixed(1);this.tip.setValues(o,l,{name:u,value:c+"%"}),this.tip.showTip()}else W(t,"translate3d(0,0,0)"),this.tip.hideTip(),t.style.fill=a}}},{key:"bindTooltip",value:function(){this.container.addEventListener("mousemove",this.mouseMove),this.container.addEventListener("mouseleave",this.mouseLeave)}},{key:"mouseMove",value:function(t){var e=t.target,i=this.components.get("pieSlices").store,n=this.curActiveSliceIndex,s=this.curActiveSlice;if(i.includes(e)){var a=i.indexOf(e);this.hoverSlice(s,n,!1),this.curActiveSlice=e,this.curActiveSliceIndex=a,this.hoverSlice(e,a,!0,t)}else this.mouseLeave()}},{key:"mouseLeave",value:function(){this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,!1)}}]),i}(It),Kt=function(t){function e(t,i){ut(this,e);var n=ft(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i));n.type="heatmap",n.countLabel=i.countLabel||"";var s=["Sunday","Monday"],a=s.includes(i.startSubDomain)?i.startSubDomain:"Sunday";return n.startSubDomainIndex=s.indexOf(a),n.setup(),n}return dt(e,t),ct(e,[{key:"setMeasures",value:function(t){var e=this.measures;this.discreteDomains=0===t.discreteDomains?0:1,e.paddings.top=36,e.paddings.bottom=0,e.legendHeight=24,e.baseHeight=12*Rt+r(e);var i=this.data,n=this.discreteDomains?12:0;this.independentWidth=12*(U(i.start,i.end)+n)+o(e)}},{key:"updateWidth",value:function(){var t=this.discreteDomains?12:0,e=this.state.noOfWeeks?this.state.noOfWeeks:52;this.baseWidth=12*(e+t)+o(this.measures)}},{key:"prepareData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data;if(t.start&&t.end&&t.start>t.end)throw new Error("Start date cannot be greater than end date.");if(t.start||(t.start=new Date,t.start.setFullYear(t.start.getFullYear()-1)),t.end||(t.end=new Date),t.dataPoints=t.dataPoints||{},parseInt(Object.keys(t.dataPoints)[0])>1e5){var e={};Object.keys(t.dataPoints).forEach((function(i){var n=new Date(i*Ut);e[I(n)]=t.dataPoints[i]})),t.dataPoints=e}return t}},{key:"calc",value:function(){var t=this.state;t.start=R(this.data.start),t.end=R(this.data.end),t.firstWeekStart=R(t.start),t.noOfWeeks=U(t.start,t.end),t.distribution=function(t,e){for(var i=Math.max.apply(Math,mt(t)),n=1/(e-1),s=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:"",i=[t.getMonth(),t.getFullYear()],n=i[0],s=i[1],a=q(t),r={index:n,cols:[]};J(e=R(e)||G(n,s),1);for(var o=U(a,e),l=[],u=void 0,c=0;c2&&void 0!==arguments[2]&&arguments[2],n=this.state,s=R(t),a=[],r=0;r=n.start&&s<=n.end;i||s.getMonth()!==e||!l?o.yyyyMmDd=I(s):o=this.getSubDomainConfig(s),a.push(o)}return a}},{key:"getSubDomainConfig",value:function(t){var e=I(t),i=this.data.dataPoints[e];return{yyyyMmDd:e,dataValue:i||0,fill:this.colors[at(i,this.state.distribution)]}}}]),e}(jt),Qt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.barOptions=e.barOptions||{},n.lineOptions=e.lineOptions||{},n.type=e.type||"line",n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"setMeasures",value:function(){this.data.datasets.length<=1&&(this.config.showLegend=0,this.measures.paddings.bottom=30)}},{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),t.axisOptions=t.axisOptions||{},t.tooltipOptions=t.tooltipOptions||{},this.config.xAxisMode=t.axisOptions.xAxisMode||"span",this.config.yAxisMode=t.axisOptions.yAxisMode||"span",this.config.xIsSeries=t.axisOptions.xIsSeries||0,this.config.shortenYAxisNumbers=t.axisOptions.shortenYAxisNumbers||0,this.config.formatTooltipX=t.tooltipOptions.formatTooltipX,this.config.formatTooltipY=t.tooltipOptions.formatTooltipY,this.config.valuesOverPoints=t.valuesOverPoints}},{key:"prepareData",value:function(){return rt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data,this.type)}},{key:"prepareFirstData",value:function(){return ot(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data)}},{key:"calc",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.calcXPositions(),t||this.calcYAxisParameters(this.getAllYValues(),"line"===this.type),this.makeDataByIndex()}},{key:"calcXPositions",value:function(){var t=this.state,e=this.data.labels;t.datasetLength=e.length,t.unitWidth=this.width/t.datasetLength,t.xOffset=t.unitWidth/2,t.xAxis={labels:e,positions:e.map((function(e,i){return l(t.xOffset+i*t.unitWidth)}))}}},{key:"calcYAxisParameters",value:function(t){var e=tt(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"false"),i=this.height/nt(e),n=it(e)*i,s=this.height-et(e)*n;this.state.yAxis={labels:e,positions:e.map((function(t){return s-t*i})),scaleMultiplier:i,zeroLine:s},this.calcDatasetPoints(),this.calcYExtremes(),this.calcYRegions()}},{key:"calcDatasetPoints",value:function(){var t=this.state,e=function(e){return e.map((function(e){return st(e,t.yAxis)}))};t.datasets=this.data.datasets.map((function(t,i){var n=t.values,s=t.cumulativeYs||[];return{name:t.name&&t.name.replace(/<|>|&/g,(function(t){return"&"==t?"&":"<"==t?"<":">"})),index:i,chartType:t.chartType,values:n,yPositions:e(n),cumulativeYs:s,cumulativeYPos:e(s)}}))}},{key:"calcYExtremes",value:function(){var t=this.state;this.barOptions.stacked?t.yExtremes=t.datasets[t.datasets.length-1].cumulativeYPos:(t.yExtremes=new Array(t.datasetLength).fill(9999),t.datasets.map((function(e){e.yPositions.map((function(e,i){e1&&void 0!==arguments[1]?arguments[1]:[],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=t/e.length;n<=0&&(n=1);var s=n/bt,a=void 0;if(i){var r=Math.max.apply(Math,mt(e.map((function(t){return t.length}))));a=Math.ceil(r/s)}return e.map((function(t,e){return(t+="").length>s&&(i?e%a!=0&&(t=""):t=s-3>0?t.slice(0,s-3)+" ...":t.slice(0,s)+".."),t}))}(this.width,t.xAxis.labels,this.config.xIsSeries),t.xAxis}.bind(this)],["yRegions",{width:this.width,pos:"right"},function(){return this.state.yRegions}.bind(this)]],i=this.state.datasets.filter((function(t){return"bar"===t.chartType})),n=this.state.datasets.filter((function(t){return"line"===t.chartType})),s=i.map((function(e){var n=e.index;return["barGraph-"+e.index,{index:n,color:t.colors[n],stacked:t.barOptions.stacked,valuesOverPoints:t.config.valuesOverPoints,minHeight:0*t.height},function(){var t=this.state,e=t.datasets[n],s=this.barOptions.stacked,a=this.barOptions.spaceRatio||.5,r=t.unitWidth*(1-a),o=r/(s?1:i.length),l=t.xAxis.positions.map((function(t){return t-r/2}));s||(l=l.map((function(t){return t+o*n})));var u=new Array(t.datasetLength).fill("");this.config.valuesOverPoints&&(u=s&&e.index===t.datasets.length-1?e.cumulativeYs:e.values);var c=new Array(t.datasetLength).fill(0);return s&&(c=e.yPositions.map((function(t,i){return t-e.cumulativeYPos[i]}))),{xPositions:l,yPositions:e.yPositions,offsets:c,labels:u,zeroLine:t.yAxis.zeroLine,barsWidth:r,barWidth:o}}.bind(t)]})),a=n.map((function(e){var i=e.index;return["lineGraph-"+e.index,{index:i,color:t.colors[i],svgDefs:t.svgDefs,heatline:t.lineOptions.heatline,regionFill:t.lineOptions.regionFill,spline:t.lineOptions.spline,hideDots:t.lineOptions.hideDots,hideLine:t.lineOptions.hideLine,valuesOverPoints:t.config.valuesOverPoints},function(){var t=this.state,e=t.datasets[i],n=t.yAxis.positions[0]s(n)?t.mapTooltipXPosition(o):t.tip.hideTip()}))}},{key:"mapTooltipXPosition",value:function(t){var e=this.state;if(e.yExtremes){var i=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.reduce((function(e,i){return Math.abs(i-t)=0){var n=this.dataByIndex[i];this.tip.setValues(n.xPos+this.tip.offset.x,n.yExtreme+this.tip.offset.y,{name:n.formattedLabel,value:""},n.values,i),this.tip.showTip()}}}},{key:"renderLegend",value:function(){var t=this,e=this.data;e.datasets.length>1&&(this.legendArea.textContent="",e.datasets.map((function(e,i){var n=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",s=arguments[4];s=arguments.length>5&&void 0!==arguments[5]&&arguments[5]?v(s,Tt):s;var a={className:"legend-bar",x:0,y:0,width:i,height:"2px",fill:n},r=w("text",{className:"legend-dataset-text",x:0,y:0,dy:2*Ot+"px","font-size":1.2*Ot+"px","text-anchor":"start",fill:Ct,innerHTML:s}),o=w("g",{transform:"translate("+t+", "+e+")"});return o.appendChild(w("rect",a)),o.appendChild(r),o}(100*i,"0",100,t.colors[i],e.name,t.config.truncateLegends);t.legendArea.appendChild(n)})))}},{key:"makeOverlay",value:function(){var t=this;this.init?this.init=0:(this.overlayGuides&&this.overlayGuides.forEach((function(t){var e=t.overlay;e.parentNode.removeChild(e)})),this.overlayGuides=this.dataUnitComponents.map((function(t){return{type:t.unitType,overlay:void 0,units:t.units}})),void 0===this.state.currentIndex&&(this.state.currentIndex=this.state.datasetLength-1),this.overlayGuides.map((function(e){var i=e.units[t.state.currentIndex];e.overlay=Nt[e.type](i),t.drawArea.appendChild(e.overlay)})))}},{key:"updateOverlayGuides",value:function(){this.overlayGuides&&this.overlayGuides.forEach((function(t){var e=t.overlay;e.parentNode.removeChild(e)}))}},{key:"bindOverlay",value:function(){var t=this;this.parent.addEventListener("data-select",(function(){t.updateOverlay()}))}},{key:"bindUnits",value:function(){var t=this;this.dataUnitComponents.map((function(e){e.units.map((function(e){e.addEventListener("click",(function(){var i=e.getAttribute("data-point-index");t.setCurrentDataPoint(i)}))}))})),this.tip.container.addEventListener("click",(function(){var e=t.tip.container.getAttribute("data-point-index");t.setCurrentDataPoint(e)}))}},{key:"updateOverlay",value:function(){var t=this;this.overlayGuides.map((function(e){var i=e.units[t.state.currentIndex];_t[e.type](i,e.overlay)}))}},{key:"onLeftArrow",value:function(){this.setCurrentDataPoint(this.state.currentIndex-1)}},{key:"onRightArrow",value:function(){this.setCurrentDataPoint(this.state.currentIndex+1)}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.currentIndex,e=this.state;return{index:t,label:e.xAxis.labels[t],values:e.datasets.map((function(e){return e.values[t]}))}}},{key:"setCurrentDataPoint",value:function(t){var e=this.state;(t=parseInt(t))<0&&(t=0),t>=e.xAxis.labels.length&&(t=e.xAxis.labels.length-1),t!==e.currentIndex&&(e.currentIndex=t,function(t,e,i){var n=document.createEvent("HTMLEvents");for(var s in n.initEvent(e,!0,!0),i)n[s]=i[s];t.dispatchEvent(n)}(this.parent,"data-select",this.getDataPoint()))}},{key:"addDataPoint",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.state.datasetLength;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"addDataPoint",this).call(this,t,e,n),this.data.labels.splice(n,0,t),this.data.datasets.map((function(t,i){t.values.splice(n,0,e[i])})),this.update(this.data)}},{key:"removeDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.datasetLength-1;this.data.labels.length<=1||(ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"removeDataPoint",this).call(this,t),this.data.labels.splice(t,1),this.data.datasets.map((function(e){e.values.splice(t,1)})),this.update(this.data))}},{key:"updateDataset",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;this.data.datasets[e].values=t,this.update(this.data)}},{key:"updateDatasets",value:function(t){this.data.datasets.map((function(e,i){t[i]&&(e.values=t[i])})),this.update(this.data)}}]),i}(jt),te=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="donut",n.initTimeout=0,n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),this.mouseMove=this.mouseMove.bind(this),this.mouseLeave=this.mouseLeave.bind(this),this.hoverRadio=t.hoverRadio||.1,this.config.startAngle=t.startAngle||0,this.clockWise=t.clockWise||!1,this.strokeWidth=t.strokeWidth||30}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;this.radius=this.height>this.width?this.center.x-this.strokeWidth/2:this.center.y-this.strokeWidth/2;var n=this.radius,s=this.clockWise,a=e.slicesProperties||[];e.sliceStrings=[],e.slicesProperties=[];var r=180-this.config.startAngle;e.sliceTotals.map((function(i,o){var l=r,u=i/e.grandTotal*360,c=u>180?1:0,d=s?-u:u,f=r+=d,p=h(l,n),m=h(f,n),v=t.init&&a[o],g=void 0,y=void 0;t.init?(g=v?v.startPosition:p,y=v?v.endPosition:p):(g=p,y=m);var b=360===u?function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=2*n+o;return"M"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+"\n\t\tM"+r+" "+u+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+(i.y+t.y)}(g,y,t.center,t.radius,t.clockWise,c):function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;return"M"+(i.x+t.x)+" "+(i.y+t.y)+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+(i.x+e.x)+" "+(i.y+e.y)}(g,y,t.center,t.radius,t.clockWise,c);e.sliceStrings.push(b),e.slicesProperties.push({startPosition:p,endPosition:m,value:i,total:e.grandTotal,startAngle:l,endAngle:f,angle:d})})),this.init=0}},{key:"setupComponents",value:function(){var t=this.state,e=[["donutSlices",{},function(){return{sliceStrings:t.sliceStrings,colors:this.colors,strokeWidth:this.strokeWidth}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=h(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,s){if(t){var a=this.colors[i];if(n){W(t,this.calTranslateByAngle(this.state.slicesProperties[i])),t.style.stroke=x(a,50);var r=e(this.svg),o=s.pageX-r.left+10,l=s.pageY-r.top-10,u=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.state.labels[i])+": ",c=(100*this.state.sliceTotals[i]/this.state.grandTotal).toFixed(1);this.tip.setValues(o,l,{name:u,value:c+"%"}),this.tip.showTip()}else W(t,"translate3d(0,0,0)"),this.tip.hideTip(),t.style.stroke=a}}},{key:"bindTooltip",value:function(){this.container.addEventListener("mousemove",this.mouseMove),this.container.addEventListener("mouseleave",this.mouseLeave)}},{key:"mouseMove",value:function(t){var e=t.target,i=this.components.get("donutSlices").store,n=this.curActiveSliceIndex,s=this.curActiveSlice;if(i.includes(e)){var a=i.indexOf(e);this.hoverSlice(s,n,!1),this.curActiveSlice=e,this.curActiveSliceIndex=a,this.hoverSlice(e,a,!0,t)}else this.mouseLeave()}},{key:"mouseLeave",value:function(){this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,!1)}}]),i}(It),ee={bar:Qt,line:Qt,percentage:Xt,heatmap:Kt,pie:Zt,donut:te},ie=Object.freeze({Chart:function t(e,i){return ut(this,t),function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1],i=arguments[2];return"axis-mixed"===t?(i.type="line",new Qt(e,i)):ee[t]?new ee[t](e,i):void console.error("Undefined chart type: "+t)}(i.type,e,i)},PercentageChart:Xt,PieChart:Zt,Heatmap:Kt,AxisChart:Qt});return Object.assign({},{NAME:"Frappe Charts",VERSION:"1.6.2"},ie)}()}},e={};function i(n){var s=e[n];if(void 0!==s)return s.exports;var a=e[n]={exports:{}};return t[n].call(a.exports,a,a.exports,i),a.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";i.r(n);const t=flarum.reg.get("core","admin/app");var e=i.n(t);const s=flarum.reg.get("core","common/extend"),a=flarum.reg.get("core","admin/components/DashboardPage");var r=i.n(a);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 l(t,e,i){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var n=i.call(t,e);if("object"!==o(n))return n;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:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}const u=flarum.reg.get("core","admin/components/DashboardWidget");var c=i.n(u);const h=flarum.reg.get("core","common/components/LoadingIndicator");var d=i.n(h);const f=flarum.reg.get("core","common/components/Link");var p=i.n(f);const v=flarum.reg.get("core","common/utils/abbreviateNumber");var g=i.n(v);class y extends(c()){constructor(){super(...arguments),l(this,"entities",["users","discussions","posts"]),l(this,"lifetimeData",void 0),l(this,"loadingLifetime",!0)}oncreate(t){super.oncreate(t),this.loadLifetimeData()}async loadLifetimeData(){this.loadingLifetime=!0,m.redraw();const t=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"lifetime"}});this.lifetimeData=t,this.loadingLifetime=!1,m.redraw()}className(){return"StatisticsWidget StatisticsWidget--mini"}content(){return m("div",{className:"StatisticsWidget-table"},m("h4",{className:"StatisticsWidget-title"},e().translator.trans("flarum-statistics.admin.statistics.mini_heading")),m("div",{className:"StatisticsWidget-entities"},m("div",{className:"StatisticsWidget-labels"},m("div",{className:"StatisticsWidget-label"},e().translator.trans("flarum-statistics.admin.statistics.total_label"))),this.entities.map((t=>{const i=this.loadingLifetime?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getTotalCount(t);return m("div",{className:"StatisticsWidget-entity"},m("h3",{className:"StatisticsWidget-heading"},e().translator.trans("flarum-statistics.admin.statistics."+t+"_heading")),m("div",{className:"StatisticsWidget-total",title:i},this.loadingLifetime?m(d(),{display:"inline"}):g()(i)))}))),m("div",{className:"StatisticsWidget-viewFull"},m(p(),{href:e().route("extension",{id:"flarum-statistics"})},e().translator.trans("flarum-statistics.admin.statistics.view_full"))))}getTotalCount(t){return this.lifetimeData[t]}}flarum.reg.add("flarum-statistics","admin/components/MiniStatisticsWidget",y);const b=flarum.reg.get("core","admin/components/ExtensionPage");var x=i.n(b);const k=flarum.reg.get("core","common/components/SelectDropdown");var w=i.n(k);const D=flarum.reg.get("core","common/components/Button");var M=i.n(D);const P=flarum.reg.get("core","common/utils/extractText");var S=i.n(P);const A=flarum.reg.get("core","common/components/Placeholder");var T=i.n(A);const O=flarum.reg.get("core","common/components/Icon");var L=i.n(O);const C=flarum.reg.get("core","common/utils/classList");var N=i.n(C);const _=flarum.reg.get("core","common/utils/ItemList");var $=i.n(_);const E=flarum.reg.get("core","admin/utils/generateElementId");var Y=i.n(E);const W=flarum.reg.get("core","common/components/FormModal");var z=i.n(W),H=i(860),F=i.n(H),j=i(329),I=i.n(j);F().extend(I());class R extends(z()){constructor(){super(...arguments),l(this,"state",{inputs:{startDateVal:F()().format("YYYY-MM-DD"),endDateVal:F()().format("YYYY-MM-DD")},ids:{startDate:Y()(),endDate:Y()()}})}oninit(t){super.oninit(t),this.attrs.value&&(this.state.inputs={startDateVal:F().utc(1e3*this.attrs.value.start).format("YYYY-MM-DD"),endDateVal:F().utc(1e3*this.attrs.value.end).format("YYYY-MM-DD")})}className(){return"StatisticsWidgetDateSelectionModal Modal--small"}title(){return e().translator.trans("flarum-statistics.admin.date_selection_modal.title")}content(){return m("div",{className:"Modal-body"},this.items().toArray())}items(){const t=new($());return t.add("intro",m("p",null,e().translator.trans("flarum-statistics.admin.date_selection_modal.description")),100),t.add("date_start",m("div",{className:"Form-group"},m("label",{htmlFor:this.state.ids.startDate},e().translator.trans("flarum-statistics.admin.date_selection_modal.start_date")),m("input",{type:"date",id:this.state.ids.startDate,value:this.state.inputs.startDateVal,onchange:this.updateState("startDateVal"),className:"FormControl"})),90),t.add("date_end",m("div",{className:"Form-group"},m("label",{htmlFor:this.state.ids.endDate},e().translator.trans("flarum-statistics.admin.date_selection_modal.end_date")),m("input",{type:"date",id:this.state.ids.endDate,value:this.state.inputs.endDateVal,onchange:this.updateState("endDateVal"),className:"FormControl"})),80),t.add("submit",m(M(),{className:"Button Button--primary",type:"submit"},e().translator.trans("flarum-statistics.admin.date_selection_modal.submit_button")),0),t}updateState(t){return e=>{this.state.inputs[t]=e.currentTarget.value}}submitData(){return{start:Math.floor(+F().utc(this.state.inputs.startDateVal+"Z")/1e3),end:Math.floor(+F().utc(this.state.inputs.endDateVal+"Z").hour(23).minute(59).second(59).millisecond(999)/1e3)}}onsubmit(t){t.preventDefault();const i=this.submitData();i.end(t[e]="unloaded",t)),{})),l(this,"loadingCustom",this.entities.reduce(((t,e)=>(t[e]="unloaded",t)),{})),l(this,"selectedEntity","users"),l(this,"selectedPeriod",void 0),l(this,"chartEntity",void 0),l(this,"chartPeriod",void 0)}oncreate(t){super.oncreate(t),this.loadLifetimeData()}async loadLifetimeData(){this.loadingLifetime=!0,m.redraw();const t=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"lifetime"}});this.lifetimeData=t,this.loadingLifetime=!1,m.redraw()}async loadTimedData(t){this.loadingTimed[t]="loading",m.redraw();try{const i=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"timed",model:t}});this.timedData[t]=i,this.loadingTimed[t]="loaded";let n=new Date;n.setUTCHours(0,0,0,0);const s=n.getTime()/1e3;this.periods={today:{start:s,end:s+86400,step:3600},last_7_days:{start:s-604800,end:s,step:86400},previous_7_days:{start:s-1209600,end:s-604800,step:86400},last_28_days:{start:s-2419200,end:s,step:86400},previous_28_days:{start:s-4838400,end:s-2419200,step:86400},last_12_months:{start:s-31449600,end:s,step:604800}},this.selectedPeriod="last_7_days"}catch(e){console.error(e),this.loadingTimed[t]="fail"}m.redraw()}async loadCustomRangeData(t){this.loadingCustom[t]="loading",m.redraw();const i={...this.customPeriod};try{const n=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"custom",model:t,dateRange:{start:i.start,end:i.end}}});if(JSON.stringify(i)!==JSON.stringify(this.customPeriod))return;this.customPeriodData[t]=n,this.loadingCustom[t]="loaded",m.redraw()}catch(e){if(JSON.stringify(i)!==JSON.stringify(this.customPeriod))return;console.error(e),this.loadingCustom[t]="fail"}}className(){return"StatisticsWidget"}content(){var t,i;const n="loaded"!==("custom"===this.selectedPeriod?this.loadingCustom:this.loadingTimed)[this.selectedEntity],s=n?null:"custom"===this.selectedPeriod?{start:null==(t=this.customPeriod)?void 0:t.end,end:null==(i=this.customPeriod)?void 0:i.end,step:86400}:this.periods[this.selectedPeriod];return"custom"===this.selectedPeriod?this.customPeriodData[this.selectedEntity]||"unloaded"!==this.loadingCustom[this.selectedEntity]||this.loadCustomRangeData(this.selectedEntity):this.timedData[this.selectedEntity]||"unloaded"!==this.loadingTimed[this.selectedEntity]||this.loadTimedData(this.selectedEntity),m("div",{className:"StatisticsWidget-table"},m("div",{className:"StatisticsWidget-entities"},m("div",{className:"StatisticsWidget-labels"},m("div",{className:"StatisticsWidget-label"},e().translator.trans("flarum-statistics.admin.statistics.total_label")),m("div",{className:"StatisticsWidget-label"},n?m(d(),{size:"small",display:"inline"}):m(w(),{disabled:n,buttonClassName:"Button Button--text",caretIcon:"fas fa-caret-down"},Object.keys(this.periods).map((t=>m(M(),{key:t,active:t===this.selectedPeriod,onclick:this.changePeriod.bind(this,t),icon:t!==this.selectedPeriod||"fas fa-check"},e().translator.trans("flarum-statistics.admin.statistics.".concat(t,"_label"))))).concat([m(M(),{key:"custom",active:"custom"===this.selectedPeriod,onclick:()=>{const t={onModalSubmit:t=>{JSON.stringify(t)!==JSON.stringify(this.customPeriod)&&(this.customPeriodData={},Object.keys(this.loadingCustom).forEach((t=>this.loadingCustom[t]="unloaded")),this.customPeriod=t,this.changePeriod("custom"))}};this.customPeriod&&(t.value=this.customPeriod),e().modal.show(R,t)},icon:"custom"!==this.selectedPeriod||"fas fa-check"},"custom"===this.selectedPeriod?S()(e().translator.trans("flarum-statistics.admin.statistics.custom_label_specified",{fromDate:F().utc(1e3*this.customPeriod.start).format("ll"),toDate:F().utc(1e3*this.customPeriod.end).format("ll")})):e().translator.trans("flarum-statistics.admin.statistics.custom_label"))])))),this.entities.map((t=>{const i=this.loadingLifetime?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getTotalCount(t),a=n?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getPeriodCount(t,s),r="custom"===this.selectedPeriod?null:n?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getPeriodCount(t,this.getLastPeriod(s)),o=n||0===r||null===r?0:(a-r)/r*100;return m("button",{className:N()("Button--ua-reset StatisticsWidget-entity",{active:this.selectedEntity===t}),onclick:this.changeEntity.bind(this,t)},m("h3",{className:"StatisticsWidget-heading"},e().translator.trans("flarum-statistics.admin.statistics."+t+"_heading")),m("div",{className:"StatisticsWidget-total",title:i},this.loadingLifetime?m(d(),{display:"inline"}):g()(i)),m("div",{className:"StatisticsWidget-period",title:a},n?m(d(),{display:"inline"}):g()(a),0!==o&&m("[",null," ",m("span",{className:"StatisticsWidget-change StatisticsWidget-change--"+(o>0?"up":"down")},m(L(),{name:"fas fa-arrow-"+(o>0?"up":"down")}),Math.abs(o).toFixed(1),"%"))))}))),m("[",null,n?m("div",{key:"loading",className:"StatisticsWidget-chart","data-loading":"true"},m(d(),{size:"large"})):m("div",{key:"loaded",className:"StatisticsWidget-chart","data-loading":"false",oncreate:this.drawChart.bind(this),onupdate:this.drawChart.bind(this)})),this.noData&&m(T(),{text:e().translator.trans("flarum-statistics.admin.statistics.no_data")}),!this.noData&&!!this.chart&&m(M(),{className:"StatisticsWidget-chartExport Button",icon:"fas fa-file-export",onclick:()=>{this.chart.export()}},e().translator.trans("flarum-statistics.admin.statistics.export_chart_button")))}drawChart(t){var i,n;if(this.chart&&this.chartEntity===this.selectedEntity&&this.chartPeriod===this.selectedPeriod)return;const s="custom"===this.selectedPeriod?{start:null==(i=this.customPeriod)?void 0:i.start,end:null==(n=this.customPeriod)?void 0:n.end,step:86400}:this.periods[this.selectedPeriod],a=s.end-s.start,r=[],o=[],l=[];for(let t=s.start;t86400&&(e+=" - "+F().unix(t+s.step-1).utc().format("D MMM"))),r.push(e),o.push(this.getPeriodCount(this.selectedEntity,{start:t,end:t+s.step})),l.push(this.getPeriodCount(this.selectedEntity,{start:t-a,end:t-a}))}if(0===o.length)return this.noData=!0,void m.redraw();this.noData=!1,m.redraw();const u={labels:r,datasets:[{name:S()(e().translator.trans("flarum-statistics.admin.statistics.current_period")),values:o},{name:S()(e().translator.trans("flarum-statistics.admin.statistics.previous_period")),values:l}]};this.chart&&16&document.compareDocumentPosition(this.chart.parent)?this.chart.update(u):this.chart=new B.Chart(t.dom,{data:u,type:"line",height:280,axisOptions:{xAxisMode:"tick",yAxisMode:"span",xIsSeries:!0},lineOptions:{hideDots:1,regionFill:1},colors:[e().forum.attribute("themePrimaryColor"),"black"]}),this.chartEntity=this.selectedEntity,this.chartPeriod=this.selectedPeriod}changeEntity(t){this.selectedEntity=t}changePeriod(t){this.selectedPeriod=t}getTotalCount(t){return this.lifetimeData[t]}getPeriodCount(t,e){const i=("custom"===this.selectedPeriod?this.customPeriodData:this.timedData)[t];let n=0;for(const t in i){const s=parseInt(t);s>=e.start&&s{(0,s.extend)(r().prototype,"availableWidgets",(function(t){t.add("statistics",m(y,null),20)})),e().extensionData.for("flarum-statistics").registerPage(q)}))})(),module.exports=n})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/statistics/js/dist/admin.js.map b/extensions/statistics/js/dist/admin.js.map index 710fa448d3..14a62d7736 100644 --- a/extensions/statistics/js/dist/admin.js.map +++ b/extensions/statistics/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/statistics/../../../node_modules/dayjs/dayjs.min.js","webpack://@flarum/statistics/../../../node_modules/dayjs/plugin/localizedFormat.js","webpack://@flarum/statistics/../../../node_modules/dayjs/plugin/utc.js","webpack://@flarum/statistics/../src/js/utils/dom.js","webpack://@flarum/statistics/../src/js/utils/constants.js","webpack://@flarum/statistics/../src/js/utils/helpers.js","webpack://@flarum/statistics/../src/js/utils/draw-utils.js","webpack://@flarum/statistics/../src/js/utils/colors.js","webpack://@flarum/statistics/../src/js/utils/draw.js","webpack://@flarum/statistics/../src/js/utils/animate.js","webpack://@flarum/statistics/../src/js/utils/animation.js","webpack://@flarum/statistics/../src/js/utils/export.js","webpack://@flarum/statistics/../src/js/utils/date-utils.js","webpack://@flarum/statistics/../src/js/objects/ChartComponents.js","webpack://@flarum/statistics/../src/js/utils/intervals.js","webpack://@flarum/statistics/../src/js/utils/axis-chart-utils.js","webpack://@flarum/statistics/../node_modules/style-inject/dist/style-inject.es.js","webpack://@flarum/statistics/../src/js/objects/SvgTip.js","webpack://@flarum/statistics/../src/css/chartsCss.js","webpack://@flarum/statistics/../src/js/charts/BaseChart.js","webpack://@flarum/statistics/../src/js/charts/AggregationChart.js","webpack://@flarum/statistics/../src/js/charts/PercentageChart.js","webpack://@flarum/statistics/../src/js/charts/PieChart.js","webpack://@flarum/statistics/../src/js/charts/Heatmap.js","webpack://@flarum/statistics/../src/js/charts/AxisChart.js","webpack://@flarum/statistics/../src/js/charts/DonutChart.js","webpack://@flarum/statistics/../src/js/chart.js","webpack://@flarum/statistics/../src/js/index.js","webpack://@flarum/statistics/webpack/bootstrap","webpack://@flarum/statistics/webpack/runtime/compat get default export","webpack://@flarum/statistics/webpack/runtime/define property getters","webpack://@flarum/statistics/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/statistics/webpack/runtime/make namespace object","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/DashboardPage')\"","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/DashboardWidget')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/abbreviateNumber')\"","webpack://@flarum/statistics/./src/admin/components/MiniStatisticsWidget.tsx","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/SelectDropdown')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Placeholder')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Icon')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/utils/generateElementId')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Modal')\"","webpack://@flarum/statistics/./src/admin/components/StatisticsWidgetDateSelectionModal.tsx","webpack://@flarum/statistics/./src/admin/components/StatisticsWidget.tsx","webpack://@flarum/statistics/./src/admin/components/StatisticsPage.tsx","webpack://@flarum/statistics/./src/admin/index.tsx"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",f=\"month\",h=\"quarter\",c=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|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,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t) {\n\tvar element = document.createElement(tag);\n\n\tfor (var i in o) {\n\t\tvar val = o[i];\n\n\t\tif (i === \"inside\") {\n\t\t\t$(val).appendChild(element);\n\t\t}\n\t\telse if (i === \"around\") {\n\t\t\tvar ref = $(val);\n\t\t\tref.parentNode.insertBefore(element, ref);\n\t\t\telement.appendChild(ref);\n\n\t\t} else if (i === \"styles\") {\n\t\t\tif(typeof val === \"object\") {\n\t\t\t\tObject.keys(val).map(prop => {\n\t\t\t\t\telement.style[prop] = val[prop];\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (i in element ) {\n\t\t\telement[i] = val;\n\t\t}\n\t\telse {\n\t\t\telement.setAttribute(i, val);\n\t\t}\n\t}\n\n\treturn element;\n};\n\nexport function getOffset(element) {\n\tlet rect = element.getBoundingClientRect();\n\treturn {\n\t\t// https://stackoverflow.com/a/7436602/6495043\n\t\t// rect.top varies with scroll, so we add whatever has been\n\t\t// scrolled to it to get absolute distance from actual page top\n\t\ttop: rect.top + (document.documentElement.scrollTop || document.body.scrollTop),\n\t\tleft: rect.left + (document.documentElement.scrollLeft || document.body.scrollLeft)\n\t};\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n// an element's offsetParent property will return null whenever it, or any of its parents,\n// is hidden via the display style property.\nexport function isHidden(el) {\n\treturn (el.offsetParent === null);\n}\n\nexport function isElementInViewport(el) {\n\t// Although straightforward: https://stackoverflow.com/a/7557433/6495043\n\tvar rect = el.getBoundingClientRect();\n\n\treturn (\n\t\trect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */\n rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */\n\t);\n}\n\nexport function getElementContentWidth(element) {\n\tvar styles = window.getComputedStyle(element);\n\tvar padding = parseFloat(styles.paddingLeft) +\n\t\tparseFloat(styles.paddingRight);\n\n\treturn element.clientWidth - padding;\n}\n\nexport function bind(element, o){\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function (event) {\n\t\t\t\telement.addEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function unbind(element, o){\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function(event) {\n\t\t\t\telement.removeEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function fire(target, type, properties) {\n\tvar evt = document.createEvent(\"HTMLEvents\");\n\n\tevt.initEvent(type, true, true );\n\n\tfor (var j in properties) {\n\t\tevt[j] = properties[j];\n\t}\n\n\treturn target.dispatchEvent(evt);\n}\n\n// https://css-tricks.com/snippets/javascript/loop-queryselectorall-matches/\nexport function forEachNode(nodeList, callback, scope) {\n\tif(!nodeList) return;\n\tfor (var i = 0; i < nodeList.length; i++) {\n\t\tcallback.call(scope, nodeList[i], i);\n\t}\n}\n\nexport function activate($parent, $child, commonClass, activeClass='active', index = -1) {\n\tlet $children = $parent.querySelectorAll(`.${commonClass}.${activeClass}`);\n\n\tforEachNode($children, (node, i) => {\n\t\tif(index >= 0 && i <= index) return;\n\t\tnode.classList.remove(activeClass);\n\t});\n\n\t$child.classList.add(activeClass);\n}\n","export const ALL_CHART_TYPES = ['line', 'scatter', 'bar', 'percentage', 'heatmap', 'pie'];\n\nexport const COMPATIBLE_CHARTS = {\n\tbar: ['line', 'scatter', 'percentage', 'pie'],\n\tline: ['scatter', 'bar', 'percentage', 'pie'],\n\tpie: ['line', 'scatter', 'percentage', 'bar'],\n\tpercentage: ['bar', 'line', 'scatter', 'pie'],\n\theatmap: []\n};\n\nexport const DATA_COLOR_DIVISIONS = {\n\tbar: 'datasets',\n\tline: 'datasets',\n\tpie: 'labels',\n\tpercentage: 'labels',\n\theatmap: HEATMAP_DISTRIBUTION_SIZE\n};\n\nexport const BASE_MEASURES = {\n\tmargins: {\n\t\ttop: 10,\n\t\tbottom: 10,\n\t\tleft: 20,\n\t\tright: 20\n\t},\n\tpaddings: {\n\t\ttop: 20,\n\t\tbottom: 40,\n\t\tleft: 30,\n\t\tright: 10\n\t},\n\n\tbaseHeight: 240,\n\ttitleHeight: 20,\n\tlegendHeight: 30,\n\n\ttitleFontSize: 12,\n};\n\nexport function getTopOffset(m) {\n\treturn m.titleHeight + m.margins.top + m.paddings.top;\n}\n\nexport function getLeftOffset(m) {\n\treturn m.margins.left + m.paddings.left;\n}\n\nexport function getExtraHeight(m) {\n\tlet totalExtraHeight = m.margins.top + m.margins.bottom\n\t\t+ m.paddings.top + m.paddings.bottom\n\t\t+ m.titleHeight + m.legendHeight;\n\treturn totalExtraHeight;\n}\n\nexport function getExtraWidth(m) {\n\tlet totalExtraWidth = m.margins.left + m.margins.right\n\t\t+ m.paddings.left + m.paddings.right;\n\n\treturn totalExtraWidth;\n}\n\nexport const INIT_CHART_UPDATE_TIMEOUT = 700;\nexport const CHART_POST_ANIMATE_TIMEOUT = 400;\n\nexport const DEFAULT_AXIS_CHART_TYPE = 'line';\nexport const AXIS_DATASET_CHART_TYPES = ['line', 'bar'];\n\nexport const AXIS_LEGEND_BAR_SIZE = 100;\n\nexport const BAR_CHART_SPACE_RATIO = 0.5;\nexport const MIN_BAR_PERCENT_HEIGHT = 0.00;\n\nexport const LINE_CHART_DOT_SIZE = 4;\nexport const DOT_OVERLAY_SIZE_INCR = 4;\n\nexport const PERCENTAGE_BAR_DEFAULT_HEIGHT = 20;\nexport const PERCENTAGE_BAR_DEFAULT_DEPTH = 2;\n\n// Fixed 5-color theme,\n// More colors are difficult to parse visually\nexport const HEATMAP_DISTRIBUTION_SIZE = 5;\n\nexport const HEATMAP_SQUARE_SIZE = 10;\nexport const HEATMAP_GUTTER_SIZE = 2;\n\nexport const DEFAULT_CHAR_WIDTH = 7;\n\nexport const TOOLTIP_POINTER_TRIANGLE_HEIGHT = 5;\n\nconst DEFAULT_CHART_COLORS = ['light-blue', 'blue', 'violet', 'red', 'orange',\n\t'yellow', 'green', 'light-green', 'purple', 'magenta', 'light-grey', 'dark-grey'];\nconst HEATMAP_COLORS_GREEN = ['#ebedf0', '#c6e48b', '#7bc96f', '#239a3b', '#196127'];\nexport const HEATMAP_COLORS_BLUE = ['#ebedf0', '#c0ddf9', '#73b3f3', '#3886e1', '#17459e'];\nexport const HEATMAP_COLORS_YELLOW = ['#ebedf0', '#fdf436', '#ffc700', '#ff9100', '#06001c'];\n\nexport const DEFAULT_COLORS = {\n\tbar: DEFAULT_CHART_COLORS,\n\tline: DEFAULT_CHART_COLORS,\n\tpie: DEFAULT_CHART_COLORS,\n\tpercentage: DEFAULT_CHART_COLORS,\n\theatmap: HEATMAP_COLORS_GREEN,\n\tdonut: DEFAULT_CHART_COLORS\n};\n\n// Universal constants\nexport const ANGLE_RATIO = Math.PI / 180;\nexport const FULL_ANGLE = 360;\n","import { ANGLE_RATIO } from './constants';\n\n/**\n * Returns the value of a number upto 2 decimal places.\n * @param {Number} d Any number\n */\nexport function floatTwo(d) {\n\treturn parseFloat(d.toFixed(2));\n}\n\n/**\n * Returns whether or not two given arrays are equal.\n * @param {Array} arr1 First array\n * @param {Array} arr2 Second array\n */\nexport function arraysEqual(arr1, arr2) {\n\tif(arr1.length !== arr2.length) return false;\n\tlet areEqual = true;\n\tarr1.map((d, i) => {\n\t\tif(arr2[i] !== d) areEqual = false;\n\t});\n\treturn areEqual;\n}\n\n/**\n * Shuffles array in place. ES6 version\n * @param {Array} array An array containing the items.\n */\nexport function shuffle(array) {\n\t// Awesomeness: https://bost.ocks.org/mike/shuffle/\n\t// https://stackoverflow.com/a/2450976/6495043\n\t// https://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array?noredirect=1&lq=1\n\n\tfor (let i = array.length - 1; i > 0; i--) {\n\t\tlet j = Math.floor(Math.random() * (i + 1));\n\t\t[array[i], array[j]] = [array[j], array[i]];\n\t}\n\n\treturn array;\n}\n\n/**\n * Fill an array with extra points\n * @param {Array} array Array\n * @param {Number} count number of filler elements\n * @param {Object} element element to fill with\n * @param {Boolean} start fill at start?\n */\nexport function fillArray(array, count, element, start=false) {\n\tif(!element) {\n\t\telement = start ? array[0] : array[array.length - 1];\n\t}\n\tlet fillerArray = new Array(Math.abs(count)).fill(element);\n\tarray = start ? fillerArray.concat(array) : array.concat(fillerArray);\n\treturn array;\n}\n\n/**\n * Returns pixel width of string.\n * @param {String} string\n * @param {Number} charWidth Width of single char in pixels\n */\nexport function getStringWidth(string, charWidth) {\n\treturn (string+\"\").length * charWidth;\n}\n\nexport function bindChange(obj, getFn, setFn) {\n\treturn new Proxy(obj, {\n\t\tset: function(target, prop, value) {\n\t\t\tsetFn();\n\t\t\treturn Reflect.set(target, prop, value);\n\t\t},\n\t\tget: function(target, prop) {\n\t\t\tgetFn();\n\t\t\treturn Reflect.get(target, prop);\n\t\t}\n\t});\n}\n\n// https://stackoverflow.com/a/29325222\nexport function getRandomBias(min, max, bias, influence) {\n\tconst range = max - min;\n\tconst biasValue = range * bias + min;\n\tvar rnd = Math.random() * range + min,\t\t// random in range\n\t\tmix = Math.random() * influence;\t\t// random mixer\n\treturn rnd * (1 - mix) + biasValue * mix;\t// mix full range and bias\n}\n\nexport function getPositionByAngle(angle, radius) {\n\treturn {\n\t\tx: Math.sin(angle * ANGLE_RATIO) * radius,\n\t\ty: Math.cos(angle * ANGLE_RATIO) * radius,\n\t};\n}\n\n/**\n * Check if a number is valid for svg attributes\n * @param {object} candidate Candidate to test\n * @param {Boolean} nonNegative flag to treat negative number as invalid\n */\nexport function isValidNumber(candidate, nonNegative=false) {\n\tif (Number.isNaN(candidate)) return false;\n\telse if (candidate === undefined) return false;\n\telse if (!Number.isFinite(candidate)) return false;\n\telse if (nonNegative && candidate < 0) return false;\n\telse return true;\n}\n\n/**\n * Round a number to the closes precision, max max precision 4\n * @param {Number} d Any Number\n */\nexport function round(d) {\n\t// https://floating-point-gui.de/\n\t// https://www.jacklmoore.com/notes/rounding-in-javascript/\n\treturn Number(Math.round(d + 'e4') + 'e-4');\n}\n\n/**\n * Creates a deep clone of an object\n * @param {Object} candidate Any Object\n */\n export function deepClone(candidate) {\n\tlet cloned, value, key;\n \n\tif (candidate instanceof Date) {\n\t return new Date(candidate.getTime());\n\t}\n \n\tif (typeof candidate !== \"object\" || candidate === null) {\n\t return candidate;\n\t}\n \n\tcloned = Array.isArray(candidate) ? [] : {};\n \n\tfor (key in candidate) {\n\t value = candidate[key];\n \n\t cloned[key] = deepClone(value);\n\t}\n \n\treturn cloned;\n }","import { fillArray } from './helpers';\n\nexport function getBarHeightAndYAttr(yTop, zeroLine) {\n\tlet height, y;\n\tif (yTop <= zeroLine) {\n\t\theight = zeroLine - yTop;\n\t\ty = yTop;\n\t} else {\n\t\theight = yTop - zeroLine;\n\t\ty = zeroLine;\n\t}\n\n\treturn [height, y];\n}\n\nexport function equilizeNoOfElements(array1, array2,\n\textraCount = array2.length - array1.length) {\n\n\t// Doesn't work if either has zero elements.\n\tif(extraCount > 0) {\n\t\tarray1 = fillArray(array1, extraCount);\n\t} else {\n\t\tarray2 = fillArray(array2, extraCount);\n\t}\n\treturn [array1, array2];\n}\n\nexport function truncateString(txt, len) {\n\tif (!txt) {\n\t\treturn;\n\t}\n\tif (txt.length > len) {\n\t\treturn txt.slice(0, len-3) + '...';\n\t} else {\n\t\treturn txt;\n\t}\n}\n\nexport function shortenLargeNumber(label) {\n\tlet number;\n\tif (typeof label === 'number') number = label;\n\telse if (typeof label === 'string') {\n\t\tnumber = Number(label);\n\t\tif (Number.isNaN(number)) return label;\n\t}\n\n\t// Using absolute since log wont work for negative numbers\n\tlet p = Math.floor(Math.log10(Math.abs(number)));\n\tif (p <= 2) return number; // Return as is for a 3 digit number of less\n\tlet\tl = Math.floor(p / 3);\n\tlet shortened = (Math.pow(10, p - l * 3) * +(number / Math.pow(10, p)).toFixed(1));\n\n\t// Correct for floating point error upto 2 decimal places\n\treturn Math.round(shortened*100)/100 + ' ' + ['', 'K', 'M', 'B', 'T'][l];\n}\n\n// cubic bezier curve calculation (from example by François Romain)\nexport function getSplineCurvePointsStr(xList, yList) {\n\n\tlet points=[];\n\tfor(let i=0;i {\n\t\tlet lengthX = pointB[0] - pointA[0];\n\t\tlet lengthY = pointB[1] - pointA[1];\n\t\treturn {\n\t\t\tlength: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n\t\t\tangle: Math.atan2(lengthY, lengthX)\n\t\t};\n\t};\n \n\tlet controlPoint = (current, previous, next, reverse) => {\n\t\tlet p = previous || current;\n\t\tlet n = next || current;\n\t\tlet o = line(p, n);\n\t\tlet angle = o.angle + (reverse ? Math.PI : 0);\n\t\tlet length = o.length * smoothing;\n\t\tlet x = current[0] + Math.cos(angle) * length;\n\t\tlet y = current[1] + Math.sin(angle) * length;\n\t\treturn [x, y];\n\t};\n \n\tlet bezierCommand = (point, i, a) => {\n\t\tlet cps = controlPoint(a[i - 1], a[i - 2], point);\n\t\tlet cpe = controlPoint(point, a[i - 1], a[i + 1], true);\n\t\treturn `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}`;\n\t};\n \n\tlet pointStr = (points, command) => {\n\t\treturn points.reduce((acc, point, i, a) => i === 0\n\t\t\t? `${point[0]},${point[1]}`\n\t\t\t: `${acc} ${command(point, i, a)}`, '');\n\t};\n \n\treturn pointStr(points, bezierCommand);\n}\n","const PRESET_COLOR_MAP = {\n\t'light-blue': '#7cd6fd',\n\t'blue': '#5e64ff',\n\t'violet': '#743ee2',\n\t'red': '#ff5858',\n\t'orange': '#ffa00a',\n\t'yellow': '#feef72',\n\t'green': '#28a745',\n\t'light-green': '#98d85b',\n\t'purple': '#b554ff',\n\t'magenta': '#ffa3ef',\n\t'black': '#36114C',\n\t'grey': '#bdd3e6',\n\t'light-grey': '#f0f4f7',\n\t'dark-grey': '#b8c2cc'\n};\n\nfunction limitColor(r){\n\tif (r > 255) return 255;\n\telse if (r < 0) return 0;\n\treturn r;\n}\n\nexport function lightenDarkenColor(color, amt) {\n\tlet col = getColor(color);\n\tlet usePound = false;\n\tif (col[0] == \"#\") {\n\t\tcol = col.slice(1);\n\t\tusePound = true;\n\t}\n\tlet num = parseInt(col,16);\n\tlet r = limitColor((num >> 16) + amt);\n\tlet b = limitColor(((num >> 8) & 0x00FF) + amt);\n\tlet g = limitColor((num & 0x0000FF) + amt);\n\treturn (usePound?\"#\":\"\") + (g | (b << 8) | (r << 16)).toString(16);\n}\n\nexport function isValidColor(string) {\n\t// https://stackoverflow.com/a/32685393\n\tlet HEX_RE = /(^\\s*)(#)((?:[A-Fa-f0-9]{3}){1,2})$/i;\n\tlet RGB_RE = /(^\\s*)(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/i;\n\treturn HEX_RE.test(string) || RGB_RE.test(string);\n}\n\nexport const getColor = (color) => {\n\t// When RGB color, convert to hexadecimal (alpha value is omitted)\n\tif((/rgb[a]{0,1}\\([\\d, ]+\\)/gim).test(color)) {\n\t\treturn (/\\D+(\\d*)\\D+(\\d*)\\D+(\\d*)/gim).exec(color)\n\t\t\t.map((x, i) => (i !== 0 ? Number(x).toString(16) : '#'))\n\t\t\t.reduce((c, ch) => `${c}${ch}`);\n\t}\n\treturn PRESET_COLOR_MAP[color] || color;\n};\n","import { getBarHeightAndYAttr, truncateString, shortenLargeNumber, getSplineCurvePointsStr } from './draw-utils';\nimport { getStringWidth, isValidNumber } from './helpers';\nimport { DOT_OVERLAY_SIZE_INCR, PERCENTAGE_BAR_DEFAULT_DEPTH } from './constants';\nimport { lightenDarkenColor } from './colors';\n\nexport const AXIS_TICK_LENGTH = 6;\nconst LABEL_MARGIN = 4;\nconst LABEL_MAX_CHARS = 15;\nexport const FONT_SIZE = 10;\nconst BASE_LINE_COLOR = '#dadada';\nconst FONT_FILL = '#555b51';\n\nfunction $(expr, con) {\n\treturn typeof expr === \"string\"? (con || document).querySelector(expr) : expr || null;\n}\n\nexport function createSVG(tag, o) {\n\tvar element = document.createElementNS(\"http://www.w3.org/2000/svg\", tag);\n\n\tfor (var i in o) {\n\t\tvar val = o[i];\n\n\t\tif (i === \"inside\") {\n\t\t\t$(val).appendChild(element);\n\t\t}\n\t\telse if (i === \"around\") {\n\t\t\tvar ref = $(val);\n\t\t\tref.parentNode.insertBefore(element, ref);\n\t\t\telement.appendChild(ref);\n\n\t\t} else if (i === \"styles\") {\n\t\t\tif(typeof val === \"object\") {\n\t\t\t\tObject.keys(val).map(prop => {\n\t\t\t\t\telement.style[prop] = val[prop];\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tif(i === \"className\") { i = \"class\"; }\n\t\t\tif(i === \"innerHTML\") {\n\t\t\t\telement['textContent'] = val;\n\t\t\t} else {\n\t\t\t\telement.setAttribute(i, val);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn element;\n}\n\nfunction renderVerticalGradient(svgDefElem, gradientId) {\n\treturn createSVG('linearGradient', {\n\t\tinside: svgDefElem,\n\t\tid: gradientId,\n\t\tx1: 0,\n\t\tx2: 0,\n\t\ty1: 0,\n\t\ty2: 1\n\t});\n}\n\nfunction setGradientStop(gradElem, offset, color, opacity) {\n\treturn createSVG('stop', {\n\t\t'inside': gradElem,\n\t\t'style': `stop-color: ${color}`,\n\t\t'offset': offset,\n\t\t'stop-opacity': opacity\n\t});\n}\n\nexport function makeSVGContainer(parent, className, width, height) {\n\treturn createSVG('svg', {\n\t\tclassName: className,\n\t\tinside: parent,\n\t\twidth: width,\n\t\theight: height\n\t});\n}\n\nexport function makeSVGDefs(svgContainer) {\n\treturn createSVG('defs', {\n\t\tinside: svgContainer,\n\t});\n}\n\nexport function makeSVGGroup(className, transform='', parent=undefined) {\n\tlet args = {\n\t\tclassName: className,\n\t\ttransform: transform\n\t};\n\tif(parent) args.inside = parent;\n\treturn createSVG('g', args);\n}\n\nexport function wrapInSVGGroup(elements, className='') {\n\tlet g = createSVG('g', {\n\t\tclassName: className\n\t});\n\telements.forEach(e => g.appendChild(e));\n\treturn g;\n}\n\nexport function makePath(pathStr, className='', stroke='none', fill='none', strokeWidth=2) {\n\treturn createSVG('path', {\n\t\tclassName: className,\n\t\td: pathStr,\n\t\tstyles: {\n\t\t\tstroke: stroke,\n\t\t\tfill: fill,\n\t\t\t'stroke-width': strokeWidth\n\t\t}\n\t});\n}\n\nexport function makeArcPathStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, arcEndY] = [center.x + endPosition.x, center.y + endPosition.y];\n\treturn `M${center.x} ${center.y}\n\t\tL${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY} z`;\n}\n\nexport function makeCircleStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, midArc, arcEndY] = [center.x + endPosition.x, center.y * 2, center.y + endPosition.y];\n\treturn `M${center.x} ${center.y}\n\t\tL${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${midArc} z\n\t\tL${arcStartX} ${midArc}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY} z`;\n}\n\nexport function makeArcStrokePathStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, arcEndY] = [center.x + endPosition.x, center.y + endPosition.y];\n\n\treturn `M${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY}`;\n}\n\nexport function makeStrokeCircleStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, midArc, arcEndY] = [center.x + endPosition.x, radius * 2 + arcStartY, center.y + startPosition.y];\n\n\treturn `M${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${midArc}\n\t\tM${arcStartX} ${midArc}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY}`;\n}\n\nexport function makeGradient(svgDefElem, color, lighter = false) {\n\tlet gradientId ='path-fill-gradient' + '-' + color + '-' +(lighter ? 'lighter' : 'default');\n\tlet gradientDef = renderVerticalGradient(svgDefElem, gradientId);\n\tlet opacities = [1, 0.6, 0.2];\n\tif(lighter) {\n\t\topacities = [0.4, 0.2, 0];\n\t}\n\n\tsetGradientStop(gradientDef, \"0%\", color, opacities[0]);\n\tsetGradientStop(gradientDef, \"50%\", color, opacities[1]);\n\tsetGradientStop(gradientDef, \"100%\", color, opacities[2]);\n\n\treturn gradientId;\n}\n\nexport function percentageBar(x, y, width, height,\n\tdepth=PERCENTAGE_BAR_DEFAULT_DEPTH, fill='none') {\n\n\tlet args = {\n\t\tclassName: 'percentage-bar',\n\t\tx: x,\n\t\ty: y,\n\t\twidth: width,\n\t\theight: height,\n\t\tfill: fill,\n\t\tstyles: {\n\t\t\t'stroke': lightenDarkenColor(fill, -25),\n\t\t\t// Diabolically good: https://stackoverflow.com/a/9000859\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray\n\t\t\t'stroke-dasharray': `0, ${height + width}, ${width}, ${height}`,\n\t\t\t'stroke-width': depth\n\t\t},\n\t};\n\n\treturn createSVG(\"rect\", args);\n}\n\nexport function heatSquare(className, x, y, size, radius, fill='none', data={}) {\n\tlet args = {\n\t\tclassName: className,\n\t\tx: x,\n\t\ty: y,\n\t\twidth: size,\n\t\theight: size,\n\t\trx: radius,\n\t\tfill: fill\n\t};\n\n\tObject.keys(data).map(key => {\n\t\targs[key] = data[key];\n\t});\n\n\treturn createSVG(\"rect\", args);\n}\n\nexport function legendBar(x, y, size, fill='none', label, truncate=false) {\n\tlabel = truncate ? truncateString(label, LABEL_MAX_CHARS) : label;\n\n\tlet args = {\n\t\tclassName: 'legend-bar',\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: size,\n\t\theight: '2px',\n\t\tfill: fill\n\t};\n\tlet text = createSVG('text', {\n\t\tclassName: 'legend-dataset-text',\n\t\tx: 0,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE * 2) + 'px',\n\t\t'font-size': (FONT_SIZE * 1.2) + 'px',\n\t\t'text-anchor': 'start',\n\t\tfill: FONT_FILL,\n\t\tinnerHTML: label\n\t});\n\n\tlet group = createSVG('g', {\n\t\ttransform: `translate(${x}, ${y})`\n\t});\n\tgroup.appendChild(createSVG(\"rect\", args));\n\tgroup.appendChild(text);\n\n\treturn group;\n}\n\nexport function legendDot(x, y, size, fill='none', label, truncate=false) {\n\tlabel = truncate ? truncateString(label, LABEL_MAX_CHARS) : label;\n\n\tlet args = {\n\t\tclassName: 'legend-dot',\n\t\tcx: 0,\n\t\tcy: 0,\n\t\tr: size,\n\t\tfill: fill\n\t};\n\tlet text = createSVG('text', {\n\t\tclassName: 'legend-dataset-text',\n\t\tx: 0,\n\t\ty: 0,\n\t\tdx: (FONT_SIZE) + 'px',\n\t\tdy: (FONT_SIZE/3) + 'px',\n\t\t'font-size': (FONT_SIZE * 1.2) + 'px',\n\t\t'text-anchor': 'start',\n\t\tfill: FONT_FILL,\n\t\tinnerHTML: label\n\t});\n\n\tlet group = createSVG('g', {\n\t\ttransform: `translate(${x}, ${y})`\n\t});\n\tgroup.appendChild(createSVG(\"circle\", args));\n\tgroup.appendChild(text);\n\n\treturn group;\n}\n\nexport function makeText(className, x, y, content, options = {}) {\n\tlet fontSize = options.fontSize || FONT_SIZE;\n\tlet dy = options.dy !== undefined ? options.dy : (fontSize / 2);\n\tlet fill = options.fill || FONT_FILL;\n\tlet textAnchor = options.textAnchor || 'start';\n\treturn createSVG('text', {\n\t\tclassName: className,\n\t\tx: x,\n\t\ty: y,\n\t\tdy: dy + 'px',\n\t\t'font-size': fontSize + 'px',\n\t\tfill: fill,\n\t\t'text-anchor': textAnchor,\n\t\tinnerHTML: content\n\t});\n}\n\nfunction makeVertLine(x, label, y1, y2, options={}) {\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tlet l = createSVG('line', {\n\t\tclassName: 'line-vertical ' + options.className,\n\t\tx1: 0,\n\t\tx2: 0,\n\t\ty1: y1,\n\t\ty2: y2,\n\t\tstyles: {\n\t\t\tstroke: options.stroke\n\t\t}\n\t});\n\n\tlet text = createSVG('text', {\n\t\tx: 0,\n\t\ty: y1 > y2 ? y1 + LABEL_MARGIN : y1 - LABEL_MARGIN - FONT_SIZE,\n\t\tdy: FONT_SIZE + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'middle',\n\t\tinnerHTML: label + \"\"\n\t});\n\n\tlet line = createSVG('g', {\n\t\ttransform: `translate(${ x }, 0)`\n\t});\n\n\tline.appendChild(l);\n\tline.appendChild(text);\n\n\treturn line;\n}\n\nfunction makeHoriLine(y, label, x1, x2, options={}) {\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.lineType) options.lineType = '';\n\tif (options.shortenNumbers) label = shortenLargeNumber(label);\n\n\tlet className = 'line-horizontal ' + options.className +\n\t\t(options.lineType === \"dashed\" ? \"dashed\": \"\");\n\n\tlet l = createSVG('line', {\n\t\tclassName: className,\n\t\tx1: x1,\n\t\tx2: x2,\n\t\ty1: 0,\n\t\ty2: 0,\n\t\tstyles: {\n\t\t\tstroke: options.stroke\n\t\t}\n\t});\n\n\tlet text = createSVG('text', {\n\t\tx: x1 < x2 ? x1 - LABEL_MARGIN : x1 + LABEL_MARGIN,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / 2 - 2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': x1 < x2 ? 'end' : 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet line = createSVG('g', {\n\t\ttransform: `translate(0, ${y})`,\n\t\t'stroke-opacity': 1\n\t});\n\n\tif(text === 0 || text === '0') {\n\t\tline.style.stroke = \"rgba(27, 31, 35, 0.6)\";\n\t}\n\n\tline.appendChild(l);\n\tline.appendChild(text);\n\n\treturn line;\n}\n\nexport function yLine(y, label, width, options={}) {\n\tif (!isValidNumber(y)) y = 0;\n\n\tif(!options.pos) options.pos = 'left';\n\tif(!options.offset) options.offset = 0;\n\tif(!options.mode) options.mode = 'span';\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.className) options.className = '';\n\n\tlet x1 = -1 * AXIS_TICK_LENGTH;\n\tlet x2 = options.mode === 'span' ? width + AXIS_TICK_LENGTH : 0;\n\n\tif(options.mode === 'tick' && options.pos === 'right') {\n\t\tx1 = width + AXIS_TICK_LENGTH;\n\t\tx2 = width;\n\t}\n\n\t// let offset = options.pos === 'left' ? -1 * options.offset : options.offset;\n\n\tx1 += options.offset;\n\tx2 += options.offset;\n\n\treturn makeHoriLine(y, label, x1, x2, {\n\t\tstroke: options.stroke,\n\t\tclassName: options.className,\n\t\tlineType: options.lineType,\n\t\tshortenNumbers: options.shortenNumbers\n\t});\n}\n\nexport function xLine(x, label, height, options={}) {\n\tif (!isValidNumber(x)) x = 0;\n\n\tif(!options.pos) options.pos = 'bottom';\n\tif(!options.offset) options.offset = 0;\n\tif(!options.mode) options.mode = 'span';\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.className) options.className = '';\n\n\t// Draw X axis line in span/tick mode with optional label\n\t// \ty2(span)\n\t// \t\t\t\t\t\t|\n\t// \t\t\t\t\t\t|\n\t//\t\t\t\tx line\t|\n\t//\t\t\t\t\t\t|\n\t// \t\t\t\t\t \t|\n\t// ---------------------+-- y2(tick)\n\t//\t\t\t\t\t\t|\n\t//\t\t\t\t\t\t\ty1\n\n\tlet y1 = height + AXIS_TICK_LENGTH;\n\tlet y2 = options.mode === 'span' ? -1 * AXIS_TICK_LENGTH : height;\n\n\tif(options.mode === 'tick' && options.pos === 'top') {\n\t\t// top axis ticks\n\t\ty1 = -1 * AXIS_TICK_LENGTH;\n\t\ty2 = 0;\n\t}\n\n\treturn makeVertLine(x, label, y1, y2, {\n\t\tstroke: options.stroke,\n\t\tclassName: options.className,\n\t\tlineType: options.lineType\n\t});\n}\n\nexport function yMarker(y, label, width, options={}) {\n\tif(!options.labelPos) options.labelPos = 'right';\n\tlet x = options.labelPos === 'left' ? LABEL_MARGIN\n\t\t: width - getStringWidth(label, 5) - LABEL_MARGIN;\n\n\tlet labelSvg = createSVG('text', {\n\t\tclassName: 'chart-label',\n\t\tx: x,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / -2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet line = makeHoriLine(y, '', 0, width, {\n\t\tstroke: options.stroke || BASE_LINE_COLOR,\n\t\tclassName: options.className || '',\n\t\tlineType: options.lineType\n\t});\n\n\tline.appendChild(labelSvg);\n\n\treturn line;\n}\n\nexport function yRegion(y1, y2, width, label, options={}) {\n\t// return a group\n\tlet height = y1 - y2;\n\n\tlet rect = createSVG('rect', {\n\t\tclassName: `bar mini`, // remove class\n\t\tstyles: {\n\t\t\tfill: `rgba(228, 234, 239, 0.49)`,\n\t\t\tstroke: BASE_LINE_COLOR,\n\t\t\t'stroke-dasharray': `${width}, ${height}`\n\t\t},\n\t\t// 'data-point-index': index,\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: width,\n\t\theight: height\n\t});\n\n\tif(!options.labelPos) options.labelPos = 'right';\n\tlet x = options.labelPos === 'left' ? LABEL_MARGIN\n\t\t: width - getStringWidth(label+\"\", 4.5) - LABEL_MARGIN;\n\n\tlet labelSvg = createSVG('text', {\n\t\tclassName: 'chart-label',\n\t\tx: x,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / -2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet region = createSVG('g', {\n\t\ttransform: `translate(0, ${y2})`\n\t});\n\n\tregion.appendChild(rect);\n\tregion.appendChild(labelSvg);\n\n\treturn region;\n}\n\nexport function datasetBar(x, yTop, width, color, label='', index=0, offset=0, meta={}) {\n\tlet [height, y] = getBarHeightAndYAttr(yTop, meta.zeroLine);\n\ty -= offset;\n\n\tif(height === 0) {\n\t\theight = meta.minHeight;\n\t\ty -= meta.minHeight;\n\t}\n\n\t// Preprocess numbers to avoid svg building errors\n\tif (!isValidNumber(x)) x = 0;\n\tif (!isValidNumber(y)) y = 0;\n\tif (!isValidNumber(height, true)) height = 0;\n\tif (!isValidNumber(width, true)) width = 0;\n\n\tlet rect = createSVG('rect', {\n\t\tclassName: `bar mini`,\n\t\tstyle: `fill: ${color}`,\n\t\t'data-point-index': index,\n\t\tx: x,\n\t\ty: y,\n\t\twidth: width,\n\t\theight: height\n\t});\n\n\tlabel += \"\";\n\n\tif(!label && !label.length) {\n\t\treturn rect;\n\t} else {\n\t\trect.setAttribute('y', 0);\n\t\trect.setAttribute('x', 0);\n\t\tlet text = createSVG('text', {\n\t\t\tclassName: 'data-point-value',\n\t\t\tx: width/2,\n\t\t\ty: 0,\n\t\t\tdy: (FONT_SIZE / 2 * -1) + 'px',\n\t\t\t'font-size': FONT_SIZE + 'px',\n\t\t\t'text-anchor': 'middle',\n\t\t\tinnerHTML: label\n\t\t});\n\n\t\tlet group = createSVG('g', {\n\t\t\t'data-point-index': index,\n\t\t\ttransform: `translate(${x}, ${y})`\n\t\t});\n\t\tgroup.appendChild(rect);\n\t\tgroup.appendChild(text);\n\n\t\treturn group;\n\t}\n}\n\nexport function datasetDot(x, y, radius, color, label='', index=0) {\n\tlet dot = createSVG('circle', {\n\t\tstyle: `fill: ${color}`,\n\t\t'data-point-index': index,\n\t\tcx: x,\n\t\tcy: y,\n\t\tr: radius\n\t});\n\n\tlabel += \"\";\n\n\tif(!label && !label.length) {\n\t\treturn dot;\n\t} else {\n\t\tdot.setAttribute('cy', 0);\n\t\tdot.setAttribute('cx', 0);\n\n\t\tlet text = createSVG('text', {\n\t\t\tclassName: 'data-point-value',\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tdy: (FONT_SIZE / 2 * -1 - radius) + 'px',\n\t\t\t'font-size': FONT_SIZE + 'px',\n\t\t\t'text-anchor': 'middle',\n\t\t\tinnerHTML: label\n\t\t});\n\n\t\tlet group = createSVG('g', {\n\t\t\t'data-point-index': index,\n\t\t\ttransform: `translate(${x}, ${y})`\n\t\t});\n\t\tgroup.appendChild(dot);\n\t\tgroup.appendChild(text);\n\n\t\treturn group;\n\t}\n}\n\nexport function getPaths(xList, yList, color, options={}, meta={}) {\n\tlet pointsList = yList.map((y, i) => (xList[i] + ',' + y));\n\tlet pointsStr = pointsList.join(\"L\");\n\n\t// Spline\n\tif (options.spline)\n\t\tpointsStr = getSplineCurvePointsStr(xList, yList);\n\n\tlet path = makePath(\"M\"+pointsStr, 'line-graph-path', color);\n\n\t// HeatLine\n\tif(options.heatline) {\n\t\tlet gradient_id = makeGradient(meta.svgDefs, color);\n\t\tpath.style.stroke = `url(#${gradient_id})`;\n\t}\n\n\tlet paths = {\n\t\tpath: path\n\t};\n\n\t// Region\n\tif(options.regionFill) {\n\t\tlet gradient_id_region = makeGradient(meta.svgDefs, color, true);\n\n\t\tlet pathStr = \"M\" + `${xList[0]},${meta.zeroLine}L` + pointsStr + `L${xList.slice(-1)[0]},${meta.zeroLine}`;\n\t\tpaths.region = makePath(pathStr, `region-fill`, 'none', `url(#${gradient_id_region})`);\n\t}\n\n\treturn paths;\n}\n\nexport let makeOverlay = {\n\t'bar': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'rect') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\toverlay.style.fill = '#000000';\n\t\toverlay.style.opacity = '0.4';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t},\n\n\t'dot': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\tlet radius = unit.getAttribute('r');\n\t\tlet fill = unit.getAttribute('fill');\n\t\toverlay.setAttribute('r', parseInt(radius) + DOT_OVERLAY_SIZE_INCR);\n\t\toverlay.setAttribute('fill', fill);\n\t\toverlay.style.opacity = '0.6';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t},\n\n\t'heat_square': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\tlet radius = unit.getAttribute('r');\n\t\tlet fill = unit.getAttribute('fill');\n\t\toverlay.setAttribute('r', parseInt(radius) + DOT_OVERLAY_SIZE_INCR);\n\t\toverlay.setAttribute('fill', fill);\n\t\toverlay.style.opacity = '0.6';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t}\n};\n\nexport let updateOverlay = {\n\t'bar': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'rect') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['x', 'y', 'width', 'height'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n\n\t'dot': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['cx', 'cy'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n\n\t'heat_square': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['cx', 'cy'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n};\n","import { getBarHeightAndYAttr, getSplineCurvePointsStr } from './draw-utils';\n\nexport const UNIT_ANIM_DUR = 350;\nexport const PATH_ANIM_DUR = 350;\nexport const MARKER_LINE_ANIM_DUR = UNIT_ANIM_DUR;\nexport const REPLACE_ALL_NEW_DUR = 250;\n\nexport const STD_EASING = 'easein';\n\nexport function translate(unit, oldCoord, newCoord, duration) {\n\tlet old = typeof oldCoord === 'string' ? oldCoord : oldCoord.join(', ');\n\treturn [\n\t\tunit,\n\t\t{transform: newCoord.join(', ')},\n\t\tduration,\n\t\tSTD_EASING,\n\t\t\"translate\",\n\t\t{transform: old}\n\t];\n}\n\nexport function translateVertLine(xLine, newX, oldX) {\n\treturn translate(xLine, [oldX, 0], [newX, 0], MARKER_LINE_ANIM_DUR);\n}\n\nexport function translateHoriLine(yLine, newY, oldY) {\n\treturn translate(yLine, [0, oldY], [0, newY], MARKER_LINE_ANIM_DUR);\n}\n\nexport function animateRegion(rectGroup, newY1, newY2, oldY2) {\n\tlet newHeight = newY1 - newY2;\n\tlet rect = rectGroup.childNodes[0];\n\tlet width = rect.getAttribute(\"width\");\n\tlet rectAnim = [\n\t\trect,\n\t\t{ height: newHeight, 'stroke-dasharray': `${width}, ${newHeight}` },\n\t\tMARKER_LINE_ANIM_DUR,\n\t\tSTD_EASING\n\t];\n\n\tlet groupAnim = translate(rectGroup, [0, oldY2], [0, newY2], MARKER_LINE_ANIM_DUR);\n\treturn [rectAnim, groupAnim];\n}\n\nexport function animateBar(bar, x, yTop, width, offset=0, meta={}) {\n\tlet [height, y] = getBarHeightAndYAttr(yTop, meta.zeroLine);\n\ty -= offset;\n\tif(bar.nodeName !== 'rect') {\n\t\tlet rect = bar.childNodes[0];\n\t\tlet rectAnim = [\n\t\t\trect,\n\t\t\t{width: width, height: height},\n\t\t\tUNIT_ANIM_DUR,\n\t\t\tSTD_EASING\n\t\t];\n\n\t\tlet oldCoordStr = bar.getAttribute(\"transform\").split(\"(\")[1].slice(0, -1);\n\t\tlet groupAnim = translate(bar, oldCoordStr, [x, y], MARKER_LINE_ANIM_DUR);\n\t\treturn [rectAnim, groupAnim];\n\t} else {\n\t\treturn [[bar, {width: width, height: height, x: x, y: y}, UNIT_ANIM_DUR, STD_EASING]];\n\t}\n\t// bar.animate({height: args.newHeight, y: yTop}, UNIT_ANIM_DUR, mina.easein);\n}\n\nexport function animateDot(dot, x, y) {\n\tif(dot.nodeName !== 'circle') {\n\t\tlet oldCoordStr = dot.getAttribute(\"transform\").split(\"(\")[1].slice(0, -1);\n\t\tlet groupAnim = translate(dot, oldCoordStr, [x, y], MARKER_LINE_ANIM_DUR);\n\t\treturn [groupAnim];\n\t} else {\n\t\treturn [[dot, {cx: x, cy: y}, UNIT_ANIM_DUR, STD_EASING]];\n\t}\n\t// dot.animate({cy: yTop}, UNIT_ANIM_DUR, mina.easein);\n}\n\nexport function animatePath(paths, newXList, newYList, zeroLine, spline) {\n\tlet pathComponents = [];\n\tlet pointsStr = newYList.map((y, i) => (newXList[i] + ',' + y)).join(\"L\");\n\n\tif (spline)\n\t\tpointsStr = getSplineCurvePointsStr(newXList, newYList);\n\n\tconst animPath = [paths.path, {d:\"M\" + pointsStr}, PATH_ANIM_DUR, STD_EASING];\n\tpathComponents.push(animPath);\n\n\tif(paths.region) {\n\t\tlet regStartPt = `${newXList[0]},${zeroLine}L`;\n\t\tlet regEndPt = `L${newXList.slice(-1)[0]}, ${zeroLine}`;\n\n\t\tconst animRegion = [\n\t\t\tpaths.region,\n\t\t\t{d:\"M\" + regStartPt + pointsStr + regEndPt},\n\t\t\tPATH_ANIM_DUR,\n\t\t\tSTD_EASING\n\t\t];\n\t\tpathComponents.push(animRegion);\n\t}\n\n\treturn pathComponents;\n}\n\nexport function animatePathStr(oldPath, pathStr) {\n\treturn [oldPath, {d: pathStr}, UNIT_ANIM_DUR, STD_EASING];\n}\n","// Leveraging SMIL Animations\n\nimport { REPLACE_ALL_NEW_DUR } from './animate';\n\nconst EASING = {\n\tease: \"0.25 0.1 0.25 1\",\n\tlinear: \"0 0 1 1\",\n\t// easein: \"0.42 0 1 1\",\n\teasein: \"0.1 0.8 0.2 1\",\n\teaseout: \"0 0 0.58 1\",\n\teaseinout: \"0.42 0 0.58 1\"\n};\n\nfunction animateSVGElement(element, props, dur, easingType=\"linear\", type=undefined, oldValues={}) {\n\n\tlet animElement = element.cloneNode(true);\n\tlet newElement = element.cloneNode(true);\n\n\tfor(var attributeName in props) {\n\t\tlet animateElement;\n\t\tif(attributeName === 'transform') {\n\t\t\tanimateElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"animateTransform\");\n\t\t} else {\n\t\t\tanimateElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"animate\");\n\t\t}\n\t\tlet currentValue = oldValues[attributeName] || element.getAttribute(attributeName);\n\t\tlet value = props[attributeName];\n\n\t\tlet animAttr = {\n\t\t\tattributeName: attributeName,\n\t\t\tfrom: currentValue,\n\t\t\tto: value,\n\t\t\tbegin: \"0s\",\n\t\t\tdur: dur/1000 + \"s\",\n\t\t\tvalues: currentValue + \";\" + value,\n\t\t\tkeySplines: EASING[easingType],\n\t\t\tkeyTimes: \"0;1\",\n\t\t\tcalcMode: \"spline\",\n\t\t\tfill: 'freeze'\n\t\t};\n\n\t\tif(type) {\n\t\t\tanimAttr[\"type\"] = type;\n\t\t}\n\n\t\tfor (var i in animAttr) {\n\t\t\tanimateElement.setAttribute(i, animAttr[i]);\n\t\t}\n\n\t\tanimElement.appendChild(animateElement);\n\n\t\tif(type) {\n\t\t\tnewElement.setAttribute(attributeName, `translate(${value})`);\n\t\t} else {\n\t\t\tnewElement.setAttribute(attributeName, value);\n\t\t}\n\t}\n\n\treturn [animElement, newElement];\n}\n\nexport function transform(element, style) { // eslint-disable-line no-unused-vars\n\telement.style.transform = style;\n\telement.style.webkitTransform = style;\n\telement.style.msTransform = style;\n\telement.style.mozTransform = style;\n\telement.style.oTransform = style;\n}\n\nfunction animateSVG(svgContainer, elements) {\n\tlet newElements = [];\n\tlet animElements = [];\n\n\telements.map(element => {\n\t\tlet unit = element[0];\n\t\tlet parent = unit.parentNode;\n\n\t\tlet animElement, newElement;\n\n\t\telement[0] = unit;\n\t\t[animElement, newElement] = animateSVGElement(...element);\n\n\t\tnewElements.push(newElement);\n\t\tanimElements.push([animElement, parent]);\n\t\t\n\t\tif (parent) {\n\t\t\tparent.replaceChild(animElement, unit);\n\t\t}\n\t});\n\n\tlet animSvg = svgContainer.cloneNode(true);\n\n\tanimElements.map((animElement, i) => {\n\t\tif (animElement[1]) {\n\t\t\tanimElement[1].replaceChild(newElements[i], animElement[0]);\n\t\t\telements[i][0] = newElements[i];\n\t\t}\n\t});\n\n\treturn animSvg;\n}\n\nexport function runSMILAnimation(parent, svgElement, elementsToAnimate) {\n\tif(elementsToAnimate.length === 0) return;\n\n\tlet animSvgElement = animateSVG(svgElement, elementsToAnimate);\n\tif(svgElement.parentNode == parent) {\n\t\tparent.removeChild(svgElement);\n\t\tparent.appendChild(animSvgElement);\n\n\t}\n\n\t// Replace the new svgElement (data has already been replaced)\n\tsetTimeout(() => {\n\t\tif(animSvgElement.parentNode == parent) {\n\t\t\tparent.removeChild(animSvgElement);\n\t\t\tparent.appendChild(svgElement);\n\t\t}\n\t}, REPLACE_ALL_NEW_DUR);\n}\n","import { $ } from '../utils/dom';\nimport { CSSTEXT } from '../../css/chartsCss';\n\nexport function downloadFile(filename, data) {\n\tvar a = document.createElement('a');\n\ta.style = \"display: none\";\n\tvar blob = new Blob(data, {type: \"image/svg+xml; charset=utf-8\"});\n\tvar url = window.URL.createObjectURL(blob);\n\ta.href = url;\n\ta.download = filename;\n\tdocument.body.appendChild(a);\n\ta.click();\n\tsetTimeout(function(){\n\t\tdocument.body.removeChild(a);\n\t\twindow.URL.revokeObjectURL(url);\n\t}, 300);\n}\n\nexport function prepareForExport(svg) {\n\tlet clone = svg.cloneNode(true);\n\tclone.classList.add('chart-container');\n\tclone.setAttribute('xmlns', \"http://www.w3.org/2000/svg\");\n\tclone.setAttribute('xmlns:xlink', \"http://www.w3.org/1999/xlink\");\n\tlet styleEl = $.create('style', {\n\t\t'innerHTML': CSSTEXT\n\t});\n\tclone.insertBefore(styleEl, clone.firstChild);\n\n\tlet container = $.create('div');\n\tcontainer.appendChild(clone);\n\n\treturn container.innerHTML;\n}\n","// Playing around with dates\n\nexport const NO_OF_YEAR_MONTHS = 12;\nexport const NO_OF_DAYS_IN_WEEK = 7;\nexport const DAYS_IN_YEAR = 375;\nexport const NO_OF_MILLIS = 1000;\nexport const SEC_IN_DAY = 86400;\n\nexport const MONTH_NAMES = [\"January\", \"February\", \"March\", \"April\", \"May\",\n\t\"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\nexport const MONTH_NAMES_SHORT = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n\t\"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\nexport const DAY_NAMES_SHORT = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nexport const DAY_NAMES = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",\n\t\"Thursday\", \"Friday\", \"Saturday\"];\n\n// https://stackoverflow.com/a/11252167/6495043\nfunction treatAsUtc(date) {\n\tlet result = new Date(date);\n\tresult.setMinutes(result.getMinutes() - result.getTimezoneOffset());\n\treturn result;\n}\n\nexport function getYyyyMmDd(date) {\n\tlet dd = date.getDate();\n\tlet mm = date.getMonth() + 1; // getMonth() is zero-based\n\treturn [\n\t\tdate.getFullYear(),\n\t\t(mm>9 ? '' : '0') + mm,\n\t\t(dd>9 ? '' : '0') + dd\n\t].join('-');\n}\n\nexport function clone(date) {\n\treturn new Date(date.getTime());\n}\n\nexport function timestampSec(date) {\n\treturn date.getTime()/NO_OF_MILLIS;\n}\n\nexport function timestampToMidnight(timestamp, roundAhead = false) {\n\tlet midnightTs = Math.floor(timestamp - (timestamp % SEC_IN_DAY));\n\tif(roundAhead) {\n\t\treturn midnightTs + SEC_IN_DAY;\n\t}\n\treturn midnightTs;\n}\n\n// export function getMonthsBetween(startDate, endDate) {}\n\nexport function getWeeksBetween(startDate, endDate) {\n\tlet weekStartDate = setDayToSunday(startDate);\n\treturn Math.ceil(getDaysBetween(weekStartDate, endDate) / NO_OF_DAYS_IN_WEEK);\n}\n\nexport function getDaysBetween(startDate, endDate) {\n\tlet millisecondsPerDay = SEC_IN_DAY * NO_OF_MILLIS;\n\treturn (treatAsUtc(endDate) - treatAsUtc(startDate)) / millisecondsPerDay;\n}\n\nexport function areInSameMonth(startDate, endDate) {\n\treturn startDate.getMonth() === endDate.getMonth()\n\t\t&& startDate.getFullYear() === endDate.getFullYear();\n}\n\nexport function getMonthName(i, short=false) {\n\tlet monthName = MONTH_NAMES[i];\n\treturn short ? monthName.slice(0, 3) : monthName;\n}\n\nexport function getLastDateInMonth (month, year) {\n\treturn new Date(year, month + 1, 0); // 0: last day in previous month\n}\n\n// mutates\nexport function setDayToSunday(date) {\n\tlet newDate = clone(date);\n\tconst day = newDate.getDay();\n\tif(day !== 0) {\n\t\taddDays(newDate, (-1) * day);\n\t}\n\treturn newDate;\n}\n\n// mutates\nexport function addDays(date, numberOfDays) {\n\tdate.setDate(date.getDate() + numberOfDays);\n}\n","import { makeSVGGroup } from '../utils/draw';\nimport { makeText, makePath, xLine, yLine, yMarker, yRegion, datasetBar, datasetDot, percentageBar, getPaths, heatSquare } from '../utils/draw';\nimport { equilizeNoOfElements } from '../utils/draw-utils';\nimport { translateHoriLine, translateVertLine, animateRegion, animateBar,\n\tanimateDot, animatePath, animatePathStr } from '../utils/animate';\nimport { getMonthName } from '../utils/date-utils';\n\nclass ChartComponent {\n\tconstructor({\n\t\tlayerClass = '',\n\t\tlayerTransform = '',\n\t\tconstants,\n\n\t\tgetData,\n\t\tmakeElements,\n\t\tanimateElements\n\t}) {\n\t\tthis.layerTransform = layerTransform;\n\t\tthis.constants = constants;\n\n\t\tthis.makeElements = makeElements;\n\t\tthis.getData = getData;\n\n\t\tthis.animateElements = animateElements;\n\n\t\tthis.store = [];\n\t\tthis.labels = [];\n\n\t\tthis.layerClass = layerClass;\n\t\tthis.layerClass = typeof(this.layerClass) === 'function'\n\t\t\t? this.layerClass() : this.layerClass;\n\n\t\tthis.refresh();\n\t}\n\n\trefresh(data) {\n\t\tthis.data = data || this.getData();\n\t}\n\n\tsetup(parent) {\n\t\tthis.layer = makeSVGGroup(this.layerClass, this.layerTransform, parent);\n\t}\n\n\tmake() {\n\t\tthis.render(this.data);\n\t\tthis.oldData = this.data;\n\t}\n\n\trender(data) {\n\t\tthis.store = this.makeElements(data);\n\n\t\tthis.layer.textContent = '';\n\t\tthis.store.forEach(element => {\n\t\t\tthis.layer.appendChild(element);\n\t\t});\n\t\tthis.labels.forEach(element => {\n\t\t\tthis.layer.appendChild(element);\n\t\t});\n\t}\n\n\tupdate(animate = true) {\n\t\tthis.refresh();\n\t\tlet animateElements = [];\n\t\tif(animate) {\n\t\t\tanimateElements = this.animateElements(this.data) || [];\n\t\t}\n\t\treturn animateElements;\n\t}\n}\n\nlet componentConfigs = {\n\tdonutSlices: {\n\t\tlayerClass: 'donut-slices',\n\t\tmakeElements(data) {\n\t\t\treturn data.sliceStrings.map((s, i) => {\n\t\t\t\tlet slice = makePath(s, 'donut-path', data.colors[i], 'none', data.strokeWidth);\n\t\t\t\tslice.style.transition = 'transform .3s;';\n\t\t\t\treturn slice;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\treturn this.store.map((slice, i) => animatePathStr(slice, newData.sliceStrings[i]));\n\t\t},\n\t},\n\tpieSlices: {\n\t\tlayerClass: 'pie-slices',\n\t\tmakeElements(data) {\n\t\t\treturn data.sliceStrings.map((s, i) =>{\n\t\t\t\tlet slice = makePath(s, 'pie-path', 'none', data.colors[i]);\n\t\t\t\tslice.style.transition = 'transform .3s;';\n\t\t\t\treturn slice;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\treturn this.store.map((slice, i) =>\n\t\t\t\tanimatePathStr(slice, newData.sliceStrings[i])\n\t\t\t);\n\t\t}\n\t},\n\tpercentageBars: {\n\t\tlayerClass: 'percentage-bars',\n\t\tmakeElements(data) {\n\t\t\treturn data.xPositions.map((x, i) =>{\n\t\t\t\tlet y = 0;\n\t\t\t\tlet bar = percentageBar(x, y, data.widths[i],\n\t\t\t\t\tthis.constants.barHeight, this.constants.barDepth, data.colors[i]);\n\t\t\t\treturn bar;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tif(newData) return [];\n\t\t}\n\t},\n\tyAxis: {\n\t\tlayerClass: 'y axis',\n\t\tmakeElements(data) {\n\t\t\treturn data.positions.map((position, i) =>\n\t\t\t\tyLine(position, data.labels[i], this.constants.width,\n\t\t\t\t\t{mode: this.constants.mode, pos: this.constants.pos, shortenNumbers: this.constants.shortenNumbers})\n\t\t\t);\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tlet newPos = newData.positions;\n\t\t\tlet newLabels = newData.labels;\n\t\t\tlet oldPos = this.oldData.positions;\n\t\t\tlet oldLabels = this.oldData.labels;\n\n\t\t\t[oldPos, newPos] = equilizeNoOfElements(oldPos, newPos);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\tpositions: oldPos,\n\t\t\t\tlabels: newLabels\n\t\t\t});\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateHoriLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\txAxis: {\n\t\tlayerClass: 'x axis',\n\t\tmakeElements(data) {\n\t\t\treturn data.positions.map((position, i) =>\n\t\t\t\txLine(position, data.calcLabels[i], this.constants.height,\n\t\t\t\t\t{mode: this.constants.mode, pos: this.constants.pos})\n\t\t\t);\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tlet newPos = newData.positions;\n\t\t\tlet newLabels = newData.calcLabels;\n\t\t\tlet oldPos = this.oldData.positions;\n\t\t\tlet oldLabels = this.oldData.calcLabels;\n\n\t\t\t[oldPos, newPos] = equilizeNoOfElements(oldPos, newPos);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\tpositions: oldPos,\n\t\t\t\tcalcLabels: newLabels\n\t\t\t});\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateVertLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\tyMarkers: {\n\t\tlayerClass: 'y-markers',\n\t\tmakeElements(data) {\n\t\t\treturn data.map(m =>\n\t\t\t\tyMarker(m.position, m.label, this.constants.width,\n\t\t\t\t\t{labelPos: m.options.labelPos, mode: 'span', lineType: 'dashed'})\n\t\t\t);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\t[this.oldData, newData] = equilizeNoOfElements(this.oldData, newData);\n\n\t\t\tlet newPos = newData.map(d => d.position);\n\t\t\tlet newLabels = newData.map(d => d.label);\n\t\t\tlet newOptions = newData.map(d => d.options);\n\n\t\t\tlet oldPos = this.oldData.map(d => d.position);\n\n\t\t\tthis.render(oldPos.map((pos, i) => {\n\t\t\t\treturn {\n\t\t\t\t\tposition: oldPos[i],\n\t\t\t\t\tlabel: newLabels[i],\n\t\t\t\t\toptions: newOptions[i]\n\t\t\t\t};\n\t\t\t}));\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateHoriLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\tyRegions: {\n\t\tlayerClass: 'y-regions',\n\t\tmakeElements(data) {\n\t\t\treturn data.map(r =>\n\t\t\t\tyRegion(r.startPos, r.endPos, this.constants.width,\n\t\t\t\t\tr.label, {labelPos: r.options.labelPos})\n\t\t\t);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\t[this.oldData, newData] = equilizeNoOfElements(this.oldData, newData);\n\n\t\t\tlet newPos = newData.map(d => d.endPos);\n\t\t\tlet newLabels = newData.map(d => d.label);\n\t\t\tlet newStarts = newData.map(d => d.startPos);\n\t\t\tlet newOptions = newData.map(d => d.options);\n\n\t\t\tlet oldPos = this.oldData.map(d => d.endPos);\n\t\t\tlet oldStarts = this.oldData.map(d => d.startPos);\n\n\t\t\tthis.render(oldPos.map((pos, i) => {\n\t\t\t\treturn {\n\t\t\t\t\tstartPos: oldStarts[i],\n\t\t\t\t\tendPos: oldPos[i],\n\t\t\t\t\tlabel: newLabels[i],\n\t\t\t\t\toptions: newOptions[i]\n\t\t\t\t};\n\t\t\t}));\n\n\t\t\tlet animateElements = [];\n\n\t\t\tthis.store.map((rectGroup, i) => {\n\t\t\t\tanimateElements = animateElements.concat(animateRegion(\n\t\t\t\t\trectGroup, newStarts[i], newPos[i], oldPos[i]\n\t\t\t\t));\n\t\t\t});\n\n\t\t\treturn animateElements;\n\t\t}\n\t},\n\n\theatDomain: {\n\t\tlayerClass: function() { return 'heat-domain domain-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet {index, colWidth, rowHeight, squareSize, radius, xTranslate} = this.constants;\n\t\t\tlet monthNameHeight = -12;\n\t\t\tlet x = xTranslate, y = 0;\n\n\t\t\tthis.serializedSubDomains = [];\n\n\t\t\tdata.cols.map((week, weekNo) => {\n\t\t\t\tif(weekNo === 1) {\n\t\t\t\t\tthis.labels.push(\n\t\t\t\t\t\tmakeText('domain-name', x, monthNameHeight, getMonthName(index, true).toUpperCase(),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfontSize: 9\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}\n\t\t\t\tweek.map((day, i) => {\n\t\t\t\t\tif(day.fill) {\n\t\t\t\t\t\tlet data = {\n\t\t\t\t\t\t\t'data-date': day.yyyyMmDd,\n\t\t\t\t\t\t\t'data-value': day.dataValue,\n\t\t\t\t\t\t\t'data-day': i\n\t\t\t\t\t\t};\n\t\t\t\t\t\tlet square = heatSquare('day', x, y, squareSize, radius, day.fill, data);\n\t\t\t\t\t\tthis.serializedSubDomains.push(square);\n\t\t\t\t\t}\n\t\t\t\t\ty += rowHeight;\n\t\t\t\t});\n\t\t\t\ty = 0;\n\t\t\t\tx += colWidth;\n\t\t\t});\n\n\t\t\treturn this.serializedSubDomains;\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tif(newData) return [];\n\t\t}\n\t},\n\n\tbarGraph: {\n\t\tlayerClass: function() { return 'dataset-units dataset-bars dataset-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet c = this.constants;\n\t\t\tthis.unitType = 'bar';\n\t\t\tthis.units = data.yPositions.map((y, j) => {\n\t\t\t\treturn datasetBar(\n\t\t\t\t\tdata.xPositions[j],\n\t\t\t\t\ty,\n\t\t\t\t\tdata.barWidth,\n\t\t\t\t\tc.color,\n\t\t\t\t\tdata.labels[j],\n\t\t\t\t\tj,\n\t\t\t\t\tdata.offsets[j],\n\t\t\t\t\t{\n\t\t\t\t\t\tzeroLine: data.zeroLine,\n\t\t\t\t\t\tbarsWidth: data.barsWidth,\n\t\t\t\t\t\tminHeight: c.minHeight\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t\treturn this.units;\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\tlet newXPos = newData.xPositions;\n\t\t\tlet newYPos = newData.yPositions;\n\t\t\tlet newOffsets = newData.offsets;\n\t\t\tlet newLabels = newData.labels;\n\n\t\t\tlet oldXPos = this.oldData.xPositions;\n\t\t\tlet oldYPos = this.oldData.yPositions;\n\t\t\tlet oldOffsets = this.oldData.offsets;\n\t\t\tlet oldLabels = this.oldData.labels;\n\n\t\t\t[oldXPos, newXPos] = equilizeNoOfElements(oldXPos, newXPos);\n\t\t\t[oldYPos, newYPos] = equilizeNoOfElements(oldYPos, newYPos);\n\t\t\t[oldOffsets, newOffsets] = equilizeNoOfElements(oldOffsets, newOffsets);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\txPositions: oldXPos,\n\t\t\t\tyPositions: oldYPos,\n\t\t\t\toffsets: oldOffsets,\n\t\t\t\tlabels: newLabels,\n\n\t\t\t\tzeroLine: this.oldData.zeroLine,\n\t\t\t\tbarsWidth: this.oldData.barsWidth,\n\t\t\t\tbarWidth: this.oldData.barWidth,\n\t\t\t});\n\n\t\t\tlet animateElements = [];\n\n\t\t\tthis.store.map((bar, i) => {\n\t\t\t\tanimateElements = animateElements.concat(animateBar(\n\t\t\t\t\tbar, newXPos[i], newYPos[i], newData.barWidth, newOffsets[i],\n\t\t\t\t\t{zeroLine: newData.zeroLine}\n\t\t\t\t));\n\t\t\t});\n\n\t\t\treturn animateElements;\n\t\t}\n\t},\n\n\tlineGraph: {\n\t\tlayerClass: function() { return 'dataset-units dataset-line dataset-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet c = this.constants;\n\t\t\tthis.unitType = 'dot';\n\t\t\tthis.paths = {};\n\t\t\tif(!c.hideLine) {\n\t\t\t\tthis.paths = getPaths(\n\t\t\t\t\tdata.xPositions,\n\t\t\t\t\tdata.yPositions,\n\t\t\t\t\tc.color,\n\t\t\t\t\t{\n\t\t\t\t\t\theatline: c.heatline,\n\t\t\t\t\t\tregionFill: c.regionFill,\n\t\t\t\t\t\tspline: c.spline\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsvgDefs: c.svgDefs,\n\t\t\t\t\t\tzeroLine: data.zeroLine\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.units = [];\n\t\t\tif(!c.hideDots) {\n\t\t\t\tthis.units = data.yPositions.map((y, j) => {\n\t\t\t\t\treturn datasetDot(\n\t\t\t\t\t\tdata.xPositions[j],\n\t\t\t\t\t\ty,\n\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\tc.color,\n\t\t\t\t\t\t(c.valuesOverPoints ? data.values[j] : ''),\n\t\t\t\t\t\tj\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn Object.values(this.paths).concat(this.units);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\tlet newXPos = newData.xPositions;\n\t\t\tlet newYPos = newData.yPositions;\n\t\t\tlet newValues = newData.values;\n\n\t\t\tlet oldXPos = this.oldData.xPositions;\n\t\t\tlet oldYPos = this.oldData.yPositions;\n\t\t\tlet oldValues = this.oldData.values;\n\n\t\t\t[oldXPos, newXPos] = equilizeNoOfElements(oldXPos, newXPos);\n\t\t\t[oldYPos, newYPos] = equilizeNoOfElements(oldYPos, newYPos);\n\t\t\t[oldValues, newValues] = equilizeNoOfElements(oldValues, newValues);\n\n\t\t\tthis.render({\n\t\t\t\txPositions: oldXPos,\n\t\t\t\tyPositions: oldYPos,\n\t\t\t\tvalues: newValues,\n\n\t\t\t\tzeroLine: this.oldData.zeroLine,\n\t\t\t\tradius: this.oldData.radius,\n\t\t\t});\n\n\t\t\tlet animateElements = [];\n\n\t\t\tif(Object.keys(this.paths).length) {\n\t\t\t\tanimateElements = animateElements.concat(animatePath(\n\t\t\t\t\tthis.paths, newXPos, newYPos, newData.zeroLine, this.constants.spline));\n\t\t\t}\n\n\t\t\tif(this.units.length) {\n\t\t\t\tthis.units.map((dot, i) => {\n\t\t\t\t\tanimateElements = animateElements.concat(animateDot(\n\t\t\t\t\t\tdot, newXPos[i], newYPos[i]));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn animateElements;\n\t\t}\n\t}\n};\n\nexport function getComponent(name, constants, getData) {\n\tlet keys = Object.keys(componentConfigs).filter(k => name.includes(k));\n\tlet config = componentConfigs[keys[0]];\n\tObject.assign(config, {\n\t\tconstants: constants,\n\t\tgetData: getData\n\t});\n\treturn new ChartComponent(config);\n}\n","import { floatTwo } from './helpers';\n\nfunction normalize(x) {\n\t// Calculates mantissa and exponent of a number\n\t// Returns normalized number and exponent\n\t// https://stackoverflow.com/q/9383593/6495043\n\n\tif(x===0) {\n\t\treturn [0, 0];\n\t}\n\tif(isNaN(x)) {\n\t\treturn {mantissa: -6755399441055744, exponent: 972};\n\t}\n\tvar sig = x > 0 ? 1 : -1;\n\tif(!isFinite(x)) {\n\t\treturn {mantissa: sig * 4503599627370496, exponent: 972};\n\t}\n\n\tx = Math.abs(x);\n\tvar exp = Math.floor(Math.log10(x));\n\tvar man = x/Math.pow(10, exp);\n\n\treturn [sig * man, exp];\n}\n\nfunction getChartRangeIntervals(max, min=0) {\n\tlet upperBound = Math.ceil(max);\n\tlet lowerBound = Math.floor(min);\n\tlet range = upperBound - lowerBound;\n\n\tlet noOfParts = range;\n\tlet partSize = 1;\n\n\t// To avoid too many partitions\n\tif(range > 5) {\n\t\tif(range % 2 !== 0) {\n\t\t\tupperBound++;\n\t\t\t// Recalc range\n\t\t\trange = upperBound - lowerBound;\n\t\t}\n\t\tnoOfParts = range/2;\n\t\tpartSize = 2;\n\t}\n\n\t// Special case: 1 and 2\n\tif(range <= 2) {\n\t\tnoOfParts = 4;\n\t\tpartSize = range/noOfParts;\n\t}\n\n\t// Special case: 0\n\tif(range === 0) {\n\t\tnoOfParts = 5;\n\t\tpartSize = 1;\n\t}\n\n\tlet intervals = [];\n\tfor(var i = 0; i <= noOfParts; i++){\n\t\tintervals.push(lowerBound + partSize * i);\n\t}\n\treturn intervals;\n}\n\nfunction getChartIntervals(maxValue, minValue=0) {\n\tlet [normalMaxValue, exponent] = normalize(maxValue);\n\tlet normalMinValue = minValue ? minValue/Math.pow(10, exponent): 0;\n\n\t// Allow only 7 significant digits\n\tnormalMaxValue = normalMaxValue.toFixed(6);\n\n\tlet intervals = getChartRangeIntervals(normalMaxValue, normalMinValue);\n\tintervals = intervals.map(value => value * Math.pow(10, exponent));\n\treturn intervals;\n}\n\nexport function calcChartIntervals(values, withMinimum=false) {\n\t//*** Where the magic happens ***\n\n\t// Calculates best-fit y intervals from given values\n\t// and returns the interval array\n\n\tlet maxValue = Math.max(...values);\n\tlet minValue = Math.min(...values);\n\n\t// Exponent to be used for pretty print\n\tlet exponent = 0, intervals = []; // eslint-disable-line no-unused-vars\n\n\tfunction getPositiveFirstIntervals(maxValue, absMinValue) {\n\t\tlet intervals = getChartIntervals(maxValue);\n\n\t\tlet intervalSize = intervals[1] - intervals[0];\n\n\t\t// Then unshift the negative values\n\t\tlet value = 0;\n\t\tfor(var i = 1; value < absMinValue; i++) {\n\t\t\tvalue += intervalSize;\n\t\t\tintervals.unshift((-1) * value);\n\t\t}\n\t\treturn intervals;\n\t}\n\n\t// CASE I: Both non-negative\n\n\tif(maxValue >= 0 && minValue >= 0) {\n\t\texponent = normalize(maxValue)[1];\n\t\tif(!withMinimum) {\n\t\t\tintervals = getChartIntervals(maxValue);\n\t\t} else {\n\t\t\tintervals = getChartIntervals(maxValue, minValue);\n\t\t}\n\t}\n\n\t// CASE II: Only minValue negative\n\n\telse if(maxValue > 0 && minValue < 0) {\n\t\t// `withMinimum` irrelevant in this case,\n\t\t// We'll be handling both sides of zero separately\n\t\t// (both starting from zero)\n\t\t// Because ceil() and floor() behave differently\n\t\t// in those two regions\n\n\t\tlet absMinValue = Math.abs(minValue);\n\n\t\tif(maxValue >= absMinValue) {\n\t\t\texponent = normalize(maxValue)[1];\n\t\t\tintervals = getPositiveFirstIntervals(maxValue, absMinValue);\n\t\t} else {\n\t\t\t// Mirror: maxValue => absMinValue, then change sign\n\t\t\texponent = normalize(absMinValue)[1];\n\t\t\tlet posIntervals = getPositiveFirstIntervals(absMinValue, maxValue);\n\t\t\tintervals = posIntervals.reverse().map(d => d * (-1));\n\t\t}\n\n\t}\n\n\t// CASE III: Both non-positive\n\n\telse if(maxValue <= 0 && minValue <= 0) {\n\t\t// Mirrored Case I:\n\t\t// Work with positives, then reverse the sign and array\n\n\t\tlet pseudoMaxValue = Math.abs(minValue);\n\t\tlet pseudoMinValue = Math.abs(maxValue);\n\n\t\texponent = normalize(pseudoMaxValue)[1];\n\t\tif(!withMinimum) {\n\t\t\tintervals = getChartIntervals(pseudoMaxValue);\n\t\t} else {\n\t\t\tintervals = getChartIntervals(pseudoMaxValue, pseudoMinValue);\n\t\t}\n\n\t\tintervals = intervals.reverse().map(d => d * (-1));\n\t}\n\n\treturn intervals;\n}\n\nexport function getZeroIndex(yPts) {\n\tlet zeroIndex;\n\tlet interval = getIntervalSize(yPts);\n\tif(yPts.indexOf(0) >= 0) {\n\t\t// the range has a given zero\n\t\t// zero-line on the chart\n\t\tzeroIndex = yPts.indexOf(0);\n\t} else if(yPts[0] > 0) {\n\t\t// Minimum value is positive\n\t\t// zero-line is off the chart: below\n\t\tlet min = yPts[0];\n\t\tzeroIndex = (-1) * min / interval;\n\t} else {\n\t\t// Maximum value is negative\n\t\t// zero-line is off the chart: above\n\t\tlet max = yPts[yPts.length - 1];\n\t\tzeroIndex = (-1) * max / interval + (yPts.length - 1);\n\t}\n\treturn zeroIndex;\n}\n\nexport function getRealIntervals(max, noOfIntervals, min = 0, asc = 1) {\n\tlet range = max - min;\n\tlet part = range * 1.0 / noOfIntervals;\n\tlet intervals = [];\n\n\tfor(var i = 0; i <= noOfIntervals; i++) {\n\t\tintervals.push(min + part * i);\n\t}\n\n\treturn asc ? intervals : intervals.reverse();\n}\n\nexport function getIntervalSize(orderedArray) {\n\treturn orderedArray[1] - orderedArray[0];\n}\n\nexport function getValueRange(orderedArray) {\n\treturn orderedArray[orderedArray.length-1] - orderedArray[0];\n}\n\nexport function scale(val, yAxis) {\n\treturn floatTwo(yAxis.zeroLine - val * yAxis.scaleMultiplier);\n}\n\nexport function isInRange(val, min, max) {\n\treturn val > min && val < max;\n}\n\nexport function isInRange2D(coord, minCoord, maxCoord) {\n\treturn isInRange(coord[0], minCoord[0], maxCoord[0])\n\t\t&& isInRange(coord[1], minCoord[1], maxCoord[1]);\n}\n\nexport function getClosestInArray(goal, arr, index = false) {\n\tlet closest = arr.reduce(function(prev, curr) {\n\t\treturn (Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);\n\t}, []);\n\n\treturn index ? arr.indexOf(closest) : closest;\n}\n\nexport function calcDistribution(values, distributionSize) {\n\t// Assume non-negative values,\n\t// implying distribution minimum at zero\n\n\tlet dataMaxValue = Math.max(...values);\n\n\tlet distributionStep = 1 / (distributionSize - 1);\n\tlet distribution = [];\n\n\tfor(var i = 0; i < distributionSize; i++) {\n\t\tlet checkpoint = dataMaxValue * (distributionStep * i);\n\t\tdistribution.push(checkpoint);\n\t}\n\n\treturn distribution;\n}\n\nexport function getMaxCheckpoint(value, distribution) {\n\treturn distribution.filter(d => d < value).length;\n}\n","import { fillArray } from '../utils/helpers';\nimport { DEFAULT_AXIS_CHART_TYPE, AXIS_DATASET_CHART_TYPES, DEFAULT_CHAR_WIDTH } from '../utils/constants';\n\nexport function dataPrep(data, type) {\n\tdata.labels = data.labels || [];\n\n\tlet datasetLength = data.labels.length;\n\n\t// Datasets\n\tlet datasets = data.datasets;\n\tlet zeroArray = new Array(datasetLength).fill(0);\n\tif(!datasets) {\n\t\t// default\n\t\tdatasets = [{\n\t\t\tvalues: zeroArray\n\t\t}];\n\t}\n\n\tdatasets.map(d=> {\n\t\t// Set values\n\t\tif(!d.values) {\n\t\t\td.values = zeroArray;\n\t\t} else {\n\t\t\t// Check for non values\n\t\t\tlet vals = d.values;\n\t\t\tvals = vals.map(val => (!isNaN(val) ? val : 0));\n\n\t\t\t// Trim or extend\n\t\t\tif(vals.length > datasetLength) {\n\t\t\t\tvals = vals.slice(0, datasetLength);\n\t\t\t} else {\n\t\t\t\tvals = fillArray(vals, datasetLength - vals.length, 0);\n\t\t\t}\n\t\t\td.values = vals;\n\t\t}\n\n\t\t// Set type\n\t\tif(!d.chartType ) {\n\t\t\tif(!AXIS_DATASET_CHART_TYPES.includes(type)) type === DEFAULT_AXIS_CHART_TYPE;\n\t\t\td.chartType = type;\n\t\t}\n\n\t});\n\n\t// Markers\n\n\t// Regions\n\t// data.yRegions = data.yRegions || [];\n\tif(data.yRegions) {\n\t\tdata.yRegions.map(d => {\n\t\t\tif(d.end < d.start) {\n\t\t\t\t[d.start, d.end] = [d.end, d.start];\n\t\t\t}\n\t\t});\n\t}\n\n\treturn data;\n}\n\nexport function zeroDataPrep(realData) {\n\tlet datasetLength = realData.labels.length;\n\tlet zeroArray = new Array(datasetLength).fill(0);\n\n\tlet zeroData = {\n\t\tlabels: realData.labels.slice(0, -1),\n\t\tdatasets: realData.datasets.map(d => {\n\t\t\treturn {\n\t\t\t\tname: '',\n\t\t\t\tvalues: zeroArray.slice(0, -1),\n\t\t\t\tchartType: d.chartType\n\t\t\t};\n\t\t}),\n\t};\n\n\tif(realData.yMarkers) {\n\t\tzeroData.yMarkers = [\n\t\t\t{\n\t\t\t\tvalue: 0,\n\t\t\t\tlabel: ''\n\t\t\t}\n\t\t];\n\t}\n\n\tif(realData.yRegions) {\n\t\tzeroData.yRegions = [\n\t\t\t{\n\t\t\t\tstart: 0,\n\t\t\t\tend: 0,\n\t\t\t\tlabel: ''\n\t\t\t}\n\t\t];\n\t}\n\n\treturn zeroData;\n}\n\nexport function getShortenedLabels(chartWidth, labels=[], isSeries=true) {\n\tlet allowedSpace = chartWidth / labels.length;\n\tif(allowedSpace <= 0) allowedSpace = 1;\n\tlet allowedLetters = allowedSpace / DEFAULT_CHAR_WIDTH;\n\n\tlet seriesMultiple;\n\tif(isSeries) {\n\t\t// Find the maximum label length for spacing calculations\n\t\tlet maxLabelLength = Math.max(...labels.map(label => label.length));\n\t\tseriesMultiple = Math.ceil(maxLabelLength/allowedLetters);\n\t}\n\n\tlet calcLabels = labels.map((label, i) => {\n\t\tlabel += \"\";\n\t\tif(label.length > allowedLetters) {\n\n\t\t\tif(!isSeries) {\n\t\t\t\tif(allowedLetters-3 > 0) {\n\t\t\t\t\tlabel = label.slice(0, allowedLetters-3) + \" ...\";\n\t\t\t\t} else {\n\t\t\t\t\tlabel = label.slice(0, allowedLetters) + '..';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(i % seriesMultiple !== 0) {\n\t\t\t\t\tlabel = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn label;\n\t});\n\n\treturn calcLabels;\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { $ } from '../utils/dom';\nimport { TOOLTIP_POINTER_TRIANGLE_HEIGHT } from '../utils/constants';\n\nexport default class SvgTip {\n\tconstructor({\n\t\tparent = null,\n\t\tcolors = []\n\t}) {\n\t\tthis.parent = parent;\n\t\tthis.colors = colors;\n\t\tthis.titleName = '';\n\t\tthis.titleValue = '';\n\t\tthis.listValues = [];\n\t\tthis.titleValueFirst = 0;\n\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\n\t\tthis.top = 0;\n\t\tthis.left = 0;\n\n\t\tthis.setup();\n\t}\n\n\tsetup() {\n\t\tthis.makeTooltip();\n\t}\n\n\trefresh() {\n\t\tthis.fill();\n\t\tthis.calcPosition();\n\t}\n\n\tmakeTooltip() {\n\t\tthis.container = $.create('div', {\n\t\t\tinside: this.parent,\n\t\t\tclassName: 'graph-svg-tip comparison',\n\t\t\tinnerHTML: `\n\t\t\t\t
                \n\t\t\t\t
                `\n\t\t});\n\t\tthis.hideTip();\n\n\t\tthis.title = this.container.querySelector('.title');\n\t\tthis.dataPointList = this.container.querySelector('.data-point-list');\n\n\t\tthis.parent.addEventListener('mouseleave', () => {\n\t\t\tthis.hideTip();\n\t\t});\n\t}\n\n\tfill() {\n\t\tlet title;\n\t\tif(this.index) {\n\t\t\tthis.container.setAttribute('data-point-index', this.index);\n\t\t}\n\t\tif(this.titleValueFirst) {\n\t\t\ttitle = `${this.titleValue}${this.titleName}`;\n\t\t} else {\n\t\t\ttitle = `${this.titleName}${this.titleValue}`;\n\t\t}\n\t\tthis.title.innerHTML = title;\n\t\tthis.dataPointList.innerHTML = '';\n\n\t\tthis.listValues.map((set, i) => {\n\t\t\tconst color = this.colors[i] || 'black';\n\t\t\tlet value = set.formatted === 0 || set.formatted ? set.formatted : set.value;\n\n\t\t\tlet li = $.create('li', {\n\t\t\t\tstyles: {\n\t\t\t\t\t'border-top': `3px solid ${color}`\n\t\t\t\t},\n\t\t\t\tinnerHTML: `${ value === 0 || value ? value : '' }\n\t\t\t\t\t${set.title ? set.title : '' }`\n\t\t\t});\n\n\t\t\tthis.dataPointList.appendChild(li);\n\t\t});\n\t}\n\n\tcalcPosition() {\n\t\tlet width = this.container.offsetWidth;\n\n\t\tthis.top = this.y - this.container.offsetHeight\n\t\t\t- TOOLTIP_POINTER_TRIANGLE_HEIGHT;\n\t\tthis.left = this.x - width/2;\n\t\tlet maxLeft = this.parent.offsetWidth - width;\n\n\t\tlet pointer = this.container.querySelector('.svg-pointer');\n\n\t\tif(this.left < 0) {\n\t\t\tpointer.style.left = `calc(50% - ${-1 * this.left}px)`;\n\t\t\tthis.left = 0;\n\t\t} else if(this.left > maxLeft) {\n\t\t\tlet delta = this.left - maxLeft;\n\t\t\tlet pointerOffset = `calc(50% + ${delta}px)`;\n\t\t\tpointer.style.left = pointerOffset;\n\n\t\t\tthis.left = maxLeft;\n\t\t} else {\n\t\t\tpointer.style.left = `50%`;\n\t\t}\n\t}\n\n\tsetValues(x, y, title = {}, listValues = [], index = -1) {\n\t\tthis.titleName = title.name;\n\t\tthis.titleValue = title.value;\n\t\tthis.listValues = listValues;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.titleValueFirst = title.valueFirst || 0;\n\t\tthis.index = index;\n\t\tthis.refresh();\n\t}\n\n\thideTip() {\n\t\tthis.container.style.top = '0px';\n\t\tthis.container.style.left = '0px';\n\t\tthis.container.style.opacity = '0';\n\t}\n\n\tshowTip() {\n\t\tthis.container.style.top = this.top + 'px';\n\t\tthis.container.style.left = this.left + 'px';\n\t\tthis.container.style.opacity = '1';\n\t}\n}\n","export const CSSTEXT = \".chart-container{position:relative;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Roboto','Oxygen','Ubuntu','Cantarell','Fira Sans','Droid Sans','Helvetica Neue',sans-serif}.chart-container .axis,.chart-container .chart-label{fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .dataset-units circle{stroke:#fff;stroke-width:2}.chart-container .dataset-units path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container .dataset-path{stroke-width:2px}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .axis-line .specific-value{text-anchor:start}.chart-container .axis-line .y-line{text-anchor:end}.chart-container .axis-line .x-line{text-anchor:middle}.chart-container .legend-dataset-text{fill:#6c7680;font-weight:600}.graph-svg-tip{position:absolute;z-index:99999;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.graph-svg-tip ul{padding-left:0;display:flex}.graph-svg-tip ol{padding-left:0;display:flex}.graph-svg-tip ul.data-point-list li{min-width:90px;flex:1;font-weight:600}.graph-svg-tip strong{color:#dfe2e5;font-weight:600}.graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:' ';border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}\";","import SvgTip from '../objects/SvgTip';\nimport { $, isElementInViewport, getElementContentWidth, isHidden } from '../utils/dom';\nimport { makeSVGContainer, makeSVGDefs, makeSVGGroup, makeText } from '../utils/draw';\nimport { BASE_MEASURES, getExtraHeight, getExtraWidth, getTopOffset, getLeftOffset,\n\tINIT_CHART_UPDATE_TIMEOUT, CHART_POST_ANIMATE_TIMEOUT, DEFAULT_COLORS} from '../utils/constants';\nimport { getColor, isValidColor } from '../utils/colors';\nimport { runSMILAnimation } from '../utils/animation';\nimport { downloadFile, prepareForExport } from '../utils/export';\nimport { deepClone } from '../utils/helpers';\n\nexport default class BaseChart {\n\tconstructor(parent, options) {\n\t\t// deepclone options to avoid making changes to orignal object\n\t\toptions = deepClone(options);\n\n\t\tthis.parent = typeof parent === 'string'\n\t\t\t? document.querySelector(parent)\n\t\t\t: parent;\n\n\t\tif (!(this.parent instanceof HTMLElement)) {\n\t\t\tthrow new Error('No `parent` element to render on was provided.');\n\t\t}\n\n\t\tthis.rawChartArgs = options;\n\n\t\tthis.title = options.title || '';\n\t\tthis.type = options.type || '';\n\n\t\tthis.realData = this.prepareData(options.data);\n\t\tthis.data = this.prepareFirstData(this.realData);\n\n\t\tthis.colors = this.validateColors(options.colors, this.type);\n\n\t\tthis.config = {\n\t\t\tshowTooltip: 1, // calculate\n\t\t\tshowLegend: 1, // calculate\n\t\t\tisNavigable: options.isNavigable || 0,\n\t\t\tanimate: (typeof options.animate !== 'undefined') ? options.animate : 1,\n\t\t\ttruncateLegends: options.truncateLegends || 1\n\t\t};\n\n\t\tthis.measures = JSON.parse(JSON.stringify(BASE_MEASURES));\n\t\tlet m = this.measures;\n\t\tthis.setMeasures(options);\n\t\tif(!this.title.length) { m.titleHeight = 0; }\n\t\tif(!this.config.showLegend) m.legendHeight = 0;\n\t\tthis.argHeight = options.height || m.baseHeight;\n\n\t\tthis.state = {};\n\t\tthis.options = {};\n\n\t\tthis.initTimeout = INIT_CHART_UPDATE_TIMEOUT;\n\n\t\tif(this.config.isNavigable) {\n\t\t\tthis.overlays = [];\n\t\t}\n\n\t\tthis.configure(options);\n\t}\n\n\tprepareData(data) {\n\t\treturn data;\n\t}\n\n\tprepareFirstData(data) {\n\t\treturn data;\n\t}\n\n\tvalidateColors(colors, type) {\n\t\tconst validColors = [];\n\t\tcolors = (colors || []).concat(DEFAULT_COLORS[type]);\n\t\tcolors.forEach((string) => {\n\t\t\tconst color = getColor(string);\n\t\t\tif(!isValidColor(color)) {\n\t\t\t\tconsole.warn('\"' + string + '\" is not a valid color.');\n\t\t\t} else {\n\t\t\t\tvalidColors.push(color);\n\t\t\t}\n\t\t});\n\t\treturn validColors;\n\t}\n\n\tsetMeasures() {\n\t\t// Override measures, including those for title and legend\n\t\t// set config for legend and title\n\t}\n\n\tconfigure() {\n\t\tlet height = this.argHeight;\n\t\tthis.baseHeight = height;\n\t\tthis.height = height - getExtraHeight(this.measures);\n\n\t\t// Bind window events\n\t\tthis.boundDrawFn = () => this.draw(true);\n\t\tif (ResizeObserver) {\n\t\t\tthis.resizeObserver = new ResizeObserver(this.boundDrawFn);\n\t\t\tthis.resizeObserver.observe(this.parent);\n\t\t}\n\t\twindow.addEventListener('resize', this.boundDrawFn);\n\t\twindow.addEventListener('orientationchange', this.boundDrawFn);\n\t}\n\n\tdestroy() {\n\t\tif (this.resizeObserver) this.resizeObserver.disconnect();\n\t\twindow.removeEventListener('resize', this.boundDrawFn);\n\t\twindow.removeEventListener('orientationchange', this.boundDrawFn);\n\t}\n\n\t// Has to be called manually\n\tsetup() {\n\t\tthis.makeContainer();\n\t\tthis.updateWidth();\n\t\tthis.makeTooltip();\n\n\t\tthis.draw(false, true);\n\t}\n\n\tmakeContainer() {\n\t\t// Chart needs a dedicated parent element\n\t\tthis.parent.innerHTML = '';\n\n\t\tlet args = {\n\t\t\tinside: this.parent,\n\t\t\tclassName: 'chart-container'\n\t\t};\n\n\t\tif(this.independentWidth) {\n\t\t\targs.styles = { width: this.independentWidth + 'px' };\n\t\t}\n\n\t\tthis.container = $.create('div', args);\n\t}\n\n\tmakeTooltip() {\n\t\tthis.tip = new SvgTip({\n\t\t\tparent: this.container,\n\t\t\tcolors: this.colors\n\t\t});\n\t\tthis.bindTooltip();\n\t}\n\n\tbindTooltip() {}\n\n\tdraw(onlyWidthChange=false, init=false) {\n\t\tif (onlyWidthChange && isHidden(this.parent)) {\n\t\t\t// Don't update anything if the chart is hidden\n\t\t\treturn;\n\t\t}\n\t\tthis.updateWidth();\n\n\t\tthis.calc(onlyWidthChange);\n\t\tthis.makeChartArea();\n\t\tthis.setupComponents();\n\n\t\tthis.components.forEach(c => c.setup(this.drawArea));\n\t\t// this.components.forEach(c => c.make());\n\t\tthis.render(this.components, false);\n\n\t\tif(init) {\n\t\t\tthis.data = this.realData;\n\t\t\tsetTimeout(() => {this.update(this.data);}, this.initTimeout);\n\t\t}\n\n\t\tthis.renderLegend();\n\n\t\tthis.setupNavigation(init);\n\t}\n\n\tcalc() {} // builds state\n\n\tupdateWidth() {\n\t\tthis.baseWidth = getElementContentWidth(this.parent);\n\t\tthis.width = this.baseWidth - getExtraWidth(this.measures);\n\t}\n\n\tmakeChartArea() {\n\t\tif(this.svg) {\n\t\t\tthis.container.removeChild(this.svg);\n\t\t}\n\t\tlet m = this.measures;\n\n\t\tthis.svg = makeSVGContainer(\n\t\t\tthis.container,\n\t\t\t'frappe-chart chart',\n\t\t\tthis.baseWidth,\n\t\t\tthis.baseHeight\n\t\t);\n\t\tthis.svgDefs = makeSVGDefs(this.svg);\n\n\t\tif(this.title.length) {\n\t\t\tthis.titleEL = makeText(\n\t\t\t\t'title',\n\t\t\t\tm.margins.left,\n\t\t\t\tm.margins.top,\n\t\t\t\tthis.title,\n\t\t\t\t{\n\t\t\t\t\tfontSize: m.titleFontSize,\n\t\t\t\t\tfill: '#666666',\n\t\t\t\t\tdy: m.titleFontSize\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tlet top = getTopOffset(m);\n\t\tthis.drawArea = makeSVGGroup(\n\t\t\tthis.type + '-chart chart-draw-area',\n\t\t\t`translate(${getLeftOffset(m)}, ${top})`\n\t\t);\n\n\t\tif(this.config.showLegend) {\n\t\t\ttop += this.height + m.paddings.bottom;\n\t\t\tthis.legendArea = makeSVGGroup(\n\t\t\t\t'chart-legend',\n\t\t\t\t`translate(${getLeftOffset(m)}, ${top})`\n\t\t\t);\n\t\t}\n\n\t\tif(this.title.length) { this.svg.appendChild(this.titleEL); }\n\t\tthis.svg.appendChild(this.drawArea);\n\t\tif(this.config.showLegend) { this.svg.appendChild(this.legendArea); }\n\n\t\tthis.updateTipOffset(getLeftOffset(m), getTopOffset(m));\n\t}\n\n\tupdateTipOffset(x, y) {\n\t\tthis.tip.offset = {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t}\n\n\tsetupComponents() { this.components = new Map(); }\n\n\tupdate(data) {\n\t\tif(!data) {\n\t\t\tconsole.error('No data to update.');\n\t\t}\n\t\tthis.data = this.prepareData(data);\n\t\tthis.calc(); // builds state\n\t\tthis.render(this.components, this.config.animate);\n\t\tthis.renderLegend();\n\t}\n\n\trender(components=this.components, animate=true) {\n\t\tif(this.config.isNavigable) {\n\t\t\t// Remove all existing overlays\n\t\t\tthis.overlays.map(o => o.parentNode.removeChild(o));\n\t\t\t// ref.parentNode.insertBefore(element, ref);\n\t\t}\n\t\tlet elementsToAnimate = [];\n\t\t// Can decouple to this.refreshComponents() first to save animation timeout\n\t\tcomponents.forEach(c => {\n\t\t\telementsToAnimate = elementsToAnimate.concat(c.update(animate));\n\t\t});\n\t\tif(elementsToAnimate.length > 0) {\n\t\t\trunSMILAnimation(this.container, this.svg, elementsToAnimate);\n\t\t\tsetTimeout(() => {\n\t\t\t\tcomponents.forEach(c => c.make());\n\t\t\t\tthis.updateNav();\n\t\t\t}, CHART_POST_ANIMATE_TIMEOUT);\n\t\t} else {\n\t\t\tcomponents.forEach(c => c.make());\n\t\t\tthis.updateNav();\n\t\t}\n\t}\n\n\tupdateNav() {\n\t\tif(this.config.isNavigable) {\n\t\t\tthis.makeOverlay();\n\t\t\tthis.bindUnits();\n\t\t}\n\t}\n\n\trenderLegend() {}\n\n\tsetupNavigation(init=false) {\n\t\tif(!this.config.isNavigable) return;\n\n\t\tif(init) {\n\t\t\tthis.bindOverlay();\n\n\t\t\tthis.keyActions = {\n\t\t\t\t'13': this.onEnterKey.bind(this),\n\t\t\t\t'37': this.onLeftArrow.bind(this),\n\t\t\t\t'38': this.onUpArrow.bind(this),\n\t\t\t\t'39': this.onRightArrow.bind(this),\n\t\t\t\t'40': this.onDownArrow.bind(this),\n\t\t\t};\n\n\t\t\tdocument.addEventListener('keydown', (e) => {\n\t\t\t\tif(isElementInViewport(this.container)) {\n\t\t\t\t\te = e || window.event;\n\t\t\t\t\tif(this.keyActions[e.keyCode]) {\n\t\t\t\t\t\tthis.keyActions[e.keyCode]();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tmakeOverlay() {}\n\tupdateOverlay() {}\n\tbindOverlay() {}\n\tbindUnits() {}\n\n\tonLeftArrow() {}\n\tonRightArrow() {}\n\tonUpArrow() {}\n\tonDownArrow() {}\n\tonEnterKey() {}\n\n\taddDataPoint() {}\n\tremoveDataPoint() {}\n\n\tgetDataPoint() {}\n\tsetCurrentDataPoint() {}\n\n\tupdateDataset() {}\n\n\texport() {\n\t\tlet chartSvg = prepareForExport(this.svg);\n\t\tdownloadFile(this.title || 'Chart', [chartSvg]);\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { truncateString } from '../utils/draw-utils';\nimport { legendDot } from '../utils/draw';\nimport { round } from '../utils/helpers';\nimport { getExtraWidth } from '../utils/constants';\n\nexport default class AggregationChart extends BaseChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\n\t\tthis.config.formatTooltipY = (args.tooltipOptions || {}).formatTooltipY;\n\t\tthis.config.maxSlices = args.maxSlices || 20;\n\t\tthis.config.maxLegendPoints = args.maxLegendPoints || 20;\n\t}\n\n\tcalc() {\n\t\tlet s = this.state;\n\t\tlet maxSlices = this.config.maxSlices;\n\t\ts.sliceTotals = [];\n\n\t\tlet allTotals = this.data.labels.map((label, i) => {\n\t\t\tlet total = 0;\n\t\t\tthis.data.datasets.map(e => {\n\t\t\t\ttotal += e.values[i];\n\t\t\t});\n\t\t\treturn [total, label];\n\t\t}).filter(d => { return d[0] >= 0; }); // keep only positive results\n\n\t\tlet totals = allTotals;\n\t\tif(allTotals.length > maxSlices) {\n\t\t\t// Prune and keep a grey area for rest as per maxSlices\n\t\t\tallTotals.sort((a, b) => { return b[0] - a[0]; });\n\n\t\t\ttotals = allTotals.slice(0, maxSlices-1);\n\t\t\tlet remaining = allTotals.slice(maxSlices-1);\n\n\t\t\tlet sumOfRemaining = 0;\n\t\t\tremaining.map(d => {sumOfRemaining += d[0];});\n\t\t\ttotals.push([sumOfRemaining, 'Rest']);\n\t\t\tthis.colors[maxSlices-1] = 'grey';\n\t\t}\n\n\t\ts.labels = [];\n\t\ttotals.map(d => {\n\t\t\ts.sliceTotals.push(round(d[0]));\n\t\t\ts.labels.push(d[1]);\n\t\t});\n\n\t\ts.grandTotal = s.sliceTotals.reduce((a, b) => a + b, 0);\n\n\t\tthis.center = {\n\t\t\tx: this.width / 2,\n\t\t\ty: this.height / 2\n\t\t};\n\t}\n\n\trenderLegend() {\n\t\tlet s = this.state;\n\t\tthis.legendArea.textContent = '';\n\t\tthis.legendTotals = s.sliceTotals.slice(0, this.config.maxLegendPoints);\n\n\t\tlet count = 0;\n\t\tlet y = 0;\n\t\tthis.legendTotals.map((d, i) => {\n\t\t\tlet barWidth = 150;\n\t\t\tlet divisor = Math.floor(\n\t\t\t\t(this.width - getExtraWidth(this.measures))/barWidth\n\t\t\t);\n\t\t\tif (this.legendTotals.length < divisor) {\n\t\t\t\tbarWidth = this.width/this.legendTotals.length;\n\t\t\t}\n\t\t\tif(count > divisor) {\n\t\t\t\tcount = 0;\n\t\t\t\ty += 20;\n\t\t\t}\n\t\t\tlet x = barWidth * count + 5;\n\t\t\tlet label = this.config.truncateLegends ? truncateString(s.labels[i], barWidth/10) : s.labels[i];\n\t\t\tlet formatted = this.config.formatTooltipY ? this.config.formatTooltipY(d) : d;\n\t\t\tlet dot = legendDot(\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\t5,\n\t\t\t\tthis.colors[i],\n\t\t\t\t`${label}: ${formatted}`,\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tthis.legendArea.appendChild(dot);\n\t\t\tcount++;\n\t\t});\n\t}\n}\n","import AggregationChart from './AggregationChart';\nimport { getOffset } from '../utils/dom';\nimport { getComponent } from '../objects/ChartComponents';\nimport { PERCENTAGE_BAR_DEFAULT_HEIGHT, PERCENTAGE_BAR_DEFAULT_DEPTH } from '../utils/constants';\n\nexport default class PercentageChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'percentage';\n\t\tthis.setup();\n\t}\n\n\tsetMeasures(options) {\n\t\tlet m = this.measures;\n\t\tthis.barOptions = options.barOptions || {};\n\n\t\tlet b = this.barOptions;\n\t\tb.height = b.height || PERCENTAGE_BAR_DEFAULT_HEIGHT;\n\t\tb.depth = b.depth || PERCENTAGE_BAR_DEFAULT_DEPTH;\n\n\t\tm.paddings.right = 30;\n\t\tm.legendHeight = 60;\n\t\tm.baseHeight = (b.height + b.depth * 0.5) * 8;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'percentageBars',\n\t\t\t\t{\n\t\t\t\t\tbarHeight: this.barOptions.height,\n\t\t\t\t\tbarDepth: this.barOptions.depth,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: s.xPositions,\n\t\t\t\t\t\twidths: s.widths,\n\t\t\t\t\t\tcolors: this.colors\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\n\t\ts.xPositions = [];\n\t\ts.widths = [];\n\n\t\tlet xPos = 0;\n\t\ts.sliceTotals.map((value) => {\n\t\t\tlet width = this.width * value / s.grandTotal;\n\t\t\ts.widths.push(width);\n\t\t\ts.xPositions.push(xPos);\n\t\t\txPos += width;\n\t\t});\n\t}\n\n\tmakeDataByIndex() { }\n\n\tbindTooltip() {\n\t\tlet s = this.state;\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tlet bars = this.components.get('percentageBars').store;\n\t\t\tlet bar = e.target;\n\t\t\tif(bars.includes(bar)) {\n\n\t\t\t\tlet i = bars.indexOf(bar);\n\t\t\t\tlet gOff = getOffset(this.container), pOff = getOffset(bar);\n\n\t\t\t\tlet x = pOff.left - gOff.left + parseInt(bar.getAttribute('width'))/2;\n\t\t\t\tlet y = pOff.top - gOff.top;\n\t\t\t\tlet title = (this.formattedLabels && this.formattedLabels.length>0\n\t\t\t\t\t? this.formattedLabels[i] : this.state.labels[i]) + ': ';\n\t\t\t\tlet fraction = s.sliceTotals[i]/s.grandTotal;\n\n\t\t\t\tthis.tip.setValues(x, y, {name: title, value: (fraction*100).toFixed(1) + \"%\"});\n\t\t\t\tthis.tip.showTip();\n\t\t\t}\n\t\t});\n\t}\n}\n","import AggregationChart from './AggregationChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset } from '../utils/dom';\nimport { getPositionByAngle } from '../utils/helpers';\nimport { makeArcPathStr, makeCircleStr } from '../utils/draw';\nimport { lightenDarkenColor } from '../utils/colors';\nimport { transform } from '../utils/animation';\nimport { FULL_ANGLE } from '../utils/constants';\n\nexport default class PieChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'pie';\n\t\tthis.initTimeout = 0;\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\t\tthis.mouseMove = this.mouseMove.bind(this);\n\t\tthis.mouseLeave = this.mouseLeave.bind(this);\n\n\t\tthis.hoverRadio = args.hoverRadio || 0.1;\n\t\tthis.config.startAngle = args.startAngle || 0;\n\n\t\tthis.clockWise = args.clockWise || false;\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\t\tthis.radius = (this.height > this.width ? this.center.x : this.center.y);\n\n\t\tconst { radius, clockWise } = this;\n\n\t\tconst prevSlicesProperties = s.slicesProperties || [];\n\t\ts.sliceStrings = [];\n\t\ts.slicesProperties = [];\n\t\tlet curAngle = 180 - this.config.startAngle;\n\t\ts.sliceTotals.map((total, i) => {\n\t\t\tconst startAngle = curAngle;\n\t\t\tconst originDiffAngle = (total / s.grandTotal) * FULL_ANGLE;\n\t\t\tconst largeArc = originDiffAngle > 180 ? 1: 0;\n\t\t\tconst diffAngle = clockWise ? -originDiffAngle : originDiffAngle;\n\t\t\tconst endAngle = curAngle = curAngle + diffAngle;\n\t\t\tconst startPosition = getPositionByAngle(startAngle, radius);\n\t\t\tconst endPosition = getPositionByAngle(endAngle, radius);\n\n\t\t\tconst prevProperty = this.init && prevSlicesProperties[i];\n\n\t\t\tlet curStart,curEnd;\n\t\t\tif(this.init) {\n\t\t\t\tcurStart = prevProperty ? prevProperty.startPosition : startPosition;\n\t\t\t\tcurEnd = prevProperty ? prevProperty.endPosition : startPosition;\n\t\t\t} else {\n\t\t\t\tcurStart = startPosition;\n\t\t\t\tcurEnd = endPosition;\n\t\t\t}\n\t\t\tconst curPath =\n\t\t\t\toriginDiffAngle === 360\n\t\t\t\t\t? makeCircleStr(curStart, curEnd, this.center, this.radius, clockWise, largeArc)\n\t\t\t\t\t: makeArcPathStr(curStart, curEnd, this.center, this.radius, clockWise, largeArc);\n\n\t\t\ts.sliceStrings.push(curPath);\n\t\t\ts.slicesProperties.push({\n\t\t\t\tstartPosition,\n\t\t\t\tendPosition,\n\t\t\t\tvalue: total,\n\t\t\t\ttotal: s.grandTotal,\n\t\t\t\tstartAngle,\n\t\t\t\tendAngle,\n\t\t\t\tangle: diffAngle\n\t\t\t});\n\n\t\t});\n\t\tthis.init = 0;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'pieSlices',\n\t\t\t\t{ },\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsliceStrings: s.sliceStrings,\n\t\t\t\t\t\tcolors: this.colors\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalTranslateByAngle(property){\n\t\tconst{radius,hoverRadio} = this;\n\t\tconst position = getPositionByAngle(property.startAngle+(property.angle / 2),radius);\n\t\treturn `translate3d(${(position.x) * hoverRadio}px,${(position.y) * hoverRadio}px,0)`;\n\t}\n\n\thoverSlice(path,i,flag,e){\n\t\tif(!path) return;\n\t\tconst color = this.colors[i];\n\t\tif(flag) {\n\t\t\ttransform(path, this.calTranslateByAngle(this.state.slicesProperties[i]));\n\t\t\tpath.style.fill = lightenDarkenColor(color, 50);\n\t\t\tlet g_off = getOffset(this.svg);\n\t\t\tlet x = e.pageX - g_off.left + 10;\n\t\t\tlet y = e.pageY - g_off.top - 10;\n\t\t\tlet title = (this.formatted_labels && this.formatted_labels.length > 0\n\t\t\t\t? this.formatted_labels[i] : this.state.labels[i]) + ': ';\n\t\t\tlet percent = (this.state.sliceTotals[i] * 100 / this.state.grandTotal).toFixed(1);\n\t\t\tthis.tip.setValues(x, y, {name: title, value: percent + \"%\"});\n\t\t\tthis.tip.showTip();\n\t\t} else {\n\t\t\ttransform(path,'translate3d(0,0,0)');\n\t\t\tthis.tip.hideTip();\n\t\t\tpath.style.fill = color;\n\t\t}\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', this.mouseMove);\n\t\tthis.container.addEventListener('mouseleave', this.mouseLeave);\n\t}\n\n\tmouseMove(e){\n\t\tconst target = e.target;\n\t\tlet slices = this.components.get('pieSlices').store;\n\t\tlet prevIndex = this.curActiveSliceIndex;\n\t\tlet prevAcitve = this.curActiveSlice;\n\t\tif(slices.includes(target)) {\n\t\t\tlet i = slices.indexOf(target);\n\t\t\tthis.hoverSlice(prevAcitve, prevIndex,false);\n\t\t\tthis.curActiveSlice = target;\n\t\t\tthis.curActiveSliceIndex = i;\n\t\t\tthis.hoverSlice(target, i, true, e);\n\t\t} else {\n\t\t\tthis.mouseLeave();\n\t\t}\n\t}\n\n\tmouseLeave(){\n\t\tthis.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,false);\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { makeText, heatSquare } from '../utils/draw';\nimport { DAY_NAMES_SHORT, addDays, areInSameMonth, getLastDateInMonth, setDayToSunday, getYyyyMmDd, getWeeksBetween, getMonthName, clone,\n\tNO_OF_MILLIS, NO_OF_YEAR_MONTHS, NO_OF_DAYS_IN_WEEK } from '../utils/date-utils';\nimport { calcDistribution, getMaxCheckpoint } from '../utils/intervals';\nimport { getExtraHeight, getExtraWidth, HEATMAP_DISTRIBUTION_SIZE, HEATMAP_SQUARE_SIZE,\n\tHEATMAP_GUTTER_SIZE } from '../utils/constants';\n\nconst COL_WIDTH = HEATMAP_SQUARE_SIZE + HEATMAP_GUTTER_SIZE;\nconst ROW_HEIGHT = COL_WIDTH;\n// const DAY_INCR = 1;\n\nexport default class Heatmap extends BaseChart {\n\tconstructor(parent, options) {\n\t\tsuper(parent, options);\n\t\tthis.type = 'heatmap';\n\n\t\tthis.countLabel = options.countLabel || '';\n\n\t\tlet validStarts = ['Sunday', 'Monday'];\n\t\tlet startSubDomain = validStarts.includes(options.startSubDomain)\n\t\t\t? options.startSubDomain : 'Sunday';\n\t\tthis.startSubDomainIndex = validStarts.indexOf(startSubDomain);\n\n\t\tthis.setup();\n\t}\n\n\tsetMeasures(options) {\n\t\tlet m = this.measures;\n\t\tthis.discreteDomains = options.discreteDomains === 0 ? 0 : 1;\n\n\t\tm.paddings.top = ROW_HEIGHT * 3;\n\t\tm.paddings.bottom = 0;\n\t\tm.legendHeight = ROW_HEIGHT * 2;\n\t\tm.baseHeight = ROW_HEIGHT * NO_OF_DAYS_IN_WEEK\n\t\t\t+ getExtraHeight(m);\n\n\t\tlet d = this.data;\n\t\tlet spacing = this.discreteDomains ? NO_OF_YEAR_MONTHS : 0;\n\t\tthis.independentWidth = (getWeeksBetween(d.start, d.end)\n\t\t\t+ spacing) * COL_WIDTH + getExtraWidth(m);\n\t}\n\n\tupdateWidth() {\n\t\tlet spacing = this.discreteDomains ? NO_OF_YEAR_MONTHS : 0;\n\t\tlet noOfWeeks = this.state.noOfWeeks ? this.state.noOfWeeks : 52;\n\t\tthis.baseWidth = (noOfWeeks + spacing) * COL_WIDTH\n\t\t\t+ getExtraWidth(this.measures);\n\t}\n\n\tprepareData(data=this.data) {\n\t\tif(data.start && data.end && data.start > data.end) {\n\t\t\tthrow new Error('Start date cannot be greater than end date.');\n\t\t}\n\n\t\tif(!data.start) {\n\t\t\tdata.start = new Date();\n\t\t\tdata.start.setFullYear( data.start.getFullYear() - 1 );\n\t\t}\n\t\tif(!data.end) { data.end = new Date(); }\n\t\tdata.dataPoints = data.dataPoints || {};\n\n\t\tif(parseInt(Object.keys(data.dataPoints)[0]) > 100000) {\n\t\t\tlet points = {};\n\t\t\tObject.keys(data.dataPoints).forEach(timestampSec => {\n\t\t\t\tlet date = new Date(timestampSec * NO_OF_MILLIS);\n\t\t\t\tpoints[getYyyyMmDd(date)] = data.dataPoints[timestampSec];\n\t\t\t});\n\t\t\tdata.dataPoints = points;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tcalc() {\n\t\tlet s = this.state;\n\n\t\ts.start = clone(this.data.start);\n\t\ts.end = clone(this.data.end);\n\n\t\ts.firstWeekStart = clone(s.start);\n\t\ts.noOfWeeks = getWeeksBetween(s.start, s.end);\n\t\ts.distribution = calcDistribution(\n\t\t\tObject.values(this.data.dataPoints), HEATMAP_DISTRIBUTION_SIZE);\n\n\t\ts.domainConfigs = this.getDomains();\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\t\tlet lessCol = this.discreteDomains ? 0 : 1;\n\n\t\tlet componentConfigs = s.domainConfigs.map((config, i) => [\n\t\t\t'heatDomain',\n\t\t\t{\n\t\t\t\tindex: config.index,\n\t\t\t\tcolWidth: COL_WIDTH,\n\t\t\t\trowHeight: ROW_HEIGHT,\n\t\t\t\tsquareSize: HEATMAP_SQUARE_SIZE,\n\t\t\t\tradius: this.rawChartArgs.radius || 0,\n\t\t\t\txTranslate: s.domainConfigs\n\t\t\t\t\t.filter((config, j) => j < i)\n\t\t\t\t\t.map(config => config.cols.length - lessCol)\n\t\t\t\t\t.reduce((a, b) => a + b, 0)\n\t\t\t\t\t* COL_WIDTH\n\t\t\t},\n\t\t\tfunction() {\n\t\t\t\treturn s.domainConfigs[i];\n\t\t\t}.bind(this)\n\n\t\t]);\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map((args, i) => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0] + '-' + i, component];\n\t\t\t})\n\t\t);\n\n\t\tlet y = 0;\n\t\tDAY_NAMES_SHORT.forEach((dayName, i) => {\n\t\t\tif([1, 3, 5].includes(i)) {\n\t\t\t\tlet dayText = makeText('subdomain-name', -COL_WIDTH/2, y, dayName,\n\t\t\t\t\t{\n\t\t\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE,\n\t\t\t\t\t\tdy: 8,\n\t\t\t\t\t\ttextAnchor: 'end'\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tthis.drawArea.appendChild(dayText);\n\t\t\t}\n\t\t\ty += ROW_HEIGHT;\n\t\t});\n\t}\n\n\tupdate(data) {\n\t\tif(!data) {\n\t\t\tconsole.error('No data to update.');\n\t\t}\n\n\t\tthis.data = this.prepareData(data);\n\t\tthis.draw();\n\t\tthis.bindTooltip();\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tthis.components.forEach(comp => {\n\t\t\t\tlet daySquares = comp.store;\n\t\t\t\tlet daySquare = e.target;\n\t\t\t\tif(daySquares.includes(daySquare)) {\n\n\t\t\t\t\tlet count = daySquare.getAttribute('data-value');\n\t\t\t\t\tlet dateParts = daySquare.getAttribute('data-date').split('-');\n\n\t\t\t\t\tlet month = getMonthName(parseInt(dateParts[1])-1, true);\n\n\t\t\t\t\tlet gOff = this.container.getBoundingClientRect(), pOff = daySquare.getBoundingClientRect();\n\n\t\t\t\t\tlet width = parseInt(e.target.getAttribute('width'));\n\t\t\t\t\tlet x = pOff.left - gOff.left + width/2;\n\t\t\t\t\tlet y = pOff.top - gOff.top;\n\t\t\t\t\tlet value = count + ' ' + this.countLabel;\n\t\t\t\t\tlet name = ' on ' + month + ' ' + dateParts[0] + ', ' + dateParts[2];\n\n\t\t\t\t\tthis.tip.setValues(x, y, {name: name, value: value, valueFirst: 1}, []);\n\t\t\t\t\tthis.tip.showTip();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\trenderLegend() {\n\t\tthis.legendArea.textContent = '';\n\t\tlet x = 0;\n\t\tlet y = ROW_HEIGHT;\n\t\tlet radius = this.rawChartArgs.radius || 0;\n\n\t\tlet lessText = makeText('subdomain-name', x, y, 'Less',\n\t\t\t{\n\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE + 1,\n\t\t\t\tdy: 9\n\t\t\t}\n\t\t);\n\t\tx = (COL_WIDTH * 2) + COL_WIDTH/2;\n\t\tthis.legendArea.appendChild(lessText);\n\n\t\tthis.colors.slice(0, HEATMAP_DISTRIBUTION_SIZE).map((color, i) => {\n\t\t\tconst square = heatSquare('heatmap-legend-unit', x + (COL_WIDTH + 3) * i,\n\t\t\t\ty, HEATMAP_SQUARE_SIZE, radius, color);\n\t\t\tthis.legendArea.appendChild(square);\n\t\t});\n\n\t\tlet moreTextX = x + HEATMAP_DISTRIBUTION_SIZE * (COL_WIDTH + 3) + COL_WIDTH/4;\n\t\tlet moreText = makeText('subdomain-name', moreTextX, y, 'More',\n\t\t\t{\n\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE + 1,\n\t\t\t\tdy: 9\n\t\t\t}\n\t\t);\n\t\tthis.legendArea.appendChild(moreText);\n\t}\n\n\tgetDomains() {\n\t\tlet s = this.state;\n\t\tconst [startMonth, startYear] = [s.start.getMonth(), s.start.getFullYear()];\n\t\tconst [endMonth, endYear] = [s.end.getMonth(), s.end.getFullYear()];\n\n\t\tconst noOfMonths = (endMonth - startMonth + 1) + (endYear - startYear) * 12;\n\n\t\tlet domainConfigs = [];\n\n\t\tlet startOfMonth = clone(s.start);\n\t\tfor(var i = 0; i < noOfMonths; i++) {\n\t\t\tlet endDate = s.end;\n\t\t\tif(!areInSameMonth(startOfMonth, s.end)) {\n\t\t\t\tlet [month, year] = [startOfMonth.getMonth(), startOfMonth.getFullYear()];\n\t\t\t\tendDate = getLastDateInMonth(month, year);\n\t\t\t}\n\t\t\tdomainConfigs.push(this.getDomainConfig(startOfMonth, endDate));\n\n\t\t\taddDays(endDate, 1);\n\t\t\tstartOfMonth = endDate;\n\t\t}\n\n\t\treturn domainConfigs;\n\t}\n\n\tgetDomainConfig(startDate, endDate='') {\n\t\tlet [month, year] = [startDate.getMonth(), startDate.getFullYear()];\n\t\tlet startOfWeek = setDayToSunday(startDate); // TODO: Monday as well\n\t\tendDate = clone(endDate) || getLastDateInMonth(month, year);\n\n\t\tlet domainConfig = {\n\t\t\tindex: month,\n\t\t\tcols: []\n\t\t};\n\n\t\taddDays(endDate, 1);\n\t\tlet noOfMonthWeeks = getWeeksBetween(startOfWeek, endDate);\n\n\t\tlet cols = [], col;\n\t\tfor(var i = 0; i < noOfMonthWeeks; i++) {\n\t\t\tcol = this.getCol(startOfWeek, month);\n\t\t\tcols.push(col);\n\n\t\t\tstartOfWeek = new Date(col[NO_OF_DAYS_IN_WEEK - 1].yyyyMmDd);\n\t\t\taddDays(startOfWeek, 1);\n\t\t}\n\n\t\tif(col[NO_OF_DAYS_IN_WEEK - 1].dataValue !== undefined) {\n\t\t\taddDays(startOfWeek, 1);\n\t\t\tcols.push(this.getCol(startOfWeek, month, true));\n\t\t}\n\n\t\tdomainConfig.cols = cols;\n\n\t\treturn domainConfig;\n\t}\n\n\tgetCol(startDate, month, empty = false) {\n\t\tlet s = this.state;\n\n\t\t// startDate is the start of week\n\t\tlet currentDate = clone(startDate);\n\t\tlet col = [];\n\n\t\tfor(var i = 0; i < NO_OF_DAYS_IN_WEEK; i++, addDays(currentDate, 1)) {\n\t\t\tlet config = {};\n\n\t\t\t// Non-generic adjustment for entire heatmap, needs state\n\t\t\tlet currentDateWithinData = currentDate >= s.start && currentDate <= s.end;\n\n\t\t\tif(empty || currentDate.getMonth() !== month || !currentDateWithinData) {\n\t\t\t\tconfig.yyyyMmDd = getYyyyMmDd(currentDate);\n\t\t\t} else {\n\t\t\t\tconfig = this.getSubDomainConfig(currentDate);\n\t\t\t}\n\t\t\tcol.push(config);\n\t\t}\n\n\t\treturn col;\n\t}\n\n\tgetSubDomainConfig(date) {\n\t\tlet yyyyMmDd = getYyyyMmDd(date);\n\t\tlet dataValue = this.data.dataPoints[yyyyMmDd];\n\t\tlet config = {\n\t\t\tyyyyMmDd: yyyyMmDd,\n\t\t\tdataValue: dataValue || 0,\n\t\t\tfill: this.colors[getMaxCheckpoint(dataValue, this.state.distribution)]\n\t\t};\n\t\treturn config;\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { dataPrep, zeroDataPrep, getShortenedLabels } from '../utils/axis-chart-utils';\nimport { AXIS_LEGEND_BAR_SIZE } from '../utils/constants';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset, fire } from '../utils/dom';\nimport { calcChartIntervals, getIntervalSize, getValueRange, getZeroIndex, scale, getClosestInArray } from '../utils/intervals';\nimport { floatTwo } from '../utils/helpers';\nimport { makeOverlay, updateOverlay, legendBar } from '../utils/draw';\nimport { getTopOffset, getLeftOffset, MIN_BAR_PERCENT_HEIGHT, BAR_CHART_SPACE_RATIO,\n\tLINE_CHART_DOT_SIZE } from '../utils/constants';\n\nexport default class AxisChart extends BaseChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\n\t\tthis.barOptions = args.barOptions || {};\n\t\tthis.lineOptions = args.lineOptions || {};\n\n\t\tthis.type = args.type || 'line';\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tsetMeasures() {\n\t\tif(this.data.datasets.length <= 1) {\n\t\t\tthis.config.showLegend = 0;\n\t\t\tthis.measures.paddings.bottom = 30;\n\t\t}\n\t}\n\n\tconfigure(options) {\n\t\tsuper.configure(options);\n\n\t\toptions.axisOptions = options.axisOptions || {};\n\t\toptions.tooltipOptions = options.tooltipOptions || {};\n\n\t\tthis.config.xAxisMode = options.axisOptions.xAxisMode || 'span';\n\t\tthis.config.yAxisMode = options.axisOptions.yAxisMode || 'span';\n\t\tthis.config.xIsSeries = options.axisOptions.xIsSeries || 0;\n\t\tthis.config.shortenYAxisNumbers = options.axisOptions.shortenYAxisNumbers || 0;\n\n\t\tthis.config.formatTooltipX = options.tooltipOptions.formatTooltipX;\n\t\tthis.config.formatTooltipY = options.tooltipOptions.formatTooltipY;\n\n\t\tthis.config.valuesOverPoints = options.valuesOverPoints;\n\t}\n\n\tprepareData(data=this.data) {\n\t\treturn dataPrep(data, this.type);\n\t}\n\n\tprepareFirstData(data=this.data) {\n\t\treturn zeroDataPrep(data);\n\t}\n\n\tcalc(onlyWidthChange = false) {\n\t\tthis.calcXPositions();\n\t\tif(!onlyWidthChange) {\n\t\t\tthis.calcYAxisParameters(this.getAllYValues(), this.type === 'line');\n\t\t}\n\t\tthis.makeDataByIndex();\n\t}\n\n\tcalcXPositions() {\n\t\tlet s = this.state;\n\t\tlet labels = this.data.labels;\n\t\ts.datasetLength = labels.length;\n\n\t\ts.unitWidth = this.width/(s.datasetLength);\n\t\t// Default, as per bar, and mixed. Only line will be a special case\n\t\ts.xOffset = s.unitWidth/2;\n\n\t\t// // For a pure Line Chart\n\t\t// s.unitWidth = this.width/(s.datasetLength - 1);\n\t\t// s.xOffset = 0;\n\n\t\ts.xAxis = {\n\t\t\tlabels: labels,\n\t\t\tpositions: labels.map((d, i) =>\n\t\t\t\tfloatTwo(s.xOffset + i * s.unitWidth)\n\t\t\t)\n\t\t};\n\t}\n\n\tcalcYAxisParameters(dataValues, withMinimum = 'false') {\n\t\tconst yPts = calcChartIntervals(dataValues, withMinimum);\n\t\tconst scaleMultiplier = this.height / getValueRange(yPts);\n\t\tconst intervalHeight = getIntervalSize(yPts) * scaleMultiplier;\n\t\tconst zeroLine = this.height - (getZeroIndex(yPts) * intervalHeight);\n\n\t\tthis.state.yAxis = {\n\t\t\tlabels: yPts,\n\t\t\tpositions: yPts.map(d => zeroLine - d * scaleMultiplier),\n\t\t\tscaleMultiplier: scaleMultiplier,\n\t\t\tzeroLine: zeroLine,\n\t\t};\n\n\t\t// Dependent if above changes\n\t\tthis.calcDatasetPoints();\n\t\tthis.calcYExtremes();\n\t\tthis.calcYRegions();\n\t}\n\n\tcalcDatasetPoints() {\n\t\tlet s = this.state;\n\t\tlet scaleAll = values => values.map(val => scale(val, s.yAxis));\n\n\t\ts.datasets = this.data.datasets.map((d, i) => {\n\t\t\tlet values = d.values;\n\t\t\tlet cumulativeYs = d.cumulativeYs || [];\n\t\t\treturn {\n\t\t\t\tname: d.name && d.name.replace(/<|>|&/g, (char) => char == '&' ? '&' : char == '<' ? '<' : '>'),\n\t\t\t\tindex: i,\n\t\t\t\tchartType: d.chartType,\n\n\t\t\t\tvalues: values,\n\t\t\t\tyPositions: scaleAll(values),\n\n\t\t\t\tcumulativeYs: cumulativeYs,\n\t\t\t\tcumulativeYPos: scaleAll(cumulativeYs),\n\t\t\t};\n\t\t});\n\t}\n\n\tcalcYExtremes() {\n\t\tlet s = this.state;\n\t\tif(this.barOptions.stacked) {\n\t\t\ts.yExtremes = s.datasets[s.datasets.length - 1].cumulativeYPos;\n\t\t\treturn;\n\t\t}\n\t\ts.yExtremes = new Array(s.datasetLength).fill(9999);\n\t\ts.datasets.map(d => {\n\t\t\td.yPositions.map((pos, j) => {\n\t\t\t\tif(pos < s.yExtremes[j]) {\n\t\t\t\t\ts.yExtremes[j] = pos;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tcalcYRegions() {\n\t\tlet s = this.state;\n\t\tif(this.data.yMarkers) {\n\t\t\tthis.state.yMarkers = this.data.yMarkers.map(d => {\n\t\t\t\td.position = scale(d.value, s.yAxis);\n\t\t\t\tif(!d.options) d.options = {};\n\t\t\t\t// if(!d.label.includes(':')) {\n\t\t\t\t// \td.label += ': ' + d.value;\n\t\t\t\t// }\n\t\t\t\treturn d;\n\t\t\t});\n\t\t}\n\t\tif(this.data.yRegions) {\n\t\t\tthis.state.yRegions = this.data.yRegions.map(d => {\n\t\t\t\td.startPos = scale(d.start, s.yAxis);\n\t\t\t\td.endPos = scale(d.end, s.yAxis);\n\t\t\t\tif(!d.options) d.options = {};\n\t\t\t\treturn d;\n\t\t\t});\n\t\t}\n\t}\n\n\tgetAllYValues() {\n\t\tlet key = 'values';\n\n\t\tif(this.barOptions.stacked) {\n\t\t\tkey = 'cumulativeYs';\n\t\t\tlet cumulative = new Array(this.state.datasetLength).fill(0);\n\t\t\tthis.data.datasets.map((d, i) => {\n\t\t\t\tlet values = this.data.datasets[i].values;\n\t\t\t\td[key] = cumulative = cumulative.map((c, i) => c + values[i]);\n\t\t\t});\n\t\t}\n\n\t\tlet allValueLists = this.data.datasets.map(d => d[key]);\n\t\tif(this.data.yMarkers) {\n\t\t\tallValueLists.push(this.data.yMarkers.map(d => d.value));\n\t\t}\n\t\tif(this.data.yRegions) {\n\t\t\tthis.data.yRegions.map(d => {\n\t\t\t\tallValueLists.push([d.end, d.start]);\n\t\t\t});\n\t\t}\n\n\t\treturn [].concat(...allValueLists);\n\t}\n\n\tsetupComponents() {\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'yAxis',\n\t\t\t\t{\n\t\t\t\t\tmode: this.config.yAxisMode,\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tshortenNumbers: this.config.shortenYAxisNumbers\n\t\t\t\t\t// pos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yAxis;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\n\t\t\t[\n\t\t\t\t'xAxis',\n\t\t\t\t{\n\t\t\t\t\tmode: this.config.xAxisMode,\n\t\t\t\t\theight: this.height,\n\t\t\t\t\t// pos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\ts.xAxis.calcLabels = getShortenedLabels(this.width,\n\t\t\t\t\t\ts.xAxis.labels, this.config.xIsSeries);\n\n\t\t\t\t\treturn s.xAxis;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\n\t\t\t[\n\t\t\t\t'yRegions',\n\t\t\t\t{\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tpos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yRegions;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\t\t];\n\n\t\tlet barDatasets = this.state.datasets.filter(d => d.chartType === 'bar');\n\t\tlet lineDatasets = this.state.datasets.filter(d => d.chartType === 'line');\n\n\t\tlet barsConfigs = barDatasets.map(d => {\n\t\t\tlet index = d.index;\n\t\t\treturn [\n\t\t\t\t'barGraph' + '-' + d.index,\n\t\t\t\t{\n\t\t\t\t\tindex: index,\n\t\t\t\t\tcolor: this.colors[index],\n\t\t\t\t\tstacked: this.barOptions.stacked,\n\n\t\t\t\t\t// same for all datasets\n\t\t\t\t\tvaluesOverPoints: this.config.valuesOverPoints,\n\t\t\t\t\tminHeight: this.height * MIN_BAR_PERCENT_HEIGHT,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\tlet d = s.datasets[index];\n\t\t\t\t\tlet stacked = this.barOptions.stacked;\n\n\t\t\t\t\tlet spaceRatio = this.barOptions.spaceRatio || BAR_CHART_SPACE_RATIO;\n\t\t\t\t\tlet barsWidth = s.unitWidth * (1 - spaceRatio);\n\t\t\t\t\tlet barWidth = barsWidth/(stacked ? 1 : barDatasets.length);\n\n\t\t\t\t\tlet xPositions = s.xAxis.positions.map(x => x - barsWidth/2);\n\t\t\t\t\tif(!stacked) {\n\t\t\t\t\t\txPositions = xPositions.map(p => p + barWidth * index);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet labels = new Array(s.datasetLength).fill('');\n\t\t\t\t\tif(this.config.valuesOverPoints) {\n\t\t\t\t\t\tif(stacked && d.index === s.datasets.length - 1) {\n\t\t\t\t\t\t\tlabels = d.cumulativeYs;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlabels = d.values;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet offsets = new Array(s.datasetLength).fill(0);\n\t\t\t\t\tif(stacked) {\n\t\t\t\t\t\toffsets = d.yPositions.map((y, j) => y - d.cumulativeYPos[j]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: xPositions,\n\t\t\t\t\t\tyPositions: d.yPositions,\n\t\t\t\t\t\toffsets: offsets,\n\t\t\t\t\t\t// values: d.values,\n\t\t\t\t\t\tlabels: labels,\n\n\t\t\t\t\t\tzeroLine: s.yAxis.zeroLine,\n\t\t\t\t\t\tbarsWidth: barsWidth,\n\t\t\t\t\t\tbarWidth: barWidth,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t];\n\t\t});\n\n\t\tlet lineConfigs = lineDatasets.map(d => {\n\t\t\tlet index = d.index;\n\t\t\treturn [\n\t\t\t\t'lineGraph' + '-' + d.index,\n\t\t\t\t{\n\t\t\t\t\tindex: index,\n\t\t\t\t\tcolor: this.colors[index],\n\t\t\t\t\tsvgDefs: this.svgDefs,\n\t\t\t\t\theatline: this.lineOptions.heatline,\n\t\t\t\t\tregionFill: this.lineOptions.regionFill,\n\t\t\t\t\tspline: this.lineOptions.spline,\n\t\t\t\t\thideDots: this.lineOptions.hideDots,\n\t\t\t\t\thideLine: this.lineOptions.hideLine,\n\n\t\t\t\t\t// same for all datasets\n\t\t\t\t\tvaluesOverPoints: this.config.valuesOverPoints,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\tlet d = s.datasets[index];\n\t\t\t\t\tlet minLine = s.yAxis.positions[0] < s.yAxis.zeroLine\n\t\t\t\t\t\t? s.yAxis.positions[0] : s.yAxis.zeroLine;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: s.xAxis.positions,\n\t\t\t\t\t\tyPositions: d.yPositions,\n\n\t\t\t\t\t\tvalues: d.values,\n\n\t\t\t\t\t\tzeroLine: minLine,\n\t\t\t\t\t\tradius: this.lineOptions.dotSize || LINE_CHART_DOT_SIZE,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t];\n\t\t});\n\n\t\tlet markerConfigs = [\n\t\t\t[\n\t\t\t\t'yMarkers',\n\t\t\t\t{\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tpos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yMarkers;\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tcomponentConfigs = componentConfigs.concat(barsConfigs, lineConfigs, markerConfigs);\n\n\t\tlet optionals = ['yMarkers', 'yRegions'];\n\t\tthis.dataUnitComponents = [];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.filter(args => !optionals.includes(args[0]) || this.state[args[0]])\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\tif(args[0].includes('lineGraph') || args[0].includes('barGraph')) {\n\t\t\t\t\tthis.dataUnitComponents.push(component);\n\t\t\t\t}\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tmakeDataByIndex() {\n\t\tthis.dataByIndex = {};\n\n\t\tlet s = this.state;\n\t\tlet formatX = this.config.formatTooltipX;\n\t\tlet formatY = this.config.formatTooltipY;\n\t\tlet titles = s.xAxis.labels;\n\n\t\ttitles.map((label, index) => {\n\t\t\tlet values = this.state.datasets.map((set, i) => {\n\t\t\t\tlet value = set.values[index];\n\t\t\t\treturn {\n\t\t\t\t\ttitle: set.name,\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tyPos: set.yPositions[index],\n\t\t\t\t\tcolor: this.colors[i],\n\t\t\t\t\tformatted: formatY ? formatY(value) : value,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tthis.dataByIndex[index] = {\n\t\t\t\tlabel: label,\n\t\t\t\tformattedLabel: formatX ? formatX(label) : label,\n\t\t\t\txPos: s.xAxis.positions[index],\n\t\t\t\tvalues: values,\n\t\t\t\tyExtreme: s.yExtremes[index],\n\t\t\t};\n\t\t});\n\t}\n\n\tbindTooltip() {\n\t\t// NOTE: could be in tooltip itself, as it is a given functionality for its parent\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tlet m = this.measures;\n\t\t\tlet o = getOffset(this.container);\n\t\t\tlet relX = e.pageX - o.left - getLeftOffset(m);\n\t\t\tlet relY = e.pageY - o.top;\n\n\t\t\tif(relY < this.height + getTopOffset(m)\n\t\t\t\t&& relY > getTopOffset(m)) {\n\t\t\t\tthis.mapTooltipXPosition(relX);\n\t\t\t} else {\n\t\t\t\tthis.tip.hideTip();\n\t\t\t}\n\t\t});\n\t}\n\n\tmapTooltipXPosition(relX) {\n\t\tlet s = this.state;\n\t\tif(!s.yExtremes) return;\n\n\t\tlet index = getClosestInArray(relX, s.xAxis.positions, true);\n\t\tif (index >= 0) {\n\t\t\tlet dbi = this.dataByIndex[index];\n\n\t\t\tthis.tip.setValues(\n\t\t\t\tdbi.xPos + this.tip.offset.x,\n\t\t\t\tdbi.yExtreme + this.tip.offset.y,\n\t\t\t\t{name: dbi.formattedLabel, value: ''},\n\t\t\t\tdbi.values,\n\t\t\t\tindex\n\t\t\t);\n\n\t\t\tthis.tip.showTip();\n\t\t}\n\t}\n\n\trenderLegend() {\n\t\tlet s = this.data;\n\t\tif(s.datasets.length > 1) {\n\t\t\tthis.legendArea.textContent = '';\n\t\t\ts.datasets.map((d, i) => {\n\t\t\t\tlet barWidth = AXIS_LEGEND_BAR_SIZE;\n\t\t\t\t// let rightEndPoint = this.baseWidth - this.measures.margins.left - this.measures.margins.right;\n\t\t\t\t// let multiplier = s.datasets.length - i;\n\t\t\t\tlet rect = legendBar(\n\t\t\t\t\t// rightEndPoint - multiplier * barWidth,\t// To right align\n\t\t\t\t\tbarWidth * i,\n\t\t\t\t\t'0',\n\t\t\t\t\tbarWidth,\n\t\t\t\t\tthis.colors[i],\n\t\t\t\t\td.name,\n\t\t\t\t\tthis.config.truncateLegends);\n\t\t\t\tthis.legendArea.appendChild(rect);\n\t\t\t});\n\t\t}\n\t}\n\n\n\n\t// Overlay\n\tmakeOverlay() {\n\t\tif(this.init) {\n\t\t\tthis.init = 0;\n\t\t\treturn;\n\t\t}\n\t\tif(this.overlayGuides) {\n\t\t\tthis.overlayGuides.forEach(g => {\n\t\t\t\tlet o = g.overlay;\n\t\t\t\to.parentNode.removeChild(o);\n\t\t\t});\n\t\t}\n\n\t\tthis.overlayGuides = this.dataUnitComponents.map(c => {\n\t\t\treturn {\n\t\t\t\ttype: c.unitType,\n\t\t\t\toverlay: undefined,\n\t\t\t\tunits: c.units,\n\t\t\t};\n\t\t});\n\n\t\tif(this.state.currentIndex === undefined) {\n\t\t\tthis.state.currentIndex = this.state.datasetLength - 1;\n\t\t}\n\n\t\t// Render overlays\n\t\tthis.overlayGuides.map(d => {\n\t\t\tlet currentUnit = d.units[this.state.currentIndex];\n\n\t\t\td.overlay = makeOverlay[d.type](currentUnit);\n\t\t\tthis.drawArea.appendChild(d.overlay);\n\t\t});\n\t}\n\n\tupdateOverlayGuides() {\n\t\tif(this.overlayGuides) {\n\t\t\tthis.overlayGuides.forEach(g => {\n\t\t\t\tlet o = g.overlay;\n\t\t\t\to.parentNode.removeChild(o);\n\t\t\t});\n\t\t}\n\t}\n\n\tbindOverlay() {\n\t\tthis.parent.addEventListener('data-select', () => {\n\t\t\tthis.updateOverlay();\n\t\t});\n\t}\n\n\tbindUnits() {\n\t\tthis.dataUnitComponents.map(c => {\n\t\t\tc.units.map(unit => {\n\t\t\t\tunit.addEventListener('click', () => {\n\t\t\t\t\tlet index = unit.getAttribute('data-point-index');\n\t\t\t\t\tthis.setCurrentDataPoint(index);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\t// Note: Doesn't work as tooltip is absolutely positioned\n\t\tthis.tip.container.addEventListener('click', () => {\n\t\t\tlet index = this.tip.container.getAttribute('data-point-index');\n\t\t\tthis.setCurrentDataPoint(index);\n\t\t});\n\t}\n\n\tupdateOverlay() {\n\t\tthis.overlayGuides.map(d => {\n\t\t\tlet currentUnit = d.units[this.state.currentIndex];\n\t\t\tupdateOverlay[d.type](currentUnit, d.overlay);\n\t\t});\n\t}\n\n\tonLeftArrow() {\n\t\tthis.setCurrentDataPoint(this.state.currentIndex - 1);\n\t}\n\n\tonRightArrow() {\n\t\tthis.setCurrentDataPoint(this.state.currentIndex + 1);\n\t}\n\n\tgetDataPoint(index=this.state.currentIndex) {\n\t\tlet s = this.state;\n\t\tlet data_point = {\n\t\t\tindex: index,\n\t\t\tlabel: s.xAxis.labels[index],\n\t\t\tvalues: s.datasets.map(d => d.values[index])\n\t\t};\n\t\treturn data_point;\n\t}\n\n\tsetCurrentDataPoint(index) {\n\t\tlet s = this.state;\n\t\tindex = parseInt(index);\n\t\tif(index < 0) index = 0;\n\t\tif(index >= s.xAxis.labels.length) index = s.xAxis.labels.length - 1;\n\t\tif(index === s.currentIndex) return;\n\t\ts.currentIndex = index;\n\t\tfire(this.parent, \"data-select\", this.getDataPoint());\n\t}\n\n\n\n\t// API\n\taddDataPoint(label, datasetValues, index=this.state.datasetLength) {\n\t\tsuper.addDataPoint(label, datasetValues, index);\n\t\tthis.data.labels.splice(index, 0, label);\n\t\tthis.data.datasets.map((d, i) => {\n\t\t\td.values.splice(index, 0, datasetValues[i]);\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\tremoveDataPoint(index = this.state.datasetLength-1) {\n\t\tif (this.data.labels.length <= 1) {\n\t\t\treturn;\n\t\t}\n\t\tsuper.removeDataPoint(index);\n\t\tthis.data.labels.splice(index, 1);\n\t\tthis.data.datasets.map(d => {\n\t\t\td.values.splice(index, 1);\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\tupdateDataset(datasetValues, index=0) {\n\t\tthis.data.datasets[index].values = datasetValues;\n\t\tthis.update(this.data);\n\t}\n\t// addDataset(dataset, index) {}\n\t// removeDataset(index = 0) {}\n\n\tupdateDatasets(datasets) {\n\t\tthis.data.datasets.map((d, i) => {\n\t\t\tif(datasets[i]) {\n\t\t\t\td.values = datasets[i];\n\t\t\t}\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\t// updateDataPoint(dataPoint, index = 0) {}\n\t// addDataPoint(dataPoint, index = 0) {}\n\t// removeDataPoint(index = 0) {}\n}\n","import AggregationChart from './AggregationChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset } from '../utils/dom';\nimport { getPositionByAngle } from '../utils/helpers';\nimport { makeArcStrokePathStr, makeStrokeCircleStr } from '../utils/draw';\nimport { lightenDarkenColor } from '../utils/colors';\nimport { transform } from '../utils/animation';\nimport { FULL_ANGLE } from '../utils/constants';\n\nexport default class DonutChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'donut';\n\t\tthis.initTimeout = 0;\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\t\tthis.mouseMove = this.mouseMove.bind(this);\n\t\tthis.mouseLeave = this.mouseLeave.bind(this);\n\n\t\tthis.hoverRadio = args.hoverRadio || 0.1;\n\t\tthis.config.startAngle = args.startAngle || 0;\n\n\t\tthis.clockWise = args.clockWise || false;\n\t\tthis.strokeWidth = args.strokeWidth || 30;\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\t\tthis.radius =\n\t\t\tthis.height > this.width\n\t\t\t\t? this.center.x - this.strokeWidth / 2\n\t\t\t\t: this.center.y - this.strokeWidth / 2;\n\n\t\tconst { radius, clockWise } = this;\n\n\t\tconst prevSlicesProperties = s.slicesProperties || [];\n\t\ts.sliceStrings = [];\n\t\ts.slicesProperties = [];\n\t\tlet curAngle = 180 - this.config.startAngle;\n\n\t\ts.sliceTotals.map((total, i) => {\n\t\t\tconst startAngle = curAngle;\n\t\t\tconst originDiffAngle = (total / s.grandTotal) * FULL_ANGLE;\n\t\t\tconst largeArc = originDiffAngle > 180 ? 1: 0;\n\t\t\tconst diffAngle = clockWise ? -originDiffAngle : originDiffAngle;\n\t\t\tconst endAngle = curAngle = curAngle + diffAngle;\n\t\t\tconst startPosition = getPositionByAngle(startAngle, radius);\n\t\t\tconst endPosition = getPositionByAngle(endAngle, radius);\n\n\t\t\tconst prevProperty = this.init && prevSlicesProperties[i];\n\n\t\t\tlet curStart,curEnd;\n\t\t\tif(this.init) {\n\t\t\t\tcurStart = prevProperty ? prevProperty.startPosition : startPosition;\n\t\t\t\tcurEnd = prevProperty ? prevProperty.endPosition : startPosition;\n\t\t\t} else {\n\t\t\t\tcurStart = startPosition;\n\t\t\t\tcurEnd = endPosition;\n\t\t\t}\n\t\t\tconst curPath =\n\t\t\t\toriginDiffAngle === 360\n\t\t\t\t\t? makeStrokeCircleStr(curStart, curEnd, this.center, this.radius, this.clockWise, largeArc)\n\t\t\t\t\t: makeArcStrokePathStr(curStart, curEnd, this.center, this.radius, this.clockWise, largeArc);\n\n\t\t\ts.sliceStrings.push(curPath);\n\t\t\ts.slicesProperties.push({\n\t\t\t\tstartPosition,\n\t\t\t\tendPosition,\n\t\t\t\tvalue: total,\n\t\t\t\ttotal: s.grandTotal,\n\t\t\t\tstartAngle,\n\t\t\t\tendAngle,\n\t\t\t\tangle: diffAngle\n\t\t\t});\n\n\t\t});\n\t\tthis.init = 0;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'donutSlices',\n\t\t\t\t{ },\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsliceStrings: s.sliceStrings,\n\t\t\t\t\t\tcolors: this.colors,\n\t\t\t\t\t\tstrokeWidth: this.strokeWidth,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalTranslateByAngle(property){\n\t\tconst{ radius, hoverRadio } = this;\n\t\tconst position = getPositionByAngle(property.startAngle+(property.angle / 2),radius);\n\t\treturn `translate3d(${(position.x) * hoverRadio}px,${(position.y) * hoverRadio}px,0)`;\n\t}\n\n\thoverSlice(path,i,flag,e){\n\t\tif(!path) return;\n\t\tconst color = this.colors[i];\n\t\tif(flag) {\n\t\t\ttransform(path, this.calTranslateByAngle(this.state.slicesProperties[i]));\n\t\t\tpath.style.stroke = lightenDarkenColor(color, 50);\n\t\t\tlet g_off = getOffset(this.svg);\n\t\t\tlet x = e.pageX - g_off.left + 10;\n\t\t\tlet y = e.pageY - g_off.top - 10;\n\t\t\tlet title = (this.formatted_labels && this.formatted_labels.length > 0\n\t\t\t\t? this.formatted_labels[i] : this.state.labels[i]) + ': ';\n\t\t\tlet percent = (this.state.sliceTotals[i] * 100 / this.state.grandTotal).toFixed(1);\n\t\t\tthis.tip.setValues(x, y, {name: title, value: percent + \"%\"});\n\t\t\tthis.tip.showTip();\n\t\t} else {\n\t\t\ttransform(path,'translate3d(0,0,0)');\n\t\t\tthis.tip.hideTip();\n\t\t\tpath.style.stroke = color;\n\t\t}\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', this.mouseMove);\n\t\tthis.container.addEventListener('mouseleave', this.mouseLeave);\n\t}\n\n\tmouseMove(e){\n\t\tconst target = e.target;\n\t\tlet slices = this.components.get('donutSlices').store;\n\t\tlet prevIndex = this.curActiveSliceIndex;\n\t\tlet prevAcitve = this.curActiveSlice;\n\t\tif(slices.includes(target)) {\n\t\t\tlet i = slices.indexOf(target);\n\t\t\tthis.hoverSlice(prevAcitve, prevIndex,false);\n\t\t\tthis.curActiveSlice = target;\n\t\t\tthis.curActiveSliceIndex = i;\n\t\t\tthis.hoverSlice(target, i, true, e);\n\t\t} else {\n\t\t\tthis.mouseLeave();\n\t\t}\n\t}\n\n\tmouseLeave(){\n\t\tthis.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,false);\n\t}\n}\n","import '../css/charts.scss';\n\n// import MultiAxisChart from './charts/MultiAxisChart';\nimport PercentageChart from './charts/PercentageChart';\nimport PieChart from './charts/PieChart';\nimport Heatmap from './charts/Heatmap';\nimport AxisChart from './charts/AxisChart';\nimport DonutChart from './charts/DonutChart';\n\nconst chartTypes = {\n\tbar: AxisChart,\n\tline: AxisChart,\n\t// multiaxis: MultiAxisChart,\n\tpercentage: PercentageChart,\n\theatmap: Heatmap,\n\tpie: PieChart,\n\tdonut: DonutChart,\n};\n\nfunction getChartByType(chartType = 'line', parent, options) {\n\tif (chartType === 'axis-mixed') {\n\t\toptions.type = 'line';\n\t\treturn new AxisChart(parent, options);\n\t}\n\n\tif (!chartTypes[chartType]) {\n\t\tconsole.error(\"Undefined chart type: \" + chartType);\n\t\treturn;\n\t}\n\n\treturn new chartTypes[chartType](parent, options);\n}\n\nclass Chart {\n\tconstructor(parent, options) {\n\t\treturn getChartByType(options.type, parent, options);\n\t}\n}\n\nexport { Chart, PercentageChart, PieChart, Heatmap, AxisChart };","import * as Charts from './chart';\n\nlet frappe = { };\n\nfrappe.NAME = 'Frappe Charts';\nfrappe.VERSION = '1.6.2';\n\nfrappe = Object.assign({ }, frappe, Charts);\n\nexport default frappe;","// 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', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/DashboardPage');","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', 'admin/components/DashboardWidget');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LoadingIndicator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Link');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/abbreviateNumber');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport DashboardWidget from 'flarum/admin/components/DashboardWidget';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Link from 'flarum/common/components/Link';\nimport abbreviateNumber from 'flarum/common/utils/abbreviateNumber';\nexport default class MiniStatisticsWidget extends DashboardWidget {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"entities\", ['users', 'discussions', 'posts']);\n _defineProperty(this, \"lifetimeData\", void 0);\n _defineProperty(this, \"loadingLifetime\", true);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.loadLifetimeData();\n }\n async loadLifetimeData() {\n this.loadingLifetime = true;\n m.redraw();\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'lifetime'\n }\n });\n this.lifetimeData = data;\n this.loadingLifetime = false;\n m.redraw();\n }\n className() {\n return 'StatisticsWidget StatisticsWidget--mini';\n }\n content() {\n return m(\"div\", {\n className: \"StatisticsWidget-table\"\n }, m(\"h4\", {\n className: \"StatisticsWidget-title\"\n }, app.translator.trans('flarum-statistics.admin.statistics.mini_heading')), m(\"div\", {\n className: \"StatisticsWidget-entities\"\n }, m(\"div\", {\n className: \"StatisticsWidget-labels\"\n }, m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, app.translator.trans('flarum-statistics.admin.statistics.total_label'))), this.entities.map(entity => {\n const totalCount = this.loadingLifetime ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getTotalCount(entity);\n return m(\"div\", {\n className: \"StatisticsWidget-entity\"\n }, m(\"h3\", {\n className: \"StatisticsWidget-heading\"\n }, app.translator.trans('flarum-statistics.admin.statistics.' + entity + '_heading')), m(\"div\", {\n className: \"StatisticsWidget-total\",\n title: totalCount\n }, this.loadingLifetime ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(totalCount)));\n })), m(\"div\", {\n className: \"StatisticsWidget-viewFull\"\n }, m(Link, {\n href: app.route('extension', {\n id: 'flarum-statistics'\n })\n }, app.translator.trans('flarum-statistics.admin.statistics.view_full'))));\n }\n getTotalCount(entity) {\n return this.lifetimeData[entity];\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/MiniStatisticsWidget', MiniStatisticsWidget);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/SelectDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Placeholder');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Icon');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/classList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/utils/generateElementId');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Modal');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport generateElementId from 'flarum/admin/utils/generateElementId';\nimport Modal from 'flarum/common/components/Modal';\nimport Button from 'flarum/common/components/Button';\nimport dayjs from 'dayjs';\nimport dayjsUtc from 'dayjs/plugin/utc';\ndayjs.extend(dayjsUtc);\nexport default class StatisticsWidgetDateSelectionModal extends Modal {\n constructor() {\n super(...arguments);\n /* @ts-expect-error core typings don't allow us to set the type of the state attr :( */\n _defineProperty(this, \"state\", {\n inputs: {\n startDateVal: dayjs().format('YYYY-MM-DD'),\n endDateVal: dayjs().format('YYYY-MM-DD')\n },\n ids: {\n startDate: generateElementId(),\n endDate: generateElementId()\n }\n });\n }\n oninit(vnode) {\n super.oninit(vnode);\n if (this.attrs.value) {\n this.state.inputs = {\n startDateVal: dayjs.utc(this.attrs.value.start * 1000).format('YYYY-MM-DD'),\n endDateVal: dayjs.utc(this.attrs.value.end * 1000).format('YYYY-MM-DD')\n };\n }\n }\n className() {\n return 'StatisticsWidgetDateSelectionModal Modal--small';\n }\n title() {\n return app.translator.trans('flarum-statistics.admin.date_selection_modal.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, this.items().toArray());\n }\n items() {\n const items = new ItemList();\n items.add('intro', m(\"p\", null, app.translator.trans('flarum-statistics.admin.date_selection_modal.description')), 100);\n items.add('date_start', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", {\n htmlFor: this.state.ids.startDate\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.start_date')), m(\"input\", {\n type: \"date\",\n id: this.state.ids.startDate,\n value: this.state.inputs.startDateVal,\n onchange: this.updateState('startDateVal'),\n className: \"FormControl\"\n })), 90);\n items.add('date_end', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", {\n htmlFor: this.state.ids.endDate\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.end_date')), m(\"input\", {\n type: \"date\",\n id: this.state.ids.endDate,\n value: this.state.inputs.endDateVal,\n onchange: this.updateState('endDateVal'),\n className: \"FormControl\"\n })), 80);\n items.add('submit', m(Button, {\n className: \"Button Button--primary\",\n type: \"submit\"\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.submit_button')), 0);\n return items;\n }\n updateState(field) {\n return e => {\n this.state.inputs[field] = e.currentTarget.value;\n };\n }\n submitData() {\n // We force 'zulu' time (UTC)\n return {\n start: Math.floor(+dayjs.utc(this.state.inputs.startDateVal + 'Z') / 1000),\n // Ensures that the end date is the end of the day\n end: Math.floor(+dayjs.utc(this.state.inputs.endDateVal + 'Z').hour(23).minute(59).second(59).millisecond(999) / 1000)\n };\n }\n onsubmit(e) {\n e.preventDefault();\n const data = this.submitData();\n if (data.end < data.start) {\n this.alertAttrs = {\n type: 'error',\n controls: app.translator.trans('flarum-statistics.admin.date_selection_modal.errors.end_before_start')\n };\n return;\n }\n this.attrs.onModalSubmit(data);\n this.hide();\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsWidgetDateSelectionModal', StatisticsWidgetDateSelectionModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport SelectDropdown from 'flarum/common/components/SelectDropdown';\nimport Button from 'flarum/common/components/Button';\nimport abbreviateNumber from 'flarum/common/utils/abbreviateNumber';\nimport extractText from 'flarum/common/utils/extractText';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Placeholder from 'flarum/common/components/Placeholder';\nimport Icon from 'flarum/common/components/Icon';\nimport classList from 'flarum/common/utils/classList';\nimport DashboardWidget from 'flarum/admin/components/DashboardWidget';\nimport StatisticsWidgetDateSelectionModal from './StatisticsWidgetDateSelectionModal';\nimport dayjs from 'dayjs';\nimport dayjsUtc from 'dayjs/plugin/utc';\nimport dayjsLocalizedFormat from 'dayjs/plugin/localizedFormat';\n// @ts-expect-error No typings available\nimport { Chart } from 'frappe-charts';\ndayjs.extend(dayjsUtc);\ndayjs.extend(dayjsLocalizedFormat);\nexport default class StatisticsWidget extends DashboardWidget {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"entities\", ['users', 'discussions', 'posts']);\n _defineProperty(this, \"periods\", void 0);\n _defineProperty(this, \"chart\", void 0);\n _defineProperty(this, \"customPeriod\", null);\n _defineProperty(this, \"timedData\", {});\n _defineProperty(this, \"lifetimeData\", void 0);\n _defineProperty(this, \"customPeriodData\", {});\n _defineProperty(this, \"noData\", false);\n _defineProperty(this, \"loadingLifetime\", true);\n _defineProperty(this, \"loadingTimed\", this.entities.reduce((acc, curr) => {\n acc[curr] = 'unloaded';\n return acc;\n }, {}));\n _defineProperty(this, \"loadingCustom\", this.entities.reduce((acc, curr) => {\n acc[curr] = 'unloaded';\n return acc;\n }, {}));\n _defineProperty(this, \"selectedEntity\", 'users');\n _defineProperty(this, \"selectedPeriod\", void 0);\n _defineProperty(this, \"chartEntity\", void 0);\n _defineProperty(this, \"chartPeriod\", void 0);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.loadLifetimeData();\n }\n async loadLifetimeData() {\n this.loadingLifetime = true;\n m.redraw();\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'lifetime'\n }\n });\n this.lifetimeData = data;\n this.loadingLifetime = false;\n m.redraw();\n }\n async loadTimedData(model) {\n this.loadingTimed[model] = 'loading';\n m.redraw();\n try {\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'timed',\n model\n }\n });\n this.timedData[model] = data;\n this.loadingTimed[model] = 'loaded';\n\n // Create a Date object which represents the start of the day.\n let todayDate = new Date();\n todayDate.setUTCHours(0, 0, 0, 0);\n const today = todayDate.getTime() / 1000;\n this.periods = {\n today: {\n start: today,\n end: today + 86400,\n step: 3600\n },\n last_7_days: {\n start: today - 86400 * 7,\n end: today,\n step: 86400\n },\n previous_7_days: {\n start: today - 86400 * 14,\n end: today - 86400 * 7,\n step: 86400\n },\n last_28_days: {\n start: today - 86400 * 28,\n end: today,\n step: 86400\n },\n previous_28_days: {\n start: today - 86400 * 28 * 2,\n end: today - 86400 * 28,\n step: 86400\n },\n last_12_months: {\n start: today - 86400 * 364,\n end: today,\n step: 86400 * 7\n }\n };\n this.selectedPeriod = 'last_7_days';\n } catch (e) {\n console.error(e);\n this.loadingTimed[model] = 'fail';\n }\n m.redraw();\n }\n async loadCustomRangeData(model) {\n this.loadingCustom[model] = 'loading';\n m.redraw();\n\n // We clone so we can check that the same period is still selected\n // once the HTTP request is complete and the data is to be displayed\n const range = {\n ...this.customPeriod\n };\n try {\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'custom',\n model,\n dateRange: {\n start: range.start,\n end: range.end\n }\n }\n });\n if (JSON.stringify(range) !== JSON.stringify(this.customPeriod)) {\n // The range this method was called with is no longer the selected.\n // Bail out here.\n return;\n }\n this.customPeriodData[model] = data;\n this.loadingCustom[model] = 'loaded';\n m.redraw();\n } catch (e) {\n if (JSON.stringify(range) !== JSON.stringify(this.customPeriod)) {\n // The range this method was called with is no longer the selected.\n // Bail out here.\n return;\n }\n console.error(e);\n this.loadingCustom[model] = 'fail';\n }\n }\n className() {\n return 'StatisticsWidget';\n }\n content() {\n var _this$customPeriod, _this$customPeriod2;\n const loadingSelectedEntity = (this.selectedPeriod === 'custom' ? this.loadingCustom : this.loadingTimed)[this.selectedEntity] !== 'loaded';\n const thisPeriod = loadingSelectedEntity ? null : this.selectedPeriod === 'custom' ? {\n start: (_this$customPeriod = this.customPeriod) == null ? void 0 : _this$customPeriod.end,\n end: (_this$customPeriod2 = this.customPeriod) == null ? void 0 : _this$customPeriod2.end,\n step: 86400\n } : this.periods[this.selectedPeriod];\n if (this.selectedPeriod === 'custom') {\n if (!this.customPeriodData[this.selectedEntity] && this.loadingCustom[this.selectedEntity] === 'unloaded') {\n this.loadCustomRangeData(this.selectedEntity);\n }\n } else {\n if (!this.timedData[this.selectedEntity] && this.loadingTimed[this.selectedEntity] === 'unloaded') {\n this.loadTimedData(this.selectedEntity);\n }\n }\n return m(\"div\", {\n className: \"StatisticsWidget-table\"\n }, m(\"div\", {\n className: \"StatisticsWidget-entities\"\n }, m(\"div\", {\n className: \"StatisticsWidget-labels\"\n }, m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, app.translator.trans('flarum-statistics.admin.statistics.total_label')), m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, loadingSelectedEntity ? m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }) : m(SelectDropdown, {\n disabled: loadingSelectedEntity,\n buttonClassName: \"Button Button--text\",\n caretIcon: \"fas fa-caret-down\"\n }, Object.keys(this.periods).map(period => m(Button, {\n key: period,\n active: period === this.selectedPeriod,\n onclick: this.changePeriod.bind(this, period),\n icon: period === this.selectedPeriod ? 'fas fa-check' : true\n }, app.translator.trans(\"flarum-statistics.admin.statistics.\".concat(period, \"_label\")))).concat([m(Button, {\n key: \"custom\",\n active: this.selectedPeriod === 'custom',\n onclick: () => {\n const attrs = {\n onModalSubmit: dates => {\n if (JSON.stringify(dates) === JSON.stringify(this.customPeriod)) {\n // If same period is selected, don't reload data\n return;\n }\n this.customPeriodData = {};\n Object.keys(this.loadingCustom).forEach(k => this.loadingCustom[k] = 'unloaded');\n this.customPeriod = dates;\n this.changePeriod('custom');\n }\n };\n\n // If we have a custom period set already,\n // let's prefill the modal with it\n if (this.customPeriod) {\n attrs.value = this.customPeriod;\n }\n app.modal.show(StatisticsWidgetDateSelectionModal, attrs);\n },\n icon: this.selectedPeriod === 'custom' ? 'fas fa-check' : true\n }, this.selectedPeriod === 'custom' ? extractText(app.translator.trans(\"flarum-statistics.admin.statistics.custom_label_specified\", {\n fromDate: dayjs.utc(this.customPeriod.start * 1000).format('ll'),\n toDate: dayjs.utc(this.customPeriod.end * 1000).format('ll')\n })) : app.translator.trans(\"flarum-statistics.admin.statistics.custom_label\"))])))), this.entities.map(entity => {\n const totalCount = this.loadingLifetime ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getTotalCount(entity);\n const thisPeriodCount = loadingSelectedEntity ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getPeriodCount(entity, thisPeriod);\n const lastPeriodCount = this.selectedPeriod === 'custom' ? null : loadingSelectedEntity ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getPeriodCount(entity, this.getLastPeriod(thisPeriod));\n const periodChange = loadingSelectedEntity || lastPeriodCount === 0 || lastPeriodCount === null ? 0 : (thisPeriodCount - lastPeriodCount) / lastPeriodCount * 100;\n return m(\"button\", {\n className: classList('Button--ua-reset StatisticsWidget-entity', {\n active: this.selectedEntity === entity\n }),\n onclick: this.changeEntity.bind(this, entity)\n }, m(\"h3\", {\n className: \"StatisticsWidget-heading\"\n }, app.translator.trans('flarum-statistics.admin.statistics.' + entity + '_heading')), m(\"div\", {\n className: \"StatisticsWidget-total\",\n title: totalCount\n }, this.loadingLifetime ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(totalCount)), m(\"div\", {\n className: \"StatisticsWidget-period\",\n title: thisPeriodCount\n }, loadingSelectedEntity ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(thisPeriodCount), periodChange !== 0 && m('[', null, ' ', m(\"span\", {\n className: 'StatisticsWidget-change StatisticsWidget-change--' + (periodChange > 0 ? 'up' : 'down')\n }, m(Icon, {\n name: 'fas fa-arrow-' + (periodChange > 0 ? 'up' : 'down')\n }), Math.abs(periodChange).toFixed(1), \"%\"))));\n })), m('[', null, loadingSelectedEntity ? m(\"div\", {\n key: \"loading\",\n className: \"StatisticsWidget-chart\",\n \"data-loading\": \"true\"\n }, m(LoadingIndicator, {\n size: \"large\"\n })) : m(\"div\", {\n key: \"loaded\",\n className: \"StatisticsWidget-chart\",\n \"data-loading\": \"false\",\n oncreate: this.drawChart.bind(this),\n onupdate: this.drawChart.bind(this)\n })), this.noData && m(Placeholder, {\n text: app.translator.trans(\"flarum-statistics.admin.statistics.no_data\")\n }), !this.noData && !!this.chart && m(Button, {\n className: \"StatisticsWidget-chartExport Button\",\n icon: \"fas fa-file-export\",\n onclick: () => {\n this.chart.export();\n }\n }, app.translator.trans('flarum-statistics.admin.statistics.export_chart_button')));\n }\n drawChart(vnode) {\n var _this$customPeriod3, _this$customPeriod4;\n if (this.chart && this.chartEntity === this.selectedEntity && this.chartPeriod === this.selectedPeriod) {\n return;\n }\n const period = this.selectedPeriod === 'custom' ? {\n start: (_this$customPeriod3 = this.customPeriod) == null ? void 0 : _this$customPeriod3.start,\n end: (_this$customPeriod4 = this.customPeriod) == null ? void 0 : _this$customPeriod4.end,\n step: 86400\n } : this.periods[this.selectedPeriod];\n const periodLength = period.end - period.start;\n const labels = [];\n const thisPeriod = [];\n const lastPeriod = [];\n for (let i = period.start; i < period.end; i += period.step) {\n let label;\n if (period.step < 86400) {\n label = dayjs.unix(i).utc().format('h A');\n } else {\n label = dayjs.unix(i).utc().format('D MMM');\n if (period.step > 86400) {\n label += ' - ' + dayjs.unix(i + period.step - 1).utc().format('D MMM');\n }\n }\n labels.push(label);\n thisPeriod.push(this.getPeriodCount(this.selectedEntity, {\n start: i,\n end: i + period.step\n }));\n lastPeriod.push(this.getPeriodCount(this.selectedEntity, {\n start: i - periodLength,\n end: i - periodLength\n }));\n }\n if (thisPeriod.length === 0) {\n this.noData = true;\n m.redraw();\n return;\n } else {\n this.noData = false;\n m.redraw();\n }\n const datasets = [{\n name: extractText(app.translator.trans('flarum-statistics.admin.statistics.current_period')),\n values: thisPeriod\n }, {\n name: extractText(app.translator.trans('flarum-statistics.admin.statistics.previous_period')),\n values: lastPeriod\n }];\n const data = {\n labels,\n datasets\n };\n\n // If the dom element no longer exists, recreate the chart\n // https://stackoverflow.com/a/2620373/11091039\n if (!this.chart || !(document.compareDocumentPosition(this.chart.parent) & 16)) {\n this.chart = new Chart(vnode.dom, {\n data,\n type: 'line',\n height: 280,\n axisOptions: {\n xAxisMode: 'tick',\n yAxisMode: 'span',\n xIsSeries: true\n },\n lineOptions: {\n hideDots: 1,\n regionFill: 1\n },\n colors: [app.forum.attribute('themePrimaryColor'), 'black']\n });\n } else {\n this.chart.update(data);\n }\n this.chartEntity = this.selectedEntity;\n this.chartPeriod = this.selectedPeriod;\n }\n changeEntity(entity) {\n this.selectedEntity = entity;\n }\n changePeriod(period) {\n this.selectedPeriod = period;\n }\n getTotalCount(entity) {\n return this.lifetimeData[entity];\n }\n getPeriodCount(entity, period) {\n const timed = (this.selectedPeriod === 'custom' ? this.customPeriodData : this.timedData)[entity];\n let count = 0;\n for (const t in timed) {\n const time = parseInt(t);\n if (time >= period.start && time < period.end) {\n count += timed[time];\n }\n }\n return count;\n }\n getLastPeriod(thisPeriod) {\n return {\n start: thisPeriod.start - (thisPeriod.end - thisPeriod.start),\n end: thisPeriod.start\n };\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsWidget', StatisticsWidget);","import ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport StatisticsWidget from './StatisticsWidget';\nexport default class StatisticsPage extends ExtensionPage {\n content() {\n return m(\"div\", {\n className: \"StatisticsPage\"\n }, m(\"div\", {\n className: \"container\"\n }, m(StatisticsWidget, null)));\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsPage', StatisticsPage);","import app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport DashboardPage from 'flarum/admin/components/DashboardPage';\nimport MiniStatisticsWidget from './components/MiniStatisticsWidget';\nimport StatisticsPage from './components/StatisticsPage';\napp.initializers.add('flarum-statistics', () => {\n extend(DashboardPage.prototype, 'availableWidgets', function (widgets) {\n widgets.add('statistics', m(MiniStatisticsWidget, null), 20);\n });\n app.extensionData.for('flarum-statistics').registerPage(StatisticsPage);\n});"],"names":["module","exports","e","n","r","i","s","u","a","o","f","h","c","d","l","$","y","M","name","weekdays","split","months","ordinal","t","m","String","length","Array","join","v","z","utcOffset","Math","abs","floor","date","year","month","clone","add","ceil","p","w","D","ms","Q","toLowerCase","replace","g","_","S","args","arguments","O","locale","$L","utc","$u","x","$x","$offset","this","parse","prototype","$d","Date","NaN","test","match","substring","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","toString","isSame","startOf","endOf","isAfter","isBefore","$g","set","unix","valueOf","getTime","toDate","apply","slice","$locale","weekStart","$set","min","daysInMonth","get","Number","round","subtract","format","invalidDate","meridiem","YY","YYYY","MM","MMM","monthsShort","MMMM","DD","dd","weekdaysMin","ddd","weekdaysShort","dddd","H","HH","hh","A","mm","ss","SSS","Z","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","T","forEach","extend","$i","isDayjs","en","Ls","LTS","LT","L","LL","LLL","LLLL","formats","toUpperCase","call","local","getUTCFullYear","getUTCMonth","getUTCDate","getUTCDay","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","$localOffset","isUTC","document","querySelector","getBoundingClientRect","top","documentElement","scrollTop","body","left","scrollLeft","offsetParent","bottom","window","innerHeight","clientHeight","right","innerWidth","clientWidth","titleHeight","margins","paddings","legendHeight","parseFloat","toFixed","fill","concat","sin","Zt","cos","isNaN","isFinite","Ft","isArray","b","log10","pow","k","push","sqrt","angle","atan2","PI","reduce","ie","parseInt","createElementNS","appendChild","parentNode","insertBefore","Object","keys","map","style","textContent","setAttribute","inside","id","x1","x2","y1","y2","offset","N","className","transform","styles","stroke","j","width","height","rx","Y","fontSize","re","dy","le","textAnchor","innerHTML","B","oe","ae","V","lineType","shortenNumbers","ve","tt","pe","it","zeroLine","Vt","nodeName","childNodes","ce","getAttribute","st","rt","cloneNode","attributeName","from","to","begin","dur","values","keySplines","ge","keyTimes","calcMode","type","ot","webkitTransform","msTransform","mozTransform","oTransform","lt","Ut","replaceChild","ut","removeChild","setTimeout","fe","ct","classList","create","me","firstChild","dt","setMinutes","pt","ft","vt","xt","we","ke","gt","xe","mt","yt","Ae","bt","kt","setDate","wt","Le","filter","includes","assign","constants","getData","Te","At","mantissa","exponent","Pt","Tt","Lt","unshift","max","reverse","Ot","Mt","indexOf","Ct","Dt","scaleMultiplier","Et","_t","labels","datasets","chartType","Xt","yRegions","end","start","zt","yMarkers","value","label","insertAt","head","getElementsByTagName","createElement","styleSheet","cssText","createTextNode","Symbol","iterator","constructor","Ht","Promise","resolve","then","done","reject","next","key","arg","_invoke","return","asyncIterator","throw","TypeError","It","enumerable","configurable","writable","defineProperty","Rt","Function","getOwnPropertyDescriptor","getPrototypeOf","Yt","setPrototypeOf","__proto__","Bt","ReferenceError","Gt","baseHeight","titleFontSize","Jt","Kt","$t","Qt","bar","line","pie","percentage","heatmap","donut","te","parent","colors","titleName","titleValue","listValues","titleValueFirst","setup","makeTooltip","calcPosition","container","hideTip","title","dataPointList","addEventListener","index","formatted","offsetWidth","offsetHeight","valueFirst","refresh","opacity","ee","blue","violet","red","orange","yellow","green","purple","magenta","black","grey","exec","ne","se","ue","dot","heat_square","he","attributes","specified","nodeValue","de","ease","linear","easein","easeout","easeinout","ye","HTMLElement","Error","rawChartArgs","realData","prepareData","data","prepareFirstData","validateColors","config","showTooltip","showLegend","isNavigable","animate","truncateLegends","measures","JSON","stringify","setMeasures","argHeight","state","options","initTimeout","overlays","configure","P","console","warn","boundDrawFn","draw","ResizeObserver","resizeObserver","observe","disconnect","removeEventListener","makeContainer","updateWidth","independentWidth","tip","bindTooltip","calc","makeChartArea","setupComponents","components","drawArea","render","update","renderLegend","setupNavigation","baseWidth","getComputedStyle","paddingLeft","paddingRight","svg","C","svgDefs","titleEL","legendArea","updateTipOffset","Map","error","make","updateNav","makeOverlay","bindUnits","bindOverlay","keyActions","onEnterKey","bind","onLeftArrow","onUpArrow","onRightArrow","onDownArrow","event","keyCode","Blob","URL","createObjectURL","href","download","click","revokeObjectURL","ht","be","formatTooltipY","tooltipOptions","maxSlices","maxLegendPoints","sliceTotals","sort","grandTotal","center","legendTotals","cx","cy","dx","R","Pe","layerClass","layerTransform","makeElements","animateElements","store","layer","oldData","donutSlices","sliceStrings","strokeWidth","transition","pieSlices","percentageBars","xPositions","F","widths","barHeight","barDepth","yAxis","positions","pos","mode","U","xAxis","G","calcLabels","labelPos","q","position","X","startPos","endPos","et","heatDomain","colWidth","rowHeight","squareSize","radius","xTranslate","serializedSubDomains","cols","yyyyMmDd","dataValue","barGraph","unitType","units","yPositions","minHeight","J","barWidth","color","offsets","barsWidth","lineGraph","paths","hideLine","spline","heatline","path","regionFill","region","hideDots","K","valuesOverPoints","at","nt","Oe","barOptions","depth","target","formattedLabels","setValues","showTip","Me","mouseMove","mouseLeave","hoverRadio","startAngle","clockWise","slicesProperties","startPosition","endPosition","E","total","endAngle","calTranslateByAngle","pageX","pageY","formatted_labels","curActiveSliceIndex","curActiveSlice","hoverSlice","Ce","countLabel","startSubDomain","startSubDomainIndex","discreteDomains","noOfWeeks","setFullYear","dataPoints","firstWeekStart","distribution","St","domainConfigs","getDomains","getDomainConfig","getCol","getSubDomainConfig","De","lineOptions","axisOptions","xAxisMode","yAxisMode","xIsSeries","shortenYAxisNumbers","formatTooltipX","calcXPositions","calcYAxisParameters","getAllYValues","makeDataByIndex","datasetLength","unitWidth","xOffset","calcDatasetPoints","calcYExtremes","calcYRegions","cumulativeYs","cumulativeYPos","stacked","yExtremes","Wt","spaceRatio","dotSize","dataUnitComponents","dataByIndex","yPos","formattedLabel","xPos","yExtreme","mapTooltipXPosition","Nt","I","overlayGuides","overlay","currentIndex","updateOverlay","setCurrentDataPoint","createEvent","initEvent","dispatchEvent","getDataPoint","splice","Ne","W","Se","_e","freeze","Chart","jt","PercentageChart","PieChart","Heatmap","AxisChart","ze","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","obj","prop","hasOwnProperty","toStringTag","flarum","reg","_typeof","_defineProperty","input","hint","prim","toPrimitive","res","toPropertyKey","MiniStatisticsWidget","super","oncreate","vnode","loadLifetimeData","async","loadingLifetime","redraw","method","url","params","period","lifetimeData","content","entities","entity","totalCount","getTotalCount","display","StatisticsWidgetDateSelectionModal","inputs","startDateVal","endDateVal","ids","startDate","endDate","oninit","attrs","items","toArray","htmlFor","onchange","updateState","field","currentTarget","submitData","hour","minute","second","millisecond","onsubmit","preventDefault","alertAttrs","controls","onModalSubmit","hide","StatisticsWidget","acc","curr","model","loadingTimed","timedData","todayDate","setUTCHours","today","periods","step","last_7_days","previous_7_days","last_28_days","previous_28_days","last_12_months","selectedPeriod","loadingCustom","range","customPeriod","dateRange","customPeriodData","_this$customPeriod","_this$customPeriod2","loadingSelectedEntity","selectedEntity","thisPeriod","loadCustomRangeData","loadTimedData","size","disabled","buttonClassName","caretIcon","active","onclick","changePeriod","icon","dates","fromDate","thisPeriodCount","getPeriodCount","lastPeriodCount","getLastPeriod","periodChange","changeEntity","drawChart","onupdate","noData","text","chart","export","_this$customPeriod3","_this$customPeriod4","chartEntity","chartPeriod","periodLength","lastPeriod","compareDocumentPosition","dom","timed","count","time","StatisticsPage","widgets","registerPage"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/statistics/../../../node_modules/dayjs/dayjs.min.js","webpack://@flarum/statistics/../../../node_modules/dayjs/plugin/localizedFormat.js","webpack://@flarum/statistics/../../../node_modules/dayjs/plugin/utc.js","webpack://@flarum/statistics/../src/js/utils/dom.js","webpack://@flarum/statistics/../src/js/utils/constants.js","webpack://@flarum/statistics/../src/js/utils/helpers.js","webpack://@flarum/statistics/../src/js/utils/draw-utils.js","webpack://@flarum/statistics/../src/js/utils/colors.js","webpack://@flarum/statistics/../src/js/utils/draw.js","webpack://@flarum/statistics/../src/js/utils/animate.js","webpack://@flarum/statistics/../src/js/utils/animation.js","webpack://@flarum/statistics/../src/js/utils/export.js","webpack://@flarum/statistics/../src/js/utils/date-utils.js","webpack://@flarum/statistics/../src/js/objects/ChartComponents.js","webpack://@flarum/statistics/../src/js/utils/intervals.js","webpack://@flarum/statistics/../src/js/utils/axis-chart-utils.js","webpack://@flarum/statistics/../node_modules/style-inject/dist/style-inject.es.js","webpack://@flarum/statistics/../src/js/objects/SvgTip.js","webpack://@flarum/statistics/../src/css/chartsCss.js","webpack://@flarum/statistics/../src/js/charts/BaseChart.js","webpack://@flarum/statistics/../src/js/charts/AggregationChart.js","webpack://@flarum/statistics/../src/js/charts/PercentageChart.js","webpack://@flarum/statistics/../src/js/charts/PieChart.js","webpack://@flarum/statistics/../src/js/charts/Heatmap.js","webpack://@flarum/statistics/../src/js/charts/AxisChart.js","webpack://@flarum/statistics/../src/js/charts/DonutChart.js","webpack://@flarum/statistics/../src/js/chart.js","webpack://@flarum/statistics/../src/js/index.js","webpack://@flarum/statistics/webpack/bootstrap","webpack://@flarum/statistics/webpack/runtime/compat get default export","webpack://@flarum/statistics/webpack/runtime/define property getters","webpack://@flarum/statistics/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/statistics/webpack/runtime/make namespace object","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/DashboardPage')\"","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/DashboardWidget')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/abbreviateNumber')\"","webpack://@flarum/statistics/./src/admin/components/MiniStatisticsWidget.tsx","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/SelectDropdown')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Placeholder')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Icon')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/utils/generateElementId')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/statistics/./src/admin/components/StatisticsWidgetDateSelectionModal.tsx","webpack://@flarum/statistics/./src/admin/components/StatisticsWidget.tsx","webpack://@flarum/statistics/./src/admin/components/StatisticsPage.tsx","webpack://@flarum/statistics/./src/admin/index.tsx"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",f=\"month\",h=\"quarter\",c=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|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,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t) {\n\tvar element = document.createElement(tag);\n\n\tfor (var i in o) {\n\t\tvar val = o[i];\n\n\t\tif (i === \"inside\") {\n\t\t\t$(val).appendChild(element);\n\t\t}\n\t\telse if (i === \"around\") {\n\t\t\tvar ref = $(val);\n\t\t\tref.parentNode.insertBefore(element, ref);\n\t\t\telement.appendChild(ref);\n\n\t\t} else if (i === \"styles\") {\n\t\t\tif(typeof val === \"object\") {\n\t\t\t\tObject.keys(val).map(prop => {\n\t\t\t\t\telement.style[prop] = val[prop];\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (i in element ) {\n\t\t\telement[i] = val;\n\t\t}\n\t\telse {\n\t\t\telement.setAttribute(i, val);\n\t\t}\n\t}\n\n\treturn element;\n};\n\nexport function getOffset(element) {\n\tlet rect = element.getBoundingClientRect();\n\treturn {\n\t\t// https://stackoverflow.com/a/7436602/6495043\n\t\t// rect.top varies with scroll, so we add whatever has been\n\t\t// scrolled to it to get absolute distance from actual page top\n\t\ttop: rect.top + (document.documentElement.scrollTop || document.body.scrollTop),\n\t\tleft: rect.left + (document.documentElement.scrollLeft || document.body.scrollLeft)\n\t};\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n// an element's offsetParent property will return null whenever it, or any of its parents,\n// is hidden via the display style property.\nexport function isHidden(el) {\n\treturn (el.offsetParent === null);\n}\n\nexport function isElementInViewport(el) {\n\t// Although straightforward: https://stackoverflow.com/a/7557433/6495043\n\tvar rect = el.getBoundingClientRect();\n\n\treturn (\n\t\trect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */\n rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */\n\t);\n}\n\nexport function getElementContentWidth(element) {\n\tvar styles = window.getComputedStyle(element);\n\tvar padding = parseFloat(styles.paddingLeft) +\n\t\tparseFloat(styles.paddingRight);\n\n\treturn element.clientWidth - padding;\n}\n\nexport function bind(element, o){\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function (event) {\n\t\t\t\telement.addEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function unbind(element, o){\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function(event) {\n\t\t\t\telement.removeEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function fire(target, type, properties) {\n\tvar evt = document.createEvent(\"HTMLEvents\");\n\n\tevt.initEvent(type, true, true );\n\n\tfor (var j in properties) {\n\t\tevt[j] = properties[j];\n\t}\n\n\treturn target.dispatchEvent(evt);\n}\n\n// https://css-tricks.com/snippets/javascript/loop-queryselectorall-matches/\nexport function forEachNode(nodeList, callback, scope) {\n\tif(!nodeList) return;\n\tfor (var i = 0; i < nodeList.length; i++) {\n\t\tcallback.call(scope, nodeList[i], i);\n\t}\n}\n\nexport function activate($parent, $child, commonClass, activeClass='active', index = -1) {\n\tlet $children = $parent.querySelectorAll(`.${commonClass}.${activeClass}`);\n\n\tforEachNode($children, (node, i) => {\n\t\tif(index >= 0 && i <= index) return;\n\t\tnode.classList.remove(activeClass);\n\t});\n\n\t$child.classList.add(activeClass);\n}\n","export const ALL_CHART_TYPES = ['line', 'scatter', 'bar', 'percentage', 'heatmap', 'pie'];\n\nexport const COMPATIBLE_CHARTS = {\n\tbar: ['line', 'scatter', 'percentage', 'pie'],\n\tline: ['scatter', 'bar', 'percentage', 'pie'],\n\tpie: ['line', 'scatter', 'percentage', 'bar'],\n\tpercentage: ['bar', 'line', 'scatter', 'pie'],\n\theatmap: []\n};\n\nexport const DATA_COLOR_DIVISIONS = {\n\tbar: 'datasets',\n\tline: 'datasets',\n\tpie: 'labels',\n\tpercentage: 'labels',\n\theatmap: HEATMAP_DISTRIBUTION_SIZE\n};\n\nexport const BASE_MEASURES = {\n\tmargins: {\n\t\ttop: 10,\n\t\tbottom: 10,\n\t\tleft: 20,\n\t\tright: 20\n\t},\n\tpaddings: {\n\t\ttop: 20,\n\t\tbottom: 40,\n\t\tleft: 30,\n\t\tright: 10\n\t},\n\n\tbaseHeight: 240,\n\ttitleHeight: 20,\n\tlegendHeight: 30,\n\n\ttitleFontSize: 12,\n};\n\nexport function getTopOffset(m) {\n\treturn m.titleHeight + m.margins.top + m.paddings.top;\n}\n\nexport function getLeftOffset(m) {\n\treturn m.margins.left + m.paddings.left;\n}\n\nexport function getExtraHeight(m) {\n\tlet totalExtraHeight = m.margins.top + m.margins.bottom\n\t\t+ m.paddings.top + m.paddings.bottom\n\t\t+ m.titleHeight + m.legendHeight;\n\treturn totalExtraHeight;\n}\n\nexport function getExtraWidth(m) {\n\tlet totalExtraWidth = m.margins.left + m.margins.right\n\t\t+ m.paddings.left + m.paddings.right;\n\n\treturn totalExtraWidth;\n}\n\nexport const INIT_CHART_UPDATE_TIMEOUT = 700;\nexport const CHART_POST_ANIMATE_TIMEOUT = 400;\n\nexport const DEFAULT_AXIS_CHART_TYPE = 'line';\nexport const AXIS_DATASET_CHART_TYPES = ['line', 'bar'];\n\nexport const AXIS_LEGEND_BAR_SIZE = 100;\n\nexport const BAR_CHART_SPACE_RATIO = 0.5;\nexport const MIN_BAR_PERCENT_HEIGHT = 0.00;\n\nexport const LINE_CHART_DOT_SIZE = 4;\nexport const DOT_OVERLAY_SIZE_INCR = 4;\n\nexport const PERCENTAGE_BAR_DEFAULT_HEIGHT = 20;\nexport const PERCENTAGE_BAR_DEFAULT_DEPTH = 2;\n\n// Fixed 5-color theme,\n// More colors are difficult to parse visually\nexport const HEATMAP_DISTRIBUTION_SIZE = 5;\n\nexport const HEATMAP_SQUARE_SIZE = 10;\nexport const HEATMAP_GUTTER_SIZE = 2;\n\nexport const DEFAULT_CHAR_WIDTH = 7;\n\nexport const TOOLTIP_POINTER_TRIANGLE_HEIGHT = 5;\n\nconst DEFAULT_CHART_COLORS = ['light-blue', 'blue', 'violet', 'red', 'orange',\n\t'yellow', 'green', 'light-green', 'purple', 'magenta', 'light-grey', 'dark-grey'];\nconst HEATMAP_COLORS_GREEN = ['#ebedf0', '#c6e48b', '#7bc96f', '#239a3b', '#196127'];\nexport const HEATMAP_COLORS_BLUE = ['#ebedf0', '#c0ddf9', '#73b3f3', '#3886e1', '#17459e'];\nexport const HEATMAP_COLORS_YELLOW = ['#ebedf0', '#fdf436', '#ffc700', '#ff9100', '#06001c'];\n\nexport const DEFAULT_COLORS = {\n\tbar: DEFAULT_CHART_COLORS,\n\tline: DEFAULT_CHART_COLORS,\n\tpie: DEFAULT_CHART_COLORS,\n\tpercentage: DEFAULT_CHART_COLORS,\n\theatmap: HEATMAP_COLORS_GREEN,\n\tdonut: DEFAULT_CHART_COLORS\n};\n\n// Universal constants\nexport const ANGLE_RATIO = Math.PI / 180;\nexport const FULL_ANGLE = 360;\n","import { ANGLE_RATIO } from './constants';\n\n/**\n * Returns the value of a number upto 2 decimal places.\n * @param {Number} d Any number\n */\nexport function floatTwo(d) {\n\treturn parseFloat(d.toFixed(2));\n}\n\n/**\n * Returns whether or not two given arrays are equal.\n * @param {Array} arr1 First array\n * @param {Array} arr2 Second array\n */\nexport function arraysEqual(arr1, arr2) {\n\tif(arr1.length !== arr2.length) return false;\n\tlet areEqual = true;\n\tarr1.map((d, i) => {\n\t\tif(arr2[i] !== d) areEqual = false;\n\t});\n\treturn areEqual;\n}\n\n/**\n * Shuffles array in place. ES6 version\n * @param {Array} array An array containing the items.\n */\nexport function shuffle(array) {\n\t// Awesomeness: https://bost.ocks.org/mike/shuffle/\n\t// https://stackoverflow.com/a/2450976/6495043\n\t// https://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array?noredirect=1&lq=1\n\n\tfor (let i = array.length - 1; i > 0; i--) {\n\t\tlet j = Math.floor(Math.random() * (i + 1));\n\t\t[array[i], array[j]] = [array[j], array[i]];\n\t}\n\n\treturn array;\n}\n\n/**\n * Fill an array with extra points\n * @param {Array} array Array\n * @param {Number} count number of filler elements\n * @param {Object} element element to fill with\n * @param {Boolean} start fill at start?\n */\nexport function fillArray(array, count, element, start=false) {\n\tif(!element) {\n\t\telement = start ? array[0] : array[array.length - 1];\n\t}\n\tlet fillerArray = new Array(Math.abs(count)).fill(element);\n\tarray = start ? fillerArray.concat(array) : array.concat(fillerArray);\n\treturn array;\n}\n\n/**\n * Returns pixel width of string.\n * @param {String} string\n * @param {Number} charWidth Width of single char in pixels\n */\nexport function getStringWidth(string, charWidth) {\n\treturn (string+\"\").length * charWidth;\n}\n\nexport function bindChange(obj, getFn, setFn) {\n\treturn new Proxy(obj, {\n\t\tset: function(target, prop, value) {\n\t\t\tsetFn();\n\t\t\treturn Reflect.set(target, prop, value);\n\t\t},\n\t\tget: function(target, prop) {\n\t\t\tgetFn();\n\t\t\treturn Reflect.get(target, prop);\n\t\t}\n\t});\n}\n\n// https://stackoverflow.com/a/29325222\nexport function getRandomBias(min, max, bias, influence) {\n\tconst range = max - min;\n\tconst biasValue = range * bias + min;\n\tvar rnd = Math.random() * range + min,\t\t// random in range\n\t\tmix = Math.random() * influence;\t\t// random mixer\n\treturn rnd * (1 - mix) + biasValue * mix;\t// mix full range and bias\n}\n\nexport function getPositionByAngle(angle, radius) {\n\treturn {\n\t\tx: Math.sin(angle * ANGLE_RATIO) * radius,\n\t\ty: Math.cos(angle * ANGLE_RATIO) * radius,\n\t};\n}\n\n/**\n * Check if a number is valid for svg attributes\n * @param {object} candidate Candidate to test\n * @param {Boolean} nonNegative flag to treat negative number as invalid\n */\nexport function isValidNumber(candidate, nonNegative=false) {\n\tif (Number.isNaN(candidate)) return false;\n\telse if (candidate === undefined) return false;\n\telse if (!Number.isFinite(candidate)) return false;\n\telse if (nonNegative && candidate < 0) return false;\n\telse return true;\n}\n\n/**\n * Round a number to the closes precision, max max precision 4\n * @param {Number} d Any Number\n */\nexport function round(d) {\n\t// https://floating-point-gui.de/\n\t// https://www.jacklmoore.com/notes/rounding-in-javascript/\n\treturn Number(Math.round(d + 'e4') + 'e-4');\n}\n\n/**\n * Creates a deep clone of an object\n * @param {Object} candidate Any Object\n */\n export function deepClone(candidate) {\n\tlet cloned, value, key;\n \n\tif (candidate instanceof Date) {\n\t return new Date(candidate.getTime());\n\t}\n \n\tif (typeof candidate !== \"object\" || candidate === null) {\n\t return candidate;\n\t}\n \n\tcloned = Array.isArray(candidate) ? [] : {};\n \n\tfor (key in candidate) {\n\t value = candidate[key];\n \n\t cloned[key] = deepClone(value);\n\t}\n \n\treturn cloned;\n }","import { fillArray } from './helpers';\n\nexport function getBarHeightAndYAttr(yTop, zeroLine) {\n\tlet height, y;\n\tif (yTop <= zeroLine) {\n\t\theight = zeroLine - yTop;\n\t\ty = yTop;\n\t} else {\n\t\theight = yTop - zeroLine;\n\t\ty = zeroLine;\n\t}\n\n\treturn [height, y];\n}\n\nexport function equilizeNoOfElements(array1, array2,\n\textraCount = array2.length - array1.length) {\n\n\t// Doesn't work if either has zero elements.\n\tif(extraCount > 0) {\n\t\tarray1 = fillArray(array1, extraCount);\n\t} else {\n\t\tarray2 = fillArray(array2, extraCount);\n\t}\n\treturn [array1, array2];\n}\n\nexport function truncateString(txt, len) {\n\tif (!txt) {\n\t\treturn;\n\t}\n\tif (txt.length > len) {\n\t\treturn txt.slice(0, len-3) + '...';\n\t} else {\n\t\treturn txt;\n\t}\n}\n\nexport function shortenLargeNumber(label) {\n\tlet number;\n\tif (typeof label === 'number') number = label;\n\telse if (typeof label === 'string') {\n\t\tnumber = Number(label);\n\t\tif (Number.isNaN(number)) return label;\n\t}\n\n\t// Using absolute since log wont work for negative numbers\n\tlet p = Math.floor(Math.log10(Math.abs(number)));\n\tif (p <= 2) return number; // Return as is for a 3 digit number of less\n\tlet\tl = Math.floor(p / 3);\n\tlet shortened = (Math.pow(10, p - l * 3) * +(number / Math.pow(10, p)).toFixed(1));\n\n\t// Correct for floating point error upto 2 decimal places\n\treturn Math.round(shortened*100)/100 + ' ' + ['', 'K', 'M', 'B', 'T'][l];\n}\n\n// cubic bezier curve calculation (from example by François Romain)\nexport function getSplineCurvePointsStr(xList, yList) {\n\n\tlet points=[];\n\tfor(let i=0;i {\n\t\tlet lengthX = pointB[0] - pointA[0];\n\t\tlet lengthY = pointB[1] - pointA[1];\n\t\treturn {\n\t\t\tlength: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n\t\t\tangle: Math.atan2(lengthY, lengthX)\n\t\t};\n\t};\n \n\tlet controlPoint = (current, previous, next, reverse) => {\n\t\tlet p = previous || current;\n\t\tlet n = next || current;\n\t\tlet o = line(p, n);\n\t\tlet angle = o.angle + (reverse ? Math.PI : 0);\n\t\tlet length = o.length * smoothing;\n\t\tlet x = current[0] + Math.cos(angle) * length;\n\t\tlet y = current[1] + Math.sin(angle) * length;\n\t\treturn [x, y];\n\t};\n \n\tlet bezierCommand = (point, i, a) => {\n\t\tlet cps = controlPoint(a[i - 1], a[i - 2], point);\n\t\tlet cpe = controlPoint(point, a[i - 1], a[i + 1], true);\n\t\treturn `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}`;\n\t};\n \n\tlet pointStr = (points, command) => {\n\t\treturn points.reduce((acc, point, i, a) => i === 0\n\t\t\t? `${point[0]},${point[1]}`\n\t\t\t: `${acc} ${command(point, i, a)}`, '');\n\t};\n \n\treturn pointStr(points, bezierCommand);\n}\n","const PRESET_COLOR_MAP = {\n\t'light-blue': '#7cd6fd',\n\t'blue': '#5e64ff',\n\t'violet': '#743ee2',\n\t'red': '#ff5858',\n\t'orange': '#ffa00a',\n\t'yellow': '#feef72',\n\t'green': '#28a745',\n\t'light-green': '#98d85b',\n\t'purple': '#b554ff',\n\t'magenta': '#ffa3ef',\n\t'black': '#36114C',\n\t'grey': '#bdd3e6',\n\t'light-grey': '#f0f4f7',\n\t'dark-grey': '#b8c2cc'\n};\n\nfunction limitColor(r){\n\tif (r > 255) return 255;\n\telse if (r < 0) return 0;\n\treturn r;\n}\n\nexport function lightenDarkenColor(color, amt) {\n\tlet col = getColor(color);\n\tlet usePound = false;\n\tif (col[0] == \"#\") {\n\t\tcol = col.slice(1);\n\t\tusePound = true;\n\t}\n\tlet num = parseInt(col,16);\n\tlet r = limitColor((num >> 16) + amt);\n\tlet b = limitColor(((num >> 8) & 0x00FF) + amt);\n\tlet g = limitColor((num & 0x0000FF) + amt);\n\treturn (usePound?\"#\":\"\") + (g | (b << 8) | (r << 16)).toString(16);\n}\n\nexport function isValidColor(string) {\n\t// https://stackoverflow.com/a/32685393\n\tlet HEX_RE = /(^\\s*)(#)((?:[A-Fa-f0-9]{3}){1,2})$/i;\n\tlet RGB_RE = /(^\\s*)(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/i;\n\treturn HEX_RE.test(string) || RGB_RE.test(string);\n}\n\nexport const getColor = (color) => {\n\t// When RGB color, convert to hexadecimal (alpha value is omitted)\n\tif((/rgb[a]{0,1}\\([\\d, ]+\\)/gim).test(color)) {\n\t\treturn (/\\D+(\\d*)\\D+(\\d*)\\D+(\\d*)/gim).exec(color)\n\t\t\t.map((x, i) => (i !== 0 ? Number(x).toString(16) : '#'))\n\t\t\t.reduce((c, ch) => `${c}${ch}`);\n\t}\n\treturn PRESET_COLOR_MAP[color] || color;\n};\n","import { getBarHeightAndYAttr, truncateString, shortenLargeNumber, getSplineCurvePointsStr } from './draw-utils';\nimport { getStringWidth, isValidNumber } from './helpers';\nimport { DOT_OVERLAY_SIZE_INCR, PERCENTAGE_BAR_DEFAULT_DEPTH } from './constants';\nimport { lightenDarkenColor } from './colors';\n\nexport const AXIS_TICK_LENGTH = 6;\nconst LABEL_MARGIN = 4;\nconst LABEL_MAX_CHARS = 15;\nexport const FONT_SIZE = 10;\nconst BASE_LINE_COLOR = '#dadada';\nconst FONT_FILL = '#555b51';\n\nfunction $(expr, con) {\n\treturn typeof expr === \"string\"? (con || document).querySelector(expr) : expr || null;\n}\n\nexport function createSVG(tag, o) {\n\tvar element = document.createElementNS(\"http://www.w3.org/2000/svg\", tag);\n\n\tfor (var i in o) {\n\t\tvar val = o[i];\n\n\t\tif (i === \"inside\") {\n\t\t\t$(val).appendChild(element);\n\t\t}\n\t\telse if (i === \"around\") {\n\t\t\tvar ref = $(val);\n\t\t\tref.parentNode.insertBefore(element, ref);\n\t\t\telement.appendChild(ref);\n\n\t\t} else if (i === \"styles\") {\n\t\t\tif(typeof val === \"object\") {\n\t\t\t\tObject.keys(val).map(prop => {\n\t\t\t\t\telement.style[prop] = val[prop];\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tif(i === \"className\") { i = \"class\"; }\n\t\t\tif(i === \"innerHTML\") {\n\t\t\t\telement['textContent'] = val;\n\t\t\t} else {\n\t\t\t\telement.setAttribute(i, val);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn element;\n}\n\nfunction renderVerticalGradient(svgDefElem, gradientId) {\n\treturn createSVG('linearGradient', {\n\t\tinside: svgDefElem,\n\t\tid: gradientId,\n\t\tx1: 0,\n\t\tx2: 0,\n\t\ty1: 0,\n\t\ty2: 1\n\t});\n}\n\nfunction setGradientStop(gradElem, offset, color, opacity) {\n\treturn createSVG('stop', {\n\t\t'inside': gradElem,\n\t\t'style': `stop-color: ${color}`,\n\t\t'offset': offset,\n\t\t'stop-opacity': opacity\n\t});\n}\n\nexport function makeSVGContainer(parent, className, width, height) {\n\treturn createSVG('svg', {\n\t\tclassName: className,\n\t\tinside: parent,\n\t\twidth: width,\n\t\theight: height\n\t});\n}\n\nexport function makeSVGDefs(svgContainer) {\n\treturn createSVG('defs', {\n\t\tinside: svgContainer,\n\t});\n}\n\nexport function makeSVGGroup(className, transform='', parent=undefined) {\n\tlet args = {\n\t\tclassName: className,\n\t\ttransform: transform\n\t};\n\tif(parent) args.inside = parent;\n\treturn createSVG('g', args);\n}\n\nexport function wrapInSVGGroup(elements, className='') {\n\tlet g = createSVG('g', {\n\t\tclassName: className\n\t});\n\telements.forEach(e => g.appendChild(e));\n\treturn g;\n}\n\nexport function makePath(pathStr, className='', stroke='none', fill='none', strokeWidth=2) {\n\treturn createSVG('path', {\n\t\tclassName: className,\n\t\td: pathStr,\n\t\tstyles: {\n\t\t\tstroke: stroke,\n\t\t\tfill: fill,\n\t\t\t'stroke-width': strokeWidth\n\t\t}\n\t});\n}\n\nexport function makeArcPathStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, arcEndY] = [center.x + endPosition.x, center.y + endPosition.y];\n\treturn `M${center.x} ${center.y}\n\t\tL${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY} z`;\n}\n\nexport function makeCircleStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, midArc, arcEndY] = [center.x + endPosition.x, center.y * 2, center.y + endPosition.y];\n\treturn `M${center.x} ${center.y}\n\t\tL${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${midArc} z\n\t\tL${arcStartX} ${midArc}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY} z`;\n}\n\nexport function makeArcStrokePathStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, arcEndY] = [center.x + endPosition.x, center.y + endPosition.y];\n\n\treturn `M${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY}`;\n}\n\nexport function makeStrokeCircleStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, midArc, arcEndY] = [center.x + endPosition.x, radius * 2 + arcStartY, center.y + startPosition.y];\n\n\treturn `M${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${midArc}\n\t\tM${arcStartX} ${midArc}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY}`;\n}\n\nexport function makeGradient(svgDefElem, color, lighter = false) {\n\tlet gradientId ='path-fill-gradient' + '-' + color + '-' +(lighter ? 'lighter' : 'default');\n\tlet gradientDef = renderVerticalGradient(svgDefElem, gradientId);\n\tlet opacities = [1, 0.6, 0.2];\n\tif(lighter) {\n\t\topacities = [0.4, 0.2, 0];\n\t}\n\n\tsetGradientStop(gradientDef, \"0%\", color, opacities[0]);\n\tsetGradientStop(gradientDef, \"50%\", color, opacities[1]);\n\tsetGradientStop(gradientDef, \"100%\", color, opacities[2]);\n\n\treturn gradientId;\n}\n\nexport function percentageBar(x, y, width, height,\n\tdepth=PERCENTAGE_BAR_DEFAULT_DEPTH, fill='none') {\n\n\tlet args = {\n\t\tclassName: 'percentage-bar',\n\t\tx: x,\n\t\ty: y,\n\t\twidth: width,\n\t\theight: height,\n\t\tfill: fill,\n\t\tstyles: {\n\t\t\t'stroke': lightenDarkenColor(fill, -25),\n\t\t\t// Diabolically good: https://stackoverflow.com/a/9000859\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray\n\t\t\t'stroke-dasharray': `0, ${height + width}, ${width}, ${height}`,\n\t\t\t'stroke-width': depth\n\t\t},\n\t};\n\n\treturn createSVG(\"rect\", args);\n}\n\nexport function heatSquare(className, x, y, size, radius, fill='none', data={}) {\n\tlet args = {\n\t\tclassName: className,\n\t\tx: x,\n\t\ty: y,\n\t\twidth: size,\n\t\theight: size,\n\t\trx: radius,\n\t\tfill: fill\n\t};\n\n\tObject.keys(data).map(key => {\n\t\targs[key] = data[key];\n\t});\n\n\treturn createSVG(\"rect\", args);\n}\n\nexport function legendBar(x, y, size, fill='none', label, truncate=false) {\n\tlabel = truncate ? truncateString(label, LABEL_MAX_CHARS) : label;\n\n\tlet args = {\n\t\tclassName: 'legend-bar',\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: size,\n\t\theight: '2px',\n\t\tfill: fill\n\t};\n\tlet text = createSVG('text', {\n\t\tclassName: 'legend-dataset-text',\n\t\tx: 0,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE * 2) + 'px',\n\t\t'font-size': (FONT_SIZE * 1.2) + 'px',\n\t\t'text-anchor': 'start',\n\t\tfill: FONT_FILL,\n\t\tinnerHTML: label\n\t});\n\n\tlet group = createSVG('g', {\n\t\ttransform: `translate(${x}, ${y})`\n\t});\n\tgroup.appendChild(createSVG(\"rect\", args));\n\tgroup.appendChild(text);\n\n\treturn group;\n}\n\nexport function legendDot(x, y, size, fill='none', label, truncate=false) {\n\tlabel = truncate ? truncateString(label, LABEL_MAX_CHARS) : label;\n\n\tlet args = {\n\t\tclassName: 'legend-dot',\n\t\tcx: 0,\n\t\tcy: 0,\n\t\tr: size,\n\t\tfill: fill\n\t};\n\tlet text = createSVG('text', {\n\t\tclassName: 'legend-dataset-text',\n\t\tx: 0,\n\t\ty: 0,\n\t\tdx: (FONT_SIZE) + 'px',\n\t\tdy: (FONT_SIZE/3) + 'px',\n\t\t'font-size': (FONT_SIZE * 1.2) + 'px',\n\t\t'text-anchor': 'start',\n\t\tfill: FONT_FILL,\n\t\tinnerHTML: label\n\t});\n\n\tlet group = createSVG('g', {\n\t\ttransform: `translate(${x}, ${y})`\n\t});\n\tgroup.appendChild(createSVG(\"circle\", args));\n\tgroup.appendChild(text);\n\n\treturn group;\n}\n\nexport function makeText(className, x, y, content, options = {}) {\n\tlet fontSize = options.fontSize || FONT_SIZE;\n\tlet dy = options.dy !== undefined ? options.dy : (fontSize / 2);\n\tlet fill = options.fill || FONT_FILL;\n\tlet textAnchor = options.textAnchor || 'start';\n\treturn createSVG('text', {\n\t\tclassName: className,\n\t\tx: x,\n\t\ty: y,\n\t\tdy: dy + 'px',\n\t\t'font-size': fontSize + 'px',\n\t\tfill: fill,\n\t\t'text-anchor': textAnchor,\n\t\tinnerHTML: content\n\t});\n}\n\nfunction makeVertLine(x, label, y1, y2, options={}) {\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tlet l = createSVG('line', {\n\t\tclassName: 'line-vertical ' + options.className,\n\t\tx1: 0,\n\t\tx2: 0,\n\t\ty1: y1,\n\t\ty2: y2,\n\t\tstyles: {\n\t\t\tstroke: options.stroke\n\t\t}\n\t});\n\n\tlet text = createSVG('text', {\n\t\tx: 0,\n\t\ty: y1 > y2 ? y1 + LABEL_MARGIN : y1 - LABEL_MARGIN - FONT_SIZE,\n\t\tdy: FONT_SIZE + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'middle',\n\t\tinnerHTML: label + \"\"\n\t});\n\n\tlet line = createSVG('g', {\n\t\ttransform: `translate(${ x }, 0)`\n\t});\n\n\tline.appendChild(l);\n\tline.appendChild(text);\n\n\treturn line;\n}\n\nfunction makeHoriLine(y, label, x1, x2, options={}) {\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.lineType) options.lineType = '';\n\tif (options.shortenNumbers) label = shortenLargeNumber(label);\n\n\tlet className = 'line-horizontal ' + options.className +\n\t\t(options.lineType === \"dashed\" ? \"dashed\": \"\");\n\n\tlet l = createSVG('line', {\n\t\tclassName: className,\n\t\tx1: x1,\n\t\tx2: x2,\n\t\ty1: 0,\n\t\ty2: 0,\n\t\tstyles: {\n\t\t\tstroke: options.stroke\n\t\t}\n\t});\n\n\tlet text = createSVG('text', {\n\t\tx: x1 < x2 ? x1 - LABEL_MARGIN : x1 + LABEL_MARGIN,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / 2 - 2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': x1 < x2 ? 'end' : 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet line = createSVG('g', {\n\t\ttransform: `translate(0, ${y})`,\n\t\t'stroke-opacity': 1\n\t});\n\n\tif(text === 0 || text === '0') {\n\t\tline.style.stroke = \"rgba(27, 31, 35, 0.6)\";\n\t}\n\n\tline.appendChild(l);\n\tline.appendChild(text);\n\n\treturn line;\n}\n\nexport function yLine(y, label, width, options={}) {\n\tif (!isValidNumber(y)) y = 0;\n\n\tif(!options.pos) options.pos = 'left';\n\tif(!options.offset) options.offset = 0;\n\tif(!options.mode) options.mode = 'span';\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.className) options.className = '';\n\n\tlet x1 = -1 * AXIS_TICK_LENGTH;\n\tlet x2 = options.mode === 'span' ? width + AXIS_TICK_LENGTH : 0;\n\n\tif(options.mode === 'tick' && options.pos === 'right') {\n\t\tx1 = width + AXIS_TICK_LENGTH;\n\t\tx2 = width;\n\t}\n\n\t// let offset = options.pos === 'left' ? -1 * options.offset : options.offset;\n\n\tx1 += options.offset;\n\tx2 += options.offset;\n\n\treturn makeHoriLine(y, label, x1, x2, {\n\t\tstroke: options.stroke,\n\t\tclassName: options.className,\n\t\tlineType: options.lineType,\n\t\tshortenNumbers: options.shortenNumbers\n\t});\n}\n\nexport function xLine(x, label, height, options={}) {\n\tif (!isValidNumber(x)) x = 0;\n\n\tif(!options.pos) options.pos = 'bottom';\n\tif(!options.offset) options.offset = 0;\n\tif(!options.mode) options.mode = 'span';\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.className) options.className = '';\n\n\t// Draw X axis line in span/tick mode with optional label\n\t// \ty2(span)\n\t// \t\t\t\t\t\t|\n\t// \t\t\t\t\t\t|\n\t//\t\t\t\tx line\t|\n\t//\t\t\t\t\t\t|\n\t// \t\t\t\t\t \t|\n\t// ---------------------+-- y2(tick)\n\t//\t\t\t\t\t\t|\n\t//\t\t\t\t\t\t\ty1\n\n\tlet y1 = height + AXIS_TICK_LENGTH;\n\tlet y2 = options.mode === 'span' ? -1 * AXIS_TICK_LENGTH : height;\n\n\tif(options.mode === 'tick' && options.pos === 'top') {\n\t\t// top axis ticks\n\t\ty1 = -1 * AXIS_TICK_LENGTH;\n\t\ty2 = 0;\n\t}\n\n\treturn makeVertLine(x, label, y1, y2, {\n\t\tstroke: options.stroke,\n\t\tclassName: options.className,\n\t\tlineType: options.lineType\n\t});\n}\n\nexport function yMarker(y, label, width, options={}) {\n\tif(!options.labelPos) options.labelPos = 'right';\n\tlet x = options.labelPos === 'left' ? LABEL_MARGIN\n\t\t: width - getStringWidth(label, 5) - LABEL_MARGIN;\n\n\tlet labelSvg = createSVG('text', {\n\t\tclassName: 'chart-label',\n\t\tx: x,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / -2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet line = makeHoriLine(y, '', 0, width, {\n\t\tstroke: options.stroke || BASE_LINE_COLOR,\n\t\tclassName: options.className || '',\n\t\tlineType: options.lineType\n\t});\n\n\tline.appendChild(labelSvg);\n\n\treturn line;\n}\n\nexport function yRegion(y1, y2, width, label, options={}) {\n\t// return a group\n\tlet height = y1 - y2;\n\n\tlet rect = createSVG('rect', {\n\t\tclassName: `bar mini`, // remove class\n\t\tstyles: {\n\t\t\tfill: `rgba(228, 234, 239, 0.49)`,\n\t\t\tstroke: BASE_LINE_COLOR,\n\t\t\t'stroke-dasharray': `${width}, ${height}`\n\t\t},\n\t\t// 'data-point-index': index,\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: width,\n\t\theight: height\n\t});\n\n\tif(!options.labelPos) options.labelPos = 'right';\n\tlet x = options.labelPos === 'left' ? LABEL_MARGIN\n\t\t: width - getStringWidth(label+\"\", 4.5) - LABEL_MARGIN;\n\n\tlet labelSvg = createSVG('text', {\n\t\tclassName: 'chart-label',\n\t\tx: x,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / -2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet region = createSVG('g', {\n\t\ttransform: `translate(0, ${y2})`\n\t});\n\n\tregion.appendChild(rect);\n\tregion.appendChild(labelSvg);\n\n\treturn region;\n}\n\nexport function datasetBar(x, yTop, width, color, label='', index=0, offset=0, meta={}) {\n\tlet [height, y] = getBarHeightAndYAttr(yTop, meta.zeroLine);\n\ty -= offset;\n\n\tif(height === 0) {\n\t\theight = meta.minHeight;\n\t\ty -= meta.minHeight;\n\t}\n\n\t// Preprocess numbers to avoid svg building errors\n\tif (!isValidNumber(x)) x = 0;\n\tif (!isValidNumber(y)) y = 0;\n\tif (!isValidNumber(height, true)) height = 0;\n\tif (!isValidNumber(width, true)) width = 0;\n\n\tlet rect = createSVG('rect', {\n\t\tclassName: `bar mini`,\n\t\tstyle: `fill: ${color}`,\n\t\t'data-point-index': index,\n\t\tx: x,\n\t\ty: y,\n\t\twidth: width,\n\t\theight: height\n\t});\n\n\tlabel += \"\";\n\n\tif(!label && !label.length) {\n\t\treturn rect;\n\t} else {\n\t\trect.setAttribute('y', 0);\n\t\trect.setAttribute('x', 0);\n\t\tlet text = createSVG('text', {\n\t\t\tclassName: 'data-point-value',\n\t\t\tx: width/2,\n\t\t\ty: 0,\n\t\t\tdy: (FONT_SIZE / 2 * -1) + 'px',\n\t\t\t'font-size': FONT_SIZE + 'px',\n\t\t\t'text-anchor': 'middle',\n\t\t\tinnerHTML: label\n\t\t});\n\n\t\tlet group = createSVG('g', {\n\t\t\t'data-point-index': index,\n\t\t\ttransform: `translate(${x}, ${y})`\n\t\t});\n\t\tgroup.appendChild(rect);\n\t\tgroup.appendChild(text);\n\n\t\treturn group;\n\t}\n}\n\nexport function datasetDot(x, y, radius, color, label='', index=0) {\n\tlet dot = createSVG('circle', {\n\t\tstyle: `fill: ${color}`,\n\t\t'data-point-index': index,\n\t\tcx: x,\n\t\tcy: y,\n\t\tr: radius\n\t});\n\n\tlabel += \"\";\n\n\tif(!label && !label.length) {\n\t\treturn dot;\n\t} else {\n\t\tdot.setAttribute('cy', 0);\n\t\tdot.setAttribute('cx', 0);\n\n\t\tlet text = createSVG('text', {\n\t\t\tclassName: 'data-point-value',\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tdy: (FONT_SIZE / 2 * -1 - radius) + 'px',\n\t\t\t'font-size': FONT_SIZE + 'px',\n\t\t\t'text-anchor': 'middle',\n\t\t\tinnerHTML: label\n\t\t});\n\n\t\tlet group = createSVG('g', {\n\t\t\t'data-point-index': index,\n\t\t\ttransform: `translate(${x}, ${y})`\n\t\t});\n\t\tgroup.appendChild(dot);\n\t\tgroup.appendChild(text);\n\n\t\treturn group;\n\t}\n}\n\nexport function getPaths(xList, yList, color, options={}, meta={}) {\n\tlet pointsList = yList.map((y, i) => (xList[i] + ',' + y));\n\tlet pointsStr = pointsList.join(\"L\");\n\n\t// Spline\n\tif (options.spline)\n\t\tpointsStr = getSplineCurvePointsStr(xList, yList);\n\n\tlet path = makePath(\"M\"+pointsStr, 'line-graph-path', color);\n\n\t// HeatLine\n\tif(options.heatline) {\n\t\tlet gradient_id = makeGradient(meta.svgDefs, color);\n\t\tpath.style.stroke = `url(#${gradient_id})`;\n\t}\n\n\tlet paths = {\n\t\tpath: path\n\t};\n\n\t// Region\n\tif(options.regionFill) {\n\t\tlet gradient_id_region = makeGradient(meta.svgDefs, color, true);\n\n\t\tlet pathStr = \"M\" + `${xList[0]},${meta.zeroLine}L` + pointsStr + `L${xList.slice(-1)[0]},${meta.zeroLine}`;\n\t\tpaths.region = makePath(pathStr, `region-fill`, 'none', `url(#${gradient_id_region})`);\n\t}\n\n\treturn paths;\n}\n\nexport let makeOverlay = {\n\t'bar': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'rect') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\toverlay.style.fill = '#000000';\n\t\toverlay.style.opacity = '0.4';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t},\n\n\t'dot': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\tlet radius = unit.getAttribute('r');\n\t\tlet fill = unit.getAttribute('fill');\n\t\toverlay.setAttribute('r', parseInt(radius) + DOT_OVERLAY_SIZE_INCR);\n\t\toverlay.setAttribute('fill', fill);\n\t\toverlay.style.opacity = '0.6';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t},\n\n\t'heat_square': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\tlet radius = unit.getAttribute('r');\n\t\tlet fill = unit.getAttribute('fill');\n\t\toverlay.setAttribute('r', parseInt(radius) + DOT_OVERLAY_SIZE_INCR);\n\t\toverlay.setAttribute('fill', fill);\n\t\toverlay.style.opacity = '0.6';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t}\n};\n\nexport let updateOverlay = {\n\t'bar': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'rect') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['x', 'y', 'width', 'height'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n\n\t'dot': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['cx', 'cy'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n\n\t'heat_square': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['cx', 'cy'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n};\n","import { getBarHeightAndYAttr, getSplineCurvePointsStr } from './draw-utils';\n\nexport const UNIT_ANIM_DUR = 350;\nexport const PATH_ANIM_DUR = 350;\nexport const MARKER_LINE_ANIM_DUR = UNIT_ANIM_DUR;\nexport const REPLACE_ALL_NEW_DUR = 250;\n\nexport const STD_EASING = 'easein';\n\nexport function translate(unit, oldCoord, newCoord, duration) {\n\tlet old = typeof oldCoord === 'string' ? oldCoord : oldCoord.join(', ');\n\treturn [\n\t\tunit,\n\t\t{transform: newCoord.join(', ')},\n\t\tduration,\n\t\tSTD_EASING,\n\t\t\"translate\",\n\t\t{transform: old}\n\t];\n}\n\nexport function translateVertLine(xLine, newX, oldX) {\n\treturn translate(xLine, [oldX, 0], [newX, 0], MARKER_LINE_ANIM_DUR);\n}\n\nexport function translateHoriLine(yLine, newY, oldY) {\n\treturn translate(yLine, [0, oldY], [0, newY], MARKER_LINE_ANIM_DUR);\n}\n\nexport function animateRegion(rectGroup, newY1, newY2, oldY2) {\n\tlet newHeight = newY1 - newY2;\n\tlet rect = rectGroup.childNodes[0];\n\tlet width = rect.getAttribute(\"width\");\n\tlet rectAnim = [\n\t\trect,\n\t\t{ height: newHeight, 'stroke-dasharray': `${width}, ${newHeight}` },\n\t\tMARKER_LINE_ANIM_DUR,\n\t\tSTD_EASING\n\t];\n\n\tlet groupAnim = translate(rectGroup, [0, oldY2], [0, newY2], MARKER_LINE_ANIM_DUR);\n\treturn [rectAnim, groupAnim];\n}\n\nexport function animateBar(bar, x, yTop, width, offset=0, meta={}) {\n\tlet [height, y] = getBarHeightAndYAttr(yTop, meta.zeroLine);\n\ty -= offset;\n\tif(bar.nodeName !== 'rect') {\n\t\tlet rect = bar.childNodes[0];\n\t\tlet rectAnim = [\n\t\t\trect,\n\t\t\t{width: width, height: height},\n\t\t\tUNIT_ANIM_DUR,\n\t\t\tSTD_EASING\n\t\t];\n\n\t\tlet oldCoordStr = bar.getAttribute(\"transform\").split(\"(\")[1].slice(0, -1);\n\t\tlet groupAnim = translate(bar, oldCoordStr, [x, y], MARKER_LINE_ANIM_DUR);\n\t\treturn [rectAnim, groupAnim];\n\t} else {\n\t\treturn [[bar, {width: width, height: height, x: x, y: y}, UNIT_ANIM_DUR, STD_EASING]];\n\t}\n\t// bar.animate({height: args.newHeight, y: yTop}, UNIT_ANIM_DUR, mina.easein);\n}\n\nexport function animateDot(dot, x, y) {\n\tif(dot.nodeName !== 'circle') {\n\t\tlet oldCoordStr = dot.getAttribute(\"transform\").split(\"(\")[1].slice(0, -1);\n\t\tlet groupAnim = translate(dot, oldCoordStr, [x, y], MARKER_LINE_ANIM_DUR);\n\t\treturn [groupAnim];\n\t} else {\n\t\treturn [[dot, {cx: x, cy: y}, UNIT_ANIM_DUR, STD_EASING]];\n\t}\n\t// dot.animate({cy: yTop}, UNIT_ANIM_DUR, mina.easein);\n}\n\nexport function animatePath(paths, newXList, newYList, zeroLine, spline) {\n\tlet pathComponents = [];\n\tlet pointsStr = newYList.map((y, i) => (newXList[i] + ',' + y)).join(\"L\");\n\n\tif (spline)\n\t\tpointsStr = getSplineCurvePointsStr(newXList, newYList);\n\n\tconst animPath = [paths.path, {d:\"M\" + pointsStr}, PATH_ANIM_DUR, STD_EASING];\n\tpathComponents.push(animPath);\n\n\tif(paths.region) {\n\t\tlet regStartPt = `${newXList[0]},${zeroLine}L`;\n\t\tlet regEndPt = `L${newXList.slice(-1)[0]}, ${zeroLine}`;\n\n\t\tconst animRegion = [\n\t\t\tpaths.region,\n\t\t\t{d:\"M\" + regStartPt + pointsStr + regEndPt},\n\t\t\tPATH_ANIM_DUR,\n\t\t\tSTD_EASING\n\t\t];\n\t\tpathComponents.push(animRegion);\n\t}\n\n\treturn pathComponents;\n}\n\nexport function animatePathStr(oldPath, pathStr) {\n\treturn [oldPath, {d: pathStr}, UNIT_ANIM_DUR, STD_EASING];\n}\n","// Leveraging SMIL Animations\n\nimport { REPLACE_ALL_NEW_DUR } from './animate';\n\nconst EASING = {\n\tease: \"0.25 0.1 0.25 1\",\n\tlinear: \"0 0 1 1\",\n\t// easein: \"0.42 0 1 1\",\n\teasein: \"0.1 0.8 0.2 1\",\n\teaseout: \"0 0 0.58 1\",\n\teaseinout: \"0.42 0 0.58 1\"\n};\n\nfunction animateSVGElement(element, props, dur, easingType=\"linear\", type=undefined, oldValues={}) {\n\n\tlet animElement = element.cloneNode(true);\n\tlet newElement = element.cloneNode(true);\n\n\tfor(var attributeName in props) {\n\t\tlet animateElement;\n\t\tif(attributeName === 'transform') {\n\t\t\tanimateElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"animateTransform\");\n\t\t} else {\n\t\t\tanimateElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"animate\");\n\t\t}\n\t\tlet currentValue = oldValues[attributeName] || element.getAttribute(attributeName);\n\t\tlet value = props[attributeName];\n\n\t\tlet animAttr = {\n\t\t\tattributeName: attributeName,\n\t\t\tfrom: currentValue,\n\t\t\tto: value,\n\t\t\tbegin: \"0s\",\n\t\t\tdur: dur/1000 + \"s\",\n\t\t\tvalues: currentValue + \";\" + value,\n\t\t\tkeySplines: EASING[easingType],\n\t\t\tkeyTimes: \"0;1\",\n\t\t\tcalcMode: \"spline\",\n\t\t\tfill: 'freeze'\n\t\t};\n\n\t\tif(type) {\n\t\t\tanimAttr[\"type\"] = type;\n\t\t}\n\n\t\tfor (var i in animAttr) {\n\t\t\tanimateElement.setAttribute(i, animAttr[i]);\n\t\t}\n\n\t\tanimElement.appendChild(animateElement);\n\n\t\tif(type) {\n\t\t\tnewElement.setAttribute(attributeName, `translate(${value})`);\n\t\t} else {\n\t\t\tnewElement.setAttribute(attributeName, value);\n\t\t}\n\t}\n\n\treturn [animElement, newElement];\n}\n\nexport function transform(element, style) { // eslint-disable-line no-unused-vars\n\telement.style.transform = style;\n\telement.style.webkitTransform = style;\n\telement.style.msTransform = style;\n\telement.style.mozTransform = style;\n\telement.style.oTransform = style;\n}\n\nfunction animateSVG(svgContainer, elements) {\n\tlet newElements = [];\n\tlet animElements = [];\n\n\telements.map(element => {\n\t\tlet unit = element[0];\n\t\tlet parent = unit.parentNode;\n\n\t\tlet animElement, newElement;\n\n\t\telement[0] = unit;\n\t\t[animElement, newElement] = animateSVGElement(...element);\n\n\t\tnewElements.push(newElement);\n\t\tanimElements.push([animElement, parent]);\n\t\t\n\t\tif (parent) {\n\t\t\tparent.replaceChild(animElement, unit);\n\t\t}\n\t});\n\n\tlet animSvg = svgContainer.cloneNode(true);\n\n\tanimElements.map((animElement, i) => {\n\t\tif (animElement[1]) {\n\t\t\tanimElement[1].replaceChild(newElements[i], animElement[0]);\n\t\t\telements[i][0] = newElements[i];\n\t\t}\n\t});\n\n\treturn animSvg;\n}\n\nexport function runSMILAnimation(parent, svgElement, elementsToAnimate) {\n\tif(elementsToAnimate.length === 0) return;\n\n\tlet animSvgElement = animateSVG(svgElement, elementsToAnimate);\n\tif(svgElement.parentNode == parent) {\n\t\tparent.removeChild(svgElement);\n\t\tparent.appendChild(animSvgElement);\n\n\t}\n\n\t// Replace the new svgElement (data has already been replaced)\n\tsetTimeout(() => {\n\t\tif(animSvgElement.parentNode == parent) {\n\t\t\tparent.removeChild(animSvgElement);\n\t\t\tparent.appendChild(svgElement);\n\t\t}\n\t}, REPLACE_ALL_NEW_DUR);\n}\n","import { $ } from '../utils/dom';\nimport { CSSTEXT } from '../../css/chartsCss';\n\nexport function downloadFile(filename, data) {\n\tvar a = document.createElement('a');\n\ta.style = \"display: none\";\n\tvar blob = new Blob(data, {type: \"image/svg+xml; charset=utf-8\"});\n\tvar url = window.URL.createObjectURL(blob);\n\ta.href = url;\n\ta.download = filename;\n\tdocument.body.appendChild(a);\n\ta.click();\n\tsetTimeout(function(){\n\t\tdocument.body.removeChild(a);\n\t\twindow.URL.revokeObjectURL(url);\n\t}, 300);\n}\n\nexport function prepareForExport(svg) {\n\tlet clone = svg.cloneNode(true);\n\tclone.classList.add('chart-container');\n\tclone.setAttribute('xmlns', \"http://www.w3.org/2000/svg\");\n\tclone.setAttribute('xmlns:xlink', \"http://www.w3.org/1999/xlink\");\n\tlet styleEl = $.create('style', {\n\t\t'innerHTML': CSSTEXT\n\t});\n\tclone.insertBefore(styleEl, clone.firstChild);\n\n\tlet container = $.create('div');\n\tcontainer.appendChild(clone);\n\n\treturn container.innerHTML;\n}\n","// Playing around with dates\n\nexport const NO_OF_YEAR_MONTHS = 12;\nexport const NO_OF_DAYS_IN_WEEK = 7;\nexport const DAYS_IN_YEAR = 375;\nexport const NO_OF_MILLIS = 1000;\nexport const SEC_IN_DAY = 86400;\n\nexport const MONTH_NAMES = [\"January\", \"February\", \"March\", \"April\", \"May\",\n\t\"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\nexport const MONTH_NAMES_SHORT = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n\t\"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\nexport const DAY_NAMES_SHORT = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nexport const DAY_NAMES = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",\n\t\"Thursday\", \"Friday\", \"Saturday\"];\n\n// https://stackoverflow.com/a/11252167/6495043\nfunction treatAsUtc(date) {\n\tlet result = new Date(date);\n\tresult.setMinutes(result.getMinutes() - result.getTimezoneOffset());\n\treturn result;\n}\n\nexport function getYyyyMmDd(date) {\n\tlet dd = date.getDate();\n\tlet mm = date.getMonth() + 1; // getMonth() is zero-based\n\treturn [\n\t\tdate.getFullYear(),\n\t\t(mm>9 ? '' : '0') + mm,\n\t\t(dd>9 ? '' : '0') + dd\n\t].join('-');\n}\n\nexport function clone(date) {\n\treturn new Date(date.getTime());\n}\n\nexport function timestampSec(date) {\n\treturn date.getTime()/NO_OF_MILLIS;\n}\n\nexport function timestampToMidnight(timestamp, roundAhead = false) {\n\tlet midnightTs = Math.floor(timestamp - (timestamp % SEC_IN_DAY));\n\tif(roundAhead) {\n\t\treturn midnightTs + SEC_IN_DAY;\n\t}\n\treturn midnightTs;\n}\n\n// export function getMonthsBetween(startDate, endDate) {}\n\nexport function getWeeksBetween(startDate, endDate) {\n\tlet weekStartDate = setDayToSunday(startDate);\n\treturn Math.ceil(getDaysBetween(weekStartDate, endDate) / NO_OF_DAYS_IN_WEEK);\n}\n\nexport function getDaysBetween(startDate, endDate) {\n\tlet millisecondsPerDay = SEC_IN_DAY * NO_OF_MILLIS;\n\treturn (treatAsUtc(endDate) - treatAsUtc(startDate)) / millisecondsPerDay;\n}\n\nexport function areInSameMonth(startDate, endDate) {\n\treturn startDate.getMonth() === endDate.getMonth()\n\t\t&& startDate.getFullYear() === endDate.getFullYear();\n}\n\nexport function getMonthName(i, short=false) {\n\tlet monthName = MONTH_NAMES[i];\n\treturn short ? monthName.slice(0, 3) : monthName;\n}\n\nexport function getLastDateInMonth (month, year) {\n\treturn new Date(year, month + 1, 0); // 0: last day in previous month\n}\n\n// mutates\nexport function setDayToSunday(date) {\n\tlet newDate = clone(date);\n\tconst day = newDate.getDay();\n\tif(day !== 0) {\n\t\taddDays(newDate, (-1) * day);\n\t}\n\treturn newDate;\n}\n\n// mutates\nexport function addDays(date, numberOfDays) {\n\tdate.setDate(date.getDate() + numberOfDays);\n}\n","import { makeSVGGroup } from '../utils/draw';\nimport { makeText, makePath, xLine, yLine, yMarker, yRegion, datasetBar, datasetDot, percentageBar, getPaths, heatSquare } from '../utils/draw';\nimport { equilizeNoOfElements } from '../utils/draw-utils';\nimport { translateHoriLine, translateVertLine, animateRegion, animateBar,\n\tanimateDot, animatePath, animatePathStr } from '../utils/animate';\nimport { getMonthName } from '../utils/date-utils';\n\nclass ChartComponent {\n\tconstructor({\n\t\tlayerClass = '',\n\t\tlayerTransform = '',\n\t\tconstants,\n\n\t\tgetData,\n\t\tmakeElements,\n\t\tanimateElements\n\t}) {\n\t\tthis.layerTransform = layerTransform;\n\t\tthis.constants = constants;\n\n\t\tthis.makeElements = makeElements;\n\t\tthis.getData = getData;\n\n\t\tthis.animateElements = animateElements;\n\n\t\tthis.store = [];\n\t\tthis.labels = [];\n\n\t\tthis.layerClass = layerClass;\n\t\tthis.layerClass = typeof(this.layerClass) === 'function'\n\t\t\t? this.layerClass() : this.layerClass;\n\n\t\tthis.refresh();\n\t}\n\n\trefresh(data) {\n\t\tthis.data = data || this.getData();\n\t}\n\n\tsetup(parent) {\n\t\tthis.layer = makeSVGGroup(this.layerClass, this.layerTransform, parent);\n\t}\n\n\tmake() {\n\t\tthis.render(this.data);\n\t\tthis.oldData = this.data;\n\t}\n\n\trender(data) {\n\t\tthis.store = this.makeElements(data);\n\n\t\tthis.layer.textContent = '';\n\t\tthis.store.forEach(element => {\n\t\t\tthis.layer.appendChild(element);\n\t\t});\n\t\tthis.labels.forEach(element => {\n\t\t\tthis.layer.appendChild(element);\n\t\t});\n\t}\n\n\tupdate(animate = true) {\n\t\tthis.refresh();\n\t\tlet animateElements = [];\n\t\tif(animate) {\n\t\t\tanimateElements = this.animateElements(this.data) || [];\n\t\t}\n\t\treturn animateElements;\n\t}\n}\n\nlet componentConfigs = {\n\tdonutSlices: {\n\t\tlayerClass: 'donut-slices',\n\t\tmakeElements(data) {\n\t\t\treturn data.sliceStrings.map((s, i) => {\n\t\t\t\tlet slice = makePath(s, 'donut-path', data.colors[i], 'none', data.strokeWidth);\n\t\t\t\tslice.style.transition = 'transform .3s;';\n\t\t\t\treturn slice;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\treturn this.store.map((slice, i) => animatePathStr(slice, newData.sliceStrings[i]));\n\t\t},\n\t},\n\tpieSlices: {\n\t\tlayerClass: 'pie-slices',\n\t\tmakeElements(data) {\n\t\t\treturn data.sliceStrings.map((s, i) =>{\n\t\t\t\tlet slice = makePath(s, 'pie-path', 'none', data.colors[i]);\n\t\t\t\tslice.style.transition = 'transform .3s;';\n\t\t\t\treturn slice;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\treturn this.store.map((slice, i) =>\n\t\t\t\tanimatePathStr(slice, newData.sliceStrings[i])\n\t\t\t);\n\t\t}\n\t},\n\tpercentageBars: {\n\t\tlayerClass: 'percentage-bars',\n\t\tmakeElements(data) {\n\t\t\treturn data.xPositions.map((x, i) =>{\n\t\t\t\tlet y = 0;\n\t\t\t\tlet bar = percentageBar(x, y, data.widths[i],\n\t\t\t\t\tthis.constants.barHeight, this.constants.barDepth, data.colors[i]);\n\t\t\t\treturn bar;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tif(newData) return [];\n\t\t}\n\t},\n\tyAxis: {\n\t\tlayerClass: 'y axis',\n\t\tmakeElements(data) {\n\t\t\treturn data.positions.map((position, i) =>\n\t\t\t\tyLine(position, data.labels[i], this.constants.width,\n\t\t\t\t\t{mode: this.constants.mode, pos: this.constants.pos, shortenNumbers: this.constants.shortenNumbers})\n\t\t\t);\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tlet newPos = newData.positions;\n\t\t\tlet newLabels = newData.labels;\n\t\t\tlet oldPos = this.oldData.positions;\n\t\t\tlet oldLabels = this.oldData.labels;\n\n\t\t\t[oldPos, newPos] = equilizeNoOfElements(oldPos, newPos);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\tpositions: oldPos,\n\t\t\t\tlabels: newLabels\n\t\t\t});\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateHoriLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\txAxis: {\n\t\tlayerClass: 'x axis',\n\t\tmakeElements(data) {\n\t\t\treturn data.positions.map((position, i) =>\n\t\t\t\txLine(position, data.calcLabels[i], this.constants.height,\n\t\t\t\t\t{mode: this.constants.mode, pos: this.constants.pos})\n\t\t\t);\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tlet newPos = newData.positions;\n\t\t\tlet newLabels = newData.calcLabels;\n\t\t\tlet oldPos = this.oldData.positions;\n\t\t\tlet oldLabels = this.oldData.calcLabels;\n\n\t\t\t[oldPos, newPos] = equilizeNoOfElements(oldPos, newPos);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\tpositions: oldPos,\n\t\t\t\tcalcLabels: newLabels\n\t\t\t});\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateVertLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\tyMarkers: {\n\t\tlayerClass: 'y-markers',\n\t\tmakeElements(data) {\n\t\t\treturn data.map(m =>\n\t\t\t\tyMarker(m.position, m.label, this.constants.width,\n\t\t\t\t\t{labelPos: m.options.labelPos, mode: 'span', lineType: 'dashed'})\n\t\t\t);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\t[this.oldData, newData] = equilizeNoOfElements(this.oldData, newData);\n\n\t\t\tlet newPos = newData.map(d => d.position);\n\t\t\tlet newLabels = newData.map(d => d.label);\n\t\t\tlet newOptions = newData.map(d => d.options);\n\n\t\t\tlet oldPos = this.oldData.map(d => d.position);\n\n\t\t\tthis.render(oldPos.map((pos, i) => {\n\t\t\t\treturn {\n\t\t\t\t\tposition: oldPos[i],\n\t\t\t\t\tlabel: newLabels[i],\n\t\t\t\t\toptions: newOptions[i]\n\t\t\t\t};\n\t\t\t}));\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateHoriLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\tyRegions: {\n\t\tlayerClass: 'y-regions',\n\t\tmakeElements(data) {\n\t\t\treturn data.map(r =>\n\t\t\t\tyRegion(r.startPos, r.endPos, this.constants.width,\n\t\t\t\t\tr.label, {labelPos: r.options.labelPos})\n\t\t\t);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\t[this.oldData, newData] = equilizeNoOfElements(this.oldData, newData);\n\n\t\t\tlet newPos = newData.map(d => d.endPos);\n\t\t\tlet newLabels = newData.map(d => d.label);\n\t\t\tlet newStarts = newData.map(d => d.startPos);\n\t\t\tlet newOptions = newData.map(d => d.options);\n\n\t\t\tlet oldPos = this.oldData.map(d => d.endPos);\n\t\t\tlet oldStarts = this.oldData.map(d => d.startPos);\n\n\t\t\tthis.render(oldPos.map((pos, i) => {\n\t\t\t\treturn {\n\t\t\t\t\tstartPos: oldStarts[i],\n\t\t\t\t\tendPos: oldPos[i],\n\t\t\t\t\tlabel: newLabels[i],\n\t\t\t\t\toptions: newOptions[i]\n\t\t\t\t};\n\t\t\t}));\n\n\t\t\tlet animateElements = [];\n\n\t\t\tthis.store.map((rectGroup, i) => {\n\t\t\t\tanimateElements = animateElements.concat(animateRegion(\n\t\t\t\t\trectGroup, newStarts[i], newPos[i], oldPos[i]\n\t\t\t\t));\n\t\t\t});\n\n\t\t\treturn animateElements;\n\t\t}\n\t},\n\n\theatDomain: {\n\t\tlayerClass: function() { return 'heat-domain domain-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet {index, colWidth, rowHeight, squareSize, radius, xTranslate} = this.constants;\n\t\t\tlet monthNameHeight = -12;\n\t\t\tlet x = xTranslate, y = 0;\n\n\t\t\tthis.serializedSubDomains = [];\n\n\t\t\tdata.cols.map((week, weekNo) => {\n\t\t\t\tif(weekNo === 1) {\n\t\t\t\t\tthis.labels.push(\n\t\t\t\t\t\tmakeText('domain-name', x, monthNameHeight, getMonthName(index, true).toUpperCase(),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfontSize: 9\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}\n\t\t\t\tweek.map((day, i) => {\n\t\t\t\t\tif(day.fill) {\n\t\t\t\t\t\tlet data = {\n\t\t\t\t\t\t\t'data-date': day.yyyyMmDd,\n\t\t\t\t\t\t\t'data-value': day.dataValue,\n\t\t\t\t\t\t\t'data-day': i\n\t\t\t\t\t\t};\n\t\t\t\t\t\tlet square = heatSquare('day', x, y, squareSize, radius, day.fill, data);\n\t\t\t\t\t\tthis.serializedSubDomains.push(square);\n\t\t\t\t\t}\n\t\t\t\t\ty += rowHeight;\n\t\t\t\t});\n\t\t\t\ty = 0;\n\t\t\t\tx += colWidth;\n\t\t\t});\n\n\t\t\treturn this.serializedSubDomains;\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tif(newData) return [];\n\t\t}\n\t},\n\n\tbarGraph: {\n\t\tlayerClass: function() { return 'dataset-units dataset-bars dataset-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet c = this.constants;\n\t\t\tthis.unitType = 'bar';\n\t\t\tthis.units = data.yPositions.map((y, j) => {\n\t\t\t\treturn datasetBar(\n\t\t\t\t\tdata.xPositions[j],\n\t\t\t\t\ty,\n\t\t\t\t\tdata.barWidth,\n\t\t\t\t\tc.color,\n\t\t\t\t\tdata.labels[j],\n\t\t\t\t\tj,\n\t\t\t\t\tdata.offsets[j],\n\t\t\t\t\t{\n\t\t\t\t\t\tzeroLine: data.zeroLine,\n\t\t\t\t\t\tbarsWidth: data.barsWidth,\n\t\t\t\t\t\tminHeight: c.minHeight\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t\treturn this.units;\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\tlet newXPos = newData.xPositions;\n\t\t\tlet newYPos = newData.yPositions;\n\t\t\tlet newOffsets = newData.offsets;\n\t\t\tlet newLabels = newData.labels;\n\n\t\t\tlet oldXPos = this.oldData.xPositions;\n\t\t\tlet oldYPos = this.oldData.yPositions;\n\t\t\tlet oldOffsets = this.oldData.offsets;\n\t\t\tlet oldLabels = this.oldData.labels;\n\n\t\t\t[oldXPos, newXPos] = equilizeNoOfElements(oldXPos, newXPos);\n\t\t\t[oldYPos, newYPos] = equilizeNoOfElements(oldYPos, newYPos);\n\t\t\t[oldOffsets, newOffsets] = equilizeNoOfElements(oldOffsets, newOffsets);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\txPositions: oldXPos,\n\t\t\t\tyPositions: oldYPos,\n\t\t\t\toffsets: oldOffsets,\n\t\t\t\tlabels: newLabels,\n\n\t\t\t\tzeroLine: this.oldData.zeroLine,\n\t\t\t\tbarsWidth: this.oldData.barsWidth,\n\t\t\t\tbarWidth: this.oldData.barWidth,\n\t\t\t});\n\n\t\t\tlet animateElements = [];\n\n\t\t\tthis.store.map((bar, i) => {\n\t\t\t\tanimateElements = animateElements.concat(animateBar(\n\t\t\t\t\tbar, newXPos[i], newYPos[i], newData.barWidth, newOffsets[i],\n\t\t\t\t\t{zeroLine: newData.zeroLine}\n\t\t\t\t));\n\t\t\t});\n\n\t\t\treturn animateElements;\n\t\t}\n\t},\n\n\tlineGraph: {\n\t\tlayerClass: function() { return 'dataset-units dataset-line dataset-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet c = this.constants;\n\t\t\tthis.unitType = 'dot';\n\t\t\tthis.paths = {};\n\t\t\tif(!c.hideLine) {\n\t\t\t\tthis.paths = getPaths(\n\t\t\t\t\tdata.xPositions,\n\t\t\t\t\tdata.yPositions,\n\t\t\t\t\tc.color,\n\t\t\t\t\t{\n\t\t\t\t\t\theatline: c.heatline,\n\t\t\t\t\t\tregionFill: c.regionFill,\n\t\t\t\t\t\tspline: c.spline\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsvgDefs: c.svgDefs,\n\t\t\t\t\t\tzeroLine: data.zeroLine\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.units = [];\n\t\t\tif(!c.hideDots) {\n\t\t\t\tthis.units = data.yPositions.map((y, j) => {\n\t\t\t\t\treturn datasetDot(\n\t\t\t\t\t\tdata.xPositions[j],\n\t\t\t\t\t\ty,\n\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\tc.color,\n\t\t\t\t\t\t(c.valuesOverPoints ? data.values[j] : ''),\n\t\t\t\t\t\tj\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn Object.values(this.paths).concat(this.units);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\tlet newXPos = newData.xPositions;\n\t\t\tlet newYPos = newData.yPositions;\n\t\t\tlet newValues = newData.values;\n\n\t\t\tlet oldXPos = this.oldData.xPositions;\n\t\t\tlet oldYPos = this.oldData.yPositions;\n\t\t\tlet oldValues = this.oldData.values;\n\n\t\t\t[oldXPos, newXPos] = equilizeNoOfElements(oldXPos, newXPos);\n\t\t\t[oldYPos, newYPos] = equilizeNoOfElements(oldYPos, newYPos);\n\t\t\t[oldValues, newValues] = equilizeNoOfElements(oldValues, newValues);\n\n\t\t\tthis.render({\n\t\t\t\txPositions: oldXPos,\n\t\t\t\tyPositions: oldYPos,\n\t\t\t\tvalues: newValues,\n\n\t\t\t\tzeroLine: this.oldData.zeroLine,\n\t\t\t\tradius: this.oldData.radius,\n\t\t\t});\n\n\t\t\tlet animateElements = [];\n\n\t\t\tif(Object.keys(this.paths).length) {\n\t\t\t\tanimateElements = animateElements.concat(animatePath(\n\t\t\t\t\tthis.paths, newXPos, newYPos, newData.zeroLine, this.constants.spline));\n\t\t\t}\n\n\t\t\tif(this.units.length) {\n\t\t\t\tthis.units.map((dot, i) => {\n\t\t\t\t\tanimateElements = animateElements.concat(animateDot(\n\t\t\t\t\t\tdot, newXPos[i], newYPos[i]));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn animateElements;\n\t\t}\n\t}\n};\n\nexport function getComponent(name, constants, getData) {\n\tlet keys = Object.keys(componentConfigs).filter(k => name.includes(k));\n\tlet config = componentConfigs[keys[0]];\n\tObject.assign(config, {\n\t\tconstants: constants,\n\t\tgetData: getData\n\t});\n\treturn new ChartComponent(config);\n}\n","import { floatTwo } from './helpers';\n\nfunction normalize(x) {\n\t// Calculates mantissa and exponent of a number\n\t// Returns normalized number and exponent\n\t// https://stackoverflow.com/q/9383593/6495043\n\n\tif(x===0) {\n\t\treturn [0, 0];\n\t}\n\tif(isNaN(x)) {\n\t\treturn {mantissa: -6755399441055744, exponent: 972};\n\t}\n\tvar sig = x > 0 ? 1 : -1;\n\tif(!isFinite(x)) {\n\t\treturn {mantissa: sig * 4503599627370496, exponent: 972};\n\t}\n\n\tx = Math.abs(x);\n\tvar exp = Math.floor(Math.log10(x));\n\tvar man = x/Math.pow(10, exp);\n\n\treturn [sig * man, exp];\n}\n\nfunction getChartRangeIntervals(max, min=0) {\n\tlet upperBound = Math.ceil(max);\n\tlet lowerBound = Math.floor(min);\n\tlet range = upperBound - lowerBound;\n\n\tlet noOfParts = range;\n\tlet partSize = 1;\n\n\t// To avoid too many partitions\n\tif(range > 5) {\n\t\tif(range % 2 !== 0) {\n\t\t\tupperBound++;\n\t\t\t// Recalc range\n\t\t\trange = upperBound - lowerBound;\n\t\t}\n\t\tnoOfParts = range/2;\n\t\tpartSize = 2;\n\t}\n\n\t// Special case: 1 and 2\n\tif(range <= 2) {\n\t\tnoOfParts = 4;\n\t\tpartSize = range/noOfParts;\n\t}\n\n\t// Special case: 0\n\tif(range === 0) {\n\t\tnoOfParts = 5;\n\t\tpartSize = 1;\n\t}\n\n\tlet intervals = [];\n\tfor(var i = 0; i <= noOfParts; i++){\n\t\tintervals.push(lowerBound + partSize * i);\n\t}\n\treturn intervals;\n}\n\nfunction getChartIntervals(maxValue, minValue=0) {\n\tlet [normalMaxValue, exponent] = normalize(maxValue);\n\tlet normalMinValue = minValue ? minValue/Math.pow(10, exponent): 0;\n\n\t// Allow only 7 significant digits\n\tnormalMaxValue = normalMaxValue.toFixed(6);\n\n\tlet intervals = getChartRangeIntervals(normalMaxValue, normalMinValue);\n\tintervals = intervals.map(value => value * Math.pow(10, exponent));\n\treturn intervals;\n}\n\nexport function calcChartIntervals(values, withMinimum=false) {\n\t//*** Where the magic happens ***\n\n\t// Calculates best-fit y intervals from given values\n\t// and returns the interval array\n\n\tlet maxValue = Math.max(...values);\n\tlet minValue = Math.min(...values);\n\n\t// Exponent to be used for pretty print\n\tlet exponent = 0, intervals = []; // eslint-disable-line no-unused-vars\n\n\tfunction getPositiveFirstIntervals(maxValue, absMinValue) {\n\t\tlet intervals = getChartIntervals(maxValue);\n\n\t\tlet intervalSize = intervals[1] - intervals[0];\n\n\t\t// Then unshift the negative values\n\t\tlet value = 0;\n\t\tfor(var i = 1; value < absMinValue; i++) {\n\t\t\tvalue += intervalSize;\n\t\t\tintervals.unshift((-1) * value);\n\t\t}\n\t\treturn intervals;\n\t}\n\n\t// CASE I: Both non-negative\n\n\tif(maxValue >= 0 && minValue >= 0) {\n\t\texponent = normalize(maxValue)[1];\n\t\tif(!withMinimum) {\n\t\t\tintervals = getChartIntervals(maxValue);\n\t\t} else {\n\t\t\tintervals = getChartIntervals(maxValue, minValue);\n\t\t}\n\t}\n\n\t// CASE II: Only minValue negative\n\n\telse if(maxValue > 0 && minValue < 0) {\n\t\t// `withMinimum` irrelevant in this case,\n\t\t// We'll be handling both sides of zero separately\n\t\t// (both starting from zero)\n\t\t// Because ceil() and floor() behave differently\n\t\t// in those two regions\n\n\t\tlet absMinValue = Math.abs(minValue);\n\n\t\tif(maxValue >= absMinValue) {\n\t\t\texponent = normalize(maxValue)[1];\n\t\t\tintervals = getPositiveFirstIntervals(maxValue, absMinValue);\n\t\t} else {\n\t\t\t// Mirror: maxValue => absMinValue, then change sign\n\t\t\texponent = normalize(absMinValue)[1];\n\t\t\tlet posIntervals = getPositiveFirstIntervals(absMinValue, maxValue);\n\t\t\tintervals = posIntervals.reverse().map(d => d * (-1));\n\t\t}\n\n\t}\n\n\t// CASE III: Both non-positive\n\n\telse if(maxValue <= 0 && minValue <= 0) {\n\t\t// Mirrored Case I:\n\t\t// Work with positives, then reverse the sign and array\n\n\t\tlet pseudoMaxValue = Math.abs(minValue);\n\t\tlet pseudoMinValue = Math.abs(maxValue);\n\n\t\texponent = normalize(pseudoMaxValue)[1];\n\t\tif(!withMinimum) {\n\t\t\tintervals = getChartIntervals(pseudoMaxValue);\n\t\t} else {\n\t\t\tintervals = getChartIntervals(pseudoMaxValue, pseudoMinValue);\n\t\t}\n\n\t\tintervals = intervals.reverse().map(d => d * (-1));\n\t}\n\n\treturn intervals;\n}\n\nexport function getZeroIndex(yPts) {\n\tlet zeroIndex;\n\tlet interval = getIntervalSize(yPts);\n\tif(yPts.indexOf(0) >= 0) {\n\t\t// the range has a given zero\n\t\t// zero-line on the chart\n\t\tzeroIndex = yPts.indexOf(0);\n\t} else if(yPts[0] > 0) {\n\t\t// Minimum value is positive\n\t\t// zero-line is off the chart: below\n\t\tlet min = yPts[0];\n\t\tzeroIndex = (-1) * min / interval;\n\t} else {\n\t\t// Maximum value is negative\n\t\t// zero-line is off the chart: above\n\t\tlet max = yPts[yPts.length - 1];\n\t\tzeroIndex = (-1) * max / interval + (yPts.length - 1);\n\t}\n\treturn zeroIndex;\n}\n\nexport function getRealIntervals(max, noOfIntervals, min = 0, asc = 1) {\n\tlet range = max - min;\n\tlet part = range * 1.0 / noOfIntervals;\n\tlet intervals = [];\n\n\tfor(var i = 0; i <= noOfIntervals; i++) {\n\t\tintervals.push(min + part * i);\n\t}\n\n\treturn asc ? intervals : intervals.reverse();\n}\n\nexport function getIntervalSize(orderedArray) {\n\treturn orderedArray[1] - orderedArray[0];\n}\n\nexport function getValueRange(orderedArray) {\n\treturn orderedArray[orderedArray.length-1] - orderedArray[0];\n}\n\nexport function scale(val, yAxis) {\n\treturn floatTwo(yAxis.zeroLine - val * yAxis.scaleMultiplier);\n}\n\nexport function isInRange(val, min, max) {\n\treturn val > min && val < max;\n}\n\nexport function isInRange2D(coord, minCoord, maxCoord) {\n\treturn isInRange(coord[0], minCoord[0], maxCoord[0])\n\t\t&& isInRange(coord[1], minCoord[1], maxCoord[1]);\n}\n\nexport function getClosestInArray(goal, arr, index = false) {\n\tlet closest = arr.reduce(function(prev, curr) {\n\t\treturn (Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);\n\t}, []);\n\n\treturn index ? arr.indexOf(closest) : closest;\n}\n\nexport function calcDistribution(values, distributionSize) {\n\t// Assume non-negative values,\n\t// implying distribution minimum at zero\n\n\tlet dataMaxValue = Math.max(...values);\n\n\tlet distributionStep = 1 / (distributionSize - 1);\n\tlet distribution = [];\n\n\tfor(var i = 0; i < distributionSize; i++) {\n\t\tlet checkpoint = dataMaxValue * (distributionStep * i);\n\t\tdistribution.push(checkpoint);\n\t}\n\n\treturn distribution;\n}\n\nexport function getMaxCheckpoint(value, distribution) {\n\treturn distribution.filter(d => d < value).length;\n}\n","import { fillArray } from '../utils/helpers';\nimport { DEFAULT_AXIS_CHART_TYPE, AXIS_DATASET_CHART_TYPES, DEFAULT_CHAR_WIDTH } from '../utils/constants';\n\nexport function dataPrep(data, type) {\n\tdata.labels = data.labels || [];\n\n\tlet datasetLength = data.labels.length;\n\n\t// Datasets\n\tlet datasets = data.datasets;\n\tlet zeroArray = new Array(datasetLength).fill(0);\n\tif(!datasets) {\n\t\t// default\n\t\tdatasets = [{\n\t\t\tvalues: zeroArray\n\t\t}];\n\t}\n\n\tdatasets.map(d=> {\n\t\t// Set values\n\t\tif(!d.values) {\n\t\t\td.values = zeroArray;\n\t\t} else {\n\t\t\t// Check for non values\n\t\t\tlet vals = d.values;\n\t\t\tvals = vals.map(val => (!isNaN(val) ? val : 0));\n\n\t\t\t// Trim or extend\n\t\t\tif(vals.length > datasetLength) {\n\t\t\t\tvals = vals.slice(0, datasetLength);\n\t\t\t} else {\n\t\t\t\tvals = fillArray(vals, datasetLength - vals.length, 0);\n\t\t\t}\n\t\t\td.values = vals;\n\t\t}\n\n\t\t// Set type\n\t\tif(!d.chartType ) {\n\t\t\tif(!AXIS_DATASET_CHART_TYPES.includes(type)) type === DEFAULT_AXIS_CHART_TYPE;\n\t\t\td.chartType = type;\n\t\t}\n\n\t});\n\n\t// Markers\n\n\t// Regions\n\t// data.yRegions = data.yRegions || [];\n\tif(data.yRegions) {\n\t\tdata.yRegions.map(d => {\n\t\t\tif(d.end < d.start) {\n\t\t\t\t[d.start, d.end] = [d.end, d.start];\n\t\t\t}\n\t\t});\n\t}\n\n\treturn data;\n}\n\nexport function zeroDataPrep(realData) {\n\tlet datasetLength = realData.labels.length;\n\tlet zeroArray = new Array(datasetLength).fill(0);\n\n\tlet zeroData = {\n\t\tlabels: realData.labels.slice(0, -1),\n\t\tdatasets: realData.datasets.map(d => {\n\t\t\treturn {\n\t\t\t\tname: '',\n\t\t\t\tvalues: zeroArray.slice(0, -1),\n\t\t\t\tchartType: d.chartType\n\t\t\t};\n\t\t}),\n\t};\n\n\tif(realData.yMarkers) {\n\t\tzeroData.yMarkers = [\n\t\t\t{\n\t\t\t\tvalue: 0,\n\t\t\t\tlabel: ''\n\t\t\t}\n\t\t];\n\t}\n\n\tif(realData.yRegions) {\n\t\tzeroData.yRegions = [\n\t\t\t{\n\t\t\t\tstart: 0,\n\t\t\t\tend: 0,\n\t\t\t\tlabel: ''\n\t\t\t}\n\t\t];\n\t}\n\n\treturn zeroData;\n}\n\nexport function getShortenedLabels(chartWidth, labels=[], isSeries=true) {\n\tlet allowedSpace = chartWidth / labels.length;\n\tif(allowedSpace <= 0) allowedSpace = 1;\n\tlet allowedLetters = allowedSpace / DEFAULT_CHAR_WIDTH;\n\n\tlet seriesMultiple;\n\tif(isSeries) {\n\t\t// Find the maximum label length for spacing calculations\n\t\tlet maxLabelLength = Math.max(...labels.map(label => label.length));\n\t\tseriesMultiple = Math.ceil(maxLabelLength/allowedLetters);\n\t}\n\n\tlet calcLabels = labels.map((label, i) => {\n\t\tlabel += \"\";\n\t\tif(label.length > allowedLetters) {\n\n\t\t\tif(!isSeries) {\n\t\t\t\tif(allowedLetters-3 > 0) {\n\t\t\t\t\tlabel = label.slice(0, allowedLetters-3) + \" ...\";\n\t\t\t\t} else {\n\t\t\t\t\tlabel = label.slice(0, allowedLetters) + '..';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(i % seriesMultiple !== 0) {\n\t\t\t\t\tlabel = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn label;\n\t});\n\n\treturn calcLabels;\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { $ } from '../utils/dom';\nimport { TOOLTIP_POINTER_TRIANGLE_HEIGHT } from '../utils/constants';\n\nexport default class SvgTip {\n\tconstructor({\n\t\tparent = null,\n\t\tcolors = []\n\t}) {\n\t\tthis.parent = parent;\n\t\tthis.colors = colors;\n\t\tthis.titleName = '';\n\t\tthis.titleValue = '';\n\t\tthis.listValues = [];\n\t\tthis.titleValueFirst = 0;\n\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\n\t\tthis.top = 0;\n\t\tthis.left = 0;\n\n\t\tthis.setup();\n\t}\n\n\tsetup() {\n\t\tthis.makeTooltip();\n\t}\n\n\trefresh() {\n\t\tthis.fill();\n\t\tthis.calcPosition();\n\t}\n\n\tmakeTooltip() {\n\t\tthis.container = $.create('div', {\n\t\t\tinside: this.parent,\n\t\t\tclassName: 'graph-svg-tip comparison',\n\t\t\tinnerHTML: `\n\t\t\t\t
                  \n\t\t\t\t
                  `\n\t\t});\n\t\tthis.hideTip();\n\n\t\tthis.title = this.container.querySelector('.title');\n\t\tthis.dataPointList = this.container.querySelector('.data-point-list');\n\n\t\tthis.parent.addEventListener('mouseleave', () => {\n\t\t\tthis.hideTip();\n\t\t});\n\t}\n\n\tfill() {\n\t\tlet title;\n\t\tif(this.index) {\n\t\t\tthis.container.setAttribute('data-point-index', this.index);\n\t\t}\n\t\tif(this.titleValueFirst) {\n\t\t\ttitle = `${this.titleValue}${this.titleName}`;\n\t\t} else {\n\t\t\ttitle = `${this.titleName}${this.titleValue}`;\n\t\t}\n\t\tthis.title.innerHTML = title;\n\t\tthis.dataPointList.innerHTML = '';\n\n\t\tthis.listValues.map((set, i) => {\n\t\t\tconst color = this.colors[i] || 'black';\n\t\t\tlet value = set.formatted === 0 || set.formatted ? set.formatted : set.value;\n\n\t\t\tlet li = $.create('li', {\n\t\t\t\tstyles: {\n\t\t\t\t\t'border-top': `3px solid ${color}`\n\t\t\t\t},\n\t\t\t\tinnerHTML: `${ value === 0 || value ? value : '' }\n\t\t\t\t\t${set.title ? set.title : '' }`\n\t\t\t});\n\n\t\t\tthis.dataPointList.appendChild(li);\n\t\t});\n\t}\n\n\tcalcPosition() {\n\t\tlet width = this.container.offsetWidth;\n\n\t\tthis.top = this.y - this.container.offsetHeight\n\t\t\t- TOOLTIP_POINTER_TRIANGLE_HEIGHT;\n\t\tthis.left = this.x - width/2;\n\t\tlet maxLeft = this.parent.offsetWidth - width;\n\n\t\tlet pointer = this.container.querySelector('.svg-pointer');\n\n\t\tif(this.left < 0) {\n\t\t\tpointer.style.left = `calc(50% - ${-1 * this.left}px)`;\n\t\t\tthis.left = 0;\n\t\t} else if(this.left > maxLeft) {\n\t\t\tlet delta = this.left - maxLeft;\n\t\t\tlet pointerOffset = `calc(50% + ${delta}px)`;\n\t\t\tpointer.style.left = pointerOffset;\n\n\t\t\tthis.left = maxLeft;\n\t\t} else {\n\t\t\tpointer.style.left = `50%`;\n\t\t}\n\t}\n\n\tsetValues(x, y, title = {}, listValues = [], index = -1) {\n\t\tthis.titleName = title.name;\n\t\tthis.titleValue = title.value;\n\t\tthis.listValues = listValues;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.titleValueFirst = title.valueFirst || 0;\n\t\tthis.index = index;\n\t\tthis.refresh();\n\t}\n\n\thideTip() {\n\t\tthis.container.style.top = '0px';\n\t\tthis.container.style.left = '0px';\n\t\tthis.container.style.opacity = '0';\n\t}\n\n\tshowTip() {\n\t\tthis.container.style.top = this.top + 'px';\n\t\tthis.container.style.left = this.left + 'px';\n\t\tthis.container.style.opacity = '1';\n\t}\n}\n","export const CSSTEXT = \".chart-container{position:relative;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Roboto','Oxygen','Ubuntu','Cantarell','Fira Sans','Droid Sans','Helvetica Neue',sans-serif}.chart-container .axis,.chart-container .chart-label{fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .dataset-units circle{stroke:#fff;stroke-width:2}.chart-container .dataset-units path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container .dataset-path{stroke-width:2px}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .axis-line .specific-value{text-anchor:start}.chart-container .axis-line .y-line{text-anchor:end}.chart-container .axis-line .x-line{text-anchor:middle}.chart-container .legend-dataset-text{fill:#6c7680;font-weight:600}.graph-svg-tip{position:absolute;z-index:99999;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.graph-svg-tip ul{padding-left:0;display:flex}.graph-svg-tip ol{padding-left:0;display:flex}.graph-svg-tip ul.data-point-list li{min-width:90px;flex:1;font-weight:600}.graph-svg-tip strong{color:#dfe2e5;font-weight:600}.graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:' ';border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}\";","import SvgTip from '../objects/SvgTip';\nimport { $, isElementInViewport, getElementContentWidth, isHidden } from '../utils/dom';\nimport { makeSVGContainer, makeSVGDefs, makeSVGGroup, makeText } from '../utils/draw';\nimport { BASE_MEASURES, getExtraHeight, getExtraWidth, getTopOffset, getLeftOffset,\n\tINIT_CHART_UPDATE_TIMEOUT, CHART_POST_ANIMATE_TIMEOUT, DEFAULT_COLORS} from '../utils/constants';\nimport { getColor, isValidColor } from '../utils/colors';\nimport { runSMILAnimation } from '../utils/animation';\nimport { downloadFile, prepareForExport } from '../utils/export';\nimport { deepClone } from '../utils/helpers';\n\nexport default class BaseChart {\n\tconstructor(parent, options) {\n\t\t// deepclone options to avoid making changes to orignal object\n\t\toptions = deepClone(options);\n\n\t\tthis.parent = typeof parent === 'string'\n\t\t\t? document.querySelector(parent)\n\t\t\t: parent;\n\n\t\tif (!(this.parent instanceof HTMLElement)) {\n\t\t\tthrow new Error('No `parent` element to render on was provided.');\n\t\t}\n\n\t\tthis.rawChartArgs = options;\n\n\t\tthis.title = options.title || '';\n\t\tthis.type = options.type || '';\n\n\t\tthis.realData = this.prepareData(options.data);\n\t\tthis.data = this.prepareFirstData(this.realData);\n\n\t\tthis.colors = this.validateColors(options.colors, this.type);\n\n\t\tthis.config = {\n\t\t\tshowTooltip: 1, // calculate\n\t\t\tshowLegend: 1, // calculate\n\t\t\tisNavigable: options.isNavigable || 0,\n\t\t\tanimate: (typeof options.animate !== 'undefined') ? options.animate : 1,\n\t\t\ttruncateLegends: options.truncateLegends || 1\n\t\t};\n\n\t\tthis.measures = JSON.parse(JSON.stringify(BASE_MEASURES));\n\t\tlet m = this.measures;\n\t\tthis.setMeasures(options);\n\t\tif(!this.title.length) { m.titleHeight = 0; }\n\t\tif(!this.config.showLegend) m.legendHeight = 0;\n\t\tthis.argHeight = options.height || m.baseHeight;\n\n\t\tthis.state = {};\n\t\tthis.options = {};\n\n\t\tthis.initTimeout = INIT_CHART_UPDATE_TIMEOUT;\n\n\t\tif(this.config.isNavigable) {\n\t\t\tthis.overlays = [];\n\t\t}\n\n\t\tthis.configure(options);\n\t}\n\n\tprepareData(data) {\n\t\treturn data;\n\t}\n\n\tprepareFirstData(data) {\n\t\treturn data;\n\t}\n\n\tvalidateColors(colors, type) {\n\t\tconst validColors = [];\n\t\tcolors = (colors || []).concat(DEFAULT_COLORS[type]);\n\t\tcolors.forEach((string) => {\n\t\t\tconst color = getColor(string);\n\t\t\tif(!isValidColor(color)) {\n\t\t\t\tconsole.warn('\"' + string + '\" is not a valid color.');\n\t\t\t} else {\n\t\t\t\tvalidColors.push(color);\n\t\t\t}\n\t\t});\n\t\treturn validColors;\n\t}\n\n\tsetMeasures() {\n\t\t// Override measures, including those for title and legend\n\t\t// set config for legend and title\n\t}\n\n\tconfigure() {\n\t\tlet height = this.argHeight;\n\t\tthis.baseHeight = height;\n\t\tthis.height = height - getExtraHeight(this.measures);\n\n\t\t// Bind window events\n\t\tthis.boundDrawFn = () => this.draw(true);\n\t\tif (ResizeObserver) {\n\t\t\tthis.resizeObserver = new ResizeObserver(this.boundDrawFn);\n\t\t\tthis.resizeObserver.observe(this.parent);\n\t\t}\n\t\twindow.addEventListener('resize', this.boundDrawFn);\n\t\twindow.addEventListener('orientationchange', this.boundDrawFn);\n\t}\n\n\tdestroy() {\n\t\tif (this.resizeObserver) this.resizeObserver.disconnect();\n\t\twindow.removeEventListener('resize', this.boundDrawFn);\n\t\twindow.removeEventListener('orientationchange', this.boundDrawFn);\n\t}\n\n\t// Has to be called manually\n\tsetup() {\n\t\tthis.makeContainer();\n\t\tthis.updateWidth();\n\t\tthis.makeTooltip();\n\n\t\tthis.draw(false, true);\n\t}\n\n\tmakeContainer() {\n\t\t// Chart needs a dedicated parent element\n\t\tthis.parent.innerHTML = '';\n\n\t\tlet args = {\n\t\t\tinside: this.parent,\n\t\t\tclassName: 'chart-container'\n\t\t};\n\n\t\tif(this.independentWidth) {\n\t\t\targs.styles = { width: this.independentWidth + 'px' };\n\t\t}\n\n\t\tthis.container = $.create('div', args);\n\t}\n\n\tmakeTooltip() {\n\t\tthis.tip = new SvgTip({\n\t\t\tparent: this.container,\n\t\t\tcolors: this.colors\n\t\t});\n\t\tthis.bindTooltip();\n\t}\n\n\tbindTooltip() {}\n\n\tdraw(onlyWidthChange=false, init=false) {\n\t\tif (onlyWidthChange && isHidden(this.parent)) {\n\t\t\t// Don't update anything if the chart is hidden\n\t\t\treturn;\n\t\t}\n\t\tthis.updateWidth();\n\n\t\tthis.calc(onlyWidthChange);\n\t\tthis.makeChartArea();\n\t\tthis.setupComponents();\n\n\t\tthis.components.forEach(c => c.setup(this.drawArea));\n\t\t// this.components.forEach(c => c.make());\n\t\tthis.render(this.components, false);\n\n\t\tif(init) {\n\t\t\tthis.data = this.realData;\n\t\t\tsetTimeout(() => {this.update(this.data);}, this.initTimeout);\n\t\t}\n\n\t\tthis.renderLegend();\n\n\t\tthis.setupNavigation(init);\n\t}\n\n\tcalc() {} // builds state\n\n\tupdateWidth() {\n\t\tthis.baseWidth = getElementContentWidth(this.parent);\n\t\tthis.width = this.baseWidth - getExtraWidth(this.measures);\n\t}\n\n\tmakeChartArea() {\n\t\tif(this.svg) {\n\t\t\tthis.container.removeChild(this.svg);\n\t\t}\n\t\tlet m = this.measures;\n\n\t\tthis.svg = makeSVGContainer(\n\t\t\tthis.container,\n\t\t\t'frappe-chart chart',\n\t\t\tthis.baseWidth,\n\t\t\tthis.baseHeight\n\t\t);\n\t\tthis.svgDefs = makeSVGDefs(this.svg);\n\n\t\tif(this.title.length) {\n\t\t\tthis.titleEL = makeText(\n\t\t\t\t'title',\n\t\t\t\tm.margins.left,\n\t\t\t\tm.margins.top,\n\t\t\t\tthis.title,\n\t\t\t\t{\n\t\t\t\t\tfontSize: m.titleFontSize,\n\t\t\t\t\tfill: '#666666',\n\t\t\t\t\tdy: m.titleFontSize\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tlet top = getTopOffset(m);\n\t\tthis.drawArea = makeSVGGroup(\n\t\t\tthis.type + '-chart chart-draw-area',\n\t\t\t`translate(${getLeftOffset(m)}, ${top})`\n\t\t);\n\n\t\tif(this.config.showLegend) {\n\t\t\ttop += this.height + m.paddings.bottom;\n\t\t\tthis.legendArea = makeSVGGroup(\n\t\t\t\t'chart-legend',\n\t\t\t\t`translate(${getLeftOffset(m)}, ${top})`\n\t\t\t);\n\t\t}\n\n\t\tif(this.title.length) { this.svg.appendChild(this.titleEL); }\n\t\tthis.svg.appendChild(this.drawArea);\n\t\tif(this.config.showLegend) { this.svg.appendChild(this.legendArea); }\n\n\t\tthis.updateTipOffset(getLeftOffset(m), getTopOffset(m));\n\t}\n\n\tupdateTipOffset(x, y) {\n\t\tthis.tip.offset = {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t}\n\n\tsetupComponents() { this.components = new Map(); }\n\n\tupdate(data) {\n\t\tif(!data) {\n\t\t\tconsole.error('No data to update.');\n\t\t}\n\t\tthis.data = this.prepareData(data);\n\t\tthis.calc(); // builds state\n\t\tthis.render(this.components, this.config.animate);\n\t\tthis.renderLegend();\n\t}\n\n\trender(components=this.components, animate=true) {\n\t\tif(this.config.isNavigable) {\n\t\t\t// Remove all existing overlays\n\t\t\tthis.overlays.map(o => o.parentNode.removeChild(o));\n\t\t\t// ref.parentNode.insertBefore(element, ref);\n\t\t}\n\t\tlet elementsToAnimate = [];\n\t\t// Can decouple to this.refreshComponents() first to save animation timeout\n\t\tcomponents.forEach(c => {\n\t\t\telementsToAnimate = elementsToAnimate.concat(c.update(animate));\n\t\t});\n\t\tif(elementsToAnimate.length > 0) {\n\t\t\trunSMILAnimation(this.container, this.svg, elementsToAnimate);\n\t\t\tsetTimeout(() => {\n\t\t\t\tcomponents.forEach(c => c.make());\n\t\t\t\tthis.updateNav();\n\t\t\t}, CHART_POST_ANIMATE_TIMEOUT);\n\t\t} else {\n\t\t\tcomponents.forEach(c => c.make());\n\t\t\tthis.updateNav();\n\t\t}\n\t}\n\n\tupdateNav() {\n\t\tif(this.config.isNavigable) {\n\t\t\tthis.makeOverlay();\n\t\t\tthis.bindUnits();\n\t\t}\n\t}\n\n\trenderLegend() {}\n\n\tsetupNavigation(init=false) {\n\t\tif(!this.config.isNavigable) return;\n\n\t\tif(init) {\n\t\t\tthis.bindOverlay();\n\n\t\t\tthis.keyActions = {\n\t\t\t\t'13': this.onEnterKey.bind(this),\n\t\t\t\t'37': this.onLeftArrow.bind(this),\n\t\t\t\t'38': this.onUpArrow.bind(this),\n\t\t\t\t'39': this.onRightArrow.bind(this),\n\t\t\t\t'40': this.onDownArrow.bind(this),\n\t\t\t};\n\n\t\t\tdocument.addEventListener('keydown', (e) => {\n\t\t\t\tif(isElementInViewport(this.container)) {\n\t\t\t\t\te = e || window.event;\n\t\t\t\t\tif(this.keyActions[e.keyCode]) {\n\t\t\t\t\t\tthis.keyActions[e.keyCode]();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tmakeOverlay() {}\n\tupdateOverlay() {}\n\tbindOverlay() {}\n\tbindUnits() {}\n\n\tonLeftArrow() {}\n\tonRightArrow() {}\n\tonUpArrow() {}\n\tonDownArrow() {}\n\tonEnterKey() {}\n\n\taddDataPoint() {}\n\tremoveDataPoint() {}\n\n\tgetDataPoint() {}\n\tsetCurrentDataPoint() {}\n\n\tupdateDataset() {}\n\n\texport() {\n\t\tlet chartSvg = prepareForExport(this.svg);\n\t\tdownloadFile(this.title || 'Chart', [chartSvg]);\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { truncateString } from '../utils/draw-utils';\nimport { legendDot } from '../utils/draw';\nimport { round } from '../utils/helpers';\nimport { getExtraWidth } from '../utils/constants';\n\nexport default class AggregationChart extends BaseChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\n\t\tthis.config.formatTooltipY = (args.tooltipOptions || {}).formatTooltipY;\n\t\tthis.config.maxSlices = args.maxSlices || 20;\n\t\tthis.config.maxLegendPoints = args.maxLegendPoints || 20;\n\t}\n\n\tcalc() {\n\t\tlet s = this.state;\n\t\tlet maxSlices = this.config.maxSlices;\n\t\ts.sliceTotals = [];\n\n\t\tlet allTotals = this.data.labels.map((label, i) => {\n\t\t\tlet total = 0;\n\t\t\tthis.data.datasets.map(e => {\n\t\t\t\ttotal += e.values[i];\n\t\t\t});\n\t\t\treturn [total, label];\n\t\t}).filter(d => { return d[0] >= 0; }); // keep only positive results\n\n\t\tlet totals = allTotals;\n\t\tif(allTotals.length > maxSlices) {\n\t\t\t// Prune and keep a grey area for rest as per maxSlices\n\t\t\tallTotals.sort((a, b) => { return b[0] - a[0]; });\n\n\t\t\ttotals = allTotals.slice(0, maxSlices-1);\n\t\t\tlet remaining = allTotals.slice(maxSlices-1);\n\n\t\t\tlet sumOfRemaining = 0;\n\t\t\tremaining.map(d => {sumOfRemaining += d[0];});\n\t\t\ttotals.push([sumOfRemaining, 'Rest']);\n\t\t\tthis.colors[maxSlices-1] = 'grey';\n\t\t}\n\n\t\ts.labels = [];\n\t\ttotals.map(d => {\n\t\t\ts.sliceTotals.push(round(d[0]));\n\t\t\ts.labels.push(d[1]);\n\t\t});\n\n\t\ts.grandTotal = s.sliceTotals.reduce((a, b) => a + b, 0);\n\n\t\tthis.center = {\n\t\t\tx: this.width / 2,\n\t\t\ty: this.height / 2\n\t\t};\n\t}\n\n\trenderLegend() {\n\t\tlet s = this.state;\n\t\tthis.legendArea.textContent = '';\n\t\tthis.legendTotals = s.sliceTotals.slice(0, this.config.maxLegendPoints);\n\n\t\tlet count = 0;\n\t\tlet y = 0;\n\t\tthis.legendTotals.map((d, i) => {\n\t\t\tlet barWidth = 150;\n\t\t\tlet divisor = Math.floor(\n\t\t\t\t(this.width - getExtraWidth(this.measures))/barWidth\n\t\t\t);\n\t\t\tif (this.legendTotals.length < divisor) {\n\t\t\t\tbarWidth = this.width/this.legendTotals.length;\n\t\t\t}\n\t\t\tif(count > divisor) {\n\t\t\t\tcount = 0;\n\t\t\t\ty += 20;\n\t\t\t}\n\t\t\tlet x = barWidth * count + 5;\n\t\t\tlet label = this.config.truncateLegends ? truncateString(s.labels[i], barWidth/10) : s.labels[i];\n\t\t\tlet formatted = this.config.formatTooltipY ? this.config.formatTooltipY(d) : d;\n\t\t\tlet dot = legendDot(\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\t5,\n\t\t\t\tthis.colors[i],\n\t\t\t\t`${label}: ${formatted}`,\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tthis.legendArea.appendChild(dot);\n\t\t\tcount++;\n\t\t});\n\t}\n}\n","import AggregationChart from './AggregationChart';\nimport { getOffset } from '../utils/dom';\nimport { getComponent } from '../objects/ChartComponents';\nimport { PERCENTAGE_BAR_DEFAULT_HEIGHT, PERCENTAGE_BAR_DEFAULT_DEPTH } from '../utils/constants';\n\nexport default class PercentageChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'percentage';\n\t\tthis.setup();\n\t}\n\n\tsetMeasures(options) {\n\t\tlet m = this.measures;\n\t\tthis.barOptions = options.barOptions || {};\n\n\t\tlet b = this.barOptions;\n\t\tb.height = b.height || PERCENTAGE_BAR_DEFAULT_HEIGHT;\n\t\tb.depth = b.depth || PERCENTAGE_BAR_DEFAULT_DEPTH;\n\n\t\tm.paddings.right = 30;\n\t\tm.legendHeight = 60;\n\t\tm.baseHeight = (b.height + b.depth * 0.5) * 8;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'percentageBars',\n\t\t\t\t{\n\t\t\t\t\tbarHeight: this.barOptions.height,\n\t\t\t\t\tbarDepth: this.barOptions.depth,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: s.xPositions,\n\t\t\t\t\t\twidths: s.widths,\n\t\t\t\t\t\tcolors: this.colors\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\n\t\ts.xPositions = [];\n\t\ts.widths = [];\n\n\t\tlet xPos = 0;\n\t\ts.sliceTotals.map((value) => {\n\t\t\tlet width = this.width * value / s.grandTotal;\n\t\t\ts.widths.push(width);\n\t\t\ts.xPositions.push(xPos);\n\t\t\txPos += width;\n\t\t});\n\t}\n\n\tmakeDataByIndex() { }\n\n\tbindTooltip() {\n\t\tlet s = this.state;\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tlet bars = this.components.get('percentageBars').store;\n\t\t\tlet bar = e.target;\n\t\t\tif(bars.includes(bar)) {\n\n\t\t\t\tlet i = bars.indexOf(bar);\n\t\t\t\tlet gOff = getOffset(this.container), pOff = getOffset(bar);\n\n\t\t\t\tlet x = pOff.left - gOff.left + parseInt(bar.getAttribute('width'))/2;\n\t\t\t\tlet y = pOff.top - gOff.top;\n\t\t\t\tlet title = (this.formattedLabels && this.formattedLabels.length>0\n\t\t\t\t\t? this.formattedLabels[i] : this.state.labels[i]) + ': ';\n\t\t\t\tlet fraction = s.sliceTotals[i]/s.grandTotal;\n\n\t\t\t\tthis.tip.setValues(x, y, {name: title, value: (fraction*100).toFixed(1) + \"%\"});\n\t\t\t\tthis.tip.showTip();\n\t\t\t}\n\t\t});\n\t}\n}\n","import AggregationChart from './AggregationChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset } from '../utils/dom';\nimport { getPositionByAngle } from '../utils/helpers';\nimport { makeArcPathStr, makeCircleStr } from '../utils/draw';\nimport { lightenDarkenColor } from '../utils/colors';\nimport { transform } from '../utils/animation';\nimport { FULL_ANGLE } from '../utils/constants';\n\nexport default class PieChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'pie';\n\t\tthis.initTimeout = 0;\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\t\tthis.mouseMove = this.mouseMove.bind(this);\n\t\tthis.mouseLeave = this.mouseLeave.bind(this);\n\n\t\tthis.hoverRadio = args.hoverRadio || 0.1;\n\t\tthis.config.startAngle = args.startAngle || 0;\n\n\t\tthis.clockWise = args.clockWise || false;\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\t\tthis.radius = (this.height > this.width ? this.center.x : this.center.y);\n\n\t\tconst { radius, clockWise } = this;\n\n\t\tconst prevSlicesProperties = s.slicesProperties || [];\n\t\ts.sliceStrings = [];\n\t\ts.slicesProperties = [];\n\t\tlet curAngle = 180 - this.config.startAngle;\n\t\ts.sliceTotals.map((total, i) => {\n\t\t\tconst startAngle = curAngle;\n\t\t\tconst originDiffAngle = (total / s.grandTotal) * FULL_ANGLE;\n\t\t\tconst largeArc = originDiffAngle > 180 ? 1: 0;\n\t\t\tconst diffAngle = clockWise ? -originDiffAngle : originDiffAngle;\n\t\t\tconst endAngle = curAngle = curAngle + diffAngle;\n\t\t\tconst startPosition = getPositionByAngle(startAngle, radius);\n\t\t\tconst endPosition = getPositionByAngle(endAngle, radius);\n\n\t\t\tconst prevProperty = this.init && prevSlicesProperties[i];\n\n\t\t\tlet curStart,curEnd;\n\t\t\tif(this.init) {\n\t\t\t\tcurStart = prevProperty ? prevProperty.startPosition : startPosition;\n\t\t\t\tcurEnd = prevProperty ? prevProperty.endPosition : startPosition;\n\t\t\t} else {\n\t\t\t\tcurStart = startPosition;\n\t\t\t\tcurEnd = endPosition;\n\t\t\t}\n\t\t\tconst curPath =\n\t\t\t\toriginDiffAngle === 360\n\t\t\t\t\t? makeCircleStr(curStart, curEnd, this.center, this.radius, clockWise, largeArc)\n\t\t\t\t\t: makeArcPathStr(curStart, curEnd, this.center, this.radius, clockWise, largeArc);\n\n\t\t\ts.sliceStrings.push(curPath);\n\t\t\ts.slicesProperties.push({\n\t\t\t\tstartPosition,\n\t\t\t\tendPosition,\n\t\t\t\tvalue: total,\n\t\t\t\ttotal: s.grandTotal,\n\t\t\t\tstartAngle,\n\t\t\t\tendAngle,\n\t\t\t\tangle: diffAngle\n\t\t\t});\n\n\t\t});\n\t\tthis.init = 0;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'pieSlices',\n\t\t\t\t{ },\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsliceStrings: s.sliceStrings,\n\t\t\t\t\t\tcolors: this.colors\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalTranslateByAngle(property){\n\t\tconst{radius,hoverRadio} = this;\n\t\tconst position = getPositionByAngle(property.startAngle+(property.angle / 2),radius);\n\t\treturn `translate3d(${(position.x) * hoverRadio}px,${(position.y) * hoverRadio}px,0)`;\n\t}\n\n\thoverSlice(path,i,flag,e){\n\t\tif(!path) return;\n\t\tconst color = this.colors[i];\n\t\tif(flag) {\n\t\t\ttransform(path, this.calTranslateByAngle(this.state.slicesProperties[i]));\n\t\t\tpath.style.fill = lightenDarkenColor(color, 50);\n\t\t\tlet g_off = getOffset(this.svg);\n\t\t\tlet x = e.pageX - g_off.left + 10;\n\t\t\tlet y = e.pageY - g_off.top - 10;\n\t\t\tlet title = (this.formatted_labels && this.formatted_labels.length > 0\n\t\t\t\t? this.formatted_labels[i] : this.state.labels[i]) + ': ';\n\t\t\tlet percent = (this.state.sliceTotals[i] * 100 / this.state.grandTotal).toFixed(1);\n\t\t\tthis.tip.setValues(x, y, {name: title, value: percent + \"%\"});\n\t\t\tthis.tip.showTip();\n\t\t} else {\n\t\t\ttransform(path,'translate3d(0,0,0)');\n\t\t\tthis.tip.hideTip();\n\t\t\tpath.style.fill = color;\n\t\t}\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', this.mouseMove);\n\t\tthis.container.addEventListener('mouseleave', this.mouseLeave);\n\t}\n\n\tmouseMove(e){\n\t\tconst target = e.target;\n\t\tlet slices = this.components.get('pieSlices').store;\n\t\tlet prevIndex = this.curActiveSliceIndex;\n\t\tlet prevAcitve = this.curActiveSlice;\n\t\tif(slices.includes(target)) {\n\t\t\tlet i = slices.indexOf(target);\n\t\t\tthis.hoverSlice(prevAcitve, prevIndex,false);\n\t\t\tthis.curActiveSlice = target;\n\t\t\tthis.curActiveSliceIndex = i;\n\t\t\tthis.hoverSlice(target, i, true, e);\n\t\t} else {\n\t\t\tthis.mouseLeave();\n\t\t}\n\t}\n\n\tmouseLeave(){\n\t\tthis.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,false);\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { makeText, heatSquare } from '../utils/draw';\nimport { DAY_NAMES_SHORT, addDays, areInSameMonth, getLastDateInMonth, setDayToSunday, getYyyyMmDd, getWeeksBetween, getMonthName, clone,\n\tNO_OF_MILLIS, NO_OF_YEAR_MONTHS, NO_OF_DAYS_IN_WEEK } from '../utils/date-utils';\nimport { calcDistribution, getMaxCheckpoint } from '../utils/intervals';\nimport { getExtraHeight, getExtraWidth, HEATMAP_DISTRIBUTION_SIZE, HEATMAP_SQUARE_SIZE,\n\tHEATMAP_GUTTER_SIZE } from '../utils/constants';\n\nconst COL_WIDTH = HEATMAP_SQUARE_SIZE + HEATMAP_GUTTER_SIZE;\nconst ROW_HEIGHT = COL_WIDTH;\n// const DAY_INCR = 1;\n\nexport default class Heatmap extends BaseChart {\n\tconstructor(parent, options) {\n\t\tsuper(parent, options);\n\t\tthis.type = 'heatmap';\n\n\t\tthis.countLabel = options.countLabel || '';\n\n\t\tlet validStarts = ['Sunday', 'Monday'];\n\t\tlet startSubDomain = validStarts.includes(options.startSubDomain)\n\t\t\t? options.startSubDomain : 'Sunday';\n\t\tthis.startSubDomainIndex = validStarts.indexOf(startSubDomain);\n\n\t\tthis.setup();\n\t}\n\n\tsetMeasures(options) {\n\t\tlet m = this.measures;\n\t\tthis.discreteDomains = options.discreteDomains === 0 ? 0 : 1;\n\n\t\tm.paddings.top = ROW_HEIGHT * 3;\n\t\tm.paddings.bottom = 0;\n\t\tm.legendHeight = ROW_HEIGHT * 2;\n\t\tm.baseHeight = ROW_HEIGHT * NO_OF_DAYS_IN_WEEK\n\t\t\t+ getExtraHeight(m);\n\n\t\tlet d = this.data;\n\t\tlet spacing = this.discreteDomains ? NO_OF_YEAR_MONTHS : 0;\n\t\tthis.independentWidth = (getWeeksBetween(d.start, d.end)\n\t\t\t+ spacing) * COL_WIDTH + getExtraWidth(m);\n\t}\n\n\tupdateWidth() {\n\t\tlet spacing = this.discreteDomains ? NO_OF_YEAR_MONTHS : 0;\n\t\tlet noOfWeeks = this.state.noOfWeeks ? this.state.noOfWeeks : 52;\n\t\tthis.baseWidth = (noOfWeeks + spacing) * COL_WIDTH\n\t\t\t+ getExtraWidth(this.measures);\n\t}\n\n\tprepareData(data=this.data) {\n\t\tif(data.start && data.end && data.start > data.end) {\n\t\t\tthrow new Error('Start date cannot be greater than end date.');\n\t\t}\n\n\t\tif(!data.start) {\n\t\t\tdata.start = new Date();\n\t\t\tdata.start.setFullYear( data.start.getFullYear() - 1 );\n\t\t}\n\t\tif(!data.end) { data.end = new Date(); }\n\t\tdata.dataPoints = data.dataPoints || {};\n\n\t\tif(parseInt(Object.keys(data.dataPoints)[0]) > 100000) {\n\t\t\tlet points = {};\n\t\t\tObject.keys(data.dataPoints).forEach(timestampSec => {\n\t\t\t\tlet date = new Date(timestampSec * NO_OF_MILLIS);\n\t\t\t\tpoints[getYyyyMmDd(date)] = data.dataPoints[timestampSec];\n\t\t\t});\n\t\t\tdata.dataPoints = points;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tcalc() {\n\t\tlet s = this.state;\n\n\t\ts.start = clone(this.data.start);\n\t\ts.end = clone(this.data.end);\n\n\t\ts.firstWeekStart = clone(s.start);\n\t\ts.noOfWeeks = getWeeksBetween(s.start, s.end);\n\t\ts.distribution = calcDistribution(\n\t\t\tObject.values(this.data.dataPoints), HEATMAP_DISTRIBUTION_SIZE);\n\n\t\ts.domainConfigs = this.getDomains();\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\t\tlet lessCol = this.discreteDomains ? 0 : 1;\n\n\t\tlet componentConfigs = s.domainConfigs.map((config, i) => [\n\t\t\t'heatDomain',\n\t\t\t{\n\t\t\t\tindex: config.index,\n\t\t\t\tcolWidth: COL_WIDTH,\n\t\t\t\trowHeight: ROW_HEIGHT,\n\t\t\t\tsquareSize: HEATMAP_SQUARE_SIZE,\n\t\t\t\tradius: this.rawChartArgs.radius || 0,\n\t\t\t\txTranslate: s.domainConfigs\n\t\t\t\t\t.filter((config, j) => j < i)\n\t\t\t\t\t.map(config => config.cols.length - lessCol)\n\t\t\t\t\t.reduce((a, b) => a + b, 0)\n\t\t\t\t\t* COL_WIDTH\n\t\t\t},\n\t\t\tfunction() {\n\t\t\t\treturn s.domainConfigs[i];\n\t\t\t}.bind(this)\n\n\t\t]);\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map((args, i) => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0] + '-' + i, component];\n\t\t\t})\n\t\t);\n\n\t\tlet y = 0;\n\t\tDAY_NAMES_SHORT.forEach((dayName, i) => {\n\t\t\tif([1, 3, 5].includes(i)) {\n\t\t\t\tlet dayText = makeText('subdomain-name', -COL_WIDTH/2, y, dayName,\n\t\t\t\t\t{\n\t\t\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE,\n\t\t\t\t\t\tdy: 8,\n\t\t\t\t\t\ttextAnchor: 'end'\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tthis.drawArea.appendChild(dayText);\n\t\t\t}\n\t\t\ty += ROW_HEIGHT;\n\t\t});\n\t}\n\n\tupdate(data) {\n\t\tif(!data) {\n\t\t\tconsole.error('No data to update.');\n\t\t}\n\n\t\tthis.data = this.prepareData(data);\n\t\tthis.draw();\n\t\tthis.bindTooltip();\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tthis.components.forEach(comp => {\n\t\t\t\tlet daySquares = comp.store;\n\t\t\t\tlet daySquare = e.target;\n\t\t\t\tif(daySquares.includes(daySquare)) {\n\n\t\t\t\t\tlet count = daySquare.getAttribute('data-value');\n\t\t\t\t\tlet dateParts = daySquare.getAttribute('data-date').split('-');\n\n\t\t\t\t\tlet month = getMonthName(parseInt(dateParts[1])-1, true);\n\n\t\t\t\t\tlet gOff = this.container.getBoundingClientRect(), pOff = daySquare.getBoundingClientRect();\n\n\t\t\t\t\tlet width = parseInt(e.target.getAttribute('width'));\n\t\t\t\t\tlet x = pOff.left - gOff.left + width/2;\n\t\t\t\t\tlet y = pOff.top - gOff.top;\n\t\t\t\t\tlet value = count + ' ' + this.countLabel;\n\t\t\t\t\tlet name = ' on ' + month + ' ' + dateParts[0] + ', ' + dateParts[2];\n\n\t\t\t\t\tthis.tip.setValues(x, y, {name: name, value: value, valueFirst: 1}, []);\n\t\t\t\t\tthis.tip.showTip();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\trenderLegend() {\n\t\tthis.legendArea.textContent = '';\n\t\tlet x = 0;\n\t\tlet y = ROW_HEIGHT;\n\t\tlet radius = this.rawChartArgs.radius || 0;\n\n\t\tlet lessText = makeText('subdomain-name', x, y, 'Less',\n\t\t\t{\n\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE + 1,\n\t\t\t\tdy: 9\n\t\t\t}\n\t\t);\n\t\tx = (COL_WIDTH * 2) + COL_WIDTH/2;\n\t\tthis.legendArea.appendChild(lessText);\n\n\t\tthis.colors.slice(0, HEATMAP_DISTRIBUTION_SIZE).map((color, i) => {\n\t\t\tconst square = heatSquare('heatmap-legend-unit', x + (COL_WIDTH + 3) * i,\n\t\t\t\ty, HEATMAP_SQUARE_SIZE, radius, color);\n\t\t\tthis.legendArea.appendChild(square);\n\t\t});\n\n\t\tlet moreTextX = x + HEATMAP_DISTRIBUTION_SIZE * (COL_WIDTH + 3) + COL_WIDTH/4;\n\t\tlet moreText = makeText('subdomain-name', moreTextX, y, 'More',\n\t\t\t{\n\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE + 1,\n\t\t\t\tdy: 9\n\t\t\t}\n\t\t);\n\t\tthis.legendArea.appendChild(moreText);\n\t}\n\n\tgetDomains() {\n\t\tlet s = this.state;\n\t\tconst [startMonth, startYear] = [s.start.getMonth(), s.start.getFullYear()];\n\t\tconst [endMonth, endYear] = [s.end.getMonth(), s.end.getFullYear()];\n\n\t\tconst noOfMonths = (endMonth - startMonth + 1) + (endYear - startYear) * 12;\n\n\t\tlet domainConfigs = [];\n\n\t\tlet startOfMonth = clone(s.start);\n\t\tfor(var i = 0; i < noOfMonths; i++) {\n\t\t\tlet endDate = s.end;\n\t\t\tif(!areInSameMonth(startOfMonth, s.end)) {\n\t\t\t\tlet [month, year] = [startOfMonth.getMonth(), startOfMonth.getFullYear()];\n\t\t\t\tendDate = getLastDateInMonth(month, year);\n\t\t\t}\n\t\t\tdomainConfigs.push(this.getDomainConfig(startOfMonth, endDate));\n\n\t\t\taddDays(endDate, 1);\n\t\t\tstartOfMonth = endDate;\n\t\t}\n\n\t\treturn domainConfigs;\n\t}\n\n\tgetDomainConfig(startDate, endDate='') {\n\t\tlet [month, year] = [startDate.getMonth(), startDate.getFullYear()];\n\t\tlet startOfWeek = setDayToSunday(startDate); // TODO: Monday as well\n\t\tendDate = clone(endDate) || getLastDateInMonth(month, year);\n\n\t\tlet domainConfig = {\n\t\t\tindex: month,\n\t\t\tcols: []\n\t\t};\n\n\t\taddDays(endDate, 1);\n\t\tlet noOfMonthWeeks = getWeeksBetween(startOfWeek, endDate);\n\n\t\tlet cols = [], col;\n\t\tfor(var i = 0; i < noOfMonthWeeks; i++) {\n\t\t\tcol = this.getCol(startOfWeek, month);\n\t\t\tcols.push(col);\n\n\t\t\tstartOfWeek = new Date(col[NO_OF_DAYS_IN_WEEK - 1].yyyyMmDd);\n\t\t\taddDays(startOfWeek, 1);\n\t\t}\n\n\t\tif(col[NO_OF_DAYS_IN_WEEK - 1].dataValue !== undefined) {\n\t\t\taddDays(startOfWeek, 1);\n\t\t\tcols.push(this.getCol(startOfWeek, month, true));\n\t\t}\n\n\t\tdomainConfig.cols = cols;\n\n\t\treturn domainConfig;\n\t}\n\n\tgetCol(startDate, month, empty = false) {\n\t\tlet s = this.state;\n\n\t\t// startDate is the start of week\n\t\tlet currentDate = clone(startDate);\n\t\tlet col = [];\n\n\t\tfor(var i = 0; i < NO_OF_DAYS_IN_WEEK; i++, addDays(currentDate, 1)) {\n\t\t\tlet config = {};\n\n\t\t\t// Non-generic adjustment for entire heatmap, needs state\n\t\t\tlet currentDateWithinData = currentDate >= s.start && currentDate <= s.end;\n\n\t\t\tif(empty || currentDate.getMonth() !== month || !currentDateWithinData) {\n\t\t\t\tconfig.yyyyMmDd = getYyyyMmDd(currentDate);\n\t\t\t} else {\n\t\t\t\tconfig = this.getSubDomainConfig(currentDate);\n\t\t\t}\n\t\t\tcol.push(config);\n\t\t}\n\n\t\treturn col;\n\t}\n\n\tgetSubDomainConfig(date) {\n\t\tlet yyyyMmDd = getYyyyMmDd(date);\n\t\tlet dataValue = this.data.dataPoints[yyyyMmDd];\n\t\tlet config = {\n\t\t\tyyyyMmDd: yyyyMmDd,\n\t\t\tdataValue: dataValue || 0,\n\t\t\tfill: this.colors[getMaxCheckpoint(dataValue, this.state.distribution)]\n\t\t};\n\t\treturn config;\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { dataPrep, zeroDataPrep, getShortenedLabels } from '../utils/axis-chart-utils';\nimport { AXIS_LEGEND_BAR_SIZE } from '../utils/constants';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset, fire } from '../utils/dom';\nimport { calcChartIntervals, getIntervalSize, getValueRange, getZeroIndex, scale, getClosestInArray } from '../utils/intervals';\nimport { floatTwo } from '../utils/helpers';\nimport { makeOverlay, updateOverlay, legendBar } from '../utils/draw';\nimport { getTopOffset, getLeftOffset, MIN_BAR_PERCENT_HEIGHT, BAR_CHART_SPACE_RATIO,\n\tLINE_CHART_DOT_SIZE } from '../utils/constants';\n\nexport default class AxisChart extends BaseChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\n\t\tthis.barOptions = args.barOptions || {};\n\t\tthis.lineOptions = args.lineOptions || {};\n\n\t\tthis.type = args.type || 'line';\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tsetMeasures() {\n\t\tif(this.data.datasets.length <= 1) {\n\t\t\tthis.config.showLegend = 0;\n\t\t\tthis.measures.paddings.bottom = 30;\n\t\t}\n\t}\n\n\tconfigure(options) {\n\t\tsuper.configure(options);\n\n\t\toptions.axisOptions = options.axisOptions || {};\n\t\toptions.tooltipOptions = options.tooltipOptions || {};\n\n\t\tthis.config.xAxisMode = options.axisOptions.xAxisMode || 'span';\n\t\tthis.config.yAxisMode = options.axisOptions.yAxisMode || 'span';\n\t\tthis.config.xIsSeries = options.axisOptions.xIsSeries || 0;\n\t\tthis.config.shortenYAxisNumbers = options.axisOptions.shortenYAxisNumbers || 0;\n\n\t\tthis.config.formatTooltipX = options.tooltipOptions.formatTooltipX;\n\t\tthis.config.formatTooltipY = options.tooltipOptions.formatTooltipY;\n\n\t\tthis.config.valuesOverPoints = options.valuesOverPoints;\n\t}\n\n\tprepareData(data=this.data) {\n\t\treturn dataPrep(data, this.type);\n\t}\n\n\tprepareFirstData(data=this.data) {\n\t\treturn zeroDataPrep(data);\n\t}\n\n\tcalc(onlyWidthChange = false) {\n\t\tthis.calcXPositions();\n\t\tif(!onlyWidthChange) {\n\t\t\tthis.calcYAxisParameters(this.getAllYValues(), this.type === 'line');\n\t\t}\n\t\tthis.makeDataByIndex();\n\t}\n\n\tcalcXPositions() {\n\t\tlet s = this.state;\n\t\tlet labels = this.data.labels;\n\t\ts.datasetLength = labels.length;\n\n\t\ts.unitWidth = this.width/(s.datasetLength);\n\t\t// Default, as per bar, and mixed. Only line will be a special case\n\t\ts.xOffset = s.unitWidth/2;\n\n\t\t// // For a pure Line Chart\n\t\t// s.unitWidth = this.width/(s.datasetLength - 1);\n\t\t// s.xOffset = 0;\n\n\t\ts.xAxis = {\n\t\t\tlabels: labels,\n\t\t\tpositions: labels.map((d, i) =>\n\t\t\t\tfloatTwo(s.xOffset + i * s.unitWidth)\n\t\t\t)\n\t\t};\n\t}\n\n\tcalcYAxisParameters(dataValues, withMinimum = 'false') {\n\t\tconst yPts = calcChartIntervals(dataValues, withMinimum);\n\t\tconst scaleMultiplier = this.height / getValueRange(yPts);\n\t\tconst intervalHeight = getIntervalSize(yPts) * scaleMultiplier;\n\t\tconst zeroLine = this.height - (getZeroIndex(yPts) * intervalHeight);\n\n\t\tthis.state.yAxis = {\n\t\t\tlabels: yPts,\n\t\t\tpositions: yPts.map(d => zeroLine - d * scaleMultiplier),\n\t\t\tscaleMultiplier: scaleMultiplier,\n\t\t\tzeroLine: zeroLine,\n\t\t};\n\n\t\t// Dependent if above changes\n\t\tthis.calcDatasetPoints();\n\t\tthis.calcYExtremes();\n\t\tthis.calcYRegions();\n\t}\n\n\tcalcDatasetPoints() {\n\t\tlet s = this.state;\n\t\tlet scaleAll = values => values.map(val => scale(val, s.yAxis));\n\n\t\ts.datasets = this.data.datasets.map((d, i) => {\n\t\t\tlet values = d.values;\n\t\t\tlet cumulativeYs = d.cumulativeYs || [];\n\t\t\treturn {\n\t\t\t\tname: d.name && d.name.replace(/<|>|&/g, (char) => char == '&' ? '&' : char == '<' ? '<' : '>'),\n\t\t\t\tindex: i,\n\t\t\t\tchartType: d.chartType,\n\n\t\t\t\tvalues: values,\n\t\t\t\tyPositions: scaleAll(values),\n\n\t\t\t\tcumulativeYs: cumulativeYs,\n\t\t\t\tcumulativeYPos: scaleAll(cumulativeYs),\n\t\t\t};\n\t\t});\n\t}\n\n\tcalcYExtremes() {\n\t\tlet s = this.state;\n\t\tif(this.barOptions.stacked) {\n\t\t\ts.yExtremes = s.datasets[s.datasets.length - 1].cumulativeYPos;\n\t\t\treturn;\n\t\t}\n\t\ts.yExtremes = new Array(s.datasetLength).fill(9999);\n\t\ts.datasets.map(d => {\n\t\t\td.yPositions.map((pos, j) => {\n\t\t\t\tif(pos < s.yExtremes[j]) {\n\t\t\t\t\ts.yExtremes[j] = pos;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tcalcYRegions() {\n\t\tlet s = this.state;\n\t\tif(this.data.yMarkers) {\n\t\t\tthis.state.yMarkers = this.data.yMarkers.map(d => {\n\t\t\t\td.position = scale(d.value, s.yAxis);\n\t\t\t\tif(!d.options) d.options = {};\n\t\t\t\t// if(!d.label.includes(':')) {\n\t\t\t\t// \td.label += ': ' + d.value;\n\t\t\t\t// }\n\t\t\t\treturn d;\n\t\t\t});\n\t\t}\n\t\tif(this.data.yRegions) {\n\t\t\tthis.state.yRegions = this.data.yRegions.map(d => {\n\t\t\t\td.startPos = scale(d.start, s.yAxis);\n\t\t\t\td.endPos = scale(d.end, s.yAxis);\n\t\t\t\tif(!d.options) d.options = {};\n\t\t\t\treturn d;\n\t\t\t});\n\t\t}\n\t}\n\n\tgetAllYValues() {\n\t\tlet key = 'values';\n\n\t\tif(this.barOptions.stacked) {\n\t\t\tkey = 'cumulativeYs';\n\t\t\tlet cumulative = new Array(this.state.datasetLength).fill(0);\n\t\t\tthis.data.datasets.map((d, i) => {\n\t\t\t\tlet values = this.data.datasets[i].values;\n\t\t\t\td[key] = cumulative = cumulative.map((c, i) => c + values[i]);\n\t\t\t});\n\t\t}\n\n\t\tlet allValueLists = this.data.datasets.map(d => d[key]);\n\t\tif(this.data.yMarkers) {\n\t\t\tallValueLists.push(this.data.yMarkers.map(d => d.value));\n\t\t}\n\t\tif(this.data.yRegions) {\n\t\t\tthis.data.yRegions.map(d => {\n\t\t\t\tallValueLists.push([d.end, d.start]);\n\t\t\t});\n\t\t}\n\n\t\treturn [].concat(...allValueLists);\n\t}\n\n\tsetupComponents() {\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'yAxis',\n\t\t\t\t{\n\t\t\t\t\tmode: this.config.yAxisMode,\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tshortenNumbers: this.config.shortenYAxisNumbers\n\t\t\t\t\t// pos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yAxis;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\n\t\t\t[\n\t\t\t\t'xAxis',\n\t\t\t\t{\n\t\t\t\t\tmode: this.config.xAxisMode,\n\t\t\t\t\theight: this.height,\n\t\t\t\t\t// pos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\ts.xAxis.calcLabels = getShortenedLabels(this.width,\n\t\t\t\t\t\ts.xAxis.labels, this.config.xIsSeries);\n\n\t\t\t\t\treturn s.xAxis;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\n\t\t\t[\n\t\t\t\t'yRegions',\n\t\t\t\t{\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tpos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yRegions;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\t\t];\n\n\t\tlet barDatasets = this.state.datasets.filter(d => d.chartType === 'bar');\n\t\tlet lineDatasets = this.state.datasets.filter(d => d.chartType === 'line');\n\n\t\tlet barsConfigs = barDatasets.map(d => {\n\t\t\tlet index = d.index;\n\t\t\treturn [\n\t\t\t\t'barGraph' + '-' + d.index,\n\t\t\t\t{\n\t\t\t\t\tindex: index,\n\t\t\t\t\tcolor: this.colors[index],\n\t\t\t\t\tstacked: this.barOptions.stacked,\n\n\t\t\t\t\t// same for all datasets\n\t\t\t\t\tvaluesOverPoints: this.config.valuesOverPoints,\n\t\t\t\t\tminHeight: this.height * MIN_BAR_PERCENT_HEIGHT,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\tlet d = s.datasets[index];\n\t\t\t\t\tlet stacked = this.barOptions.stacked;\n\n\t\t\t\t\tlet spaceRatio = this.barOptions.spaceRatio || BAR_CHART_SPACE_RATIO;\n\t\t\t\t\tlet barsWidth = s.unitWidth * (1 - spaceRatio);\n\t\t\t\t\tlet barWidth = barsWidth/(stacked ? 1 : barDatasets.length);\n\n\t\t\t\t\tlet xPositions = s.xAxis.positions.map(x => x - barsWidth/2);\n\t\t\t\t\tif(!stacked) {\n\t\t\t\t\t\txPositions = xPositions.map(p => p + barWidth * index);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet labels = new Array(s.datasetLength).fill('');\n\t\t\t\t\tif(this.config.valuesOverPoints) {\n\t\t\t\t\t\tif(stacked && d.index === s.datasets.length - 1) {\n\t\t\t\t\t\t\tlabels = d.cumulativeYs;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlabels = d.values;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet offsets = new Array(s.datasetLength).fill(0);\n\t\t\t\t\tif(stacked) {\n\t\t\t\t\t\toffsets = d.yPositions.map((y, j) => y - d.cumulativeYPos[j]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: xPositions,\n\t\t\t\t\t\tyPositions: d.yPositions,\n\t\t\t\t\t\toffsets: offsets,\n\t\t\t\t\t\t// values: d.values,\n\t\t\t\t\t\tlabels: labels,\n\n\t\t\t\t\t\tzeroLine: s.yAxis.zeroLine,\n\t\t\t\t\t\tbarsWidth: barsWidth,\n\t\t\t\t\t\tbarWidth: barWidth,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t];\n\t\t});\n\n\t\tlet lineConfigs = lineDatasets.map(d => {\n\t\t\tlet index = d.index;\n\t\t\treturn [\n\t\t\t\t'lineGraph' + '-' + d.index,\n\t\t\t\t{\n\t\t\t\t\tindex: index,\n\t\t\t\t\tcolor: this.colors[index],\n\t\t\t\t\tsvgDefs: this.svgDefs,\n\t\t\t\t\theatline: this.lineOptions.heatline,\n\t\t\t\t\tregionFill: this.lineOptions.regionFill,\n\t\t\t\t\tspline: this.lineOptions.spline,\n\t\t\t\t\thideDots: this.lineOptions.hideDots,\n\t\t\t\t\thideLine: this.lineOptions.hideLine,\n\n\t\t\t\t\t// same for all datasets\n\t\t\t\t\tvaluesOverPoints: this.config.valuesOverPoints,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\tlet d = s.datasets[index];\n\t\t\t\t\tlet minLine = s.yAxis.positions[0] < s.yAxis.zeroLine\n\t\t\t\t\t\t? s.yAxis.positions[0] : s.yAxis.zeroLine;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: s.xAxis.positions,\n\t\t\t\t\t\tyPositions: d.yPositions,\n\n\t\t\t\t\t\tvalues: d.values,\n\n\t\t\t\t\t\tzeroLine: minLine,\n\t\t\t\t\t\tradius: this.lineOptions.dotSize || LINE_CHART_DOT_SIZE,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t];\n\t\t});\n\n\t\tlet markerConfigs = [\n\t\t\t[\n\t\t\t\t'yMarkers',\n\t\t\t\t{\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tpos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yMarkers;\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tcomponentConfigs = componentConfigs.concat(barsConfigs, lineConfigs, markerConfigs);\n\n\t\tlet optionals = ['yMarkers', 'yRegions'];\n\t\tthis.dataUnitComponents = [];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.filter(args => !optionals.includes(args[0]) || this.state[args[0]])\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\tif(args[0].includes('lineGraph') || args[0].includes('barGraph')) {\n\t\t\t\t\tthis.dataUnitComponents.push(component);\n\t\t\t\t}\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tmakeDataByIndex() {\n\t\tthis.dataByIndex = {};\n\n\t\tlet s = this.state;\n\t\tlet formatX = this.config.formatTooltipX;\n\t\tlet formatY = this.config.formatTooltipY;\n\t\tlet titles = s.xAxis.labels;\n\n\t\ttitles.map((label, index) => {\n\t\t\tlet values = this.state.datasets.map((set, i) => {\n\t\t\t\tlet value = set.values[index];\n\t\t\t\treturn {\n\t\t\t\t\ttitle: set.name,\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tyPos: set.yPositions[index],\n\t\t\t\t\tcolor: this.colors[i],\n\t\t\t\t\tformatted: formatY ? formatY(value) : value,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tthis.dataByIndex[index] = {\n\t\t\t\tlabel: label,\n\t\t\t\tformattedLabel: formatX ? formatX(label) : label,\n\t\t\t\txPos: s.xAxis.positions[index],\n\t\t\t\tvalues: values,\n\t\t\t\tyExtreme: s.yExtremes[index],\n\t\t\t};\n\t\t});\n\t}\n\n\tbindTooltip() {\n\t\t// NOTE: could be in tooltip itself, as it is a given functionality for its parent\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tlet m = this.measures;\n\t\t\tlet o = getOffset(this.container);\n\t\t\tlet relX = e.pageX - o.left - getLeftOffset(m);\n\t\t\tlet relY = e.pageY - o.top;\n\n\t\t\tif(relY < this.height + getTopOffset(m)\n\t\t\t\t&& relY > getTopOffset(m)) {\n\t\t\t\tthis.mapTooltipXPosition(relX);\n\t\t\t} else {\n\t\t\t\tthis.tip.hideTip();\n\t\t\t}\n\t\t});\n\t}\n\n\tmapTooltipXPosition(relX) {\n\t\tlet s = this.state;\n\t\tif(!s.yExtremes) return;\n\n\t\tlet index = getClosestInArray(relX, s.xAxis.positions, true);\n\t\tif (index >= 0) {\n\t\t\tlet dbi = this.dataByIndex[index];\n\n\t\t\tthis.tip.setValues(\n\t\t\t\tdbi.xPos + this.tip.offset.x,\n\t\t\t\tdbi.yExtreme + this.tip.offset.y,\n\t\t\t\t{name: dbi.formattedLabel, value: ''},\n\t\t\t\tdbi.values,\n\t\t\t\tindex\n\t\t\t);\n\n\t\t\tthis.tip.showTip();\n\t\t}\n\t}\n\n\trenderLegend() {\n\t\tlet s = this.data;\n\t\tif(s.datasets.length > 1) {\n\t\t\tthis.legendArea.textContent = '';\n\t\t\ts.datasets.map((d, i) => {\n\t\t\t\tlet barWidth = AXIS_LEGEND_BAR_SIZE;\n\t\t\t\t// let rightEndPoint = this.baseWidth - this.measures.margins.left - this.measures.margins.right;\n\t\t\t\t// let multiplier = s.datasets.length - i;\n\t\t\t\tlet rect = legendBar(\n\t\t\t\t\t// rightEndPoint - multiplier * barWidth,\t// To right align\n\t\t\t\t\tbarWidth * i,\n\t\t\t\t\t'0',\n\t\t\t\t\tbarWidth,\n\t\t\t\t\tthis.colors[i],\n\t\t\t\t\td.name,\n\t\t\t\t\tthis.config.truncateLegends);\n\t\t\t\tthis.legendArea.appendChild(rect);\n\t\t\t});\n\t\t}\n\t}\n\n\n\n\t// Overlay\n\tmakeOverlay() {\n\t\tif(this.init) {\n\t\t\tthis.init = 0;\n\t\t\treturn;\n\t\t}\n\t\tif(this.overlayGuides) {\n\t\t\tthis.overlayGuides.forEach(g => {\n\t\t\t\tlet o = g.overlay;\n\t\t\t\to.parentNode.removeChild(o);\n\t\t\t});\n\t\t}\n\n\t\tthis.overlayGuides = this.dataUnitComponents.map(c => {\n\t\t\treturn {\n\t\t\t\ttype: c.unitType,\n\t\t\t\toverlay: undefined,\n\t\t\t\tunits: c.units,\n\t\t\t};\n\t\t});\n\n\t\tif(this.state.currentIndex === undefined) {\n\t\t\tthis.state.currentIndex = this.state.datasetLength - 1;\n\t\t}\n\n\t\t// Render overlays\n\t\tthis.overlayGuides.map(d => {\n\t\t\tlet currentUnit = d.units[this.state.currentIndex];\n\n\t\t\td.overlay = makeOverlay[d.type](currentUnit);\n\t\t\tthis.drawArea.appendChild(d.overlay);\n\t\t});\n\t}\n\n\tupdateOverlayGuides() {\n\t\tif(this.overlayGuides) {\n\t\t\tthis.overlayGuides.forEach(g => {\n\t\t\t\tlet o = g.overlay;\n\t\t\t\to.parentNode.removeChild(o);\n\t\t\t});\n\t\t}\n\t}\n\n\tbindOverlay() {\n\t\tthis.parent.addEventListener('data-select', () => {\n\t\t\tthis.updateOverlay();\n\t\t});\n\t}\n\n\tbindUnits() {\n\t\tthis.dataUnitComponents.map(c => {\n\t\t\tc.units.map(unit => {\n\t\t\t\tunit.addEventListener('click', () => {\n\t\t\t\t\tlet index = unit.getAttribute('data-point-index');\n\t\t\t\t\tthis.setCurrentDataPoint(index);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\t// Note: Doesn't work as tooltip is absolutely positioned\n\t\tthis.tip.container.addEventListener('click', () => {\n\t\t\tlet index = this.tip.container.getAttribute('data-point-index');\n\t\t\tthis.setCurrentDataPoint(index);\n\t\t});\n\t}\n\n\tupdateOverlay() {\n\t\tthis.overlayGuides.map(d => {\n\t\t\tlet currentUnit = d.units[this.state.currentIndex];\n\t\t\tupdateOverlay[d.type](currentUnit, d.overlay);\n\t\t});\n\t}\n\n\tonLeftArrow() {\n\t\tthis.setCurrentDataPoint(this.state.currentIndex - 1);\n\t}\n\n\tonRightArrow() {\n\t\tthis.setCurrentDataPoint(this.state.currentIndex + 1);\n\t}\n\n\tgetDataPoint(index=this.state.currentIndex) {\n\t\tlet s = this.state;\n\t\tlet data_point = {\n\t\t\tindex: index,\n\t\t\tlabel: s.xAxis.labels[index],\n\t\t\tvalues: s.datasets.map(d => d.values[index])\n\t\t};\n\t\treturn data_point;\n\t}\n\n\tsetCurrentDataPoint(index) {\n\t\tlet s = this.state;\n\t\tindex = parseInt(index);\n\t\tif(index < 0) index = 0;\n\t\tif(index >= s.xAxis.labels.length) index = s.xAxis.labels.length - 1;\n\t\tif(index === s.currentIndex) return;\n\t\ts.currentIndex = index;\n\t\tfire(this.parent, \"data-select\", this.getDataPoint());\n\t}\n\n\n\n\t// API\n\taddDataPoint(label, datasetValues, index=this.state.datasetLength) {\n\t\tsuper.addDataPoint(label, datasetValues, index);\n\t\tthis.data.labels.splice(index, 0, label);\n\t\tthis.data.datasets.map((d, i) => {\n\t\t\td.values.splice(index, 0, datasetValues[i]);\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\tremoveDataPoint(index = this.state.datasetLength-1) {\n\t\tif (this.data.labels.length <= 1) {\n\t\t\treturn;\n\t\t}\n\t\tsuper.removeDataPoint(index);\n\t\tthis.data.labels.splice(index, 1);\n\t\tthis.data.datasets.map(d => {\n\t\t\td.values.splice(index, 1);\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\tupdateDataset(datasetValues, index=0) {\n\t\tthis.data.datasets[index].values = datasetValues;\n\t\tthis.update(this.data);\n\t}\n\t// addDataset(dataset, index) {}\n\t// removeDataset(index = 0) {}\n\n\tupdateDatasets(datasets) {\n\t\tthis.data.datasets.map((d, i) => {\n\t\t\tif(datasets[i]) {\n\t\t\t\td.values = datasets[i];\n\t\t\t}\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\t// updateDataPoint(dataPoint, index = 0) {}\n\t// addDataPoint(dataPoint, index = 0) {}\n\t// removeDataPoint(index = 0) {}\n}\n","import AggregationChart from './AggregationChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset } from '../utils/dom';\nimport { getPositionByAngle } from '../utils/helpers';\nimport { makeArcStrokePathStr, makeStrokeCircleStr } from '../utils/draw';\nimport { lightenDarkenColor } from '../utils/colors';\nimport { transform } from '../utils/animation';\nimport { FULL_ANGLE } from '../utils/constants';\n\nexport default class DonutChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'donut';\n\t\tthis.initTimeout = 0;\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\t\tthis.mouseMove = this.mouseMove.bind(this);\n\t\tthis.mouseLeave = this.mouseLeave.bind(this);\n\n\t\tthis.hoverRadio = args.hoverRadio || 0.1;\n\t\tthis.config.startAngle = args.startAngle || 0;\n\n\t\tthis.clockWise = args.clockWise || false;\n\t\tthis.strokeWidth = args.strokeWidth || 30;\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\t\tthis.radius =\n\t\t\tthis.height > this.width\n\t\t\t\t? this.center.x - this.strokeWidth / 2\n\t\t\t\t: this.center.y - this.strokeWidth / 2;\n\n\t\tconst { radius, clockWise } = this;\n\n\t\tconst prevSlicesProperties = s.slicesProperties || [];\n\t\ts.sliceStrings = [];\n\t\ts.slicesProperties = [];\n\t\tlet curAngle = 180 - this.config.startAngle;\n\n\t\ts.sliceTotals.map((total, i) => {\n\t\t\tconst startAngle = curAngle;\n\t\t\tconst originDiffAngle = (total / s.grandTotal) * FULL_ANGLE;\n\t\t\tconst largeArc = originDiffAngle > 180 ? 1: 0;\n\t\t\tconst diffAngle = clockWise ? -originDiffAngle : originDiffAngle;\n\t\t\tconst endAngle = curAngle = curAngle + diffAngle;\n\t\t\tconst startPosition = getPositionByAngle(startAngle, radius);\n\t\t\tconst endPosition = getPositionByAngle(endAngle, radius);\n\n\t\t\tconst prevProperty = this.init && prevSlicesProperties[i];\n\n\t\t\tlet curStart,curEnd;\n\t\t\tif(this.init) {\n\t\t\t\tcurStart = prevProperty ? prevProperty.startPosition : startPosition;\n\t\t\t\tcurEnd = prevProperty ? prevProperty.endPosition : startPosition;\n\t\t\t} else {\n\t\t\t\tcurStart = startPosition;\n\t\t\t\tcurEnd = endPosition;\n\t\t\t}\n\t\t\tconst curPath =\n\t\t\t\toriginDiffAngle === 360\n\t\t\t\t\t? makeStrokeCircleStr(curStart, curEnd, this.center, this.radius, this.clockWise, largeArc)\n\t\t\t\t\t: makeArcStrokePathStr(curStart, curEnd, this.center, this.radius, this.clockWise, largeArc);\n\n\t\t\ts.sliceStrings.push(curPath);\n\t\t\ts.slicesProperties.push({\n\t\t\t\tstartPosition,\n\t\t\t\tendPosition,\n\t\t\t\tvalue: total,\n\t\t\t\ttotal: s.grandTotal,\n\t\t\t\tstartAngle,\n\t\t\t\tendAngle,\n\t\t\t\tangle: diffAngle\n\t\t\t});\n\n\t\t});\n\t\tthis.init = 0;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'donutSlices',\n\t\t\t\t{ },\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsliceStrings: s.sliceStrings,\n\t\t\t\t\t\tcolors: this.colors,\n\t\t\t\t\t\tstrokeWidth: this.strokeWidth,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalTranslateByAngle(property){\n\t\tconst{ radius, hoverRadio } = this;\n\t\tconst position = getPositionByAngle(property.startAngle+(property.angle / 2),radius);\n\t\treturn `translate3d(${(position.x) * hoverRadio}px,${(position.y) * hoverRadio}px,0)`;\n\t}\n\n\thoverSlice(path,i,flag,e){\n\t\tif(!path) return;\n\t\tconst color = this.colors[i];\n\t\tif(flag) {\n\t\t\ttransform(path, this.calTranslateByAngle(this.state.slicesProperties[i]));\n\t\t\tpath.style.stroke = lightenDarkenColor(color, 50);\n\t\t\tlet g_off = getOffset(this.svg);\n\t\t\tlet x = e.pageX - g_off.left + 10;\n\t\t\tlet y = e.pageY - g_off.top - 10;\n\t\t\tlet title = (this.formatted_labels && this.formatted_labels.length > 0\n\t\t\t\t? this.formatted_labels[i] : this.state.labels[i]) + ': ';\n\t\t\tlet percent = (this.state.sliceTotals[i] * 100 / this.state.grandTotal).toFixed(1);\n\t\t\tthis.tip.setValues(x, y, {name: title, value: percent + \"%\"});\n\t\t\tthis.tip.showTip();\n\t\t} else {\n\t\t\ttransform(path,'translate3d(0,0,0)');\n\t\t\tthis.tip.hideTip();\n\t\t\tpath.style.stroke = color;\n\t\t}\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', this.mouseMove);\n\t\tthis.container.addEventListener('mouseleave', this.mouseLeave);\n\t}\n\n\tmouseMove(e){\n\t\tconst target = e.target;\n\t\tlet slices = this.components.get('donutSlices').store;\n\t\tlet prevIndex = this.curActiveSliceIndex;\n\t\tlet prevAcitve = this.curActiveSlice;\n\t\tif(slices.includes(target)) {\n\t\t\tlet i = slices.indexOf(target);\n\t\t\tthis.hoverSlice(prevAcitve, prevIndex,false);\n\t\t\tthis.curActiveSlice = target;\n\t\t\tthis.curActiveSliceIndex = i;\n\t\t\tthis.hoverSlice(target, i, true, e);\n\t\t} else {\n\t\t\tthis.mouseLeave();\n\t\t}\n\t}\n\n\tmouseLeave(){\n\t\tthis.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,false);\n\t}\n}\n","import '../css/charts.scss';\n\n// import MultiAxisChart from './charts/MultiAxisChart';\nimport PercentageChart from './charts/PercentageChart';\nimport PieChart from './charts/PieChart';\nimport Heatmap from './charts/Heatmap';\nimport AxisChart from './charts/AxisChart';\nimport DonutChart from './charts/DonutChart';\n\nconst chartTypes = {\n\tbar: AxisChart,\n\tline: AxisChart,\n\t// multiaxis: MultiAxisChart,\n\tpercentage: PercentageChart,\n\theatmap: Heatmap,\n\tpie: PieChart,\n\tdonut: DonutChart,\n};\n\nfunction getChartByType(chartType = 'line', parent, options) {\n\tif (chartType === 'axis-mixed') {\n\t\toptions.type = 'line';\n\t\treturn new AxisChart(parent, options);\n\t}\n\n\tif (!chartTypes[chartType]) {\n\t\tconsole.error(\"Undefined chart type: \" + chartType);\n\t\treturn;\n\t}\n\n\treturn new chartTypes[chartType](parent, options);\n}\n\nclass Chart {\n\tconstructor(parent, options) {\n\t\treturn getChartByType(options.type, parent, options);\n\t}\n}\n\nexport { Chart, PercentageChart, PieChart, Heatmap, AxisChart };","import * as Charts from './chart';\n\nlet frappe = { };\n\nfrappe.NAME = 'Frappe Charts';\nfrappe.VERSION = '1.6.2';\n\nfrappe = Object.assign({ }, frappe, Charts);\n\nexport default frappe;","// 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', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/DashboardPage');","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', 'admin/components/DashboardWidget');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LoadingIndicator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Link');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/abbreviateNumber');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport DashboardWidget from 'flarum/admin/components/DashboardWidget';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Link from 'flarum/common/components/Link';\nimport abbreviateNumber from 'flarum/common/utils/abbreviateNumber';\nexport default class MiniStatisticsWidget extends DashboardWidget {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"entities\", ['users', 'discussions', 'posts']);\n _defineProperty(this, \"lifetimeData\", void 0);\n _defineProperty(this, \"loadingLifetime\", true);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.loadLifetimeData();\n }\n async loadLifetimeData() {\n this.loadingLifetime = true;\n m.redraw();\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'lifetime'\n }\n });\n this.lifetimeData = data;\n this.loadingLifetime = false;\n m.redraw();\n }\n className() {\n return 'StatisticsWidget StatisticsWidget--mini';\n }\n content() {\n return m(\"div\", {\n className: \"StatisticsWidget-table\"\n }, m(\"h4\", {\n className: \"StatisticsWidget-title\"\n }, app.translator.trans('flarum-statistics.admin.statistics.mini_heading')), m(\"div\", {\n className: \"StatisticsWidget-entities\"\n }, m(\"div\", {\n className: \"StatisticsWidget-labels\"\n }, m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, app.translator.trans('flarum-statistics.admin.statistics.total_label'))), this.entities.map(entity => {\n const totalCount = this.loadingLifetime ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getTotalCount(entity);\n return m(\"div\", {\n className: \"StatisticsWidget-entity\"\n }, m(\"h3\", {\n className: \"StatisticsWidget-heading\"\n }, app.translator.trans('flarum-statistics.admin.statistics.' + entity + '_heading')), m(\"div\", {\n className: \"StatisticsWidget-total\",\n title: totalCount\n }, this.loadingLifetime ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(totalCount)));\n })), m(\"div\", {\n className: \"StatisticsWidget-viewFull\"\n }, m(Link, {\n href: app.route('extension', {\n id: 'flarum-statistics'\n })\n }, app.translator.trans('flarum-statistics.admin.statistics.view_full'))));\n }\n getTotalCount(entity) {\n return this.lifetimeData[entity];\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/MiniStatisticsWidget', MiniStatisticsWidget);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/SelectDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Placeholder');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Icon');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/classList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/utils/generateElementId');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormModal');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport generateElementId from 'flarum/admin/utils/generateElementId';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Button from 'flarum/common/components/Button';\nimport dayjs from 'dayjs';\nimport dayjsUtc from 'dayjs/plugin/utc';\ndayjs.extend(dayjsUtc);\nexport default class StatisticsWidgetDateSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n /* @ts-expect-error core typings don't allow us to set the type of the state attr :( */\n _defineProperty(this, \"state\", {\n inputs: {\n startDateVal: dayjs().format('YYYY-MM-DD'),\n endDateVal: dayjs().format('YYYY-MM-DD')\n },\n ids: {\n startDate: generateElementId(),\n endDate: generateElementId()\n }\n });\n }\n oninit(vnode) {\n super.oninit(vnode);\n if (this.attrs.value) {\n this.state.inputs = {\n startDateVal: dayjs.utc(this.attrs.value.start * 1000).format('YYYY-MM-DD'),\n endDateVal: dayjs.utc(this.attrs.value.end * 1000).format('YYYY-MM-DD')\n };\n }\n }\n className() {\n return 'StatisticsWidgetDateSelectionModal Modal--small';\n }\n title() {\n return app.translator.trans('flarum-statistics.admin.date_selection_modal.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, this.items().toArray());\n }\n items() {\n const items = new ItemList();\n items.add('intro', m(\"p\", null, app.translator.trans('flarum-statistics.admin.date_selection_modal.description')), 100);\n items.add('date_start', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", {\n htmlFor: this.state.ids.startDate\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.start_date')), m(\"input\", {\n type: \"date\",\n id: this.state.ids.startDate,\n value: this.state.inputs.startDateVal,\n onchange: this.updateState('startDateVal'),\n className: \"FormControl\"\n })), 90);\n items.add('date_end', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", {\n htmlFor: this.state.ids.endDate\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.end_date')), m(\"input\", {\n type: \"date\",\n id: this.state.ids.endDate,\n value: this.state.inputs.endDateVal,\n onchange: this.updateState('endDateVal'),\n className: \"FormControl\"\n })), 80);\n items.add('submit', m(Button, {\n className: \"Button Button--primary\",\n type: \"submit\"\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.submit_button')), 0);\n return items;\n }\n updateState(field) {\n return e => {\n this.state.inputs[field] = e.currentTarget.value;\n };\n }\n submitData() {\n // We force 'zulu' time (UTC)\n return {\n start: Math.floor(+dayjs.utc(this.state.inputs.startDateVal + 'Z') / 1000),\n // Ensures that the end date is the end of the day\n end: Math.floor(+dayjs.utc(this.state.inputs.endDateVal + 'Z').hour(23).minute(59).second(59).millisecond(999) / 1000)\n };\n }\n onsubmit(e) {\n e.preventDefault();\n const data = this.submitData();\n if (data.end < data.start) {\n this.alertAttrs = {\n type: 'error',\n controls: app.translator.trans('flarum-statistics.admin.date_selection_modal.errors.end_before_start')\n };\n return;\n }\n this.attrs.onModalSubmit(data);\n this.hide();\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsWidgetDateSelectionModal', StatisticsWidgetDateSelectionModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport SelectDropdown from 'flarum/common/components/SelectDropdown';\nimport Button from 'flarum/common/components/Button';\nimport abbreviateNumber from 'flarum/common/utils/abbreviateNumber';\nimport extractText from 'flarum/common/utils/extractText';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Placeholder from 'flarum/common/components/Placeholder';\nimport Icon from 'flarum/common/components/Icon';\nimport classList from 'flarum/common/utils/classList';\nimport DashboardWidget from 'flarum/admin/components/DashboardWidget';\nimport StatisticsWidgetDateSelectionModal from './StatisticsWidgetDateSelectionModal';\nimport dayjs from 'dayjs';\nimport dayjsUtc from 'dayjs/plugin/utc';\nimport dayjsLocalizedFormat from 'dayjs/plugin/localizedFormat';\n// @ts-expect-error No typings available\nimport { Chart } from 'frappe-charts';\ndayjs.extend(dayjsUtc);\ndayjs.extend(dayjsLocalizedFormat);\nexport default class StatisticsWidget extends DashboardWidget {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"entities\", ['users', 'discussions', 'posts']);\n _defineProperty(this, \"periods\", void 0);\n _defineProperty(this, \"chart\", void 0);\n _defineProperty(this, \"customPeriod\", null);\n _defineProperty(this, \"timedData\", {});\n _defineProperty(this, \"lifetimeData\", void 0);\n _defineProperty(this, \"customPeriodData\", {});\n _defineProperty(this, \"noData\", false);\n _defineProperty(this, \"loadingLifetime\", true);\n _defineProperty(this, \"loadingTimed\", this.entities.reduce((acc, curr) => {\n acc[curr] = 'unloaded';\n return acc;\n }, {}));\n _defineProperty(this, \"loadingCustom\", this.entities.reduce((acc, curr) => {\n acc[curr] = 'unloaded';\n return acc;\n }, {}));\n _defineProperty(this, \"selectedEntity\", 'users');\n _defineProperty(this, \"selectedPeriod\", void 0);\n _defineProperty(this, \"chartEntity\", void 0);\n _defineProperty(this, \"chartPeriod\", void 0);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.loadLifetimeData();\n }\n async loadLifetimeData() {\n this.loadingLifetime = true;\n m.redraw();\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'lifetime'\n }\n });\n this.lifetimeData = data;\n this.loadingLifetime = false;\n m.redraw();\n }\n async loadTimedData(model) {\n this.loadingTimed[model] = 'loading';\n m.redraw();\n try {\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'timed',\n model\n }\n });\n this.timedData[model] = data;\n this.loadingTimed[model] = 'loaded';\n\n // Create a Date object which represents the start of the day.\n let todayDate = new Date();\n todayDate.setUTCHours(0, 0, 0, 0);\n const today = todayDate.getTime() / 1000;\n this.periods = {\n today: {\n start: today,\n end: today + 86400,\n step: 3600\n },\n last_7_days: {\n start: today - 86400 * 7,\n end: today,\n step: 86400\n },\n previous_7_days: {\n start: today - 86400 * 14,\n end: today - 86400 * 7,\n step: 86400\n },\n last_28_days: {\n start: today - 86400 * 28,\n end: today,\n step: 86400\n },\n previous_28_days: {\n start: today - 86400 * 28 * 2,\n end: today - 86400 * 28,\n step: 86400\n },\n last_12_months: {\n start: today - 86400 * 364,\n end: today,\n step: 86400 * 7\n }\n };\n this.selectedPeriod = 'last_7_days';\n } catch (e) {\n console.error(e);\n this.loadingTimed[model] = 'fail';\n }\n m.redraw();\n }\n async loadCustomRangeData(model) {\n this.loadingCustom[model] = 'loading';\n m.redraw();\n\n // We clone so we can check that the same period is still selected\n // once the HTTP request is complete and the data is to be displayed\n const range = {\n ...this.customPeriod\n };\n try {\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'custom',\n model,\n dateRange: {\n start: range.start,\n end: range.end\n }\n }\n });\n if (JSON.stringify(range) !== JSON.stringify(this.customPeriod)) {\n // The range this method was called with is no longer the selected.\n // Bail out here.\n return;\n }\n this.customPeriodData[model] = data;\n this.loadingCustom[model] = 'loaded';\n m.redraw();\n } catch (e) {\n if (JSON.stringify(range) !== JSON.stringify(this.customPeriod)) {\n // The range this method was called with is no longer the selected.\n // Bail out here.\n return;\n }\n console.error(e);\n this.loadingCustom[model] = 'fail';\n }\n }\n className() {\n return 'StatisticsWidget';\n }\n content() {\n var _this$customPeriod, _this$customPeriod2;\n const loadingSelectedEntity = (this.selectedPeriod === 'custom' ? this.loadingCustom : this.loadingTimed)[this.selectedEntity] !== 'loaded';\n const thisPeriod = loadingSelectedEntity ? null : this.selectedPeriod === 'custom' ? {\n start: (_this$customPeriod = this.customPeriod) == null ? void 0 : _this$customPeriod.end,\n end: (_this$customPeriod2 = this.customPeriod) == null ? void 0 : _this$customPeriod2.end,\n step: 86400\n } : this.periods[this.selectedPeriod];\n if (this.selectedPeriod === 'custom') {\n if (!this.customPeriodData[this.selectedEntity] && this.loadingCustom[this.selectedEntity] === 'unloaded') {\n this.loadCustomRangeData(this.selectedEntity);\n }\n } else {\n if (!this.timedData[this.selectedEntity] && this.loadingTimed[this.selectedEntity] === 'unloaded') {\n this.loadTimedData(this.selectedEntity);\n }\n }\n return m(\"div\", {\n className: \"StatisticsWidget-table\"\n }, m(\"div\", {\n className: \"StatisticsWidget-entities\"\n }, m(\"div\", {\n className: \"StatisticsWidget-labels\"\n }, m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, app.translator.trans('flarum-statistics.admin.statistics.total_label')), m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, loadingSelectedEntity ? m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }) : m(SelectDropdown, {\n disabled: loadingSelectedEntity,\n buttonClassName: \"Button Button--text\",\n caretIcon: \"fas fa-caret-down\"\n }, Object.keys(this.periods).map(period => m(Button, {\n key: period,\n active: period === this.selectedPeriod,\n onclick: this.changePeriod.bind(this, period),\n icon: period === this.selectedPeriod ? 'fas fa-check' : true\n }, app.translator.trans(\"flarum-statistics.admin.statistics.\".concat(period, \"_label\")))).concat([m(Button, {\n key: \"custom\",\n active: this.selectedPeriod === 'custom',\n onclick: () => {\n const attrs = {\n onModalSubmit: dates => {\n if (JSON.stringify(dates) === JSON.stringify(this.customPeriod)) {\n // If same period is selected, don't reload data\n return;\n }\n this.customPeriodData = {};\n Object.keys(this.loadingCustom).forEach(k => this.loadingCustom[k] = 'unloaded');\n this.customPeriod = dates;\n this.changePeriod('custom');\n }\n };\n\n // If we have a custom period set already,\n // let's prefill the modal with it\n if (this.customPeriod) {\n attrs.value = this.customPeriod;\n }\n app.modal.show(StatisticsWidgetDateSelectionModal, attrs);\n },\n icon: this.selectedPeriod === 'custom' ? 'fas fa-check' : true\n }, this.selectedPeriod === 'custom' ? extractText(app.translator.trans(\"flarum-statistics.admin.statistics.custom_label_specified\", {\n fromDate: dayjs.utc(this.customPeriod.start * 1000).format('ll'),\n toDate: dayjs.utc(this.customPeriod.end * 1000).format('ll')\n })) : app.translator.trans(\"flarum-statistics.admin.statistics.custom_label\"))])))), this.entities.map(entity => {\n const totalCount = this.loadingLifetime ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getTotalCount(entity);\n const thisPeriodCount = loadingSelectedEntity ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getPeriodCount(entity, thisPeriod);\n const lastPeriodCount = this.selectedPeriod === 'custom' ? null : loadingSelectedEntity ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getPeriodCount(entity, this.getLastPeriod(thisPeriod));\n const periodChange = loadingSelectedEntity || lastPeriodCount === 0 || lastPeriodCount === null ? 0 : (thisPeriodCount - lastPeriodCount) / lastPeriodCount * 100;\n return m(\"button\", {\n className: classList('Button--ua-reset StatisticsWidget-entity', {\n active: this.selectedEntity === entity\n }),\n onclick: this.changeEntity.bind(this, entity)\n }, m(\"h3\", {\n className: \"StatisticsWidget-heading\"\n }, app.translator.trans('flarum-statistics.admin.statistics.' + entity + '_heading')), m(\"div\", {\n className: \"StatisticsWidget-total\",\n title: totalCount\n }, this.loadingLifetime ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(totalCount)), m(\"div\", {\n className: \"StatisticsWidget-period\",\n title: thisPeriodCount\n }, loadingSelectedEntity ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(thisPeriodCount), periodChange !== 0 && m('[', null, ' ', m(\"span\", {\n className: 'StatisticsWidget-change StatisticsWidget-change--' + (periodChange > 0 ? 'up' : 'down')\n }, m(Icon, {\n name: 'fas fa-arrow-' + (periodChange > 0 ? 'up' : 'down')\n }), Math.abs(periodChange).toFixed(1), \"%\"))));\n })), m('[', null, loadingSelectedEntity ? m(\"div\", {\n key: \"loading\",\n className: \"StatisticsWidget-chart\",\n \"data-loading\": \"true\"\n }, m(LoadingIndicator, {\n size: \"large\"\n })) : m(\"div\", {\n key: \"loaded\",\n className: \"StatisticsWidget-chart\",\n \"data-loading\": \"false\",\n oncreate: this.drawChart.bind(this),\n onupdate: this.drawChart.bind(this)\n })), this.noData && m(Placeholder, {\n text: app.translator.trans(\"flarum-statistics.admin.statistics.no_data\")\n }), !this.noData && !!this.chart && m(Button, {\n className: \"StatisticsWidget-chartExport Button\",\n icon: \"fas fa-file-export\",\n onclick: () => {\n this.chart.export();\n }\n }, app.translator.trans('flarum-statistics.admin.statistics.export_chart_button')));\n }\n drawChart(vnode) {\n var _this$customPeriod3, _this$customPeriod4;\n if (this.chart && this.chartEntity === this.selectedEntity && this.chartPeriod === this.selectedPeriod) {\n return;\n }\n const period = this.selectedPeriod === 'custom' ? {\n start: (_this$customPeriod3 = this.customPeriod) == null ? void 0 : _this$customPeriod3.start,\n end: (_this$customPeriod4 = this.customPeriod) == null ? void 0 : _this$customPeriod4.end,\n step: 86400\n } : this.periods[this.selectedPeriod];\n const periodLength = period.end - period.start;\n const labels = [];\n const thisPeriod = [];\n const lastPeriod = [];\n for (let i = period.start; i < period.end; i += period.step) {\n let label;\n if (period.step < 86400) {\n label = dayjs.unix(i).utc().format('h A');\n } else {\n label = dayjs.unix(i).utc().format('D MMM');\n if (period.step > 86400) {\n label += ' - ' + dayjs.unix(i + period.step - 1).utc().format('D MMM');\n }\n }\n labels.push(label);\n thisPeriod.push(this.getPeriodCount(this.selectedEntity, {\n start: i,\n end: i + period.step\n }));\n lastPeriod.push(this.getPeriodCount(this.selectedEntity, {\n start: i - periodLength,\n end: i - periodLength\n }));\n }\n if (thisPeriod.length === 0) {\n this.noData = true;\n m.redraw();\n return;\n } else {\n this.noData = false;\n m.redraw();\n }\n const datasets = [{\n name: extractText(app.translator.trans('flarum-statistics.admin.statistics.current_period')),\n values: thisPeriod\n }, {\n name: extractText(app.translator.trans('flarum-statistics.admin.statistics.previous_period')),\n values: lastPeriod\n }];\n const data = {\n labels,\n datasets\n };\n\n // If the dom element no longer exists, recreate the chart\n // https://stackoverflow.com/a/2620373/11091039\n if (!this.chart || !(document.compareDocumentPosition(this.chart.parent) & 16)) {\n this.chart = new Chart(vnode.dom, {\n data,\n type: 'line',\n height: 280,\n axisOptions: {\n xAxisMode: 'tick',\n yAxisMode: 'span',\n xIsSeries: true\n },\n lineOptions: {\n hideDots: 1,\n regionFill: 1\n },\n colors: [app.forum.attribute('themePrimaryColor'), 'black']\n });\n } else {\n this.chart.update(data);\n }\n this.chartEntity = this.selectedEntity;\n this.chartPeriod = this.selectedPeriod;\n }\n changeEntity(entity) {\n this.selectedEntity = entity;\n }\n changePeriod(period) {\n this.selectedPeriod = period;\n }\n getTotalCount(entity) {\n return this.lifetimeData[entity];\n }\n getPeriodCount(entity, period) {\n const timed = (this.selectedPeriod === 'custom' ? this.customPeriodData : this.timedData)[entity];\n let count = 0;\n for (const t in timed) {\n const time = parseInt(t);\n if (time >= period.start && time < period.end) {\n count += timed[time];\n }\n }\n return count;\n }\n getLastPeriod(thisPeriod) {\n return {\n start: thisPeriod.start - (thisPeriod.end - thisPeriod.start),\n end: thisPeriod.start\n };\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsWidget', StatisticsWidget);","import ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport StatisticsWidget from './StatisticsWidget';\nexport default class StatisticsPage extends ExtensionPage {\n content() {\n return m(\"div\", {\n className: \"StatisticsPage\"\n }, m(\"div\", {\n className: \"container\"\n }, m(StatisticsWidget, null)));\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsPage', StatisticsPage);","import app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport DashboardPage from 'flarum/admin/components/DashboardPage';\nimport MiniStatisticsWidget from './components/MiniStatisticsWidget';\nimport StatisticsPage from './components/StatisticsPage';\napp.initializers.add('flarum-statistics', () => {\n extend(DashboardPage.prototype, 'availableWidgets', function (widgets) {\n widgets.add('statistics', m(MiniStatisticsWidget, null), 20);\n });\n app.extensionData.for('flarum-statistics').registerPage(StatisticsPage);\n});"],"names":["module","exports","e","n","r","i","s","u","a","o","f","h","c","d","l","$","y","M","name","weekdays","split","months","ordinal","t","m","String","length","Array","join","v","z","utcOffset","Math","abs","floor","date","year","month","clone","add","ceil","p","w","D","ms","Q","toLowerCase","replace","g","_","S","args","arguments","O","locale","$L","utc","$u","x","$x","$offset","this","parse","prototype","$d","Date","NaN","test","match","substring","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","toString","isSame","startOf","endOf","isAfter","isBefore","$g","set","unix","valueOf","getTime","toDate","apply","slice","$locale","weekStart","$set","min","daysInMonth","get","Number","round","subtract","format","invalidDate","meridiem","YY","YYYY","MM","MMM","monthsShort","MMMM","DD","dd","weekdaysMin","ddd","weekdaysShort","dddd","H","HH","hh","A","mm","ss","SSS","Z","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","T","forEach","extend","$i","isDayjs","en","Ls","LTS","LT","L","LL","LLL","LLLL","formats","toUpperCase","call","local","getUTCFullYear","getUTCMonth","getUTCDate","getUTCDay","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","$localOffset","isUTC","document","querySelector","getBoundingClientRect","top","documentElement","scrollTop","body","left","scrollLeft","offsetParent","bottom","window","innerHeight","clientHeight","right","innerWidth","clientWidth","titleHeight","margins","paddings","legendHeight","parseFloat","toFixed","fill","concat","sin","Zt","cos","isNaN","isFinite","Ft","isArray","b","log10","pow","k","push","sqrt","angle","atan2","PI","reduce","ie","parseInt","createElementNS","appendChild","parentNode","insertBefore","Object","keys","map","style","textContent","setAttribute","inside","id","x1","x2","y1","y2","offset","N","className","transform","styles","stroke","j","width","height","rx","Y","fontSize","re","dy","le","textAnchor","innerHTML","B","oe","ae","V","lineType","shortenNumbers","ve","tt","pe","it","zeroLine","Vt","nodeName","childNodes","ce","getAttribute","st","rt","cloneNode","attributeName","from","to","begin","dur","values","keySplines","ge","keyTimes","calcMode","type","ot","webkitTransform","msTransform","mozTransform","oTransform","lt","Ut","replaceChild","ut","removeChild","setTimeout","fe","ct","classList","create","me","firstChild","dt","setMinutes","pt","ft","vt","xt","we","ke","gt","xe","mt","yt","Ae","bt","kt","setDate","wt","Le","filter","includes","assign","constants","getData","Te","At","mantissa","exponent","Pt","Tt","Lt","unshift","max","reverse","Ot","Mt","indexOf","Ct","Dt","scaleMultiplier","Et","_t","labels","datasets","chartType","Xt","yRegions","end","start","zt","yMarkers","value","label","insertAt","head","getElementsByTagName","createElement","styleSheet","cssText","createTextNode","Symbol","iterator","constructor","Ht","Promise","resolve","then","done","reject","next","key","arg","_invoke","return","asyncIterator","throw","TypeError","It","enumerable","configurable","writable","defineProperty","Rt","Function","getOwnPropertyDescriptor","getPrototypeOf","Yt","setPrototypeOf","__proto__","Bt","ReferenceError","Gt","baseHeight","titleFontSize","Jt","Kt","$t","Qt","bar","line","pie","percentage","heatmap","donut","te","parent","colors","titleName","titleValue","listValues","titleValueFirst","setup","makeTooltip","calcPosition","container","hideTip","title","dataPointList","addEventListener","index","formatted","offsetWidth","offsetHeight","valueFirst","refresh","opacity","ee","blue","violet","red","orange","yellow","green","purple","magenta","black","grey","exec","ne","se","ue","dot","heat_square","he","attributes","specified","nodeValue","de","ease","linear","easein","easeout","easeinout","ye","HTMLElement","Error","rawChartArgs","realData","prepareData","data","prepareFirstData","validateColors","config","showTooltip","showLegend","isNavigable","animate","truncateLegends","measures","JSON","stringify","setMeasures","argHeight","state","options","initTimeout","overlays","configure","P","console","warn","boundDrawFn","draw","ResizeObserver","resizeObserver","observe","disconnect","removeEventListener","makeContainer","updateWidth","independentWidth","tip","bindTooltip","calc","makeChartArea","setupComponents","components","drawArea","render","update","renderLegend","setupNavigation","baseWidth","getComputedStyle","paddingLeft","paddingRight","svg","C","svgDefs","titleEL","legendArea","updateTipOffset","Map","error","make","updateNav","makeOverlay","bindUnits","bindOverlay","keyActions","onEnterKey","bind","onLeftArrow","onUpArrow","onRightArrow","onDownArrow","event","keyCode","Blob","URL","createObjectURL","href","download","click","revokeObjectURL","ht","be","formatTooltipY","tooltipOptions","maxSlices","maxLegendPoints","sliceTotals","sort","grandTotal","center","legendTotals","cx","cy","dx","R","Pe","layerClass","layerTransform","makeElements","animateElements","store","layer","oldData","donutSlices","sliceStrings","strokeWidth","transition","pieSlices","percentageBars","xPositions","F","widths","barHeight","barDepth","yAxis","positions","pos","mode","U","xAxis","G","calcLabels","labelPos","q","position","X","startPos","endPos","et","heatDomain","colWidth","rowHeight","squareSize","radius","xTranslate","serializedSubDomains","cols","yyyyMmDd","dataValue","barGraph","unitType","units","yPositions","minHeight","J","barWidth","color","offsets","barsWidth","lineGraph","paths","hideLine","spline","heatline","path","regionFill","region","hideDots","K","valuesOverPoints","at","nt","Oe","barOptions","depth","target","formattedLabels","setValues","showTip","Me","mouseMove","mouseLeave","hoverRadio","startAngle","clockWise","slicesProperties","startPosition","endPosition","E","total","endAngle","calTranslateByAngle","pageX","pageY","formatted_labels","curActiveSliceIndex","curActiveSlice","hoverSlice","Ce","countLabel","startSubDomain","startSubDomainIndex","discreteDomains","noOfWeeks","setFullYear","dataPoints","firstWeekStart","distribution","St","domainConfigs","getDomains","getDomainConfig","getCol","getSubDomainConfig","De","lineOptions","axisOptions","xAxisMode","yAxisMode","xIsSeries","shortenYAxisNumbers","formatTooltipX","calcXPositions","calcYAxisParameters","getAllYValues","makeDataByIndex","datasetLength","unitWidth","xOffset","calcDatasetPoints","calcYExtremes","calcYRegions","cumulativeYs","cumulativeYPos","stacked","yExtremes","Wt","spaceRatio","dotSize","dataUnitComponents","dataByIndex","yPos","formattedLabel","xPos","yExtreme","mapTooltipXPosition","Nt","I","overlayGuides","overlay","currentIndex","updateOverlay","setCurrentDataPoint","createEvent","initEvent","dispatchEvent","getDataPoint","splice","Ne","W","Se","_e","freeze","Chart","jt","PercentageChart","PieChart","Heatmap","AxisChart","ze","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","obj","prop","hasOwnProperty","toStringTag","flarum","reg","_typeof","_defineProperty","input","hint","prim","toPrimitive","res","toPropertyKey","MiniStatisticsWidget","super","oncreate","vnode","loadLifetimeData","async","loadingLifetime","redraw","method","url","params","period","lifetimeData","content","entities","entity","totalCount","getTotalCount","display","StatisticsWidgetDateSelectionModal","inputs","startDateVal","endDateVal","ids","startDate","endDate","oninit","attrs","items","toArray","htmlFor","onchange","updateState","field","currentTarget","submitData","hour","minute","second","millisecond","onsubmit","preventDefault","alertAttrs","controls","onModalSubmit","hide","StatisticsWidget","acc","curr","model","loadingTimed","timedData","todayDate","setUTCHours","today","periods","step","last_7_days","previous_7_days","last_28_days","previous_28_days","last_12_months","selectedPeriod","loadingCustom","range","customPeriod","dateRange","customPeriodData","_this$customPeriod","_this$customPeriod2","loadingSelectedEntity","selectedEntity","thisPeriod","loadCustomRangeData","loadTimedData","size","disabled","buttonClassName","caretIcon","active","onclick","changePeriod","icon","dates","fromDate","thisPeriodCount","getPeriodCount","lastPeriodCount","getLastPeriod","periodChange","changeEntity","drawChart","onupdate","noData","text","chart","export","_this$customPeriod3","_this$customPeriod4","chartEntity","chartPeriod","periodLength","lastPeriod","compareDocumentPosition","dom","timed","count","time","StatisticsPage","widgets","registerPage"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/statistics/js/src/admin/components/StatisticsWidgetDateSelectionModal.tsx b/extensions/statistics/js/src/admin/components/StatisticsWidgetDateSelectionModal.tsx index 060d10c63f..da4deaa900 100644 --- a/extensions/statistics/js/src/admin/components/StatisticsWidgetDateSelectionModal.tsx +++ b/extensions/statistics/js/src/admin/components/StatisticsWidgetDateSelectionModal.tsx @@ -1,7 +1,7 @@ import app from 'flarum/admin/app'; import ItemList from 'flarum/common/utils/ItemList'; import generateElementId from 'flarum/admin/utils/generateElementId'; -import Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal'; +import FormModal, { IFormModalAttrs } from 'flarum/common/components/FormModal'; import Mithril from 'mithril'; import Button from 'flarum/common/components/Button'; @@ -22,7 +22,7 @@ export interface IDateSelection { end: number; } -export interface IStatisticsWidgetDateSelectionModalAttrs extends IInternalModalAttrs { +export interface IStatisticsWidgetDateSelectionModalAttrs extends IFormModalAttrs { onModalSubmit: (dates: IDateSelection) => void; value?: IDateSelection; } @@ -38,7 +38,7 @@ interface IStatisticsWidgetDateSelectionModalState { }; } -export default class StatisticsWidgetDateSelectionModal extends Modal { +export default class StatisticsWidgetDateSelectionModal extends FormModal { /* @ts-expect-error core typings don't allow us to set the type of the state attr :( */ state: IStatisticsWidgetDateSelectionModalState = { inputs: { diff --git a/extensions/suspend/js/dist/forum.js b/extensions/suspend/js/dist/forum.js index db84589cd0..432431f884 100644 --- a/extensions/suspend/js/dist/forum.js +++ b/extensions/suspend/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var t={860:function(t){t.exports=function(){"use strict";var t=6e4,e=36e5,s="millisecond",n="second",r="minute",i="hour",a="day",o="week",u="month",l="quarter",d="year",c="date",f="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,h=/\[([^\]]+)]|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,p={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],s=t%100;return"["+t+(e[(s-20)%10]||e[s]||e[0])+"]"}},g=function(t,e,s){var n=String(t);return!n||n.length>=e?t:""+Array(e+1-n.length).join(s)+t},v={s:g,z:function(t){var e=-t.utcOffset(),s=Math.abs(e),n=Math.floor(s/60),r=s%60;return(e<=0?"+":"-")+g(n,2,"0")+":"+g(r,2,"0")},m:function t(e,s){if(e.date()1)return t(a[0])}else{var o=e.name;y[o]=e,r=o}return!n&&r&&($=r),r||!n&&$},M=function(t,e){if(b(t))return t.clone();var s="object"==typeof e?e:{};return s.date=t,s.args=arguments,new _(s)},w=v;w.l=S,w.i=b,w.w=function(t,e){return M(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function p(t){this.$L=S(t.locale,null,!0),this.parse(t)}var g=p.prototype;return g.parse=function(t){this.$d=function(t){var e=t.date,s=t.utc;if(null===e)return new Date(NaN);if(w.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var n=e.match(m);if(n){var r=n[2]-1||0,i=(n[7]||"0").substring(0,3);return s?new Date(Date.UTC(n[1],r,n[3]||1,n[4]||0,n[5]||0,n[6]||0,i)):new Date(n[1],r,n[3]||1,n[4]||0,n[5]||0,n[6]||0,i)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},g.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},g.$utils=function(){return w},g.isValid=function(){return!(this.$d.toString()===f)},g.isSame=function(t,e){var s=M(t);return this.startOf(e)<=s&&s<=this.endOf(e)},g.isAfter=function(t,e){return M(t){var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},s.d=(t,e)=>{for(var n in e)s.o(e,n)&&!s.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";s.r(n),s.d(n,{extend:()=>q});const t=flarum.reg.get("core","common/extend"),e=flarum.reg.get("core","forum/app");var r=s.n(e);const i=flarum.reg.get("core","forum/utils/UserControls");var a=s.n(i);const o=flarum.reg.get("core","common/components/Button");var u=s.n(o);const l=flarum.reg.get("core","common/components/Badge");var d=s.n(l);const c=flarum.reg.get("core","common/models/User");var f=s.n(c);const h=flarum.reg.get("core","common/components/Modal");var p=s.n(h);const g=flarum.reg.get("core","common/utils/Stream");var v=s.n(g);const y=flarum.reg.get("core","common/utils/withAttr");var b=s.n(y);const S=flarum.reg.get("core","common/utils/ItemList");var M=s.n(S),w=s(860),_=s.n(w),D=s(329),x=s.n(D);function O(){return new Date("2038-01-01")}function N(t){return _().utc(t).isSame(_().utc("2038-01-01"))}function T(t){return T="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},T(t)}function U(t,e,s){return(e=function(t){var e=function(t,e){if("object"!==T(t)||null===t)return t;var s=t[Symbol.toPrimitive];if(void 0!==s){var n=s.call(t,e);if("object"!==T(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===T(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}_().extend(x()),flarum.reg.add("flarum-suspend","forum/helpers/suspensionHelper",{getPermanentSuspensionDate:O,isPermanentSuspensionDate:N,localStorageKey:function(){return"flarum-suspend.acknowledge-suspension"}});class k{constructor(){U(this,"element",void 0),U(this,"attrs",void 0),U(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 s={...t};return m(this,s,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 C(t){var e,s,n="";if("string"==typeof t||"number"==typeof t)n+=t;else if("object"==typeof t)if(Array.isArray(t))for(e=0;ee&&(e=null),e&&(r=9999===e.getFullYear()?"indefinitely":"limited"),this.status=v()(r),this.reason=v()(s),this.message=v()(n),this.daysRemaining=v()("limited"===r&&1-dayjs().diff(e,"days"))}className(){return"SuspendUserModal Modal--medium"}title(){return r().translator.trans("flarum-suspend.forum.suspend_user.title",{user:this.attrs.user})}content(){return m("div",{className:"Modal-body"},m(j,null,this.formItems().toArray(),m("div",{className:"Form-group Form-controls"},m(u(),{className:"Button Button--primary",loading:this.loading,type:"submit"},r().translator.trans("flarum-suspend.forum.suspend_user.submit_button")))))}radioItems(){const t=new(M());return t.add("not-suspended",m("label",{className:"checkbox"},m("input",{type:"radio",name:"status",checked:!this.status(),value:"",onclick:b()("value",this.status)}),r().translator.trans("flarum-suspend.forum.suspend_user.not_suspended_label")),100),t.add("indefinitely",m("label",{className:"checkbox"},m("input",{type:"radio",name:"status",checked:"indefinitely"===this.status(),value:"indefinitely",onclick:b()("value",this.status)}),r().translator.trans("flarum-suspend.forum.suspend_user.indefinitely_label")),90),t.add("time-suspension",m("label",{className:"checkbox SuspendUserModal-days"},m("input",{type:"radio",name:"status",checked:"limited"===this.status(),value:"limited",onclick:t=>{this.status(t.target.value),m.redraw.sync(),this.$(".SuspendUserModal-days-input input").select(),t.redraw=!1}}),r().translator.trans("flarum-suspend.forum.suspend_user.limited_time_label"),"limited"===this.status()&&m("div",{className:"SuspendUserModal-days-input"},m("input",{type:"number",min:"0",value:this.daysRemaining(),oninput:b()("value",this.daysRemaining),className:"FormControl"}),r().translator.trans("flarum-suspend.forum.suspend_user.limited_time_days_text"))),80),t}formItems(){const t=new(M());return t.add("radioItems",m(I,{label:r().translator.trans("flarum-suspend.forum.suspend_user.status_heading")},this.radioItems().toArray()),100),t.add("reason",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-suspend.forum.suspend_user.reason")),m("textarea",{className:"FormControl",bidi:this.reason,placeholder:r().translator.trans("flarum-suspend.forum.suspend_user.placeholder_optional"),rows:"4"})),90),t.add("message",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-suspend.forum.suspend_user.display_message")),m("textarea",{className:"FormControl",bidi:this.message,placeholder:r().translator.trans("flarum-suspend.forum.suspend_user.placeholder_optional"),rows:"4"})),80),t}onsubmit(t){t.preventDefault(),this.loading=!0;let e=null;switch(this.status()){case"indefinitely":e=O();break;case"limited":e=dayjs().add(this.daysRemaining(),"days").toDate()}this.attrs.user.save({suspendedUntil:e,suspendReason:this.reason(),suspendMessage:this.message()}).then((()=>this.hide()),this.loaded.bind(this))}}flarum.reg.add("flarum-suspend","forum/components/SuspendUserModal",H);const A=flarum.reg.get("core","forum/components/Notification");var L=s.n(A);class P extends(L()){icon(){return"fas fa-ban"}href(){return r().route.user(this.attrs.notification.subject())}content(){const t=this.attrs.notification,e=t.content(),s=dayjs(e).from(t.createdAt(),!0);return N(e)?r().translator.trans("flarum-suspend.forum.notifications.user_suspended_indefinite_text"):r().translator.trans("flarum-suspend.forum.notifications.user_suspended_text",{timeReadable:s})}excerpt(){return null}}flarum.reg.add("flarum-suspend","forum/components/UserSuspendedNotification",P);class W extends(L()){icon(){return"fas fa-ban"}href(){return r().route.user(this.attrs.notification.subject())}content(){return this.attrs.notification,r().translator.trans("flarum-suspend.forum.notifications.user_unsuspended_text")}excerpt(){return null}}flarum.reg.add("flarum-suspend","forum/components/UserUnsuspendedNotification",W);const B=flarum.reg.get("core","common/helpers/fullTime");var R=s.n(B);class z extends(p()){oninit(t){super.oninit(t),this.message=this.attrs.message,this.until=this.attrs.until}className(){return"SuspensionInfoModal Modal"}title(){return r().translator.trans("flarum-suspend.forum.suspension_info.title")}content(){const t=N(new Date(this.until))?r().translator.trans("flarum-suspend.forum.suspension_info.indefinite"):r().translator.trans("flarum-suspend.forum.suspension_info.limited",{date:R()(this.until)});return m("div",{className:"Modal-body"},m(j,{className:"Form--centered"},m("p",{className:"helpText"},this.message),m("p",{className:"helpText"},t),m("div",{className:"Form-group Form-controls"},m(u(),{className:"Button Button--primary Button--block",onclick:this.hide.bind(this)},r().translator.trans("flarum-suspend.forum.suspension_info.dismiss_button")))))}hide(){localStorage.setItem("flarum-suspend.acknowledge-suspension",this.attrs.until.getTime()),this.attrs.state.close()}}flarum.reg.add("flarum-suspend","forum/components/SuspensionInfoModal",z);const E=flarum.reg.get("core","common/extenders");var Z=s.n(E);const J=flarum.reg.get("core","common/Model");var V=s.n(J);const q=[new(Z().Model)(f()).attribute("canSuspend").attribute("suspendedUntil",V().transformDate).attribute("suspendReason").attribute("suspendMessage")];r().initializers.add("flarum-suspend",(()=>{r().notificationComponents.userSuspended=P,r().notificationComponents.userUnsuspended=W,(0,t.extend)(a(),"moderationControls",((t,e)=>{e.canSuspend()&&t.add("suspend",m(u(),{icon:"fas fa-ban",onclick:()=>r().modal.show(H,{user:e})},r().translator.trans("flarum-suspend.forum.user_controls.suspend_button")))})),(0,t.extend)(f().prototype,"badges",(function(t){const e=this.suspendedUntil();new Date{if(r().session.user){const t=r().session.user.suspendMessage(),e=r().session.user.suspendedUntil(),s=t&&e&&new Date{var t={860:function(t){t.exports=function(){"use strict";var t=6e4,e=36e5,s="millisecond",n="second",r="minute",i="hour",a="day",o="week",u="month",l="quarter",d="year",c="date",m="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,h=/\[([^\]]+)]|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,p={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],s=t%100;return"["+t+(e[(s-20)%10]||e[s]||e[0])+"]"}},g=function(t,e,s){var n=String(t);return!n||n.length>=e?t:""+Array(e+1-n.length).join(s)+t},v={s:g,z:function(t){var e=-t.utcOffset(),s=Math.abs(e),n=Math.floor(s/60),r=s%60;return(e<=0?"+":"-")+g(n,2,"0")+":"+g(r,2,"0")},m:function t(e,s){if(e.date()1)return t(a[0])}else{var o=e.name;y[o]=e,r=o}return!n&&r&&($=r),r||!n&&$},M=function(t,e){if(b(t))return t.clone();var s="object"==typeof e?e:{};return s.date=t,s.args=arguments,new _(s)},w=v;w.l=S,w.i=b,w.w=function(t,e){return M(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function p(t){this.$L=S(t.locale,null,!0),this.parse(t)}var g=p.prototype;return g.parse=function(t){this.$d=function(t){var e=t.date,s=t.utc;if(null===e)return new Date(NaN);if(w.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var n=e.match(f);if(n){var r=n[2]-1||0,i=(n[7]||"0").substring(0,3);return s?new Date(Date.UTC(n[1],r,n[3]||1,n[4]||0,n[5]||0,n[6]||0,i)):new Date(n[1],r,n[3]||1,n[4]||0,n[5]||0,n[6]||0,i)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},g.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},g.$utils=function(){return w},g.isValid=function(){return!(this.$d.toString()===m)},g.isSame=function(t,e){var s=M(t);return this.startOf(e)<=s&&s<=this.endOf(e)},g.isAfter=function(t,e){return M(t){var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},s.d=(t,e)=>{for(var n in e)s.o(e,n)&&!s.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";s.r(n),s.d(n,{extend:()=>Q});const t=flarum.reg.get("core","common/extend"),e=flarum.reg.get("core","forum/app");var r=s.n(e);const i=flarum.reg.get("core","forum/utils/UserControls");var a=s.n(i);const o=flarum.reg.get("core","common/components/Button");var u=s.n(o);const l=flarum.reg.get("core","common/components/Badge");var d=s.n(l);const c=flarum.reg.get("core","common/models/User");var f=s.n(c);const h=flarum.reg.get("core","common/components/FormModal");var p=s.n(h);const g=flarum.reg.get("core","common/utils/Stream");var v=s.n(g);const y=flarum.reg.get("core","common/utils/withAttr");var b=s.n(y);const S=flarum.reg.get("core","common/utils/ItemList");var M=s.n(S),w=s(860),_=s.n(w),D=s(329),x=s.n(D);function O(){return new Date("2038-01-01")}function N(t){return _().utc(t).isSame(_().utc("2038-01-01"))}function T(t){return T="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},T(t)}function U(t,e,s){return(e=function(t){var e=function(t,e){if("object"!==T(t)||null===t)return t;var s=t[Symbol.toPrimitive];if(void 0!==s){var n=s.call(t,e);if("object"!==T(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===T(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}_().extend(x()),flarum.reg.add("flarum-suspend","forum/helpers/suspensionHelper",{getPermanentSuspensionDate:O,isPermanentSuspensionDate:N,localStorageKey:function(){return"flarum-suspend.acknowledge-suspension"}});class k{constructor(){U(this,"element",void 0),U(this,"attrs",void 0),U(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 s={...t};return m(this,s,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 C(t){var e,s,n="";if("string"==typeof t||"number"==typeof t)n+=t;else if("object"==typeof t)if(Array.isArray(t))for(e=0;ee&&(e=null),e&&(r=9999===e.getFullYear()?"indefinitely":"limited"),this.status=v()(r),this.reason=v()(s),this.message=v()(n),this.daysRemaining=v()("limited"===r&&1-dayjs().diff(e,"days"))}className(){return"SuspendUserModal Modal--medium"}title(){return r().translator.trans("flarum-suspend.forum.suspend_user.title",{user:this.attrs.user})}content(){return m("div",{className:"Modal-body"},m(j,null,this.formItems().toArray(),m("div",{className:"Form-group Form-controls"},m(u(),{className:"Button Button--primary",loading:this.loading,type:"submit"},r().translator.trans("flarum-suspend.forum.suspend_user.submit_button")))))}radioItems(){const t=new(M());return t.add("not-suspended",m("label",{className:"checkbox"},m("input",{type:"radio",name:"status",checked:!this.status(),value:"",onclick:b()("value",this.status)}),r().translator.trans("flarum-suspend.forum.suspend_user.not_suspended_label")),100),t.add("indefinitely",m("label",{className:"checkbox"},m("input",{type:"radio",name:"status",checked:"indefinitely"===this.status(),value:"indefinitely",onclick:b()("value",this.status)}),r().translator.trans("flarum-suspend.forum.suspend_user.indefinitely_label")),90),t.add("time-suspension",m("label",{className:"checkbox SuspendUserModal-days"},m("input",{type:"radio",name:"status",checked:"limited"===this.status(),value:"limited",onclick:t=>{this.status(t.target.value),m.redraw.sync(),this.$(".SuspendUserModal-days-input input").select(),t.redraw=!1}}),r().translator.trans("flarum-suspend.forum.suspend_user.limited_time_label"),"limited"===this.status()&&m("div",{className:"SuspendUserModal-days-input"},m("input",{type:"number",min:"0",value:this.daysRemaining(),oninput:b()("value",this.daysRemaining),className:"FormControl"}),r().translator.trans("flarum-suspend.forum.suspend_user.limited_time_days_text"))),80),t}formItems(){const t=new(M());return t.add("radioItems",m(I,{label:r().translator.trans("flarum-suspend.forum.suspend_user.status_heading")},this.radioItems().toArray()),100),t.add("reason",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-suspend.forum.suspend_user.reason")),m("textarea",{className:"FormControl",bidi:this.reason,placeholder:r().translator.trans("flarum-suspend.forum.suspend_user.placeholder_optional"),rows:"4"})),90),t.add("message",m("div",{className:"Form-group"},m("label",null,r().translator.trans("flarum-suspend.forum.suspend_user.display_message")),m("textarea",{className:"FormControl",bidi:this.message,placeholder:r().translator.trans("flarum-suspend.forum.suspend_user.placeholder_optional"),rows:"4"})),80),t}onsubmit(t){t.preventDefault(),this.loading=!0;let e=null;switch(this.status()){case"indefinitely":e=O();break;case"limited":e=dayjs().add(this.daysRemaining(),"days").toDate()}this.attrs.user.save({suspendedUntil:e,suspendReason:this.reason(),suspendMessage:this.message()}).then((()=>this.hide()),this.loaded.bind(this))}}flarum.reg.add("flarum-suspend","forum/components/SuspendUserModal",H);const A=flarum.reg.get("core","forum/components/Notification");var L=s.n(A);class P extends(L()){icon(){return"fas fa-ban"}href(){return r().route.user(this.attrs.notification.subject())}content(){const t=this.attrs.notification,e=t.content(),s=dayjs(e).from(t.createdAt(),!0);return N(e)?r().translator.trans("flarum-suspend.forum.notifications.user_suspended_indefinite_text"):r().translator.trans("flarum-suspend.forum.notifications.user_suspended_text",{timeReadable:s})}excerpt(){return null}}flarum.reg.add("flarum-suspend","forum/components/UserSuspendedNotification",P);class W extends(L()){icon(){return"fas fa-ban"}href(){return r().route.user(this.attrs.notification.subject())}content(){return this.attrs.notification,r().translator.trans("flarum-suspend.forum.notifications.user_unsuspended_text")}excerpt(){return null}}flarum.reg.add("flarum-suspend","forum/components/UserUnsuspendedNotification",W);const B=flarum.reg.get("core","common/components/Modal");var R=s.n(B);const z=flarum.reg.get("core","common/helpers/fullTime");var E=s.n(z);class Z extends(R()){oninit(t){super.oninit(t),this.message=this.attrs.message,this.until=this.attrs.until}className(){return"SuspensionInfoModal Modal"}title(){return r().translator.trans("flarum-suspend.forum.suspension_info.title")}content(){const t=N(new Date(this.until))?r().translator.trans("flarum-suspend.forum.suspension_info.indefinite"):r().translator.trans("flarum-suspend.forum.suspension_info.limited",{date:E()(this.until)});return m("div",{className:"Modal-body"},m(j,{className:"Form--centered"},m("p",{className:"helpText"},this.message),m("p",{className:"helpText"},t),m("div",{className:"Form-group Form-controls"},m(u(),{className:"Button Button--primary Button--block",onclick:this.hide.bind(this)},r().translator.trans("flarum-suspend.forum.suspension_info.dismiss_button")))))}hide(){localStorage.setItem("flarum-suspend.acknowledge-suspension",this.attrs.until.getTime()),this.attrs.state.close()}}flarum.reg.add("flarum-suspend","forum/components/SuspensionInfoModal",Z);const J=flarum.reg.get("core","common/extenders");var V=s.n(J);const q=flarum.reg.get("core","common/Model");var K=s.n(q);const Q=[new(V().Model)(f()).attribute("canSuspend").attribute("suspendedUntil",K().transformDate).attribute("suspendReason").attribute("suspendMessage")];r().initializers.add("flarum-suspend",(()=>{r().notificationComponents.userSuspended=P,r().notificationComponents.userUnsuspended=W,(0,t.extend)(a(),"moderationControls",((t,e)=>{e.canSuspend()&&t.add("suspend",m(u(),{icon:"fas fa-ban",onclick:()=>r().modal.show(H,{user:e})},r().translator.trans("flarum-suspend.forum.user_controls.suspend_button")))})),(0,t.extend)(f().prototype,"badges",(function(t){const e=this.suspendedUntil();new Date{if(r().session.user){const t=r().session.user.suspendMessage(),e=r().session.user.suspendedUntil(),s=t&&e&&new Date=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t) {\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', 'forum/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/UserControls');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Badge');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/User');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Modal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/Stream');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","import dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\ndayjs.extend(utc);\nexport function getPermanentSuspensionDate() {\n return new Date('2038-01-01');\n}\nexport function isPermanentSuspensionDate(date) {\n return dayjs.utc(date).isSame(dayjs.utc('2038-01-01'));\n}\nexport function localStorageKey() {\n return 'flarum-suspend.acknowledge-suspension';\n}\nflarum.reg.add('flarum-suspend', 'forum/helpers/suspensionHelper', { getPermanentSuspensionDate: getPermanentSuspensionDate,isPermanentSuspensionDate: isPermanentSuspensionDate,localStorageKey: localStorageKey, });","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}","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-suspend', '../../../../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 until) until = null;\n if (until) {\n if (until.getFullYear() === 9999) status = 'indefinitely';else status = 'limited';\n }\n this.status = Stream(status);\n this.reason = Stream(reason);\n this.message = Stream(message);\n this.daysRemaining = Stream(status === 'limited' && -dayjs().diff(until, 'days') + 1);\n }\n className() {\n return 'SuspendUserModal Modal--medium';\n }\n title() {\n return app.translator.trans('flarum-suspend.forum.suspend_user.title', {\n user: this.attrs.user\n });\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, null, this.formItems().toArray(), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary\",\n loading: this.loading,\n type: \"submit\"\n }, app.translator.trans('flarum-suspend.forum.suspend_user.submit_button')))));\n }\n radioItems() {\n const items = new ItemList();\n items.add('not-suspended', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"status\",\n checked: !this.status(),\n value: \"\",\n onclick: withAttr('value', this.status)\n }), app.translator.trans('flarum-suspend.forum.suspend_user.not_suspended_label')), 100);\n items.add('indefinitely', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"status\",\n checked: this.status() === 'indefinitely',\n value: \"indefinitely\",\n onclick: withAttr('value', this.status)\n }), app.translator.trans('flarum-suspend.forum.suspend_user.indefinitely_label')), 90);\n items.add('time-suspension', m(\"label\", {\n className: \"checkbox SuspendUserModal-days\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"status\",\n checked: this.status() === 'limited',\n value: \"limited\",\n onclick: e => {\n this.status(e.target.value);\n m.redraw.sync();\n this.$('.SuspendUserModal-days-input input').select();\n e.redraw = false;\n }\n }), app.translator.trans('flarum-suspend.forum.suspend_user.limited_time_label'), this.status() === 'limited' && m(\"div\", {\n className: \"SuspendUserModal-days-input\"\n }, m(\"input\", {\n type: \"number\",\n min: \"0\",\n value: this.daysRemaining(),\n oninput: withAttr('value', this.daysRemaining),\n className: \"FormControl\"\n }), app.translator.trans('flarum-suspend.forum.suspend_user.limited_time_days_text'))), 80);\n return items;\n }\n formItems() {\n const items = new ItemList();\n items.add('radioItems', m(FieldSet, {\n label: app.translator.trans('flarum-suspend.forum.suspend_user.status_heading')\n }, this.radioItems().toArray()), 100);\n items.add('reason', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-suspend.forum.suspend_user.reason')), m(\"textarea\", {\n className: \"FormControl\",\n bidi: this.reason,\n placeholder: app.translator.trans('flarum-suspend.forum.suspend_user.placeholder_optional'),\n rows: \"4\"\n })), 90);\n items.add('message', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-suspend.forum.suspend_user.display_message')), m(\"textarea\", {\n className: \"FormControl\",\n bidi: this.message,\n placeholder: app.translator.trans('flarum-suspend.forum.suspend_user.placeholder_optional'),\n rows: \"4\"\n })), 80);\n return items;\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n let suspendedUntil = null;\n switch (this.status()) {\n case 'indefinitely':\n suspendedUntil = getPermanentSuspensionDate();\n break;\n case 'limited':\n suspendedUntil = dayjs().add(this.daysRemaining(), 'days').toDate();\n break;\n default:\n // no default\n }\n\n this.attrs.user.save({\n suspendedUntil,\n suspendReason: this.reason(),\n suspendMessage: this.message()\n }).then(() => this.hide(), this.loaded.bind(this));\n }\n}\nflarum.reg.add('flarum-suspend', 'forum/components/SuspendUserModal', SuspendUserModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/Notification');","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { isPermanentSuspensionDate } from '../helpers/suspensionHelper';\nexport default class UserSuspendedNotification extends Notification {\n icon() {\n return 'fas fa-ban';\n }\n href() {\n return app.route.user(this.attrs.notification.subject());\n }\n content() {\n const notification = this.attrs.notification;\n const suspendedUntil = notification.content();\n const timeReadable = dayjs(suspendedUntil).from(notification.createdAt(), true);\n return isPermanentSuspensionDate(suspendedUntil) ? app.translator.trans('flarum-suspend.forum.notifications.user_suspended_indefinite_text') : app.translator.trans('flarum-suspend.forum.notifications.user_suspended_text', {\n timeReadable\n });\n }\n excerpt() {\n return null;\n }\n}\nflarum.reg.add('flarum-suspend', 'forum/components/UserSuspendedNotification', UserSuspendedNotification);","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nexport default class UserUnsuspendedNotification extends Notification {\n icon() {\n return 'fas fa-ban';\n }\n href() {\n return app.route.user(this.attrs.notification.subject());\n }\n content() {\n const notification = this.attrs.notification;\n return app.translator.trans('flarum-suspend.forum.notifications.user_unsuspended_text');\n }\n excerpt() {\n return null;\n }\n}\nflarum.reg.add('flarum-suspend', 'forum/components/UserUnsuspendedNotification', UserUnsuspendedNotification);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/fullTime');","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Button from 'flarum/common/components/Button';\nimport fullTime from 'flarum/common/helpers/fullTime';\nimport { isPermanentSuspensionDate, localStorageKey } from '../helpers/suspensionHelper';\nimport Form from '@flarum/core/src/common/components/Form';\nexport default class SuspensionInfoModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n this.message = this.attrs.message;\n this.until = this.attrs.until;\n }\n className() {\n return 'SuspensionInfoModal Modal';\n }\n title() {\n return app.translator.trans('flarum-suspend.forum.suspension_info.title');\n }\n content() {\n const timespan = isPermanentSuspensionDate(new Date(this.until)) ? app.translator.trans('flarum-suspend.forum.suspension_info.indefinite') : app.translator.trans('flarum-suspend.forum.suspension_info.limited', {\n date: fullTime(this.until)\n });\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"p\", {\n className: \"helpText\"\n }, this.message), m(\"p\", {\n className: \"helpText\"\n }, timespan), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary Button--block\",\n onclick: this.hide.bind(this)\n }, app.translator.trans('flarum-suspend.forum.suspension_info.dismiss_button')))));\n }\n hide() {\n localStorage.setItem(localStorageKey(), this.attrs.until.getTime());\n this.attrs.state.close();\n }\n}\nflarum.reg.add('flarum-suspend', 'forum/components/SuspensionInfoModal', SuspensionInfoModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import Extend from 'flarum/common/extenders';\nimport User from 'flarum/common/models/User';\nimport Model from 'flarum/common/Model';\nexport default [new Extend.Model(User).attribute('canSuspend').attribute('suspendedUntil', Model.transformDate).attribute('suspendReason').attribute('suspendMessage')];","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport UserControls from 'flarum/forum/utils/UserControls';\nimport Button from 'flarum/common/components/Button';\nimport Badge from 'flarum/common/components/Badge';\nimport User from 'flarum/common/models/User';\nimport SuspendUserModal from './components/SuspendUserModal';\nimport UserSuspendedNotification from './components/UserSuspendedNotification';\nimport UserUnsuspendedNotification from './components/UserUnsuspendedNotification';\nimport checkForSuspension from './checkForSuspension';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-suspend', () => {\n app.notificationComponents.userSuspended = UserSuspendedNotification;\n app.notificationComponents.userUnsuspended = UserUnsuspendedNotification;\n extend(UserControls, 'moderationControls', (items, user) => {\n if (user.canSuspend()) {\n items.add('suspend', m(Button, {\n icon: \"fas fa-ban\",\n onclick: () => app.modal.show(SuspendUserModal, {\n user\n })\n }, app.translator.trans('flarum-suspend.forum.user_controls.suspend_button')));\n }\n });\n extend(User.prototype, 'badges', function (items) {\n const until = this.suspendedUntil();\n if (new Date() < until) {\n items.add('suspended', m(Badge, {\n icon: \"fas fa-ban\",\n type: \"suspended\",\n label: app.translator.trans('flarum-suspend.forum.user_badge.suspended_tooltip')\n }), 100);\n }\n });\n checkForSuspension();\n});\nimport './forum';","import app from 'flarum/forum/app';\nimport SuspensionInfoModal from './components/SuspensionInfoModal';\nimport { localStorageKey } from './helpers/suspensionHelper';\nexport default function () {\n return setTimeout(() => {\n if (app.session.user) {\n const message = app.session.user.suspendMessage();\n const until = app.session.user.suspendedUntil();\n const isSuspended = message && until && new Date() < until;\n const alreadyDisplayed = localStorage.getItem(localStorageKey()) === (until == null ? void 0 : until.getTime().toString());\n if (isSuspended && !alreadyDisplayed) {\n app.modal.show(SuspensionInfoModal, {\n message,\n until\n });\n } else if (localStorage.getItem(localStorageKey())) {\n localStorage.removeItem(localStorageKey());\n }\n }\n }, 0);\n}"],"names":["module","exports","e","n","r","i","s","u","a","o","f","h","c","d","l","$","y","M","name","weekdays","split","months","ordinal","t","m","String","length","Array","join","v","z","utcOffset","Math","abs","floor","date","year","month","clone","add","ceil","p","w","D","ms","Q","toLowerCase","replace","g","_","S","args","arguments","O","locale","$L","utc","$u","x","$x","$offset","this","parse","prototype","$d","Date","NaN","test","match","substring","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","toString","isSame","startOf","endOf","isAfter","isBefore","$g","set","unix","valueOf","getTime","toDate","apply","slice","$locale","weekStart","$set","min","daysInMonth","get","Number","round","subtract","format","invalidDate","meridiem","YY","YYYY","MM","MMM","monthsShort","MMMM","DD","dd","weekdaysMin","ddd","weekdaysShort","dddd","H","HH","hh","A","mm","ss","SSS","Z","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","T","forEach","extend","$i","isDayjs","en","Ls","local","call","getUTCFullYear","getUTCMonth","getUTCDate","getUTCDay","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","$localOffset","isUTC","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","key","Object","defineProperty","enumerable","obj","prop","hasOwnProperty","Symbol","toStringTag","value","flarum","reg","getPermanentSuspensionDate","isPermanentSuspensionDate","_typeof","iterator","constructor","_defineProperty","arg","input","hint","prim","toPrimitive","res","TypeError","toPropertyKey","configurable","writable","localStorageKey","Component","oninit","vnode","setAttrs","attrs","oncreate","element","dom","onbeforeupdate","onupdate","onbeforeremove","onremove","selector","$element","find","static","children","componentAttrs","initAttrs","Error","concat","isArray","classList","Form","view","label","description","className","assign","FieldSet","role","SuspendUserModal","super","until","user","suspendedUntil","reason","suspendReason","message","suspendMessage","status","daysRemaining","dayjs","title","content","formItems","toArray","loading","type","radioItems","items","checked","onclick","target","redraw","sync","select","oninput","bidi","placeholder","rows","onsubmit","preventDefault","save","then","hide","loaded","bind","UserSuspendedNotification","icon","href","notification","subject","timeReadable","from","createdAt","excerpt","UserUnsuspendedNotification","SuspensionInfoModal","timespan","localStorage","setItem","state","close","attribute","canSuspend","setTimeout","isSuspended","alreadyDisplayed","getItem","removeItem"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/suspend/../../../node_modules/dayjs/dayjs.min.js","webpack://@flarum/suspend/../../../node_modules/dayjs/plugin/utc.js","webpack://@flarum/suspend/webpack/bootstrap","webpack://@flarum/suspend/webpack/runtime/compat get default export","webpack://@flarum/suspend/webpack/runtime/define property getters","webpack://@flarum/suspend/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/suspend/webpack/runtime/make namespace object","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'forum/utils/UserControls')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/components/Badge')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/models/User')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/utils/withAttr')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/suspend/./src/forum/helpers/suspensionHelper.ts","webpack://@flarum/suspend/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/suspend/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/suspend/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/suspend/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/suspend/../../../framework/core/js/src/common/Component.ts","webpack://@flarum/suspend/../../../node_modules/clsx/dist/clsx.m.js","webpack://@flarum/suspend/../../../framework/core/js/src/common/utils/classList.ts","webpack://@flarum/suspend/../../../framework/core/js/src/common/components/Form.tsx","webpack://@flarum/suspend/../../../framework/core/js/src/common/components/FieldSet.tsx","webpack://@flarum/suspend/./src/forum/components/SuspendUserModal.js","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'forum/components/Notification')\"","webpack://@flarum/suspend/./src/forum/components/UserSuspendedNotification.js","webpack://@flarum/suspend/./src/forum/components/UserUnsuspendedNotification.js","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/components/Modal')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/helpers/fullTime')\"","webpack://@flarum/suspend/./src/forum/components/SuspensionInfoModal.js","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/suspend/./src/forum/extend.ts","webpack://@flarum/suspend/./src/forum/index.js","webpack://@flarum/suspend/./src/forum/checkForSuspension.js"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",f=\"month\",h=\"quarter\",c=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|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,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t) {\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', 'forum/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/UserControls');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Badge');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/User');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormModal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/Stream');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","import dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\ndayjs.extend(utc);\nexport function getPermanentSuspensionDate() {\n return new Date('2038-01-01');\n}\nexport function isPermanentSuspensionDate(date) {\n return dayjs.utc(date).isSame(dayjs.utc('2038-01-01'));\n}\nexport function localStorageKey() {\n return 'flarum-suspend.acknowledge-suspension';\n}\nflarum.reg.add('flarum-suspend', 'forum/helpers/suspensionHelper', { getPermanentSuspensionDate: getPermanentSuspensionDate,isPermanentSuspensionDate: isPermanentSuspensionDate,localStorageKey: localStorageKey, });","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}","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-suspend', '../../../../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 until) until = null;\n if (until) {\n if (until.getFullYear() === 9999) status = 'indefinitely';else status = 'limited';\n }\n this.status = Stream(status);\n this.reason = Stream(reason);\n this.message = Stream(message);\n this.daysRemaining = Stream(status === 'limited' && -dayjs().diff(until, 'days') + 1);\n }\n className() {\n return 'SuspendUserModal Modal--medium';\n }\n title() {\n return app.translator.trans('flarum-suspend.forum.suspend_user.title', {\n user: this.attrs.user\n });\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, null, this.formItems().toArray(), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary\",\n loading: this.loading,\n type: \"submit\"\n }, app.translator.trans('flarum-suspend.forum.suspend_user.submit_button')))));\n }\n radioItems() {\n const items = new ItemList();\n items.add('not-suspended', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"status\",\n checked: !this.status(),\n value: \"\",\n onclick: withAttr('value', this.status)\n }), app.translator.trans('flarum-suspend.forum.suspend_user.not_suspended_label')), 100);\n items.add('indefinitely', m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"status\",\n checked: this.status() === 'indefinitely',\n value: \"indefinitely\",\n onclick: withAttr('value', this.status)\n }), app.translator.trans('flarum-suspend.forum.suspend_user.indefinitely_label')), 90);\n items.add('time-suspension', m(\"label\", {\n className: \"checkbox SuspendUserModal-days\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"status\",\n checked: this.status() === 'limited',\n value: \"limited\",\n onclick: e => {\n this.status(e.target.value);\n m.redraw.sync();\n this.$('.SuspendUserModal-days-input input').select();\n e.redraw = false;\n }\n }), app.translator.trans('flarum-suspend.forum.suspend_user.limited_time_label'), this.status() === 'limited' && m(\"div\", {\n className: \"SuspendUserModal-days-input\"\n }, m(\"input\", {\n type: \"number\",\n min: \"0\",\n value: this.daysRemaining(),\n oninput: withAttr('value', this.daysRemaining),\n className: \"FormControl\"\n }), app.translator.trans('flarum-suspend.forum.suspend_user.limited_time_days_text'))), 80);\n return items;\n }\n formItems() {\n const items = new ItemList();\n items.add('radioItems', m(FieldSet, {\n label: app.translator.trans('flarum-suspend.forum.suspend_user.status_heading')\n }, this.radioItems().toArray()), 100);\n items.add('reason', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-suspend.forum.suspend_user.reason')), m(\"textarea\", {\n className: \"FormControl\",\n bidi: this.reason,\n placeholder: app.translator.trans('flarum-suspend.forum.suspend_user.placeholder_optional'),\n rows: \"4\"\n })), 90);\n items.add('message', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-suspend.forum.suspend_user.display_message')), m(\"textarea\", {\n className: \"FormControl\",\n bidi: this.message,\n placeholder: app.translator.trans('flarum-suspend.forum.suspend_user.placeholder_optional'),\n rows: \"4\"\n })), 80);\n return items;\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n let suspendedUntil = null;\n switch (this.status()) {\n case 'indefinitely':\n suspendedUntil = getPermanentSuspensionDate();\n break;\n case 'limited':\n suspendedUntil = dayjs().add(this.daysRemaining(), 'days').toDate();\n break;\n default:\n // no default\n }\n\n this.attrs.user.save({\n suspendedUntil,\n suspendReason: this.reason(),\n suspendMessage: this.message()\n }).then(() => this.hide(), this.loaded.bind(this));\n }\n}\nflarum.reg.add('flarum-suspend', 'forum/components/SuspendUserModal', SuspendUserModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/Notification');","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nimport { isPermanentSuspensionDate } from '../helpers/suspensionHelper';\nexport default class UserSuspendedNotification extends Notification {\n icon() {\n return 'fas fa-ban';\n }\n href() {\n return app.route.user(this.attrs.notification.subject());\n }\n content() {\n const notification = this.attrs.notification;\n const suspendedUntil = notification.content();\n const timeReadable = dayjs(suspendedUntil).from(notification.createdAt(), true);\n return isPermanentSuspensionDate(suspendedUntil) ? app.translator.trans('flarum-suspend.forum.notifications.user_suspended_indefinite_text') : app.translator.trans('flarum-suspend.forum.notifications.user_suspended_text', {\n timeReadable\n });\n }\n excerpt() {\n return null;\n }\n}\nflarum.reg.add('flarum-suspend', 'forum/components/UserSuspendedNotification', UserSuspendedNotification);","import app from 'flarum/forum/app';\nimport Notification from 'flarum/forum/components/Notification';\nexport default class UserUnsuspendedNotification extends Notification {\n icon() {\n return 'fas fa-ban';\n }\n href() {\n return app.route.user(this.attrs.notification.subject());\n }\n content() {\n const notification = this.attrs.notification;\n return app.translator.trans('flarum-suspend.forum.notifications.user_unsuspended_text');\n }\n excerpt() {\n return null;\n }\n}\nflarum.reg.add('flarum-suspend', 'forum/components/UserUnsuspendedNotification', UserUnsuspendedNotification);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Modal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/fullTime');","import app from 'flarum/forum/app';\nimport Modal from 'flarum/common/components/Modal';\nimport Button from 'flarum/common/components/Button';\nimport fullTime from 'flarum/common/helpers/fullTime';\nimport { isPermanentSuspensionDate, localStorageKey } from '../helpers/suspensionHelper';\nimport Form from '@flarum/core/src/common/components/Form';\nexport default class SuspensionInfoModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n this.message = this.attrs.message;\n this.until = this.attrs.until;\n }\n className() {\n return 'SuspensionInfoModal Modal';\n }\n title() {\n return app.translator.trans('flarum-suspend.forum.suspension_info.title');\n }\n content() {\n const timespan = isPermanentSuspensionDate(new Date(this.until)) ? app.translator.trans('flarum-suspend.forum.suspension_info.indefinite') : app.translator.trans('flarum-suspend.forum.suspension_info.limited', {\n date: fullTime(this.until)\n });\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"p\", {\n className: \"helpText\"\n }, this.message), m(\"p\", {\n className: \"helpText\"\n }, timespan), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary Button--block\",\n onclick: this.hide.bind(this)\n }, app.translator.trans('flarum-suspend.forum.suspension_info.dismiss_button')))));\n }\n hide() {\n localStorage.setItem(localStorageKey(), this.attrs.until.getTime());\n this.attrs.state.close();\n }\n}\nflarum.reg.add('flarum-suspend', 'forum/components/SuspensionInfoModal', SuspensionInfoModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import Extend from 'flarum/common/extenders';\nimport User from 'flarum/common/models/User';\nimport Model from 'flarum/common/Model';\nexport default [new Extend.Model(User).attribute('canSuspend').attribute('suspendedUntil', Model.transformDate).attribute('suspendReason').attribute('suspendMessage')];","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport UserControls from 'flarum/forum/utils/UserControls';\nimport Button from 'flarum/common/components/Button';\nimport Badge from 'flarum/common/components/Badge';\nimport User from 'flarum/common/models/User';\nimport SuspendUserModal from './components/SuspendUserModal';\nimport UserSuspendedNotification from './components/UserSuspendedNotification';\nimport UserUnsuspendedNotification from './components/UserUnsuspendedNotification';\nimport checkForSuspension from './checkForSuspension';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-suspend', () => {\n app.notificationComponents.userSuspended = UserSuspendedNotification;\n app.notificationComponents.userUnsuspended = UserUnsuspendedNotification;\n extend(UserControls, 'moderationControls', (items, user) => {\n if (user.canSuspend()) {\n items.add('suspend', m(Button, {\n icon: \"fas fa-ban\",\n onclick: () => app.modal.show(SuspendUserModal, {\n user\n })\n }, app.translator.trans('flarum-suspend.forum.user_controls.suspend_button')));\n }\n });\n extend(User.prototype, 'badges', function (items) {\n const until = this.suspendedUntil();\n if (new Date() < until) {\n items.add('suspended', m(Badge, {\n icon: \"fas fa-ban\",\n type: \"suspended\",\n label: app.translator.trans('flarum-suspend.forum.user_badge.suspended_tooltip')\n }), 100);\n }\n });\n checkForSuspension();\n});\nimport './forum';","import app from 'flarum/forum/app';\nimport SuspensionInfoModal from './components/SuspensionInfoModal';\nimport { localStorageKey } from './helpers/suspensionHelper';\nexport default function () {\n return setTimeout(() => {\n if (app.session.user) {\n const message = app.session.user.suspendMessage();\n const until = app.session.user.suspendedUntil();\n const isSuspended = message && until && new Date() < until;\n const alreadyDisplayed = localStorage.getItem(localStorageKey()) === (until == null ? void 0 : until.getTime().toString());\n if (isSuspended && !alreadyDisplayed) {\n app.modal.show(SuspensionInfoModal, {\n message,\n until\n });\n } else if (localStorage.getItem(localStorageKey())) {\n localStorage.removeItem(localStorageKey());\n }\n }\n }, 0);\n}"],"names":["module","exports","e","n","r","i","s","u","a","o","f","h","c","d","l","$","y","M","name","weekdays","split","months","ordinal","t","m","String","length","Array","join","v","z","utcOffset","Math","abs","floor","date","year","month","clone","add","ceil","p","w","D","ms","Q","toLowerCase","replace","g","_","S","args","arguments","O","locale","$L","utc","$u","x","$x","$offset","this","parse","prototype","$d","Date","NaN","test","match","substring","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","toString","isSame","startOf","endOf","isAfter","isBefore","$g","set","unix","valueOf","getTime","toDate","apply","slice","$locale","weekStart","$set","min","daysInMonth","get","Number","round","subtract","format","invalidDate","meridiem","YY","YYYY","MM","MMM","monthsShort","MMMM","DD","dd","weekdaysMin","ddd","weekdaysShort","dddd","H","HH","hh","A","mm","ss","SSS","Z","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","T","forEach","extend","$i","isDayjs","en","Ls","local","call","getUTCFullYear","getUTCMonth","getUTCDate","getUTCDay","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","$localOffset","isUTC","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","key","Object","defineProperty","enumerable","obj","prop","hasOwnProperty","Symbol","toStringTag","value","flarum","reg","getPermanentSuspensionDate","isPermanentSuspensionDate","_typeof","iterator","constructor","_defineProperty","arg","input","hint","prim","toPrimitive","res","TypeError","toPropertyKey","configurable","writable","localStorageKey","Component","oninit","vnode","setAttrs","attrs","oncreate","element","dom","onbeforeupdate","onupdate","onbeforeremove","onremove","selector","$element","find","static","children","componentAttrs","initAttrs","Error","concat","isArray","classList","Form","view","label","description","className","assign","FieldSet","role","SuspendUserModal","super","until","user","suspendedUntil","reason","suspendReason","message","suspendMessage","status","daysRemaining","dayjs","title","content","formItems","toArray","loading","type","radioItems","items","checked","onclick","target","redraw","sync","select","oninput","bidi","placeholder","rows","onsubmit","preventDefault","save","then","hide","loaded","bind","UserSuspendedNotification","icon","href","notification","subject","timeReadable","from","createdAt","excerpt","UserUnsuspendedNotification","SuspensionInfoModal","timespan","localStorage","setItem","state","close","attribute","canSuspend","setTimeout","isSuspended","alreadyDisplayed","getItem","removeItem"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/suspend/js/src/forum/components/SuspendUserModal.js b/extensions/suspend/js/src/forum/components/SuspendUserModal.js index c581c803ef..eaeb90622e 100644 --- a/extensions/suspend/js/src/forum/components/SuspendUserModal.js +++ b/extensions/suspend/js/src/forum/components/SuspendUserModal.js @@ -1,5 +1,5 @@ import app from 'flarum/forum/app'; -import Modal from 'flarum/common/components/Modal'; +import FormModal from 'flarum/common/components/FormModal'; import Button from 'flarum/common/components/Button'; import Stream from 'flarum/common/utils/Stream'; import withAttr from 'flarum/common/utils/withAttr'; @@ -9,7 +9,7 @@ import { getPermanentSuspensionDate } from '../helpers/suspensionHelper'; import Form from '@flarum/core/src/common/components/Form'; import FieldSet from '@flarum/core/src/common/components/FieldSet'; -export default class SuspendUserModal extends Modal { +export default class SuspendUserModal extends FormModal { oninit(vnode) { super.oninit(vnode); 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 ebb10b83e7..2498229d32 100644 --- a/extensions/tags/js/dist-typings/admin/components/EditTagModal.d.ts +++ b/extensions/tags/js/dist-typings/admin/components/EditTagModal.d.ts @@ -1,10 +1,10 @@ /// -import Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal'; +import FormModal, { IFormModalAttrs } from 'flarum/common/components/FormModal'; import ItemList from 'flarum/common/utils/ItemList'; import Stream from 'flarum/common/utils/Stream'; import type Mithril from 'mithril'; import type Tag from '../../common/models/Tag'; -export interface EditTagModalAttrs extends IInternalModalAttrs { +export interface EditTagModalAttrs extends IFormModalAttrs { primary?: boolean; model?: Tag; } @@ -12,7 +12,7 @@ export interface EditTagModalAttrs extends IInternalModalAttrs { * The `EditTagModal` component shows a modal dialog which allows the user * to create or edit a tag. */ -export default class EditTagModal extends Modal { +export default class EditTagModal extends FormModal { tag: Tag; name: Stream; slug: Stream; diff --git a/extensions/tags/js/dist-typings/common/components/TagSelectionModal.d.ts b/extensions/tags/js/dist-typings/common/components/TagSelectionModal.d.ts index 51cf3b63b4..def295fa02 100644 --- a/extensions/tags/js/dist-typings/common/components/TagSelectionModal.d.ts +++ b/extensions/tags/js/dist-typings/common/components/TagSelectionModal.d.ts @@ -1,8 +1,8 @@ import KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable'; -import Modal from 'flarum/common/components/Modal'; +import FormModal from 'flarum/common/components/FormModal'; import Stream from 'flarum/common/utils/Stream'; import type Tag from '../models/Tag'; -import type { IInternalModalAttrs } from 'flarum/common/components/Modal'; +import type { IFormModalAttrs } from 'flarum/common/components/FormModal'; import type Mithril from 'mithril'; export interface ITagSelectionModalLimits { /** Whether to allow bypassing the limits set here. This will show a toggle button to bypass limits. */ @@ -20,7 +20,7 @@ export interface ITagSelectionModalLimits { secondary?: number; }; } -export interface ITagSelectionModalAttrs extends IInternalModalAttrs { +export interface ITagSelectionModalAttrs extends IFormModalAttrs { /** Custom modal className to use. */ className?: string; /** Modal title, defaults to 'Choose Tags'. */ @@ -45,7 +45,7 @@ export interface ITagSelectionModalAttrs extends IInternalModalAttrs { onsubmit?: (selected: Tag[]) => void; } export declare type ITagSelectionModalState = undefined; -export default class TagSelectionModal extends Modal { +export default class TagSelectionModal extends FormModal { protected loading: boolean; protected tags: Tag[]; protected selected: Tag[]; diff --git a/extensions/tags/js/dist/admin.js b/extensions/tags/js/dist/admin.js index fda8abac42..a6b1e7eda7 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={949:(t,e,n)=>{"use strict";n.d(e,{l:()=>pn});const o=flarum.reg.get("core","admin/app");var a=n.n(o);const r=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 _(){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 w=flarum.reg.get("core","admin/components/BasicsPage");var T=n.n(w);function S(){(0,r.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);const C=flarum.reg.get("core","admin/components/AdminPage");var x=n.n(C),N=n(905),O=n(433),P=n.n(O),I=(n(780),n(836)),M=n.n(I);function k(t,e){void 0===e&&(e={});const n=[],{link:o,...a}=e;return a.className=M()("TagsLabel",a.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",a,n)}flarum.reg.add("flarum-tags","common/helpers/tagsLabel",k);class A extends(P()){constructor(){super(...arguments),(0,N.Z)(this,"tags",[]),(0,N.Z)(this,"loaded",!1)}view(){const t=JSON.parse(this.attrs.settingValue()||"[]");return this.loaded||a().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:()=>a().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?k(this.tags):m("span",{className:"TagLabel untagged"},a().translator.trans("flarum-tags.admin.settings.button_text"))):m(f(),{size:"small",display:"inline"}))}}function L(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 F(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}function j(t){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(t)}flarum.reg.add("flarum-tags","admin/components/SelectTagsSettingComponent",A),flarum.reg.addChunkModule("162","610","flarum-tags","common/components/TagSelectionModal");var H=j(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),Z=j(/Edge/i),W=j(/firefox/i),z=j(/safari/i)&&!j(/chrome/i)&&!j(/android/i),G=j(/iP(ad|od|hone)/i),q=j(/chrome/i)&&j(/android/i),U={capture:!1,passive:!1};function V(t,e,n){t.addEventListener(e,n,!H&&U)}function K(t,e,n){t.removeEventListener(e,n,!H&&U)}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 at(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 rt(t,e){var n="";if("string"==typeof t)n=t;else do{var o=at(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var a=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return a&&new a(n)}function it(t,e,n){if(t){var o=t.getElementsByTagName(e),a=0,r=o.length;if(n)for(;a=r:a<=r))return o;if(o===st())break;o=gt(o,!1)}return!1}function ut(t,e,n,o){for(var a=0,r=0,i=t.children;r2&&void 0!==arguments[2]?arguments[2]:{},o=n.evt,a=Y(n,St);Tt.pluginEvent.bind(fe)(t,e,F({dragEl:Ct,parentEl:xt,ghostEl:Nt,rootEl:Ot,nextEl:Pt,lastDownEl:It,cloneEl:Mt,cloneHidden:kt,dragStarted:Gt,putSortable:Xt,activeSortable:fe.active,originalEvent:o,oldIndex:At,oldDraggableIndex:Ft,newIndex:Lt,newDraggableIndex:Bt,hideGhostForTarget:me,unhideGhostForTarget:he,cloneNowHidden:function(){kt=!0},cloneNowShown:function(){kt=!1},dispatchSortableEvent:function(t){Dt({sortable:e,name:t,originalEvent:o})}},a))};function Dt(t){!function(t){var e=t.sortable,n=t.rootEl,o=t.name,a=t.targetEl,r=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||H||Z?(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=a||n,p.clone=r,p.oldIndex=l,p.newIndex=c,p.oldDraggableIndex=u,p.newDraggableIndex=d,p.originalEvent=m,p.pullMode=h?h.lastPutMode:void 0;var b=F(F({},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)}}(F({putSortable:Xt,cloneEl:Mt,targetEl:Ct,rootEl:Ot,oldIndex:At,oldDraggableIndex:Ft,newIndex:Lt,newDraggableIndex:Bt},t))}var Ct,xt,Nt,Ot,Pt,It,Mt,kt,At,Lt,Ft,Bt,Rt,Xt,Yt,jt,Ht,Zt,Wt,zt,Gt,qt,Ut,$t,Vt,Kt=!1,Jt=!1,Qt=[],te=!1,ee=!1,ne=[],oe=!1,ae=[],re="undefined"!=typeof document,ie=G,se=Z||H?"cssFloat":"float",le=re&&!q&&!G&&"draggable"in document.createElement("div"),ce=function(){if(re){if(H)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),ue=function(t,e){var n=at(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),a=ut(t,0,e),r=ut(t,1,e),i=a&&at(a),s=r&&at(r),l=i&&parseInt(i.marginLeft)+parseInt(i.marginRight)+lt(a).width,c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+lt(r).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(a&&i.float&&"none"!==i.float){var u="left"===i.float?"left":"right";return!r||"both"!==s.clear&&s.clear!==u?"horizontal":"vertical"}return a&&("block"===i.display||"flex"===i.display||"table"===i.display||"grid"===i.display||l>=o&&"none"===n[se]||r&&"none"===n[se]&&l+c>o)?"vertical":"horizontal"},de=function(t){function e(t,n){return function(o,a,r,i){var s=o.options.group.name&&a.options.group.name&&o.options.group.name===a.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,a,r,i),n)(o,a,r,i);var l=(n?o:a).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&&at(Nt,"display","none")},he=function(){!ce&&Nt&&at(Nt,"display","")};re&&!q&&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=(a=t.clientX,r=t.clientY,Qt.some((function(t){var e=t[yt].options.emptyInsertThreshold;if(e&&!dt(t)){var n=lt(t),o=a>=n.left-e&&a<=n.right+e,s=r>=n.top-e&&r<=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 a,r,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=X({},e),t[yt]=this;var n,o,a={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&&!z,emptyInsertThreshold:5};for(var r in Tt.initializePlugins(this,t,a),a)!(r in e)&&(e[r]=a[r]);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?V(t,"pointerdown",this._onTapStart):(V(t,"mousedown",this._onTapStart),V(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(V(t,"dragover",this),V(t,"dragenter",this)),Qt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),X(this,(o=[],{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach((function(t){if("none"!==at(t,"display")&&t!==fe.ghost){o.push({target:t,rect:lt(t)});var e=F({},o[o.length-1].rect);if(t.thisAnimationDuration){var n=rt(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 a=!1,r=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=rt(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&&(a=!0,r=Math.max(r,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),a?n=setTimeout((function(){"function"==typeof t&&t()}),r):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){if(o){at(t,"transition",""),at(t,"transform","");var a=rt(this.el),r=a&&a.a,i=a&&a.d,s=(e.left-n.left)/(r||1),l=(e.top-n.top)/(i||1);t.animatingX=!!s,t.animatingY=!!l,at(t,"transform","translate3d("+s+"px,"+l+"px,0)"),this.forRepaintDummy=function(t){return t.offsetWidth}(t),at(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),at(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout((function(){at(t,"transition",""),at(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1}),o)}}}))}function ve(t,e,n,o,a,r,i,s){var l,c,u=t[yt],d=u.options.onMove;return!window.CustomEvent||H||Z?(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=a||e,l.relatedRect=r||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 _e(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 we(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||(qt=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,a=o.preventOnFilter,r=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){ae.length=0;for(var e=t.getElementsByTagName("input"),n=e.length;n--;){var o=e[n];o.checked&&ae.push(o)}}(n),!Ct&&!(/mousedown|pointerdown/.test(r)&&0!==t.button||o.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!z||!s||"SELECT"!==s.tagName.toUpperCase())&&!((s=tt(s,o.draggable,n,!1))&&s.animated||It===s)){if(At=mt(s),Ft=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(a&&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(a&&t.cancelable&&t.preventDefault());o.handle&&!tt(l,o.handle,n,!1)||this._prepareDragStart(t,i,s)}}},_prepareDragStart:function(t,e,n){var o,a=this,r=a.el,i=a.options,s=r.ownerDocument;if(n&&!Ct&&n.parentNode===r){var l=lt(n);if(Ot=r,xt=(Ct=n).parentNode,Pt=Ct.nextSibling,It=n,Rt=i.group,fe.dragged=Ct,Yt={target:Ct,clientX:(e||t).clientX,clientY:(e||t).clientY},Wt=Yt.clientX-l.left,zt=Yt.clientY-l.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,Ct.style["will-change"]="all",o=function(){Et("delayEnded",a,{evt:t}),fe.eventCanceled?a._onDrop():(a._disableDelayedDragEvents(),!W&&a.nativeDraggable&&(Ct.draggable=!0),a._triggerDragStart(t,e),Dt({sortable:a,name:"choose",originalEvent:t}),ot(Ct,i.chosenClass,!0))},i.ignore.split(",").forEach((function(t){it(Ct,t.trim(),be)})),V(s,"dragover",ge),V(s,"mousemove",ge),V(s,"touchmove",ge),V(s,"mouseup",a._onDrop),V(s,"touchend",a._onDrop),V(s,"touchcancel",a._onDrop),W&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Ct.draggable=!0),Et("delayStart",this,{evt:t}),!i.delay||i.delayOnTouchOnly&&!e||this.nativeDraggable&&(Z||H))o();else{if(fe.eventCanceled)return void this._onDrop();V(s,"mouseup",a._disableDelayedDrag),V(s,"touchend",a._disableDelayedDrag),V(s,"touchcancel",a._disableDelayedDrag),V(s,"mousemove",a._delayedDragTouchMoveHandler),V(s,"touchmove",a._delayedDragTouchMoveHandler),i.supportPointer&&V(s,"pointermove",a._delayedDragTouchMoveHandler),a._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?V(document,"pointermove",this._onTouchMove):V(document,e?"touchmove":"mousemove",this._onTouchMove):(V(Ct,"dragend",this),V(Ot,"dragstart",this._onDragStart));try{document.selection?we((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&&V(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(jt){this._lastX=jt.clientX,this._lastY=jt.clientY,me();for(var t=document.elementFromPoint(jt.clientX,jt.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(jt.clientX,jt.clientY))!==e;)e=t;if(Ct.parentNode[yt]._isOutsideThisEl(t),e)do{if(e[yt]&&e[yt]._onDragOver({clientX:jt.clientX,clientY:jt.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break;t=e}while(e=e.parentNode);he()}},_onTouchMove:function(t){if(Yt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,a=t.touches?t.touches[0]:t,r=Nt&&rt(Nt,!0),i=Nt&&r&&r.a,s=Nt&&r&&r.d,l=ie&&Vt&&ht(Vt),c=(a.clientX-Yt.clientX+o.x)/(i||1)+(l?l[0]-ne[0]:0)/(i||1),u=(a.clientY-Yt.clientY+o.y)/(s||1)+(l?l[1]-ne[1]:0)/(s||1);if(!fe.active&&!Kt){if(n&&Math.max(Math.abs(a.clientX-this._lastX),Math.abs(a.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,a,this)&&!p.animated){if(p===Ct)return I(!1);if(p&&r===t.target&&(i=p),i&&(n=lt(i)),!1!==ve(Ot,r,Ct,e,i,n,t,!!i))return P(),p&&p.nextSibling?r.insertBefore(Ct,p.nextSibling):r.appendChild(Ct),xt=r,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*r/2:ld-$t)return-Ut}else if(l>u+c*(1-a)/2&&ld-c*r/2)?l>u+c/2?1:-1:0}(t,i,n,a,w?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,ee,qt===i),0!==v){var D=mt(Ct);do{D-=v,y=xt.children[D]}while(y&&("none"===at(y,"display")||y===Nt))}if(0===v||y===i)return I(!1);qt=i,Ut=v;var C=i.nextElementSibling,x=!1,N=ve(Ot,r,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?r.appendChild(Ct):i.parentNode.insertBefore(Ct,x?C:i),S&&vt(S,0,E-S.scrollTop),xt=Ct.parentNode,void 0===b||ee||($t=Math.abs(b-lt(i)[T])),M(),I(!0)}if(r.contains(Ct))return I(!1)}return!1}function O(s,l){Et(s,h,F({evt:t,isOwner:u,axis:a?"vertical":"horizontal",revert:o,dragRect:e,targetRect:n,canSort:d,fromSortable:m,target:i,completed:I,onMove:function(n,o){return ve(Ot,r,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,Xt?Xt.options.ghostClass:c.options.ghostClass,!1),ot(Ct,s.ghostClass,!0)),Xt!==h&&h!==fe.active?Xt=h:h===fe.active&&Xt&&(Xt=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===r&&!i.animated)&&(qt=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(){Lt=mt(Ct),Bt=mt(Ct,s.draggable),Dt({sortable:h,name:"change",toEl:r,newIndex:Lt,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;Lt=mt(Ct),Bt=mt(Ct,n.draggable),Et("drop",this,{evt:t}),xt=Ct&&Ct.parentNode,Lt=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(),z&&at(document.body,"user-select",""),at(Ct,"transform",""),t&&(Gt&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),Nt&&Nt.parentNode&&Nt.parentNode.removeChild(Nt),(Ot===xt||Xt&&"clone"!==Xt.lastPutMode)&&Mt&&Mt.parentNode&&Mt.parentNode.removeChild(Mt),Ct&&(this.nativeDraggable&&K(Ct,"dragend",this),be(Ct),Ct.style["will-change"]="",Gt&&!Kt&&ot(Ct,Xt?Xt.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?(Lt>=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})),Xt&&Xt.save()):Lt!==At&&Lt>=0&&(Dt({sortable:this,name:"update",toEl:xt,originalEvent:t}),Dt({sortable:this,name:"sort",toEl:xt,originalEvent:t})),fe.active&&(null!=Lt&&-1!==Lt||(Lt=At,Bt=Ft),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=kt=Yt=jt=Gt=Lt=Bt=At=Ft=qt=Ut=Xt=Rt=fe.dragged=fe.ghost=fe.clone=fe.active=null,ae.forEach((function(t){t.checked=!0})),ae.length=Ht=Zt=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,a=n.length,r=this.options;o{const e=t.target;this.name(e.value),this.slug((0,Ve.slug)(e.value))}})),50),t.add("slug",m("div",{className:"Form-group"},m("label",null,a().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,a().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,a().translator.trans("flarum-tags.admin.edit_tag.color_label")),m(qe(),{className:"FormControl",placeholder:"#aaaaaa",bidi:this.color})),20),t.add("icon",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.icon_label")),m("div",{className:"helpText"},a().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}),a().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},a().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)},a().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()(a().translator.trans("flarum-tags.admin.edit_tag.delete_tag_confirmation")))){const t=a().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()}}}function nn(t){return m("li",{"data-id":t.id(),style:{color:t.color()}},m("div",{className:"TagListItem-info"},(0,b.Z)(t),m("span",{className:"TagListItem-name"},t.name()),m(g(),{className:"Button Button--link",icon:"fas fa-pencil-alt",onclick:()=>a().modal.show(en,{model:t})})),!t.isChild()&&null!==t.position()&&m("ol",{className:"TagListItem-children TagList"},(0,y.Z)(a().store.all("tags")).filter((e=>e.parent()===t)).map(nn)))}flarum.reg.add("flarum-tags","admin/components/EditTagModal",en);class on extends(Xe()){oninit(t){super.oninit(t),this.forcedRefreshKey=0,this.loading=!0,a().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),r=(0,y.Z)(a().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("div",{className:"SettingsGroups"},m("div",{className:"TagGroup"},m("label",null,a().translator.trans("flarum-tags.admin.tags.primary_heading")),m("ol",{className:"TagList TagList--primary"},r.filter((t=>null!==t.position()&&!t.isChild())).map(nn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>a().modal.show(en,{primary:!0})},a().translator.trans("flarum-tags.admin.tags.create_primary_tag_button"))),m("div",{className:"TagGroup TagGroup--secondary"},m("label",null,a().translator.trans("flarum-tags.admin.tags.secondary_heading")),m("ul",{className:"TagList"},r.filter((t=>null===t.position())).sort(((t,e)=>t.name().localeCompare(e.name()))).map(nn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>a().modal.show(en,{primary:!1})},a().translator.trans("flarum-tags.admin.tags.create_secondary_tag_button"))),m(Ze(),{label:a().translator.trans("flarum-tags.admin.tags.settings_heading")},m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.tag_settings.required_primary_heading")),m("div",{className:"helpText"},a().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:je()("value",this.setMinTags.bind(this,t,e))}),a().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,a().translator.trans("flarum-tags.admin.tag_settings.required_secondary_heading")),m("div",{className:"helpText"},a().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:je()("value",this.setMinTags.bind(this,n,o))}),a().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,a().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&&a().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=a().store.getById("tags",t.id);n.pushData({attributes:{position:e,isChild:!1},relationships:{parent:null}}),t.children.forEach(((t,e)=>{a().store.getById("tags",t).pushData({attributes:{position:e,isChild:!0},relationships:{parent:n}})}))})),a().request({url:a().forum.attribute("apiUrl")+"/tags/order",method:"POST",body:{order:e}}),this.forcedRefreshKey++,m.redraw()}}flarum.reg.add("flarum-tags","admin/components/TagsPage",on);var an=n(351),rn=n.n(an);class sn{constructor(){(0,N.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(rn().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),null!=this.loadedIncludes||(this.loadedIncludes=new Set),rn().store.find("tags",{include:t.join(",")}).then((e=>(t.forEach((t=>this.loadedIncludes.add(t))),e)))}}flarum.reg.add("flarum-tags","common/states/TagListState",sn);const ln=flarum.reg.get("core","common/extenders");var cn=n.n(ln);const un=flarum.reg.get("core","common/utils/computed");var dn=n.n(un);const mn=flarum.reg.get("core","common/Model");var hn=n.n(mn);class gn extends(hn()){name(){return hn().attribute("name").call(this)}slug(){return hn().attribute("slug").call(this)}description(){return hn().attribute("description").call(this)}color(){return hn().attribute("color").call(this)}backgroundUrl(){return hn().attribute("backgroundUrl").call(this)}backgroundMode(){return hn().attribute("backgroundMode").call(this)}icon(){return hn().attribute("icon").call(this)}position(){return hn().attribute("position").call(this)}parent(){return hn().hasOne("parent").call(this)}children(){return hn().hasMany("children").call(this)}defaultSort(){return hn().attribute("defaultSort").call(this)}isChild(){return hn().attribute("isChild").call(this)}isHidden(){return hn().attribute("isHidden").call(this)}discussionCount(){return hn().attribute("discussionCount").call(this)}lastPostedAt(){return hn().attribute("lastPostedAt",hn().transformDate).call(this)}lastPostedDiscussion(){return hn().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return hn().attribute("isRestricted").call(this)}canStartDiscussion(){return hn().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return hn().attribute("canAddToDiscussion").call(this)}isPrimary(){return dn()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",gn);const pn=[(new(cn().Store)).add("tags",gn)];a().initializers.add("flarum-tags",(t=>{t.tagList=new sn,t.extensionData.for("flarum-tags").registerPage(on),(0,r.extend)(s().prototype,"oninit",(function(){this.loading=!0})),(0,r.extend)(s().prototype,"oncreate",(function(){a().tagList.load().then((()=>{this.loading=!1,m.redraw()}))})),(0,r.override)(s().prototype,"view",(function(t,e){return this.loading?m(f(),null):t(e)})),(0,r.override)(a(),"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,r.extend)(s().prototype,"scopeItems",(t=>{(0,y.Z)(a().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,r.extend)(s().prototype,"scopeControlItems",(t=>{const e=(0,y.Z)(a().store.all("tags").filter((t=>!t.isRestricted())));e.length&&t.add("tag",m(d(),{className:"Dropdown--restrictByTag",buttonClassName:"Button Button--text",label:a().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()])))))})),_(),S(),(0,r.extend)(s().prototype,"startItems",(t=>{t.add("allowTagChange",{icon:"fas fa-tag",label:a().translator.trans("flarum-tags.admin.permissions.allow_edit_tags_label"),setting:()=>{const t=parseInt(a().data.settings.allow_tag_change,10);return m(D(),{defaultLabel:t?a().translator.trans("core.admin.permissions_controls.allow_some_minutes_button",{count:t}):a().translator.trans("core.admin.permissions_controls.allow_indefinitely_button"),key:"allow_tag_change",options:[{value:"-1",label:a().translator.trans("core.admin.permissions_controls.allow_indefinitely_button")},{value:"10",label:a().translator.trans("core.admin.permissions_controls.allow_ten_minutes_button")},{value:"reply",label:a().translator.trans("core.admin.permissions_controls.allow_until_reply_button")}]})}},90)})),(0,r.extend)(x().prototype,"customSettingComponents",(function(t){t.add("flarum-tags.select-tags",(t=>m(A,Object.assign({},t,{settingValue:this.settings[t.setting]}))))}))}))},974:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var o=n(836),a=n.n(o);function r(t,e,n){void 0===e&&(e={}),void 0===n&&(n={});const o=t&&t.icon(),{useColor:r=!0}=n;return e.className=a()([e.className,"icon text-colored",o?t.icon():"TagIcon"]),t&&r?(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",r)},924:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var o=n(780),a=n.n(o),r=n(678),i=n.n(r),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=a()(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 a=t.parent(),r=e.parent();return a===r?n-o:a&&r?a.position()-r.position():a?a===e?1:a.position()-o:r?r===t?-1:n-r.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")},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")},686:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Modal")},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 a(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 a=n.call(t,e);if("object"!==o(a))return a;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:()=>a})}},o={};function a(t){var e=o[t];if(void 0!==e)return e.exports;var r=o[t]={exports:{}};return n[t](r,r.exports,a),r.exports}a.m=n,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.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,n)=>(a.f[n](t,e),e)),[])),a.u=t=>"common/components/TagSelectionModal.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=(n,o,r,i)=>{if(t[n])t[n].push(o);else{var s,l;if(void 0!==r)for(var c=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(h);var a=t[n];if(delete t[n],s.parentNode&&s.parentNode.removeChild(s),a&&a.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)}},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 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(/\/[^\/]+$/,"/"),a.p=t})(),a.f.compat=(t,e)=>{const n=a.l;a.l=flarum.reg.loadChunk.bind(flarum.reg,n)},(()=>{var t={328:0};a.f.j=(e,n)=>{var o=a.o(t,e)?t[e]:void 0;if(0!==o)if(o)n.push(o[2]);else{var r=new Promise(((n,a)=>o=t[e]=[n,a]));n.push(o[2]=r);var i=a.p+a.u(e),s=new Error;a.l(i,(n=>{if(a.o(t,e)&&(0!==(o=t[e])&&(t[e]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",s.name="ChunkLoadError",s.type=r,s.request=i,o[1](s)}}),"chunk-"+e,e)}};var e=(e,n)=>{var o,r,[i,s,l]=n,c=0;if(i.some((e=>0!==t[e]))){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);l&&l(a)}for(e&&e(n);c{"use strict";a.r(r),a.d(r,{extend:()=>n.l});var t=a(270),e={};for(const n in t)"default"!==n&&(e[n]=()=>t[n]);a.d(r,e);var n=a(949)})(),module.exports=r})(); +(()=>{var t,e,n={949:(t,e,n)=>{"use strict";n.d(e,{l:()=>pn});const o=flarum.reg.get("core","admin/app");var a=n.n(o);const r=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 _(){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 w=flarum.reg.get("core","admin/components/BasicsPage");var T=n.n(w);function S(){(0,r.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);const C=flarum.reg.get("core","admin/components/AdminPage");var x=n.n(C),N=n(905),O=n(433),P=n.n(O),I=(n(780),n(836)),M=n.n(I);function k(t,e){void 0===e&&(e={});const n=[],{link:o,...a}=e;return a.className=M()("TagsLabel",a.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",a,n)}flarum.reg.add("flarum-tags","common/helpers/tagsLabel",k);class A extends(P()){constructor(){super(...arguments),(0,N.Z)(this,"tags",[]),(0,N.Z)(this,"loaded",!1)}view(){const t=JSON.parse(this.attrs.settingValue()||"[]");return this.loaded||a().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:()=>a().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?k(this.tags):m("span",{className:"TagLabel untagged"},a().translator.trans("flarum-tags.admin.settings.button_text"))):m(f(),{size:"small",display:"inline"}))}}function L(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 F(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}function j(t){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(t)}flarum.reg.add("flarum-tags","admin/components/SelectTagsSettingComponent",A),flarum.reg.addChunkModule("162","610","flarum-tags","common/components/TagSelectionModal");var H=j(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),Z=j(/Edge/i),W=j(/firefox/i),z=j(/safari/i)&&!j(/chrome/i)&&!j(/android/i),G=j(/iP(ad|od|hone)/i),q=j(/chrome/i)&&j(/android/i),U={capture:!1,passive:!1};function V(t,e,n){t.addEventListener(e,n,!H&&U)}function K(t,e,n){t.removeEventListener(e,n,!H&&U)}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 at(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 rt(t,e){var n="";if("string"==typeof t)n=t;else do{var o=at(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var a=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return a&&new a(n)}function it(t,e,n){if(t){var o=t.getElementsByTagName(e),a=0,r=o.length;if(n)for(;a=r:a<=r))return o;if(o===st())break;o=gt(o,!1)}return!1}function ut(t,e,n,o){for(var a=0,r=0,i=t.children;r2&&void 0!==arguments[2]?arguments[2]:{},o=n.evt,a=Y(n,St);Tt.pluginEvent.bind(fe)(t,e,F({dragEl:Ct,parentEl:xt,ghostEl:Nt,rootEl:Ot,nextEl:Pt,lastDownEl:It,cloneEl:Mt,cloneHidden:kt,dragStarted:Gt,putSortable:Xt,activeSortable:fe.active,originalEvent:o,oldIndex:At,oldDraggableIndex:Ft,newIndex:Lt,newDraggableIndex:Bt,hideGhostForTarget:me,unhideGhostForTarget:he,cloneNowHidden:function(){kt=!0},cloneNowShown:function(){kt=!1},dispatchSortableEvent:function(t){Dt({sortable:e,name:t,originalEvent:o})}},a))};function Dt(t){!function(t){var e=t.sortable,n=t.rootEl,o=t.name,a=t.targetEl,r=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||H||Z?(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=a||n,p.clone=r,p.oldIndex=l,p.newIndex=c,p.oldDraggableIndex=u,p.newDraggableIndex=d,p.originalEvent=m,p.pullMode=h?h.lastPutMode:void 0;var b=F(F({},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)}}(F({putSortable:Xt,cloneEl:Mt,targetEl:Ct,rootEl:Ot,oldIndex:At,oldDraggableIndex:Ft,newIndex:Lt,newDraggableIndex:Bt},t))}var Ct,xt,Nt,Ot,Pt,It,Mt,kt,At,Lt,Ft,Bt,Rt,Xt,Yt,jt,Ht,Zt,Wt,zt,Gt,qt,Ut,$t,Vt,Kt=!1,Jt=!1,Qt=[],te=!1,ee=!1,ne=[],oe=!1,ae=[],re="undefined"!=typeof document,ie=G,se=Z||H?"cssFloat":"float",le=re&&!q&&!G&&"draggable"in document.createElement("div"),ce=function(){if(re){if(H)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),ue=function(t,e){var n=at(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),a=ut(t,0,e),r=ut(t,1,e),i=a&&at(a),s=r&&at(r),l=i&&parseInt(i.marginLeft)+parseInt(i.marginRight)+lt(a).width,c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+lt(r).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(a&&i.float&&"none"!==i.float){var u="left"===i.float?"left":"right";return!r||"both"!==s.clear&&s.clear!==u?"horizontal":"vertical"}return a&&("block"===i.display||"flex"===i.display||"table"===i.display||"grid"===i.display||l>=o&&"none"===n[se]||r&&"none"===n[se]&&l+c>o)?"vertical":"horizontal"},de=function(t){function e(t,n){return function(o,a,r,i){var s=o.options.group.name&&a.options.group.name&&o.options.group.name===a.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,a,r,i),n)(o,a,r,i);var l=(n?o:a).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&&at(Nt,"display","none")},he=function(){!ce&&Nt&&at(Nt,"display","")};re&&!q&&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=(a=t.clientX,r=t.clientY,Qt.some((function(t){var e=t[yt].options.emptyInsertThreshold;if(e&&!dt(t)){var n=lt(t),o=a>=n.left-e&&a<=n.right+e,s=r>=n.top-e&&r<=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 a,r,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=X({},e),t[yt]=this;var n,o,a={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&&!z,emptyInsertThreshold:5};for(var r in Tt.initializePlugins(this,t,a),a)!(r in e)&&(e[r]=a[r]);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?V(t,"pointerdown",this._onTapStart):(V(t,"mousedown",this._onTapStart),V(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(V(t,"dragover",this),V(t,"dragenter",this)),Qt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),X(this,(o=[],{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach((function(t){if("none"!==at(t,"display")&&t!==fe.ghost){o.push({target:t,rect:lt(t)});var e=F({},o[o.length-1].rect);if(t.thisAnimationDuration){var n=rt(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 a=!1,r=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=rt(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&&(a=!0,r=Math.max(r,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),a?n=setTimeout((function(){"function"==typeof t&&t()}),r):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){if(o){at(t,"transition",""),at(t,"transform","");var a=rt(this.el),r=a&&a.a,i=a&&a.d,s=(e.left-n.left)/(r||1),l=(e.top-n.top)/(i||1);t.animatingX=!!s,t.animatingY=!!l,at(t,"transform","translate3d("+s+"px,"+l+"px,0)"),this.forRepaintDummy=function(t){return t.offsetWidth}(t),at(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),at(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout((function(){at(t,"transition",""),at(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1}),o)}}}))}function ve(t,e,n,o,a,r,i,s){var l,c,u=t[yt],d=u.options.onMove;return!window.CustomEvent||H||Z?(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=a||e,l.relatedRect=r||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 _e(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 we(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||(qt=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,a=o.preventOnFilter,r=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){ae.length=0;for(var e=t.getElementsByTagName("input"),n=e.length;n--;){var o=e[n];o.checked&&ae.push(o)}}(n),!Ct&&!(/mousedown|pointerdown/.test(r)&&0!==t.button||o.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!z||!s||"SELECT"!==s.tagName.toUpperCase())&&!((s=tt(s,o.draggable,n,!1))&&s.animated||It===s)){if(At=mt(s),Ft=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(a&&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(a&&t.cancelable&&t.preventDefault());o.handle&&!tt(l,o.handle,n,!1)||this._prepareDragStart(t,i,s)}}},_prepareDragStart:function(t,e,n){var o,a=this,r=a.el,i=a.options,s=r.ownerDocument;if(n&&!Ct&&n.parentNode===r){var l=lt(n);if(Ot=r,xt=(Ct=n).parentNode,Pt=Ct.nextSibling,It=n,Rt=i.group,fe.dragged=Ct,Yt={target:Ct,clientX:(e||t).clientX,clientY:(e||t).clientY},Wt=Yt.clientX-l.left,zt=Yt.clientY-l.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,Ct.style["will-change"]="all",o=function(){Et("delayEnded",a,{evt:t}),fe.eventCanceled?a._onDrop():(a._disableDelayedDragEvents(),!W&&a.nativeDraggable&&(Ct.draggable=!0),a._triggerDragStart(t,e),Dt({sortable:a,name:"choose",originalEvent:t}),ot(Ct,i.chosenClass,!0))},i.ignore.split(",").forEach((function(t){it(Ct,t.trim(),be)})),V(s,"dragover",ge),V(s,"mousemove",ge),V(s,"touchmove",ge),V(s,"mouseup",a._onDrop),V(s,"touchend",a._onDrop),V(s,"touchcancel",a._onDrop),W&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Ct.draggable=!0),Et("delayStart",this,{evt:t}),!i.delay||i.delayOnTouchOnly&&!e||this.nativeDraggable&&(Z||H))o();else{if(fe.eventCanceled)return void this._onDrop();V(s,"mouseup",a._disableDelayedDrag),V(s,"touchend",a._disableDelayedDrag),V(s,"touchcancel",a._disableDelayedDrag),V(s,"mousemove",a._delayedDragTouchMoveHandler),V(s,"touchmove",a._delayedDragTouchMoveHandler),i.supportPointer&&V(s,"pointermove",a._delayedDragTouchMoveHandler),a._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?V(document,"pointermove",this._onTouchMove):V(document,e?"touchmove":"mousemove",this._onTouchMove):(V(Ct,"dragend",this),V(Ot,"dragstart",this._onDragStart));try{document.selection?we((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&&V(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(jt){this._lastX=jt.clientX,this._lastY=jt.clientY,me();for(var t=document.elementFromPoint(jt.clientX,jt.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(jt.clientX,jt.clientY))!==e;)e=t;if(Ct.parentNode[yt]._isOutsideThisEl(t),e)do{if(e[yt]&&e[yt]._onDragOver({clientX:jt.clientX,clientY:jt.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break;t=e}while(e=e.parentNode);he()}},_onTouchMove:function(t){if(Yt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,a=t.touches?t.touches[0]:t,r=Nt&&rt(Nt,!0),i=Nt&&r&&r.a,s=Nt&&r&&r.d,l=ie&&Vt&&ht(Vt),c=(a.clientX-Yt.clientX+o.x)/(i||1)+(l?l[0]-ne[0]:0)/(i||1),u=(a.clientY-Yt.clientY+o.y)/(s||1)+(l?l[1]-ne[1]:0)/(s||1);if(!fe.active&&!Kt){if(n&&Math.max(Math.abs(a.clientX-this._lastX),Math.abs(a.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,a,this)&&!p.animated){if(p===Ct)return I(!1);if(p&&r===t.target&&(i=p),i&&(n=lt(i)),!1!==ve(Ot,r,Ct,e,i,n,t,!!i))return P(),p&&p.nextSibling?r.insertBefore(Ct,p.nextSibling):r.appendChild(Ct),xt=r,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*r/2:ld-$t)return-Ut}else if(l>u+c*(1-a)/2&&ld-c*r/2)?l>u+c/2?1:-1:0}(t,i,n,a,w?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,ee,qt===i),0!==v){var D=mt(Ct);do{D-=v,y=xt.children[D]}while(y&&("none"===at(y,"display")||y===Nt))}if(0===v||y===i)return I(!1);qt=i,Ut=v;var C=i.nextElementSibling,x=!1,N=ve(Ot,r,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?r.appendChild(Ct):i.parentNode.insertBefore(Ct,x?C:i),S&&vt(S,0,E-S.scrollTop),xt=Ct.parentNode,void 0===b||ee||($t=Math.abs(b-lt(i)[T])),M(),I(!0)}if(r.contains(Ct))return I(!1)}return!1}function O(s,l){Et(s,h,F({evt:t,isOwner:u,axis:a?"vertical":"horizontal",revert:o,dragRect:e,targetRect:n,canSort:d,fromSortable:m,target:i,completed:I,onMove:function(n,o){return ve(Ot,r,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,Xt?Xt.options.ghostClass:c.options.ghostClass,!1),ot(Ct,s.ghostClass,!0)),Xt!==h&&h!==fe.active?Xt=h:h===fe.active&&Xt&&(Xt=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===r&&!i.animated)&&(qt=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(){Lt=mt(Ct),Bt=mt(Ct,s.draggable),Dt({sortable:h,name:"change",toEl:r,newIndex:Lt,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;Lt=mt(Ct),Bt=mt(Ct,n.draggable),Et("drop",this,{evt:t}),xt=Ct&&Ct.parentNode,Lt=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(),z&&at(document.body,"user-select",""),at(Ct,"transform",""),t&&(Gt&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),Nt&&Nt.parentNode&&Nt.parentNode.removeChild(Nt),(Ot===xt||Xt&&"clone"!==Xt.lastPutMode)&&Mt&&Mt.parentNode&&Mt.parentNode.removeChild(Mt),Ct&&(this.nativeDraggable&&K(Ct,"dragend",this),be(Ct),Ct.style["will-change"]="",Gt&&!Kt&&ot(Ct,Xt?Xt.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?(Lt>=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})),Xt&&Xt.save()):Lt!==At&&Lt>=0&&(Dt({sortable:this,name:"update",toEl:xt,originalEvent:t}),Dt({sortable:this,name:"sort",toEl:xt,originalEvent:t})),fe.active&&(null!=Lt&&-1!==Lt||(Lt=At,Bt=Ft),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=kt=Yt=jt=Gt=Lt=Bt=At=Ft=qt=Ut=Xt=Rt=fe.dragged=fe.ghost=fe.clone=fe.active=null,ae.forEach((function(t){t.checked=!0})),ae.length=Ht=Zt=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,a=n.length,r=this.options;o{const e=t.target;this.name(e.value),this.slug((0,Ve.slug)(e.value))}})),50),t.add("slug",m("div",{className:"Form-group"},m("label",null,a().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,a().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,a().translator.trans("flarum-tags.admin.edit_tag.color_label")),m(qe(),{className:"FormControl",placeholder:"#aaaaaa",bidi:this.color})),20),t.add("icon",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.icon_label")),m("div",{className:"helpText"},a().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}),a().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},a().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)},a().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()(a().translator.trans("flarum-tags.admin.edit_tag.delete_tag_confirmation")))){const t=a().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()}}}function nn(t){return m("li",{"data-id":t.id(),style:{color:t.color()}},m("div",{className:"TagListItem-info"},(0,b.Z)(t),m("span",{className:"TagListItem-name"},t.name()),m(g(),{className:"Button Button--link",icon:"fas fa-pencil-alt",onclick:()=>a().modal.show(en,{model:t})})),!t.isChild()&&null!==t.position()&&m("ol",{className:"TagListItem-children TagList"},(0,y.Z)(a().store.all("tags")).filter((e=>e.parent()===t)).map(nn)))}flarum.reg.add("flarum-tags","admin/components/EditTagModal",en);class on extends(Xe()){oninit(t){super.oninit(t),this.forcedRefreshKey=0,this.loading=!0,a().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),r=(0,y.Z)(a().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("div",{className:"SettingsGroups"},m("div",{className:"TagGroup"},m("label",null,a().translator.trans("flarum-tags.admin.tags.primary_heading")),m("ol",{className:"TagList TagList--primary"},r.filter((t=>null!==t.position()&&!t.isChild())).map(nn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>a().modal.show(en,{primary:!0})},a().translator.trans("flarum-tags.admin.tags.create_primary_tag_button"))),m("div",{className:"TagGroup TagGroup--secondary"},m("label",null,a().translator.trans("flarum-tags.admin.tags.secondary_heading")),m("ul",{className:"TagList"},r.filter((t=>null===t.position())).sort(((t,e)=>t.name().localeCompare(e.name()))).map(nn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>a().modal.show(en,{primary:!1})},a().translator.trans("flarum-tags.admin.tags.create_secondary_tag_button"))),m(Ze(),{label:a().translator.trans("flarum-tags.admin.tags.settings_heading")},m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.tag_settings.required_primary_heading")),m("div",{className:"helpText"},a().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:je()("value",this.setMinTags.bind(this,t,e))}),a().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,a().translator.trans("flarum-tags.admin.tag_settings.required_secondary_heading")),m("div",{className:"helpText"},a().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:je()("value",this.setMinTags.bind(this,n,o))}),a().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,a().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&&a().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=a().store.getById("tags",t.id);n.pushData({attributes:{position:e,isChild:!1},relationships:{parent:null}}),t.children.forEach(((t,e)=>{a().store.getById("tags",t).pushData({attributes:{position:e,isChild:!0},relationships:{parent:n}})}))})),a().request({url:a().forum.attribute("apiUrl")+"/tags/order",method:"POST",body:{order:e}}),this.forcedRefreshKey++,m.redraw()}}flarum.reg.add("flarum-tags","admin/components/TagsPage",on);var an=n(351),rn=n.n(an);class sn{constructor(){(0,N.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(rn().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),null!=this.loadedIncludes||(this.loadedIncludes=new Set),rn().store.find("tags",{include:t.join(",")}).then((e=>(t.forEach((t=>this.loadedIncludes.add(t))),e)))}}flarum.reg.add("flarum-tags","common/states/TagListState",sn);const ln=flarum.reg.get("core","common/extenders");var cn=n.n(ln);const un=flarum.reg.get("core","common/utils/computed");var dn=n.n(un);const mn=flarum.reg.get("core","common/Model");var hn=n.n(mn);class gn extends(hn()){name(){return hn().attribute("name").call(this)}slug(){return hn().attribute("slug").call(this)}description(){return hn().attribute("description").call(this)}color(){return hn().attribute("color").call(this)}backgroundUrl(){return hn().attribute("backgroundUrl").call(this)}backgroundMode(){return hn().attribute("backgroundMode").call(this)}icon(){return hn().attribute("icon").call(this)}position(){return hn().attribute("position").call(this)}parent(){return hn().hasOne("parent").call(this)}children(){return hn().hasMany("children").call(this)}defaultSort(){return hn().attribute("defaultSort").call(this)}isChild(){return hn().attribute("isChild").call(this)}isHidden(){return hn().attribute("isHidden").call(this)}discussionCount(){return hn().attribute("discussionCount").call(this)}lastPostedAt(){return hn().attribute("lastPostedAt",hn().transformDate).call(this)}lastPostedDiscussion(){return hn().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return hn().attribute("isRestricted").call(this)}canStartDiscussion(){return hn().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return hn().attribute("canAddToDiscussion").call(this)}isPrimary(){return dn()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",gn);const pn=[(new(cn().Store)).add("tags",gn)];a().initializers.add("flarum-tags",(t=>{t.tagList=new sn,t.extensionData.for("flarum-tags").registerPage(on),(0,r.extend)(s().prototype,"oninit",(function(){this.loading=!0})),(0,r.extend)(s().prototype,"oncreate",(function(){a().tagList.load().then((()=>{this.loading=!1,m.redraw()}))})),(0,r.override)(s().prototype,"view",(function(t,e){return this.loading?m(f(),null):t(e)})),(0,r.override)(a(),"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,r.extend)(s().prototype,"scopeItems",(t=>{(0,y.Z)(a().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,r.extend)(s().prototype,"scopeControlItems",(t=>{const e=(0,y.Z)(a().store.all("tags").filter((t=>!t.isRestricted())));e.length&&t.add("tag",m(d(),{className:"Dropdown--restrictByTag",buttonClassName:"Button Button--text",label:a().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()])))))})),_(),S(),(0,r.extend)(s().prototype,"startItems",(t=>{t.add("allowTagChange",{icon:"fas fa-tag",label:a().translator.trans("flarum-tags.admin.permissions.allow_edit_tags_label"),setting:()=>{const t=parseInt(a().data.settings.allow_tag_change,10);return m(D(),{defaultLabel:t?a().translator.trans("core.admin.permissions_controls.allow_some_minutes_button",{count:t}):a().translator.trans("core.admin.permissions_controls.allow_indefinitely_button"),key:"allow_tag_change",options:[{value:"-1",label:a().translator.trans("core.admin.permissions_controls.allow_indefinitely_button")},{value:"10",label:a().translator.trans("core.admin.permissions_controls.allow_ten_minutes_button")},{value:"reply",label:a().translator.trans("core.admin.permissions_controls.allow_until_reply_button")}]})}},90)})),(0,r.extend)(x().prototype,"customSettingComponents",(function(t){t.add("flarum-tags.select-tags",(t=>m(A,Object.assign({},t,{settingValue:this.settings[t.setting]}))))}))}))},974:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var o=n(836),a=n.n(o);function r(t,e,n){void 0===e&&(e={}),void 0===n&&(n={});const o=t&&t.icon(),{useColor:r=!0}=n;return e.className=a()([e.className,"icon text-colored",o?t.icon():"TagIcon"]),t&&r?(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",r)},924:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var o=n(780),a=n.n(o),r=n(678),i=n.n(r),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=a()(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 a=t.parent(),r=e.parent();return a===r?n-o:a&&r?a.position()-r.position():a?a===e?1:a.position()-o:r?r===t?-1:n-r.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 a(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 a=n.call(t,e);if("object"!==o(a))return a;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:()=>a})}},o={};function a(t){var e=o[t];if(void 0!==e)return e.exports;var r=o[t]={exports:{}};return n[t](r,r.exports,a),r.exports}a.m=n,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.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,n)=>(a.f[n](t,e),e)),[])),a.u=t=>"common/components/TagSelectionModal.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=(n,o,r,i)=>{if(t[n])t[n].push(o);else{var s,l;if(void 0!==r)for(var c=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(h);var a=t[n];if(delete t[n],s.parentNode&&s.parentNode.removeChild(s),a&&a.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)}},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 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(/\/[^\/]+$/,"/"),a.p=t})(),a.f.compat=(t,e)=>{const n=a.l;a.l=flarum.reg.loadChunk.bind(flarum.reg,n)},(()=>{var t={328:0};a.f.j=(e,n)=>{var o=a.o(t,e)?t[e]:void 0;if(0!==o)if(o)n.push(o[2]);else{var r=new Promise(((n,a)=>o=t[e]=[n,a]));n.push(o[2]=r);var i=a.p+a.u(e),s=new Error;a.l(i,(n=>{if(a.o(t,e)&&(0!==(o=t[e])&&(t[e]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",s.name="ChunkLoadError",s.type=r,s.request=i,o[1](s)}}),"chunk-"+e,e)}};var e=(e,n)=>{var o,r,[i,s,l]=n,c=0;if(i.some((e=>0!==t[e]))){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);l&&l(a)}for(e&&e(n);c{"use strict";a.r(r),a.d(r,{extend:()=>n.l});var t=a(270),e={};for(const n in t)"default"!==n&&(e[n]=()=>t[n]);a.d(r,e);var n=a(949)})(),module.exports=r})(); //# 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 3f4ac859dd..e61710cfbf 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":";UAAIA,EACAC,kDCDJ,MAAM,EAA+BC,OAAOC,IAAIC,IAAI,OAAQ,0BCA5D,MAAM,EAA+BF,OAAOC,IAAIC,IAAI,OAAQ,iBCAtD,EAA+BF,OAAOC,IAAIC,IAAI,OAAQ,gDCA5D,MAAM,EAA+BF,OAAOC,IAAIC,IAAI,OAAQ,oDCA5D,MAAM,EAA+BF,OAAOC,IAAIC,IAAI,OAAQ,0GCA7C,SAAS,IACtBC,IAAIC,cAAcC,IAAI,eAAeC,mBAAmB,CACtDC,KAAM,aACNC,MAAOL,IAAIM,WAAWC,MAAM,uDAC5BC,WAAY,kBACX,WAAY,IAAIL,mBAAmB,CACpCC,KAAM,cACNC,MAAOL,IAAIM,WAAWC,MAAM,yDAC5BC,WAAY,mBACX,QAAS,GACd,CCVA,MAAM,EAA+BX,OAAOC,IAAIC,IAAI,OAAQ,4CCE7C,SAAS,KACtB,IAAAU,QAAO,cAAsB,iBAAiBC,IAC5CA,EAAMC,IAAI,OAAQ,CAChBC,KAAM,QACNP,MAAOL,IAAIM,WAAWC,MAAM,wCAC5B,GAEN,CCTA,MAAM,EAA+BV,OAAOC,IAAIC,IAAI,OAAQ,iDCA5D,MAAM,EAA+BF,OAAOC,IAAIC,IAAI,OAAQ,iGCI7C,SAASc,EAAUC,EAAMC,QACxB,IAAVA,IACFA,EAAQ,CAAC,GAEX,MAAMC,EAAW,IACX,KACJC,KACGC,GACDH,EAaJ,OAZAG,EAAWC,UAAY,IAAU,YAAaD,EAAWC,WACrDL,GACF,EAAAM,EAAA,GAASN,GAAMO,SAAQC,KACjBA,GAAuB,IAAhBR,EAAKS,SACdP,EAASQ,MAAK,EAAAC,EAAA,GAASH,EAAK,CAC1BL,SAEJ,IAGFD,EAASQ,MAAK,EAAAC,EAAA,MAETC,EAAE,OAAQR,EAAYF,EAC/B,CACAnB,OAAOC,IAAIa,IAAI,cAAe,2BAA4BE,GCrB3C,MAAMc,UAAmC,KACtDC,cACEC,SAASC,YACT,OAAgBC,KAAM,OAAQ,KAC9B,OAAgBA,KAAM,UAAU,EAClC,CACAC,OACE,MAAMC,EAAQC,KAAKC,MAAMJ,KAAKhB,MAAMqB,gBAAkB,MAQtD,OAPKL,KAAKM,QACR,iBAAiB,CAAC,WAAWC,MAAKxB,IAChCiB,KAAKjB,KAAOA,EAAKyB,QAAOjB,GAAOW,EAAMO,SAASlB,EAAImB,QAClDV,KAAKM,QAAS,EACdX,EAAEgB,QAAQ,IAGPhB,EAAE,MAAO,CACdP,UAAW,yCACVO,EAAE,QAAS,KAAMK,KAAKhB,MAAMV,OAAQ0B,KAAKhB,MAAM4B,MAAQjB,EAAE,IAAK,CAC/DP,UAAW,YACVY,KAAKhB,MAAM4B,MAAQZ,KAAKM,OAGtBX,EAAE,IAAQ,CACbP,UAAW,sBACXyB,QAAS,IAAM,gBAAe,IAAM,8BAA6I,CAC/KC,aAAcd,KAAKjB,KACnBgC,SAAUhC,IACRiB,KAAKjB,KAAOA,EACZiB,KAAKhB,MAAMqB,aAAaF,KAAKa,UAAUjC,EAAKkC,KAAI1B,GAAOA,EAAImB,QAAO,KAEjEV,KAAKhB,MAAMkC,WAEblB,KAAKjB,KAAKS,OAASV,EAAUkB,KAAKjB,MAAQY,EAAE,OAAQ,CACvDP,UAAW,qBACV,qBAAqB,4CAfYO,EAAE,IAAkB,CACtDwB,KAAM,QACNC,QAAS,WAcb,ECnCF,SAASC,EAAQC,EAAQC,GACvB,IAAIC,EAAOC,OAAOD,KAAKF,GAEvB,GAAIG,OAAOC,sBAAuB,CAChC,IAAIC,EAAUF,OAAOC,sBAAsBJ,GAEvCC,IACFI,EAAUA,EAAQnB,QAAO,SAAUoB,GACjC,OAAOH,OAAOI,yBAAyBP,EAAQM,GAAKE,UACtD,KAGFN,EAAK/B,KAAKsC,MAAMP,EAAMG,EACxB,CAEA,OAAOH,CACT,CAEA,SAASQ,EAAeC,GACtB,IAAK,IAAIC,EAAI,EAAGA,EAAInC,UAAUP,OAAQ0C,IAAK,CACzC,IAAIC,EAAyB,MAAhBpC,UAAUmC,GAAanC,UAAUmC,GAAK,CAAC,EAEhDA,EAAI,EACNb,EAAQI,OAAOU,IAAS,GAAM7C,SAAQ,SAAU8C,GAC9CC,EAAgBJ,EAAQG,EAAKD,EAAOC,GACtC,IACSX,OAAOa,0BAChBb,OAAOc,iBAAiBN,EAAQR,OAAOa,0BAA0BH,IAEjEd,EAAQI,OAAOU,IAAS7C,SAAQ,SAAU8C,GACxCX,OAAOe,eAAeP,EAAQG,EAAKX,OAAOI,yBAAyBM,EAAQC,GAC7E,GAEJ,CAEA,OAAOH,CACT,CAEA,SAASQ,EAAQC,GAaf,OATED,EADoB,mBAAXE,QAAoD,iBAApBA,OAAOC,SACtC,SAAUF,GAClB,cAAcA,CAChB,EAEU,SAAUA,GAClB,OAAOA,GAAyB,mBAAXC,QAAyBD,EAAI7C,cAAgB8C,QAAUD,IAAQC,OAAOE,UAAY,gBAAkBH,CAC3H,EAGKD,EAAQC,EACjB,CAEA,SAASL,EAAgBK,EAAKN,EAAKlC,GAYjC,OAXIkC,KAAOM,EACTjB,OAAOe,eAAeE,EAAKN,EAAK,CAC9BlC,MAAOA,EACP4B,YAAY,EACZgB,cAAc,EACdC,UAAU,IAGZL,EAAIN,GAAOlC,EAGNwC,CACT,CAEA,SAASM,IAeP,OAdAA,EAAWvB,OAAOwB,QAAU,SAAUhB,GACpC,IAAK,IAAIC,EAAI,EAAGA,EAAInC,UAAUP,OAAQ0C,IAAK,CACzC,IAAIC,EAASpC,UAAUmC,GAEvB,IAAK,IAAIE,KAAOD,EACVV,OAAOoB,UAAUK,eAAeC,KAAKhB,EAAQC,KAC/CH,EAAOG,GAAOD,EAAOC,GAG3B,CAEA,OAAOH,CACT,EAEOe,EAASjB,MAAM/B,KAAMD,UAC9B,CAiBA,SAASqD,EAAyBjB,EAAQkB,GACxC,GAAc,MAAVlB,EAAgB,MAAO,CAAC,EAE5B,IAEIC,EAAKF,EAFLD,EAlBN,SAAuCE,EAAQkB,GAC7C,GAAc,MAAVlB,EAAgB,MAAO,CAAC,EAC5B,IAEIC,EAAKF,EAFLD,EAAS,CAAC,EACVqB,EAAa7B,OAAOD,KAAKW,GAG7B,IAAKD,EAAI,EAAGA,EAAIoB,EAAW9D,OAAQ0C,IACjCE,EAAMkB,EAAWpB,GACbmB,EAASE,QAAQnB,IAAQ,IAC7BH,EAAOG,GAAOD,EAAOC,IAGvB,OAAOH,CACT,CAKeuB,CAA8BrB,EAAQkB,GAInD,GAAI5B,OAAOC,sBAAuB,CAChC,IAAI+B,EAAmBhC,OAAOC,sBAAsBS,GAEpD,IAAKD,EAAI,EAAGA,EAAIuB,EAAiBjE,OAAQ0C,IACvCE,EAAMqB,EAAiBvB,GACnBmB,EAASE,QAAQnB,IAAQ,GACxBX,OAAOoB,UAAUa,qBAAqBP,KAAKhB,EAAQC,KACxDH,EAAOG,GAAOD,EAAOC,GAEzB,CAEA,OAAOH,CACT,CAqCA,SAAS0B,EAAUC,GACjB,GAAsB,oBAAXC,QAA0BA,OAAOC,UAC1C,QAAuBA,UAAUH,UAAUI,MAAMH,EAErD,CD7HA9F,OAAOC,IAAIa,IAAI,cAAe,8CAA+CgB,GAA4B9B,OAAOC,IAAIiG,eAAe,MAAO,MAAO,cAAe,uCC+HhK,IAAIC,EAAaN,EAAU,yDACvBO,EAAOP,EAAU,SACjBQ,EAAUR,EAAU,YACpBS,EAAST,EAAU,aAAeA,EAAU,aAAeA,EAAU,YACrEU,EAAMV,EAAU,mBAChBW,EAAmBX,EAAU,YAAcA,EAAU,YAErDY,EAAc,CAChBC,SAAS,EACTC,SAAS,GAGX,SAASC,EAAGC,EAAIC,EAAOC,GACrBF,EAAGG,iBAAiBF,EAAOC,GAAKZ,GAAcM,EAChD,CAEA,SAASQ,EAAIJ,EAAIC,EAAOC,GACtBF,EAAGK,oBAAoBJ,EAAOC,GAAKZ,GAAcM,EACnD,CAEA,SAASU,EAETN,EAEAO,GACE,GAAKA,EAAL,CAGA,GAFgB,MAAhBA,EAAS,KAAeA,EAAWA,EAASC,UAAU,IAElDR,EACF,IACE,GAAIA,EAAGM,QACL,OAAON,EAAGM,QAAQC,GACb,GAAIP,EAAGS,kBACZ,OAAOT,EAAGS,kBAAkBF,GACvB,GAAIP,EAAGU,sBACZ,OAAOV,EAAGU,sBAAsBH,EAIpC,CAFE,MAAOI,GACP,OAAO,CACT,CAGF,OAAO,CAjBc,CAkBvB,CAEA,SAASC,EAAgBZ,GACvB,OAAOA,EAAGa,MAAQb,IAAOc,UAAYd,EAAGa,KAAKE,SAAWf,EAAGa,KAAOb,EAAGgB,UACvE,CAEA,SAASC,GAETjB,EAEAO,EAEAW,EAAKC,GACH,GAAInB,EAAI,CACNkB,EAAMA,GAAOJ,SAEb,EAAG,CACD,GAAgB,MAAZP,IAAqC,MAAhBA,EAAS,GAAaP,EAAGgB,aAAeE,GAAOZ,EAAQN,EAAIO,GAAYD,EAAQN,EAAIO,KAAcY,GAAcnB,IAAOkB,EAC7I,OAAOlB,EAGT,GAAIA,IAAOkB,EAAK,KAElB,OAASlB,EAAKY,EAAgBZ,GAChC,CAEA,OAAO,IACT,CAEA,IAgWIoB,GAhWAC,GAAU,OAEd,SAASC,GAAYtB,EAAIuB,EAAMC,GAC7B,GAAIxB,GAAMuB,EACR,GAAIvB,EAAGyB,UACLzB,EAAGyB,UAAUD,EAAQ,MAAQ,UAAUD,OAClC,CACL,IAAI9G,GAAa,IAAMuF,EAAGvF,UAAY,KAAKiH,QAAQL,GAAS,KAAKK,QAAQ,IAAMH,EAAO,IAAK,KAC3FvB,EAAGvF,WAAaA,GAAa+G,EAAQ,IAAMD,EAAO,KAAKG,QAAQL,GAAS,IAC1E,CAEJ,CAEA,SAASM,GAAI3B,EAAI4B,EAAMC,GACrB,IAAIC,EAAQ9B,GAAMA,EAAG8B,MAErB,GAAIA,EAAO,CACT,QAAY,IAARD,EAOF,OANIf,SAASiB,aAAejB,SAASiB,YAAYC,iBAC/CH,EAAMf,SAASiB,YAAYC,iBAAiBhC,EAAI,IACvCA,EAAGiC,eACZJ,EAAM7B,EAAGiC,mBAGK,IAATL,EAAkBC,EAAMA,EAAID,GAE7BA,KAAQE,IAAsC,IAA5BF,EAAKhD,QAAQ,YACnCgD,EAAO,WAAaA,GAGtBE,EAAMF,GAAQC,GAAsB,iBAARA,EAAmB,GAAK,KAExD,CACF,CAEA,SAASK,GAAOlC,EAAImC,GAClB,IAAIC,EAAoB,GAExB,GAAkB,iBAAPpC,EACToC,EAAoBpC,OAEpB,EAAG,CACD,IAAIqC,EAAYV,GAAI3B,EAAI,aAEpBqC,GAA2B,SAAdA,IACfD,EAAoBC,EAAY,IAAMD,EAI1C,QAAUD,IAAanC,EAAKA,EAAGgB,aAGjC,IAAIsB,EAAWpD,OAAOqD,WAAarD,OAAOsD,iBAAmBtD,OAAOuD,WAAavD,OAAOwD,YAGxF,OAAOJ,GAAY,IAAIA,EAASF,EAClC,CAEA,SAASO,GAAKzB,EAAK0B,EAAS3E,GAC1B,GAAIiD,EAAK,CACP,IAAI2B,EAAO3B,EAAI4B,qBAAqBF,GAChCrF,EAAI,EACJwF,EAAIF,EAAKhI,OAEb,GAAIoD,EACF,KAAOV,EAAIwF,EAAGxF,IACZU,EAAS4E,EAAKtF,GAAIA,GAItB,OAAOsF,CACT,CAEA,MAAO,EACT,CAEA,SAASG,KAGP,OAFuBlC,SAASmC,kBAKvBnC,SAASoC,eAEpB,CAYA,SAASC,GAAQnD,EAAIoD,EAA2BC,EAA2BC,EAAWC,GACpF,GAAKvD,EAAGwD,uBAAyBxD,IAAOd,OAAxC,CACA,IAAIuE,EAAQC,EAAKC,EAAMC,EAAQC,EAAOC,EAAQC,EAmB9C,GAjBI/D,IAAOd,QAAUc,EAAGgB,YAAchB,IAAOgD,MAE3CU,GADAD,EAASzD,EAAGwD,yBACCE,IACbC,EAAOF,EAAOE,KACdC,EAASH,EAAOG,OAChBC,EAAQJ,EAAOI,MACfC,EAASL,EAAOK,OAChBC,EAAQN,EAAOM,QAEfL,EAAM,EACNC,EAAO,EACPC,EAAS1E,OAAO8E,YAChBH,EAAQ3E,OAAO+E,WACfH,EAAS5E,OAAO8E,YAChBD,EAAQ7E,OAAO+E,aAGZb,GAA6BC,IAA8BrD,IAAOd,SAErEqE,EAAYA,GAAavD,EAAGgB,YAGvB1B,GACH,GACE,GAAIiE,GAAaA,EAAUC,wBAA0D,SAAhC7B,GAAI4B,EAAW,cAA2BF,GAA4D,WAA/B1B,GAAI4B,EAAW,aAA2B,CACpK,IAAIW,EAAgBX,EAAUC,wBAE9BE,GAAOQ,EAAcR,IAAMS,SAASxC,GAAI4B,EAAW,qBACnDI,GAAQO,EAAcP,KAAOQ,SAASxC,GAAI4B,EAAW,sBACrDK,EAASF,EAAMD,EAAOK,OACtBD,EAAQF,EAAOF,EAAOM,MACtB,KACF,QAGOR,EAAYA,EAAUvC,YAInC,GAAIsC,GAAatD,IAAOd,OAAQ,CAE9B,IAAIkF,EAAWlC,GAAOqB,GAAavD,GAC/BqE,EAASD,GAAYA,EAASE,EAC9BC,EAASH,GAAYA,EAASI,EAE9BJ,IAKFR,GAJAF,GAAOa,IAGPT,GAAUS,GAEVV,GAJAF,GAAQU,IACRN,GAASM,GAKb,CAEA,MAAO,CACLX,IAAKA,EACLC,KAAMA,EACNC,OAAQA,EACRC,MAAOA,EACPE,MAAOA,EACPD,OAAQA,EAhE4C,CAkExD,CAUA,SAASW,GAAezE,EAAI0E,EAAQC,GAKlC,IAJA,IAAIC,EAASC,GAA2B7E,GAAI,GACxC8E,EAAY3B,GAAQnD,GAAI0E,GAGrBE,GAAQ,CACb,IAAIG,EAAgB5B,GAAQyB,GAAQD,GASpC,KANmB,QAAfA,GAAuC,SAAfA,EAChBG,GAAaC,EAEbD,GAAaC,GAGX,OAAOH,EACrB,GAAIA,IAAW5B,KAA6B,MAC5C4B,EAASC,GAA2BD,GAAQ,EAC9C,CAEA,OAAO,CACT,CAWA,SAASI,GAAShF,EAAIiF,EAAU1I,EAAS2I,GAKvC,IAJA,IAAIC,EAAe,EACf5H,EAAI,EACJjD,EAAW0F,EAAG1F,SAEXiD,EAAIjD,EAASO,QAAQ,CAC1B,GAAkC,SAA9BP,EAASiD,GAAGuE,MAAMrF,SAAsBnC,EAASiD,KAAO6H,GAASC,QAAUH,GAAiB5K,EAASiD,KAAO6H,GAASE,UAAYrE,GAAQ3G,EAASiD,GAAIhB,EAAQgJ,UAAWvF,GAAI,GAAQ,CACvL,GAAImF,IAAiBF,EACnB,OAAO3K,EAASiD,GAGlB4H,GACF,CAEA5H,GACF,CAEA,OAAO,IACT,CASA,SAASiI,GAAUxF,EAAIO,GAGrB,IAFA,IAAIkF,EAAOzF,EAAG0F,iBAEPD,IAASA,IAASL,GAASC,OAAkC,SAAzB1D,GAAI8D,EAAM,YAAyBlF,IAAaD,EAAQmF,EAAMlF,KACvGkF,EAAOA,EAAKE,uBAGd,OAAOF,GAAQ,IACjB,CAUA,SAASG,GAAM5F,EAAIO,GACjB,IAAIqF,EAAQ,EAEZ,IAAK5F,IAAOA,EAAGgB,WACb,OAAQ,EAKV,KAAOhB,EAAKA,EAAG2F,wBACqB,aAA9B3F,EAAG6F,SAASC,eAAgC9F,IAAOoF,GAASW,OAAWxF,IAAYD,EAAQN,EAAIO,IACjGqF,IAIJ,OAAOA,CACT,CASA,SAASI,GAAwBhG,GAC/B,IAAIiG,EAAa,EACbC,EAAY,EACZC,EAAcnD,KAElB,GAAIhD,EACF,EAAG,CACD,IAAIoE,EAAWlC,GAAOlC,GAClBqE,EAASD,EAASE,EAClBC,EAASH,EAASI,EACtByB,GAAcjG,EAAGoG,WAAa/B,EAC9B6B,GAAalG,EAAGqG,UAAY9B,CAC9B,OAASvE,IAAOmG,IAAgBnG,EAAKA,EAAGgB,aAG1C,MAAO,CAACiF,EAAYC,EACtB,CAqBA,SAASrB,GAA2B7E,EAAIsG,GAEtC,IAAKtG,IAAOA,EAAGwD,sBAAuB,OAAOR,KAC7C,IAAIuD,EAAOvG,EACPwG,GAAU,EAEd,GAEE,GAAID,EAAKE,YAAcF,EAAKG,aAAeH,EAAKI,aAAeJ,EAAKK,aAAc,CAChF,IAAIC,EAAUlF,GAAI4E,GAElB,GAAIA,EAAKE,YAAcF,EAAKG,cAAqC,QAArBG,EAAQC,WAA4C,UAArBD,EAAQC,YAA0BP,EAAKI,aAAeJ,EAAKK,eAAsC,QAArBC,EAAQE,WAA4C,UAArBF,EAAQE,WAAwB,CACpN,IAAKR,EAAK/C,uBAAyB+C,IAASzF,SAASkG,KAAM,OAAOhE,KAClE,GAAIwD,GAAWF,EAAa,OAAOC,EACnCC,GAAU,CACZ,CACF,QAGOD,EAAOA,EAAKvF,YAErB,OAAOgC,IACT,CAcA,SAASiE,GAAYC,EAAOC,GAC1B,OAAOC,KAAKC,MAAMH,EAAMxD,OAAS0D,KAAKC,MAAMF,EAAMzD,MAAQ0D,KAAKC,MAAMH,EAAMvD,QAAUyD,KAAKC,MAAMF,EAAMxD,OAASyD,KAAKC,MAAMH,EAAMpD,UAAYsD,KAAKC,MAAMF,EAAMrD,SAAWsD,KAAKC,MAAMH,EAAMnD,SAAWqD,KAAKC,MAAMF,EAAMpD,MACvN,CAIA,SAASuD,GAASC,EAAUC,GAC1B,OAAO,WACL,IAAKpG,GAAkB,CACrB,IAAIqG,EAAOrM,UACPsM,EAAQrM,KAEQ,IAAhBoM,EAAK5M,OACP0M,EAAS/I,KAAKkJ,EAAOD,EAAK,IAE1BF,EAASnK,MAAMsK,EAAOD,GAGxBrG,GAAmBuG,YAAW,WAC5BvG,QAAmB,CACrB,GAAGoG,EACL,CACF,CACF,CAOA,SAASI,GAAS5H,EAAI6H,EAAGC,GACvB9H,EAAGoG,YAAcyB,EACjB7H,EAAGqG,WAAayB,CAClB,CAEA,SAAS/B,GAAM/F,GACb,IAAI+H,EAAU7I,OAAO6I,QACjBC,EAAI9I,OAAO+I,QAAU/I,OAAOgJ,MAEhC,OAAIH,GAAWA,EAAQI,IACdJ,EAAQI,IAAInI,GAAIoI,WAAU,GACxBJ,EACFA,EAAEhI,GAAI+F,OAAM,GAAM,GAElB/F,EAAGoI,WAAU,EAExB,CAkBA,IAAIC,GAAU,YAAa,IAAIC,MAAOC,UAyJtC,IAAIC,GAAU,GACVC,GAAW,CACbC,qBAAqB,GAEnBC,GAAgB,CAClBC,MAAO,SAAeC,GAEpB,IAAK,IAAIC,KAAUL,GACbA,GAASlK,eAAeuK,MAAaA,KAAUD,KACjDA,EAAOC,GAAUL,GAASK,IAI9BN,GAAQ7N,SAAQ,SAAUoO,GACxB,GAAIA,EAAEC,aAAeH,EAAOG,WAC1B,KAAM,iCAAiCC,OAAOJ,EAAOG,WAAY,kBAErE,IACAR,GAAQ1N,KAAK+N,EACf,EACAK,YAAa,SAAqBC,EAAWC,EAAUC,GACrD,IAAI3B,EAAQrM,KAEZA,KAAKiO,eAAgB,EAErBD,EAAIE,OAAS,WACX7B,EAAM4B,eAAgB,CACxB,EAEA,IAAIE,EAAkBL,EAAY,SAClCX,GAAQ7N,SAAQ,SAAUkO,GACnBO,EAASP,EAAOG,cAEjBI,EAASP,EAAOG,YAAYQ,IAC9BJ,EAASP,EAAOG,YAAYQ,GAAiBnM,EAAe,CAC1D+L,SAAUA,GACTC,IAKDD,EAAS7M,QAAQsM,EAAOG,aAAeI,EAASP,EAAOG,YAAYG,IACrEC,EAASP,EAAOG,YAAYG,GAAW9L,EAAe,CACpD+L,SAAUA,GACTC,IAEP,GACF,EACAI,kBAAmB,SAA2BL,EAAUpJ,EAAIyI,EAAUlM,GAYpE,IAAK,IAAIuM,KAXTN,GAAQ7N,SAAQ,SAAUkO,GACxB,IAAIG,EAAaH,EAAOG,WACxB,GAAKI,EAAS7M,QAAQyM,IAAgBH,EAAOH,oBAA7C,CACA,IAAIgB,EAAc,IAAIb,EAAOO,EAAUpJ,EAAIoJ,EAAS7M,SACpDmN,EAAYN,SAAWA,EACvBM,EAAYnN,QAAU6M,EAAS7M,QAC/B6M,EAASJ,GAAcU,EAEvBrL,EAASoK,EAAUiB,EAAYjB,SANyC,CAO1E,IAEmBW,EAAS7M,QAC1B,GAAK6M,EAAS7M,QAAQgC,eAAeuK,GAArC,CACA,IAAIa,EAAWtO,KAAKuO,aAAaR,EAAUN,EAAQM,EAAS7M,QAAQuM,SAE5C,IAAba,IACTP,EAAS7M,QAAQuM,GAAUa,EAJyB,CAO1D,EACAE,mBAAoB,SAA4BtI,EAAM6H,GACpD,IAAIU,EAAkB,CAAC,EAMvB,OALAtB,GAAQ7N,SAAQ,SAAUkO,GACc,mBAA3BA,EAAOiB,iBAElBzL,EAASyL,EAAiBjB,EAAOiB,gBAAgBtL,KAAK4K,EAASP,EAAOG,YAAazH,GACrF,IACOuI,CACT,EACAF,aAAc,SAAsBR,EAAU7H,EAAMhG,GAClD,IAAIwO,EASJ,OARAvB,GAAQ7N,SAAQ,SAAUkO,GAEnBO,EAASP,EAAOG,aAEjBH,EAAOmB,iBAA2D,mBAAjCnB,EAAOmB,gBAAgBzI,KAC1DwI,EAAgBlB,EAAOmB,gBAAgBzI,GAAM/C,KAAK4K,EAASP,EAAOG,YAAazN,GAEnF,IACOwO,CACT,GA4DF,IAAIE,GAAY,CAAC,OAEbf,GAAc,SAAqBC,EAAWC,GAChD,IAAIc,EAAO9O,UAAUP,OAAS,QAAsBsP,IAAjB/O,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAC5EgP,EAAgBF,EAAKb,IACrBgB,EAAO5L,EAAyByL,EAAMD,IAE1CtB,GAAcO,YAAYoB,KAAKlF,GAA/BuD,CAAyCQ,EAAWC,EAAU/L,EAAe,CAC3EkN,OAAQA,GACRC,SAAUA,GACVC,QAASA,GACTC,OAAQA,GACRC,OAAQA,GACRC,WAAYA,GACZC,QAASA,GACTC,YAAaA,GACbC,YAAaC,GACbC,YAAaA,GACbC,eAAgB9F,GAAS+F,OACzBf,cAAeA,EACfgB,SAAUA,GACVC,kBAAmBA,GACnBC,SAAUA,GACVC,kBAAmBA,GACnBC,mBAAoBC,GACpBC,qBAAsBC,GACtBC,eAAgB,WACdd,IAAc,CAChB,EACAe,cAAe,WACbf,IAAc,CAChB,EACAgB,sBAAuB,SAA+BvK,GACpDwK,GAAe,CACb3C,SAAUA,EACV7H,KAAMA,EACN6I,cAAeA,GAEnB,GACCC,GACL,EAEA,SAAS0B,GAAeC,IAnGxB,SAAuB9B,GACrB,IAAId,EAAWc,EAAKd,SAChBsB,EAASR,EAAKQ,OACdnJ,EAAO2I,EAAK3I,KACZ0K,EAAW/B,EAAK+B,SAChBpB,EAAUX,EAAKW,QACfqB,EAAOhC,EAAKgC,KACZC,EAASjC,EAAKiC,OACdf,EAAWlB,EAAKkB,SAChBE,EAAWpB,EAAKoB,SAChBD,EAAoBnB,EAAKmB,kBACzBE,EAAoBrB,EAAKqB,kBACzBnB,EAAgBF,EAAKE,cACrBa,EAAcf,EAAKe,YACnBmB,EAAuBlC,EAAKkC,qBAEhC,GADAhD,EAAWA,GAAYsB,GAAUA,EAAOrC,IACxC,CACA,IAAIgB,EACA9M,EAAU6M,EAAS7M,QACnB8P,EAAS,KAAO9K,EAAK+K,OAAO,GAAGxG,cAAgBvE,EAAKgL,OAAO,IAE3DrN,OAAOsN,aAAgBlN,GAAeC,GAMxC8J,EAAMvI,SAAS2L,YAAY,UACvBC,UAAUnL,GAAM,GAAM,GAN1B8H,EAAM,IAAImD,YAAYjL,EAAM,CAC1BoL,SAAS,EACTC,YAAY,IAOhBvD,EAAIwD,GAAKX,GAAQxB,EACjBrB,EAAIyD,KAAOX,GAAUzB,EACrBrB,EAAI0D,KAAOd,GAAYvB,EACvBrB,EAAItD,MAAQ8E,EACZxB,EAAI+B,SAAWA,EACf/B,EAAIiC,SAAWA,EACfjC,EAAIgC,kBAAoBA,EACxBhC,EAAIkC,kBAAoBA,EACxBlC,EAAIe,cAAgBA,EACpBf,EAAI2D,SAAW/B,EAAcA,EAAYgC,iBAAc9C,EAEvD,IAAI+C,EAAqB7P,EAAeA,EAAe,CAAC,EAAG+O,GAAuBzD,GAAckB,mBAAmBtI,EAAM6H,IAEzH,IAAK,IAAIN,KAAUoE,EACjB7D,EAAIP,GAAUoE,EAAmBpE,GAG/B4B,GACFA,EAAOyC,cAAc9D,GAGnB9M,EAAQ8P,IACV9P,EAAQ8P,GAAQ7N,KAAK4K,EAAUC,EArCZ,CAuCvB,CA6CE8D,CAAc9P,EAAe,CAC3B4N,YAAaA,GACbJ,QAASA,GACToB,SAAU1B,GACVG,OAAQA,GACRU,SAAUA,GACVC,kBAAmBA,GACnBC,SAAUA,GACVC,kBAAmBA,IAClBS,GACL,CAEA,IAAIzB,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAM,GACAE,GACAD,GACAE,GACA6B,GACAnC,GAIAoC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA1C,GACA2C,GACAC,GAGAC,GAEJC,GAhBIC,IAAsB,EACtBC,IAAkB,EAClBC,GAAY,GAUZC,IAAwB,EACxBC,IAAyB,EAIzBC,GAAmC,GAEvCC,IAAU,EACNC,GAAoB,GAGpBC,GAAqC,oBAAbzN,SACxB0N,GAA0B9O,EAC1B+O,GAAmBlP,GAAQD,EAAa,WAAa,QAEzDoP,GAAmBH,KAAmB5O,IAAqBD,GAAO,cAAeoB,SAAS6N,cAAc,OACpGC,GAA0B,WAC5B,GAAKL,GAAL,CAEA,GAAIjP,EACF,OAAO,EAGT,IAAIU,EAAKc,SAAS6N,cAAc,KAEhC,OADA3O,EAAG8B,MAAM+M,QAAU,sBACe,SAA3B7O,EAAG8B,MAAMgN,aARW,CAS7B,CAV8B,GAW1BC,GAAmB,SAA0B/O,EAAIzD,GACnD,IAAIyS,EAAQrN,GAAI3B,GACZiP,EAAU9K,SAAS6K,EAAMjL,OAASI,SAAS6K,EAAME,aAAe/K,SAAS6K,EAAMG,cAAgBhL,SAAS6K,EAAMI,iBAAmBjL,SAAS6K,EAAMK,kBAChJC,EAAStK,GAAShF,EAAI,EAAGzD,GACzBgT,EAASvK,GAAShF,EAAI,EAAGzD,GACzBiT,EAAgBF,GAAU3N,GAAI2N,GAC9BG,EAAiBF,GAAU5N,GAAI4N,GAC/BG,EAAkBF,GAAiBrL,SAASqL,EAAcG,YAAcxL,SAASqL,EAAcI,aAAezM,GAAQmM,GAAQvL,MAC9H8L,EAAmBJ,GAAkBtL,SAASsL,EAAeE,YAAcxL,SAASsL,EAAeG,aAAezM,GAAQoM,GAAQxL,MAEtI,GAAsB,SAAlBiL,EAAMvS,QACR,MAA+B,WAAxBuS,EAAMc,eAAsD,mBAAxBd,EAAMc,cAAqC,WAAa,aAGrG,GAAsB,SAAlBd,EAAMvS,QACR,OAAOuS,EAAMe,oBAAoBC,MAAM,KAAKnV,QAAU,EAAI,WAAa,aAGzE,GAAIyU,GAAUE,EAAqB,OAAgC,SAA3BA,EAAqB,MAAc,CACzE,IAAIS,EAAgD,SAA3BT,EAAqB,MAAe,OAAS,QACtE,OAAOD,GAAoC,SAAzBE,EAAeS,OAAoBT,EAAeS,QAAUD,EAAmC,aAAb,UACtG,CAEA,OAAOX,IAAqC,UAA1BE,EAAc/S,SAAiD,SAA1B+S,EAAc/S,SAAgD,UAA1B+S,EAAc/S,SAAiD,SAA1B+S,EAAc/S,SAAsBiT,GAAmBT,GAAuC,SAA5BD,EAAMP,KAAgCc,GAAsC,SAA5BP,EAAMP,KAAgCiB,EAAkBG,EAAmBZ,GAAW,WAAa,YACvV,EAgCIkB,GAAgB,SAAuB5T,GACzC,SAAS6T,EAAK7U,EAAO8U,GACnB,OAAO,SAAUxD,EAAIC,EAAMvC,EAAQlB,GACjC,IAAIiH,EAAYzD,EAAGtQ,QAAQgU,MAAMhP,MAAQuL,EAAKvQ,QAAQgU,MAAMhP,MAAQsL,EAAGtQ,QAAQgU,MAAMhP,OAASuL,EAAKvQ,QAAQgU,MAAMhP,KAEjH,GAAa,MAAThG,IAAkB8U,GAAQC,GAG5B,OAAO,EACF,GAAa,MAAT/U,IAA2B,IAAVA,EAC1B,OAAO,EACF,GAAI8U,GAAkB,UAAV9U,EACjB,OAAOA,EACF,GAAqB,mBAAVA,EAChB,OAAO6U,EAAK7U,EAAMsR,EAAIC,EAAMvC,EAAQlB,GAAMgH,EAAnCD,CAAyCvD,EAAIC,EAAMvC,EAAQlB,GAElE,IAAImH,GAAcH,EAAOxD,EAAKC,GAAMvQ,QAAQgU,MAAMhP,KAClD,OAAiB,IAAVhG,GAAmC,iBAAVA,GAAsBA,IAAUiV,GAAcjV,EAAMkV,MAAQlV,EAAMqD,QAAQ4R,IAAe,CAE7H,CACF,CAEA,IAAID,EAAQ,CAAC,EACTG,EAAgBnU,EAAQgU,MAEvBG,GAA2C,UAA1B5S,EAAQ4S,KAC5BA,EAAgB,CACdnP,KAAMmP,IAIVH,EAAMhP,KAAOmP,EAAcnP,KAC3BgP,EAAMI,UAAYP,EAAKM,EAAcL,MAAM,GAC3CE,EAAMK,SAAWR,EAAKM,EAAcG,KACpCN,EAAMO,YAAcJ,EAAcI,YAClCvU,EAAQgU,MAAQA,CAClB,EACI9E,GAAsB,YACnBmD,IAA2BnE,IAC9B9I,GAAI8I,GAAS,UAAW,OAE5B,EACIkB,GAAwB,YACrBiD,IAA2BnE,IAC9B9I,GAAI8I,GAAS,UAAW,GAE5B,EAGI8D,KAAmB5O,GACrBmB,SAASX,iBAAiB,SAAS,SAAUkJ,GAC3C,GAAI2E,GAKF,OAJA3E,EAAI0H,iBACJ1H,EAAI2H,iBAAmB3H,EAAI2H,kBAC3B3H,EAAI4H,0BAA4B5H,EAAI4H,2BACpCjD,IAAkB,GACX,CAEX,IAAG,GAGL,IAAIkD,GAAgC,SAAuC7H,GACzE,GAAIkB,GAAQ,CACVlB,EAAMA,EAAI8H,QAAU9H,EAAI8H,QAAQ,GAAK9H,EAErC,IAAI+H,GAhF2DvJ,EAgFrBwB,EAAIgI,QAhFoBvJ,EAgFXuB,EAAIiI,QA9E7DrD,GAAUsD,MAAK,SAAUnI,GACvB,IAAIoI,EAAYpI,EAASf,IAAS9L,QAAQkV,qBAC1C,GAAKD,IAAahM,GAAU4D,GAA5B,CACA,IAAIsI,EAAOvO,GAAQiG,GACfuI,EAAqB9J,GAAK6J,EAAK/N,KAAO6N,GAAa3J,GAAK6J,EAAK7N,MAAQ2N,EACrEI,EAAmB9J,GAAK4J,EAAKhO,IAAM8N,GAAa1J,GAAK4J,EAAK9N,OAAS4N,EAEvE,OAAIG,GAAsBC,EACjBC,EAAMzI,OADf,CAL6C,CAQ/C,IACOyI,GAqEL,GAAIT,EAAS,CAEX,IAAInR,EAAQ,CAAC,EAEb,IAAK,IAAI1C,KAAK8L,EACRA,EAAI9K,eAAehB,KACrB0C,EAAM1C,GAAK8L,EAAI9L,IAInB0C,EAAM3C,OAAS2C,EAAMyK,OAAS0G,EAC9BnR,EAAM8Q,oBAAiB,EACvB9Q,EAAM+Q,qBAAkB,EAExBI,EAAQ/I,IAASyJ,YAAY7R,EAC/B,CACF,CAlG4B,IAAqC4H,EAAGC,EAChE+J,CAkGN,EAEIE,GAAwB,SAA+B1I,GACrDkB,IACFA,GAAOvJ,WAAWqH,IAAS2J,iBAAiB3I,EAAI/L,OAEpD,EAQA,SAAS8H,GAASpF,EAAIzD,GACpB,IAAMyD,IAAMA,EAAGe,UAA4B,IAAhBf,EAAGe,SAC5B,KAAM,8CAA8CkI,OAAO,CAAC,EAAEgJ,SAASzT,KAAKwB,IAG9E3E,KAAK2E,GAAKA,EAEV3E,KAAKkB,QAAUA,EAAU8B,EAAS,CAAC,EAAG9B,GAEtCyD,EAAGqI,IAAWhN,KACd,IA1jBI6W,EADAC,EA2jBA1J,EAAW,CACb8H,MAAO,KACP6B,MAAM,EACNC,UAAU,EACVC,MAAO,KACPC,OAAQ,KACRhN,UAAW,WAAWiN,KAAKxS,EAAG6F,UAAY,MAAQ,KAClD4M,cAAe,EAEfC,YAAY,EAEZC,sBAAuB,KAEvBC,mBAAmB,EACnBC,UAAW,WACT,OAAO9D,GAAiB/O,EAAI3E,KAAKkB,QACnC,EACAuW,WAAY,iBACZC,YAAa,kBACbC,UAAW,gBACXC,OAAQ,SACRpX,OAAQ,KACRqX,iBAAiB,EACjBC,UAAW,EACXC,OAAQ,KACRC,QAAS,SAAiBC,EAAc/I,GACtC+I,EAAaD,QAAQ,OAAQ9I,EAAOgJ,YACtC,EACAC,YAAY,EACZC,gBAAgB,EAChBC,WAAY,UACZC,MAAO,EACPC,kBAAkB,EAClBC,qBAAsBC,OAAO3P,SAAW2P,OAAS5U,QAAQiF,SAASjF,OAAO6U,iBAAkB,KAAO,EAClGC,eAAe,EACfC,cAAe,oBACfC,gBAAgB,EAChBC,kBAAmB,EACnBC,eAAgB,CACdvM,EAAG,EACHC,EAAG,GAELuM,gBAA4C,IAA5BjP,GAASiP,gBAA4B,iBAAkBnV,SAAWO,EAClFgS,qBAAsB,GAIxB,IAAK,IAAIlQ,KAFToH,GAAcc,kBAAkBpO,KAAM2E,EAAIyI,GAEzBA,IACblH,KAAQhF,KAAaA,EAAQgF,GAAQkH,EAASlH,IAMlD,IAAK,IAAIrB,KAHTiQ,GAAc5T,GAGClB,KACQ,MAAjB6E,EAAGoM,OAAO,IAAkC,mBAAbjR,KAAK6E,KACtC7E,KAAK6E,GAAM7E,KAAK6E,GAAIoK,KAAKjP,OAK7BA,KAAKiZ,iBAAkB/X,EAAQyX,eAAwBtF,GAEnDrT,KAAKiZ,kBAEPjZ,KAAKkB,QAAQsX,oBAAsB,GAIjCtX,EAAQ8X,eACVtU,EAAGC,EAAI,cAAe3E,KAAKkZ,cAE3BxU,EAAGC,EAAI,YAAa3E,KAAKkZ,aACzBxU,EAAGC,EAAI,aAAc3E,KAAKkZ,cAGxBlZ,KAAKiZ,kBACPvU,EAAGC,EAAI,WAAY3E,MACnB0E,EAAGC,EAAI,YAAa3E,OAGtB4S,GAAUnT,KAAKO,KAAK2E,IAEpBzD,EAAQ+V,OAAS/V,EAAQ+V,MAAMjZ,KAAOgC,KAAK+W,KAAK7V,EAAQ+V,MAAMjZ,IAAIgC,OAAS,IAE3EgD,EAAShD,MAhpBL8W,EAAkB,GAEf,CACLqC,sBAAuB,WACrBrC,EAAkB,GACb9W,KAAKkB,QAAQ4W,WACH,GAAGsB,MAAMjW,KAAKnD,KAAK2E,GAAG1F,UAC5BK,SAAQ,SAAU+Z,GACzB,GAA8B,SAA1B/S,GAAI+S,EAAO,YAAyBA,IAAUtP,GAASC,MAA3D,CACA8M,EAAgBrX,KAAK,CACnBwC,OAAQoX,EACRhD,KAAMvO,GAAQuR,KAGhB,IAAIC,EAAWtX,EAAe,CAAC,EAAG8U,EAAgBA,EAAgBtX,OAAS,GAAG6W,MAG9E,GAAIgD,EAAME,sBAAuB,CAC/B,IAAIC,EAAc3S,GAAOwS,GAAO,GAE5BG,IACFF,EAASjR,KAAOmR,EAAYC,EAC5BH,EAAShR,MAAQkR,EAAYE,EAEjC,CAEAL,EAAMC,SAAWA,CAlBuD,CAmB1E,GACF,EACAK,kBAAmB,SAA2BxT,GAC5C2Q,EAAgBrX,KAAK0G,EACvB,EACAyT,qBAAsB,SAA8B3X,GAClD6U,EAAgB+C,OApJtB,SAAuBC,EAAKpX,GAC1B,IAAK,IAAIR,KAAK4X,EACZ,GAAKA,EAAI5W,eAAehB,GAExB,IAAK,IAAIE,KAAOM,EACd,GAAIA,EAAIQ,eAAed,IAAQM,EAAIN,KAAS0X,EAAI5X,GAAGE,GAAM,OAAOqW,OAAOvW,GAI3E,OAAQ,CACV,CA0I6B6X,CAAcjD,EAAiB,CACpD7U,OAAQA,IACN,EACN,EACA+X,WAAY,SAAoB9N,GAC9B,IAAIG,EAAQrM,KAEZ,IAAKA,KAAKkB,QAAQ4W,UAGhB,OAFAmC,aAAapD,QACW,mBAAb3K,GAAyBA,KAItC,IAAIgO,GAAY,EACZC,EAAgB,EACpBrD,EAAgBxX,SAAQ,SAAU6G,GAChC,IAAIiU,EAAO,EACPnY,EAASkE,EAAMlE,OACfqX,EAAWrX,EAAOqX,SAClBe,EAASvS,GAAQ7F,GACjBqY,EAAerY,EAAOqY,aACtBC,EAAatY,EAAOsY,WACpBC,EAAgBrU,EAAMkQ,KACtBoE,EAAe5T,GAAO5E,GAAQ,GAE9BwY,IAEFJ,EAAOhS,KAAOoS,EAAahB,EAC3BY,EAAO/R,MAAQmS,EAAaf,GAG9BzX,EAAOoY,OAASA,EAEZpY,EAAOsX,uBAEL3N,GAAY0O,EAAcD,KAAYzO,GAAY0N,EAAUe,KAC/DG,EAAcnS,IAAMgS,EAAOhS,MAAQmS,EAAclS,KAAO+R,EAAO/R,QAAWgR,EAASjR,IAAMgS,EAAOhS,MAAQiR,EAAShR,KAAO+R,EAAO/R,QAE9H8R,EA2EZ,SAA2BI,EAAelB,EAAUe,EAAQnZ,GAC1D,OAAO6K,KAAK2O,KAAK3O,KAAK4O,IAAIrB,EAASjR,IAAMmS,EAAcnS,IAAK,GAAK0D,KAAK4O,IAAIrB,EAAShR,KAAOkS,EAAclS,KAAM,IAAMyD,KAAK2O,KAAK3O,KAAK4O,IAAIrB,EAASjR,IAAMgS,EAAOhS,IAAK,GAAK0D,KAAK4O,IAAIrB,EAAShR,KAAO+R,EAAO/R,KAAM,IAAMpH,EAAQ4W,SAC7N,CA7EmB8C,CAAkBJ,EAAeF,EAAcC,EAAYlO,EAAMnL,UAKvE0K,GAAYyO,EAAQf,KACvBrX,EAAOqY,aAAehB,EACtBrX,EAAOsY,WAAaF,EAEfD,IACHA,EAAO/N,EAAMnL,QAAQ4W,WAGvBzL,EAAMwO,QAAQ5Y,EAAQuY,EAAeH,EAAQD,IAG3CA,IACFF,GAAY,EACZC,EAAgBpO,KAAK+O,IAAIX,EAAeC,GACxCH,aAAahY,EAAO8Y,qBACpB9Y,EAAO8Y,oBAAsBzO,YAAW,WACtCrK,EAAOkY,cAAgB,EACvBlY,EAAOqY,aAAe,KACtBrY,EAAOqX,SAAW,KAClBrX,EAAOsY,WAAa,KACpBtY,EAAOsX,sBAAwB,IACjC,GAAGa,GACHnY,EAAOsX,sBAAwBa,EAEnC,IACAH,aAAapD,GAERqD,EAGHrD,EAAsBvK,YAAW,WACP,mBAAbJ,GAAyBA,GACtC,GAAGiO,GAJqB,mBAAbjO,GAAyBA,IAOtC4K,EAAkB,EACpB,EACA+D,QAAS,SAAiB5Y,EAAQ+Y,EAAaX,EAAQY,GACrD,GAAIA,EAAU,CACZ3U,GAAIrE,EAAQ,aAAc,IAC1BqE,GAAIrE,EAAQ,YAAa,IACzB,IAAI8G,EAAWlC,GAAO7G,KAAK2E,IACvBqE,EAASD,GAAYA,EAASE,EAC9BC,EAASH,GAAYA,EAASI,EAC9B+R,GAAcF,EAAY1S,KAAO+R,EAAO/R,OAASU,GAAU,GAC3DmS,GAAcH,EAAY3S,IAAMgS,EAAOhS,MAAQa,GAAU,GAC7DjH,EAAOmZ,aAAeF,EACtBjZ,EAAOoZ,aAAeF,EACtB7U,GAAIrE,EAAQ,YAAa,eAAiBiZ,EAAa,MAAQC,EAAa,SAC5Enb,KAAKsb,gBAiBb,SAAiBrZ,GACf,OAAOA,EAAOsZ,WAChB,CAnB+BC,CAAQvZ,GAE/BqE,GAAIrE,EAAQ,aAAc,aAAegZ,EAAW,MAAQjb,KAAKkB,QAAQ6W,OAAS,IAAM/X,KAAKkB,QAAQ6W,OAAS,KAC9GzR,GAAIrE,EAAQ,YAAa,sBACE,iBAApBA,EAAOwZ,UAAyBxB,aAAahY,EAAOwZ,UAC3DxZ,EAAOwZ,SAAWnP,YAAW,WAC3BhG,GAAIrE,EAAQ,aAAc,IAC1BqE,GAAIrE,EAAQ,YAAa,IACzBA,EAAOwZ,UAAW,EAClBxZ,EAAOmZ,YAAa,EACpBnZ,EAAOoZ,YAAa,CACtB,GAAGJ,EACL,CACF,IAugBJ,CAisCA,SAASS,GAAQ5K,EAAQD,EAAM3B,EAAQyM,EAAU/K,EAAUgL,EAAY7M,EAAe8M,GACpF,IAAI7N,EAGA8N,EAFA/N,EAAW+C,EAAO9D,IAClB+O,EAAWhO,EAAS7M,QAAQ8a,OA2BhC,OAxBInY,OAAOsN,aAAgBlN,GAAeC,GAMxC8J,EAAMvI,SAAS2L,YAAY,UACvBC,UAAU,QAAQ,GAAM,GAN5BrD,EAAM,IAAImD,YAAY,OAAQ,CAC5BG,SAAS,EACTC,YAAY,IAOhBvD,EAAIwD,GAAKX,EACT7C,EAAIyD,KAAOX,EACX9C,EAAI/D,QAAUiF,EACdlB,EAAIiO,YAAcN,EAClB3N,EAAIkO,QAAUtL,GAAYC,EAC1B7C,EAAImO,YAAcP,GAAc9T,GAAQ+I,GACxC7C,EAAI6N,gBAAkBA,EACtB7N,EAAIe,cAAgBA,EACpB+B,EAAOgB,cAAc9D,GAEjB+N,IACFD,EAASC,EAAS5Y,KAAK4K,EAAUC,EAAKe,IAGjC+M,CACT,CAEA,SAASM,GAAkBzX,GACzBA,EAAGuF,WAAY,CACjB,CAEA,SAASmS,KACPrJ,IAAU,CACZ,CAkFA,SAASsJ,GAAY3X,GAKnB,IAJA,IAAI4X,EAAM5X,EAAG4C,QAAU5C,EAAGvF,UAAYuF,EAAG6X,IAAM7X,EAAG8X,KAAO9X,EAAGuT,YACxDhW,EAAIqa,EAAI/c,OACRkd,EAAM,EAEHxa,KACLwa,GAAOH,EAAII,WAAWza,GAGxB,OAAOwa,EAAI9F,SAAS,GACtB,CAaA,SAASgG,GAAU/X,GACjB,OAAOyH,WAAWzH,EAAI,EACxB,CAEA,SAASgY,GAAgBnc,GACvB,OAAOuZ,aAAavZ,EACtB,CAr1CAqJ,GAASlH,UAET,CACEhD,YAAakK,GACb4M,iBAAkB,SAA0B1U,GACrCjC,KAAK2E,GAAGmY,SAAS7a,IAAWA,IAAWjC,KAAK2E,KAC/C2N,GAAa,KAEjB,EACAyK,cAAe,SAAuB/O,EAAK/L,GACzC,MAAyC,mBAA3BjC,KAAKkB,QAAQsW,UAA2BxX,KAAKkB,QAAQsW,UAAUrU,KAAKnD,KAAMgO,EAAK/L,EAAQiN,IAAUlP,KAAKkB,QAAQsW,SAC9H,EACA0B,YAAa,SAEblL,GACE,GAAKA,EAAIuD,WAAT,CAEA,IAAIlF,EAAQrM,KACR2E,EAAK3E,KAAK2E,GACVzD,EAAUlB,KAAKkB,QACf2W,EAAkB3W,EAAQ2W,gBAC1BmF,EAAOhP,EAAIgP,KACXC,EAAQjP,EAAI8H,SAAW9H,EAAI8H,QAAQ,IAAM9H,EAAIkP,aAAmC,UAApBlP,EAAIkP,aAA2BlP,EAC3F/L,GAAUgb,GAASjP,GAAK/L,OACxBkb,EAAiBnP,EAAI/L,OAAOmb,aAAepP,EAAInP,MAAQmP,EAAInP,KAAK,IAAMmP,EAAIqP,cAAgBrP,EAAIqP,eAAe,KAAOpb,EACpHzB,EAASU,EAAQV,OAKrB,GAsyCJ,SAAgC8c,GAC9BrK,GAAkBzT,OAAS,EAI3B,IAHA,IAAI+d,EAASD,EAAK7V,qBAAqB,SACnC+V,EAAMD,EAAO/d,OAEVge,KAAO,CACZ,IAAI7Y,EAAK4Y,EAAOC,GAChB7Y,EAAG8Y,SAAWxK,GAAkBxT,KAAKkF,EACvC,CACF,CAlzCI+Y,CAAuB/Y,IAGnBuK,MAIA,wBAAwBiI,KAAK6F,IAAwB,IAAfhP,EAAI2P,QAAgBzc,EAAQ8V,YAKlEmG,EAAeS,oBAKd5d,KAAKiZ,kBAAmB7U,IAAUnC,GAA2C,WAAjCA,EAAOsF,QAAQkD,mBAIhExI,EAAS2D,GAAQ3D,EAAQf,EAAQgJ,UAAWvF,GAAI,KAElC1C,EAAOwZ,UAIjBlM,KAAetN,GAAnB,CASA,GAHA8N,GAAWxF,GAAMtI,GACjB+N,GAAoBzF,GAAMtI,EAAQf,EAAQgJ,WAEpB,mBAAX1J,GACT,GAAIA,EAAO2C,KAAKnD,KAAMgO,EAAK/L,EAAQjC,MAcjC,OAbA0Q,GAAe,CACb3C,SAAU1B,EACVgD,OAAQ8N,EACRjX,KAAM,SACN0K,SAAU3O,EACV4O,KAAMlM,EACNmM,OAAQnM,IAGVkJ,GAAY,SAAUxB,EAAO,CAC3B2B,IAAKA,SAEP6J,GAAmB7J,EAAIuD,YAAcvD,EAAI0H,uBAGtC,GAAIlV,IACTA,EAASA,EAAOmU,MAAM,KAAKuB,MAAK,SAAU2H,GAGxC,GAFAA,EAAWjY,GAAQuX,EAAgBU,EAASC,OAAQnZ,GAAI,GAetD,OAZA+L,GAAe,CACb3C,SAAU1B,EACVgD,OAAQwO,EACR3X,KAAM,SACN0K,SAAU3O,EACV6O,OAAQnM,EACRkM,KAAMlM,IAGRkJ,GAAY,SAAUxB,EAAO,CAC3B2B,IAAKA,KAEA,CAEX,KAIE,YADA6J,GAAmB7J,EAAIuD,YAAcvD,EAAI0H,kBAKzCxU,EAAQgW,SAAWtR,GAAQuX,EAAgBjc,EAAQgW,OAAQvS,GAAI,IAKnE3E,KAAK+d,kBAAkB/P,EAAKiP,EAAOhb,EAvDnC,CA1C2B,CAkG7B,EACA8b,kBAAmB,SAEnB/P,EAEAiP,EAEAhb,GACE,IAII+b,EAJA3R,EAAQrM,KACR2E,EAAK0H,EAAM1H,GACXzD,EAAUmL,EAAMnL,QAChB+c,EAAgBtZ,EAAGsZ,cAGvB,GAAIhc,IAAWiN,IAAUjN,EAAO0D,aAAehB,EAAI,CACjD,IAAIgX,EAAW7T,GAAQ7F,GAwEvB,GAvEAoN,GAAS1K,EAETwK,IADAD,GAASjN,GACS0D,WAClB2J,GAASJ,GAAOgP,YAChB3O,GAAatN,EACb8P,GAAc7Q,EAAQgU,MACtBnL,GAASE,QAAUiF,GACnB8C,GAAS,CACP/P,OAAQiN,GACR8G,SAAUiH,GAASjP,GAAKgI,QACxBC,SAAUgH,GAASjP,GAAKiI,SAE1B7D,GAAkBJ,GAAOgE,QAAU2F,EAASrT,KAC5C+J,GAAiBL,GAAOiE,QAAU0F,EAAStT,IAC3CrI,KAAKme,QAAUlB,GAASjP,GAAKgI,QAC7BhW,KAAKoe,QAAUnB,GAASjP,GAAKiI,QAC7B/G,GAAOzI,MAAM,eAAiB,MAE9BuX,EAAc,WACZnQ,GAAY,aAAcxB,EAAO,CAC/B2B,IAAKA,IAGHjE,GAASkE,cACX5B,EAAMgS,WAORhS,EAAMiS,6BAEDna,GAAWkI,EAAM4M,kBACpB/J,GAAOhF,WAAY,GAIrBmC,EAAMkS,kBAAkBvQ,EAAKiP,GAG7BvM,GAAe,CACb3C,SAAU1B,EACVnG,KAAM,SACN6I,cAAef,IAIjB/H,GAAYiJ,GAAQhO,EAAQwW,aAAa,GAC3C,EAGAxW,EAAQ0W,OAAOjD,MAAM,KAAKrV,SAAQ,SAAUue,GAC1CvW,GAAK4H,GAAQ2O,EAASC,OAAQ1B,GAChC,IACA1X,EAAGuZ,EAAe,WAAYpI,IAC9BnR,EAAGuZ,EAAe,YAAapI,IAC/BnR,EAAGuZ,EAAe,YAAapI,IAC/BnR,EAAGuZ,EAAe,UAAW5R,EAAMgS,SACnC3Z,EAAGuZ,EAAe,WAAY5R,EAAMgS,SACpC3Z,EAAGuZ,EAAe,cAAe5R,EAAMgS,SAEnCla,GAAWnE,KAAKiZ,kBAClBjZ,KAAKkB,QAAQsX,oBAAsB,EACnCtJ,GAAOhF,WAAY,GAGrB2D,GAAY,aAAc7N,KAAM,CAC9BgO,IAAKA,KAGH9M,EAAQoX,OAAWpX,EAAQqX,mBAAoB0E,GAAYjd,KAAKiZ,kBAAqB/U,GAAQD,GAkB/F+Z,QAlB6G,CAC7G,GAAIjU,GAASkE,cAGX,YAFAjO,KAAKqe,UAQP3Z,EAAGuZ,EAAe,UAAW5R,EAAMmS,qBACnC9Z,EAAGuZ,EAAe,WAAY5R,EAAMmS,qBACpC9Z,EAAGuZ,EAAe,cAAe5R,EAAMmS,qBACvC9Z,EAAGuZ,EAAe,YAAa5R,EAAMoS,8BACrC/Z,EAAGuZ,EAAe,YAAa5R,EAAMoS,8BACrCvd,EAAQ8X,gBAAkBtU,EAAGuZ,EAAe,cAAe5R,EAAMoS,8BACjEpS,EAAMqS,gBAAkBpS,WAAW0R,EAAa9c,EAAQoX,MAC1D,CAGF,CACF,EACAmG,6BAA8B,SAE9B/E,GACE,IAAIuD,EAAQvD,EAAE5D,QAAU4D,EAAE5D,QAAQ,GAAK4D,EAEnC3N,KAAK+O,IAAI/O,KAAK4S,IAAI1B,EAAMjH,QAAUhW,KAAKme,QAASpS,KAAK4S,IAAI1B,EAAMhH,QAAUjW,KAAKoe,UAAYrS,KAAK6S,MAAM5e,KAAKkB,QAAQsX,qBAAuBxY,KAAKiZ,iBAAmBpV,OAAO6U,kBAAoB,KAC9L1Y,KAAKwe,qBAET,EACAA,oBAAqB,WACnBtP,IAAUkN,GAAkBlN,IAC5B+K,aAAaja,KAAK0e,iBAElB1e,KAAKse,2BACP,EACAA,0BAA2B,WACzB,IAAIL,EAAgBje,KAAK2E,GAAGsZ,cAC5BlZ,EAAIkZ,EAAe,UAAWje,KAAKwe,qBACnCzZ,EAAIkZ,EAAe,WAAYje,KAAKwe,qBACpCzZ,EAAIkZ,EAAe,cAAeje,KAAKwe,qBACvCzZ,EAAIkZ,EAAe,YAAaje,KAAKye,8BACrC1Z,EAAIkZ,EAAe,YAAaje,KAAKye,8BACrC1Z,EAAIkZ,EAAe,cAAeje,KAAKye,6BACzC,EACAF,kBAAmB,SAEnBvQ,EAEAiP,GACEA,EAAQA,GAA4B,SAAnBjP,EAAIkP,aAA0BlP,GAE1ChO,KAAKiZ,iBAAmBgE,EACvBjd,KAAKkB,QAAQ8X,eACftU,EAAGe,SAAU,cAAezF,KAAK6e,cAEjCna,EAAGe,SADMwX,EACI,YAEA,YAFajd,KAAK6e,eAKjCna,EAAGwK,GAAQ,UAAWlP,MACtB0E,EAAG2K,GAAQ,YAAarP,KAAK8e,eAG/B,IACMrZ,SAASsZ,UAEXnC,IAAU,WACRnX,SAASsZ,UAAUC,OACrB,IAEAnb,OAAOob,eAAeC,iBAEX,CAAb,MAAOC,GAAM,CACjB,EACAC,aAAc,SAAsBC,EAAUrR,GAI5C,GAFA0E,IAAsB,EAElBrD,IAAUH,GAAQ,CACpBrB,GAAY,cAAe7N,KAAM,CAC/BgO,IAAKA,IAGHhO,KAAKiZ,iBACPvU,EAAGe,SAAU,WAAYiR,IAG3B,IAAIxV,EAAUlB,KAAKkB,SAElBme,GAAYpZ,GAAYiJ,GAAQhO,EAAQyW,WAAW,GACpD1R,GAAYiJ,GAAQhO,EAAQuW,YAAY,GACxC1N,GAAS+F,OAAS9P,KAClBqf,GAAYrf,KAAKsf,eAEjB5O,GAAe,CACb3C,SAAU/N,KACVkG,KAAM,QACN6I,cAAef,GAEnB,MACEhO,KAAKuf,UAET,EACAC,iBAAkB,WAChB,GAAIvN,GAAU,CACZjS,KAAKme,OAASlM,GAAS+D,QACvBhW,KAAKoe,OAASnM,GAASgE,QAEvB7F,KAKA,IAHA,IAAInO,EAASwD,SAASga,iBAAiBxN,GAAS+D,QAAS/D,GAASgE,SAC9D1M,EAAStH,EAENA,GAAUA,EAAOmb,aACtBnb,EAASA,EAAOmb,WAAWqC,iBAAiBxN,GAAS+D,QAAS/D,GAASgE,YACxD1M,GACfA,EAAStH,EAKX,GAFAiN,GAAOvJ,WAAWqH,IAAS2J,iBAAiB1U,GAExCsH,EACF,EAAG,CACD,GAAIA,EAAOyD,KAEEzD,EAAOyD,IAASyJ,YAAY,CACrCT,QAAS/D,GAAS+D,QAClBC,QAAShE,GAASgE,QAClBhU,OAAQA,EACRoN,OAAQ9F,MAGOvJ,KAAKkB,QAAQkX,eAC5B,MAIJnW,EAASsH,CACX,OAEOA,EAASA,EAAO5D,YAGzB2K,IACF,CACF,EACAuO,aAAc,SAEd7Q,GACE,GAAIgE,GAAQ,CACV,IAAI9Q,EAAUlB,KAAKkB,QACf4X,EAAoB5X,EAAQ4X,kBAC5BC,EAAiB7X,EAAQ6X,eACzBkE,EAAQjP,EAAI8H,QAAU9H,EAAI8H,QAAQ,GAAK9H,EACvC0R,EAActQ,IAAWvI,GAAOuI,IAAS,GACzCpG,EAASoG,IAAWsQ,GAAeA,EAAYzW,EAC/CC,EAASkG,IAAWsQ,GAAeA,EAAYvW,EAC/CwW,EAAuBxM,IAA2BV,IAAuB9H,GAAwB8H,IACjGmN,GAAM3C,EAAMjH,QAAUhE,GAAOgE,QAAU+C,EAAevM,IAAMxD,GAAU,IAAM2W,EAAuBA,EAAqB,GAAK5M,GAAiC,GAAK,IAAM/J,GAAU,GACnL6W,GAAM5C,EAAMhH,QAAUjE,GAAOiE,QAAU8C,EAAetM,IAAMvD,GAAU,IAAMyW,EAAuBA,EAAqB,GAAK5M,GAAiC,GAAK,IAAM7J,GAAU,GAEvL,IAAKa,GAAS+F,SAAW4C,GAAqB,CAC5C,GAAIoG,GAAqB/M,KAAK+O,IAAI/O,KAAK4S,IAAI1B,EAAMjH,QAAUhW,KAAKme,QAASpS,KAAK4S,IAAI1B,EAAMhH,QAAUjW,KAAKoe,SAAWtF,EAChH,OAGF9Y,KAAK8e,aAAa9Q,GAAK,EACzB,CAEA,GAAIoB,GAAS,CACPsQ,GACFA,EAAYhG,GAAKkG,GAAM1N,IAAU,GACjCwN,EAAYjG,GAAKoG,GAAM1N,IAAU,IAEjCuN,EAAc,CACZzW,EAAG,EACH6W,EAAG,EACHC,EAAG,EACH5W,EAAG,EACHuQ,EAAGkG,EACHnG,EAAGoG,GAIP,IAAIG,EAAY,UAAUpS,OAAO8R,EAAYzW,EAAG,KAAK2E,OAAO8R,EAAYI,EAAG,KAAKlS,OAAO8R,EAAYK,EAAG,KAAKnS,OAAO8R,EAAYvW,EAAG,KAAKyE,OAAO8R,EAAYhG,EAAG,KAAK9L,OAAO8R,EAAYjG,EAAG,KACvLnT,GAAI8I,GAAS,kBAAmB4Q,GAChC1Z,GAAI8I,GAAS,eAAgB4Q,GAC7B1Z,GAAI8I,GAAS,cAAe4Q,GAC5B1Z,GAAI8I,GAAS,YAAa4Q,GAC1B9N,GAAS0N,EACTzN,GAAS0N,EACT5N,GAAWgL,CACb,CAEAjP,EAAIuD,YAAcvD,EAAI0H,gBACxB,CACF,EACA4J,aAAc,WAGZ,IAAKlQ,GAAS,CACZ,IAAIlH,EAAYlI,KAAKkB,QAAQ2X,eAAiBpT,SAASkG,KAAO0D,GAC1DgH,EAAOvO,GAAQoH,IAAQ,EAAMiE,IAAyB,EAAMjL,GAC5DhH,EAAUlB,KAAKkB,QAEnB,GAAIiS,GAAyB,CAI3B,IAFAV,GAAsBvK,EAE0B,WAAzC5B,GAAImM,GAAqB,aAAsE,SAA1CnM,GAAImM,GAAqB,cAA2BA,KAAwBhN,UACtIgN,GAAsBA,GAAoB9M,WAGxC8M,KAAwBhN,SAASkG,MAAQ8G,KAAwBhN,SAASoC,iBACxE4K,KAAwBhN,WAAUgN,GAAsB9K,MAC5D0O,EAAKhO,KAAOoK,GAAoBzH,UAChCqL,EAAK/N,MAAQmK,GAAoB1H,YAEjC0H,GAAsB9K,KAGxBoL,GAAmCpI,GAAwB8H,GAC7D,CAGAxM,GADAmJ,GAAUF,GAAOnC,WAAU,GACN7L,EAAQuW,YAAY,GACzCxR,GAAYmJ,GAASlO,EAAQ0X,eAAe,GAC5C3S,GAAYmJ,GAASlO,EAAQyW,WAAW,GACxCrR,GAAI8I,GAAS,aAAc,IAC3B9I,GAAI8I,GAAS,YAAa,IAC1B9I,GAAI8I,GAAS,aAAc,cAC3B9I,GAAI8I,GAAS,SAAU,GACvB9I,GAAI8I,GAAS,MAAOiH,EAAKhO,KACzB/B,GAAI8I,GAAS,OAAQiH,EAAK/N,MAC1BhC,GAAI8I,GAAS,QAASiH,EAAK3N,OAC3BpC,GAAI8I,GAAS,SAAUiH,EAAK5N,QAC5BnC,GAAI8I,GAAS,UAAW,OACxB9I,GAAI8I,GAAS,WAAY+D,GAA0B,WAAa,SAChE7M,GAAI8I,GAAS,SAAU,UACvB9I,GAAI8I,GAAS,gBAAiB,QAC9BrF,GAASC,MAAQoF,GACjBlH,EAAU+X,YAAY7Q,IAEtB9I,GAAI8I,GAAS,mBAAoBgD,GAAkBtJ,SAASsG,GAAQ3I,MAAMiC,OAAS,IAAM,KAAO2J,GAAiBvJ,SAASsG,GAAQ3I,MAAMgC,QAAU,IAAM,IAC1J,CACF,EACAqW,aAAc,SAEd9Q,EAEAqR,GACE,IAAIhT,EAAQrM,KAERiY,EAAejK,EAAIiK,aACnB/W,EAAUmL,EAAMnL,QACpB2M,GAAY,YAAa7N,KAAM,CAC7BgO,IAAKA,IAGHjE,GAASkE,cACXjO,KAAKqe,WAKPxQ,GAAY,aAAc7N,MAErB+J,GAASkE,iBACZuB,GAAU9E,GAAMwE,KACRgR,gBAAgB,MACxB1Q,GAAQtF,WAAY,EACpBsF,GAAQ/I,MAAM,eAAiB,GAE/BzG,KAAKmgB,aAELla,GAAYuJ,GAASxP,KAAKkB,QAAQwW,aAAa,GAC/C3N,GAASW,MAAQ8E,IAInBnD,EAAM+T,QAAUxD,IAAU,WACxB/O,GAAY,QAASxB,GACjBtC,GAASkE,gBAER5B,EAAMnL,QAAQqW,mBACjBlI,GAAOgR,aAAa7Q,GAASN,IAG/B7C,EAAM8T,aAENzP,GAAe,CACb3C,SAAU1B,EACVnG,KAAM,UAEV,KACCmZ,GAAYpZ,GAAYiJ,GAAQhO,EAAQyW,WAAW,GAEhD0H,GACF1M,IAAkB,EAClBtG,EAAMiU,QAAUC,YAAYlU,EAAMmT,iBAAkB,MAGpDza,EAAIU,SAAU,UAAW4G,EAAMgS,SAC/BtZ,EAAIU,SAAU,WAAY4G,EAAMgS,SAChCtZ,EAAIU,SAAU,cAAe4G,EAAMgS,SAE/BpG,IACFA,EAAauI,cAAgB,OAC7Btf,EAAQ8W,SAAW9W,EAAQ8W,QAAQ7U,KAAKkJ,EAAO4L,EAAc/I,KAG/DxK,EAAGe,SAAU,OAAQ4G,GAErB/F,GAAI4I,GAAQ,YAAa,kBAG3BwD,IAAsB,EACtBrG,EAAMoU,aAAe7D,GAAUvQ,EAAM+S,aAAanQ,KAAK5C,EAAOgT,EAAUrR,IACxEtJ,EAAGe,SAAU,cAAe4G,GAC5BsD,IAAQ,EAEJvL,GACFkC,GAAIb,SAASkG,KAAM,cAAe,QAEtC,EAEA8K,YAAa,SAEbzI,GACE,IAEI2N,EACAC,EACA8E,EAOAC,EAXAhc,EAAK3E,KAAK2E,GACV1C,EAAS+L,EAAI/L,OAIbf,EAAUlB,KAAKkB,QACfgU,EAAQhU,EAAQgU,MAChBrF,EAAiB9F,GAAS+F,OAC1B8Q,EAAU7O,KAAgBmD,EAC1B2L,EAAU3f,EAAQ6V,KAClB+J,EAAelR,IAAeC,EAE9BxD,EAAQrM,KACR+gB,GAAiB,EAErB,IAAI/N,GAAJ,CAgHA,QAN2B,IAAvBhF,EAAI0H,gBACN1H,EAAIuD,YAAcvD,EAAI0H,iBAGxBzT,EAAS2D,GAAQ3D,EAAQf,EAAQgJ,UAAWvF,GAAI,GAChDqc,EAAc,YACVjX,GAASkE,cAAe,OAAO8S,EAEnC,GAAI7R,GAAO4N,SAAS9O,EAAI/L,SAAWA,EAAOwZ,UAAYxZ,EAAOmZ,YAAcnZ,EAAOoZ,YAAchP,EAAM4U,wBAA0Bhf,EAC9H,OAAOif,GAAU,GAKnB,GAFAvO,IAAkB,EAEd9C,IAAmB3O,EAAQ8V,WAAa4J,EAAUC,IAAYH,EAASvR,KAAaE,IACtFO,KAAgB5P,OAASA,KAAK4R,YAAcG,GAAYuD,UAAUtV,KAAM6P,EAAgBX,GAAQlB,KAASkH,EAAMK,SAASvV,KAAM6P,EAAgBX,GAAQlB,IAAO,CAI7J,GAHA2S,EAA+C,aAApC3gB,KAAK+c,cAAc/O,EAAK/L,GACnC0Z,EAAW7T,GAAQoH,IACnB8R,EAAc,iBACVjX,GAASkE,cAAe,OAAO8S,EAEnC,GAAIL,EAiBF,OAhBAvR,GAAWE,GAEX7K,IAEAxE,KAAKmgB,aAELa,EAAc,UAETjX,GAASkE,gBACRqB,GACFD,GAAOgR,aAAanR,GAAQI,IAE5BD,GAAO4Q,YAAY/Q,KAIhBgS,GAAU,GAGnB,IAAIC,EAAchX,GAAUxF,EAAIzD,EAAQgJ,WAExC,IAAKiX,GAsjBX,SAAsBnT,EAAK2S,EAAU5S,GACnC,IAAIsI,EAAOvO,GAAQqC,GAAU4D,EAASpJ,GAAIoJ,EAAS7M,QAAQgJ,YAE3D,OAAOyW,EAAW3S,EAAIgI,QAAUK,EAAK7N,MADxB,IAC0CwF,EAAIgI,SAAWK,EAAK7N,OAASwF,EAAIiI,QAAUI,EAAK9N,QAAUyF,EAAIgI,SAAWK,EAAK/N,KAAO0F,EAAIgI,QAAUK,EAAK7N,OAASwF,EAAIiI,QAAUI,EAAKhO,KAAO2F,EAAIgI,SAAWK,EAAK7N,OAASwF,EAAIiI,QAAUI,EAAK9N,OADrO,EAEf,CA1jB0B6Y,CAAapT,EAAK2S,EAAU3gB,QAAUmhB,EAAY1F,SAAU,CAG9E,GAAI0F,IAAgBjS,GAClB,OAAOgS,GAAU,GAYnB,GARIC,GAAexc,IAAOqJ,EAAI/L,SAC5BA,EAASkf,GAGPlf,IACF2Z,EAAa9T,GAAQ7F,KAG0D,IAA7EyZ,GAAQrM,GAAQ1K,EAAIuK,GAAQyM,EAAU1Z,EAAQ2Z,EAAY5N,IAAO/L,GAanE,OAZAuC,IAEI2c,GAAeA,EAAYjD,YAE7BvZ,EAAG0b,aAAanR,GAAQiS,EAAYjD,aAEpCvZ,EAAGsb,YAAY/Q,IAGjBC,GAAWxK,EAEX0c,IACOH,GAAU,EAErB,MAAO,GAAIC,GAihBjB,SAAuBnT,EAAK2S,EAAU5S,GACpC,IAAIsI,EAAOvO,GAAQ6B,GAASoE,EAASpJ,GAAI,EAAGoJ,EAAS7M,SAAS,IAE9D,OAAOyf,EAAW3S,EAAIgI,QAAUK,EAAK/N,KADxB,IACyC0F,EAAIiI,QAAUI,EAAKhO,KAAO2F,EAAIgI,QAAUK,EAAK7N,MAAQwF,EAAIiI,QAAUI,EAAKhO,IADjH,IACiI2F,EAAIiI,QAAUI,EAAK9N,QAAUyF,EAAIgI,QAAUK,EAAK/N,IAChM,CArhBgCgZ,CAActT,EAAK2S,EAAU3gB,MAAO,CAE5D,IAAIuhB,EAAa5X,GAAShF,EAAI,EAAGzD,GAAS,GAE1C,GAAIqgB,IAAerS,GACjB,OAAOgS,GAAU,GAMnB,GAFAtF,EAAa9T,GADb7F,EAASsf,IAGqE,IAA1E7F,GAAQrM,GAAQ1K,EAAIuK,GAAQyM,EAAU1Z,EAAQ2Z,EAAY5N,GAAK,GAMjE,OALAxJ,IACAG,EAAG0b,aAAanR,GAAQqS,GACxBpS,GAAWxK,EAEX0c,IACOH,GAAU,EAErB,MAAO,GAAIjf,EAAO0D,aAAehB,EAAI,CACnCiX,EAAa9T,GAAQ7F,GACrB,IAAIuV,EACAgK,EAcAC,EAbAC,EAAiBxS,GAAOvJ,aAAehB,EACvCgd,GAl9Ba,SAA4BhG,EAAUC,EAAY+E,GACzE,IAAIiB,EAAcjB,EAAWhF,EAASrT,KAAOqT,EAAStT,IAClDwZ,EAAclB,EAAWhF,EAASnT,MAAQmT,EAASpT,OACnDuZ,EAAkBnB,EAAWhF,EAASjT,MAAQiT,EAASlT,OACvDsZ,EAAcpB,EAAW/E,EAAWtT,KAAOsT,EAAWvT,IACtD2Z,EAAcrB,EAAW/E,EAAWpT,MAAQoT,EAAWrT,OACvD0Z,EAAkBtB,EAAW/E,EAAWlT,MAAQkT,EAAWnT,OAC/D,OAAOmZ,IAAgBG,GAAeF,IAAgBG,GAAeJ,EAAcE,EAAkB,IAAMC,EAAcE,EAAkB,CAC7I,CA08B+BC,CAAmBhT,GAAOuM,UAAYvM,GAAOmL,QAAUsB,EAAU1Z,EAAOwZ,UAAYxZ,EAAOoY,QAAUuB,EAAY+E,GACpIwB,EAAQxB,EAAW,MAAQ,OAC3ByB,EAAkBhZ,GAAenH,EAAQ,MAAO,QAAUmH,GAAe8F,GAAQ,MAAO,OACxFmT,EAAeD,EAAkBA,EAAgBpX,eAAY,EAWjE,GATIsH,KAAerQ,IACjBuf,EAAwB5F,EAAWuG,GACnCtP,IAAwB,EACxBC,IAA0B6O,GAAmBzgB,EAAQmW,YAAcqK,GAGrElK,EA0fR,SAA2BxJ,EAAK/L,EAAQ2Z,EAAY+E,EAAUvJ,EAAeE,EAAuBD,EAAYiL,GAC9G,IAAIC,EAAc5B,EAAW3S,EAAIiI,QAAUjI,EAAIgI,QAC3CwM,EAAe7B,EAAW/E,EAAWnT,OAASmT,EAAWlT,MACzD+Z,EAAW9B,EAAW/E,EAAWvT,IAAMuT,EAAWtT,KAClDoa,EAAW/B,EAAW/E,EAAWrT,OAASqT,EAAWpT,MACrDma,GAAS,EAEb,IAAKtL,EAEH,GAAIiL,GAAgB9P,GAAqBgQ,EAAepL,GAQtD,IALKvE,KAA4C,IAAlBN,GAAsBgQ,EAAcE,EAAWD,EAAelL,EAAwB,EAAIiL,EAAcG,EAAWF,EAAelL,EAAwB,KAEvLzE,IAAwB,GAGrBA,GAOH8P,GAAS,OALT,GAAsB,IAAlBpQ,GAAsBgQ,EAAcE,EAAWjQ,GACjD+P,EAAcG,EAAWlQ,GACzB,OAAQD,QAOZ,GAAIgQ,EAAcE,EAAWD,GAAgB,EAAIpL,GAAiB,GAAKmL,EAAcG,EAAWF,GAAgB,EAAIpL,GAAiB,EACnI,OAwBR,SAA6BnV,GAC3B,OAAIsI,GAAM2E,IAAU3E,GAAMtI,GACjB,GAEC,CAEZ,CA9Be2gB,CAAoB3gB,GAOjC,OAFA0gB,EAASA,GAAUtL,KAIbkL,EAAcE,EAAWD,EAAelL,EAAwB,GAAKiL,EAAcG,EAAWF,EAAelL,EAAwB,GAChIiL,EAAcE,EAAWD,EAAe,EAAI,GAAK,EAIrD,CACT,CAtiBoBK,CAAkB7U,EAAK/L,EAAQ2Z,EAAY+E,EAAUgB,EAAkB,EAAIzgB,EAAQkW,cAAgD,MAAjClW,EAAQoW,sBAAgCpW,EAAQkW,cAAgBlW,EAAQoW,sBAAuBxE,GAAwBR,KAAerQ,GAGlO,IAAduV,EAAiB,CAEnB,IAAIsL,EAAYvY,GAAM2E,IAEtB,GACE4T,GAAatL,EACbiK,EAAUtS,GAASlQ,SAAS6jB,SACrBrB,IAAwC,SAA5Bnb,GAAImb,EAAS,YAAyBA,IAAYrS,IACzE,CAGA,GAAkB,IAAdoI,GAAmBiK,IAAYxf,EACjC,OAAOif,GAAU,GAGnB5O,GAAarQ,EACbsQ,GAAgBiF,EAChB,IAAI0G,EAAcjc,EAAO8gB,mBACrBC,GAAQ,EAGRC,EAAavH,GAAQrM,GAAQ1K,EAAIuK,GAAQyM,EAAU1Z,EAAQ2Z,EAAY5N,EAF3EgV,EAAsB,IAAdxL,GAIR,IAAmB,IAAfyL,EA4BF,OA3BmB,IAAfA,IAAoC,IAAhBA,IACtBD,EAAuB,IAAfC,GAGVjQ,IAAU,EACV1G,WAAW+P,GAAW,IACtB7X,IAEIwe,IAAU9E,EACZvZ,EAAGsb,YAAY/Q,IAEfjN,EAAO0D,WAAW0a,aAAanR,GAAQ8T,EAAQ9E,EAAcjc,GAI3DmgB,GACF7V,GAAS6V,EAAiB,EAAGC,EAAeD,EAAgBpX,WAG9DmE,GAAWD,GAAOvJ,gBAGYmJ,IAA1B0S,GAAwC1O,KAC1CN,GAAqBzG,KAAK4S,IAAI6C,EAAwB1Z,GAAQ7F,GAAQkgB,KAGxEd,IACOH,GAAU,EAErB,CAEA,GAAIvc,EAAGmY,SAAS5N,IACd,OAAOgS,GAAU,EAErB,CAEA,OAAO,CAtRY,CAEnB,SAASF,EAAc9a,EAAMgd,GAC3BrV,GAAY3H,EAAMmG,EAAOrK,EAAe,CACtCgM,IAAKA,EACL4S,QAASA,EACTuC,KAAMxC,EAAW,WAAa,aAC9BD,OAAQA,EACR/E,SAAUA,EACVC,WAAYA,EACZiF,QAASA,EACTC,aAAcA,EACd7e,OAAQA,EACRif,UAAWA,EACXlF,OAAQ,SAAgB/Z,EAAQ+gB,GAC9B,OAAOtH,GAAQrM,GAAQ1K,EAAIuK,GAAQyM,EAAU1Z,EAAQ6F,GAAQ7F,GAAS+L,EAAKgV,EAC7E,EACA3B,QAASA,GACR6B,GACL,CAGA,SAAS1e,IACPwc,EAAc,4BAEd3U,EAAM8M,wBAEF9M,IAAUyU,GACZA,EAAa3H,uBAEjB,CAGA,SAAS+H,EAAUkC,GAuDjB,OAtDApC,EAAc,oBAAqB,CACjCoC,UAAWA,IAGTA,IAEExC,EACF/Q,EAAesQ,aAEftQ,EAAewT,WAAWhX,GAGxBA,IAAUyU,IAEZ7a,GAAYiJ,GAAQU,GAAcA,GAAY1O,QAAQuW,WAAa5H,EAAe3O,QAAQuW,YAAY,GACtGxR,GAAYiJ,GAAQhO,EAAQuW,YAAY,IAGtC7H,KAAgBvD,GAASA,IAAUtC,GAAS+F,OAC9CF,GAAcvD,EACLA,IAAUtC,GAAS+F,QAAUF,KACtCA,GAAc,MAIZkR,IAAiBzU,IACnBA,EAAM4U,sBAAwBhf,GAGhCoK,EAAM2N,YAAW,WACfgH,EAAc,6BACd3U,EAAM4U,sBAAwB,IAChC,IAEI5U,IAAUyU,IACZA,EAAa9G,aACb8G,EAAaG,sBAAwB,QAKrChf,IAAWiN,KAAWA,GAAOuM,UAAYxZ,IAAW0C,IAAO1C,EAAOwZ,YACpEnJ,GAAa,MAIVpR,EAAQkX,gBAAmBpK,EAAIqB,QAAUpN,IAAWwD,WACvDyJ,GAAOvJ,WAAWqH,IAAS2J,iBAAiB3I,EAAI/L,SAG/CmhB,GAAavN,GAA8B7H,KAG7C9M,EAAQkX,gBAAkBpK,EAAI2H,iBAAmB3H,EAAI2H,kBAC/CoL,GAAiB,CAC1B,CAGA,SAASM,IACPpR,GAAW1F,GAAM2E,IACjBgB,GAAoB3F,GAAM2E,GAAQhO,EAAQgJ,WAE1CwG,GAAe,CACb3C,SAAU1B,EACVnG,KAAM,SACN2K,KAAMlM,EACNsL,SAAUA,GACVC,kBAAmBA,GACnBnB,cAAef,GAEnB,CA+KF,EACAiT,sBAAuB,KACvBqC,eAAgB,WACdve,EAAIU,SAAU,YAAazF,KAAK6e,cAChC9Z,EAAIU,SAAU,YAAazF,KAAK6e,cAChC9Z,EAAIU,SAAU,cAAezF,KAAK6e,cAClC9Z,EAAIU,SAAU,WAAYoQ,IAC1B9Q,EAAIU,SAAU,YAAaoQ,IAC3B9Q,EAAIU,SAAU,YAAaoQ,GAC7B,EACA0N,aAAc,WACZ,IAAItF,EAAgBje,KAAK2E,GAAGsZ,cAC5BlZ,EAAIkZ,EAAe,UAAWje,KAAKqe,SACnCtZ,EAAIkZ,EAAe,WAAYje,KAAKqe,SACpCtZ,EAAIkZ,EAAe,YAAaje,KAAKqe,SACrCtZ,EAAIkZ,EAAe,cAAeje,KAAKqe,SACvCtZ,EAAIU,SAAU,cAAezF,KAC/B,EACAqe,QAAS,SAETrQ,GACE,IAAIrJ,EAAK3E,KAAK2E,GACVzD,EAAUlB,KAAKkB,QAEnB+O,GAAW1F,GAAM2E,IACjBgB,GAAoB3F,GAAM2E,GAAQhO,EAAQgJ,WAC1C2D,GAAY,OAAQ7N,KAAM,CACxBgO,IAAKA,IAEPmB,GAAWD,IAAUA,GAAOvJ,WAE5BsK,GAAW1F,GAAM2E,IACjBgB,GAAoB3F,GAAM2E,GAAQhO,EAAQgJ,WAEtCH,GAASkE,gBAMbyE,IAAsB,EACtBI,IAAyB,EACzBD,IAAwB,EACxB2Q,cAAcxjB,KAAKsgB,SACnBrG,aAAaja,KAAK0e,iBAElB7B,GAAgB7c,KAAKogB,SAErBvD,GAAgB7c,KAAKygB,cAGjBzgB,KAAKiZ,kBACPlU,EAAIU,SAAU,OAAQzF,MACtB+E,EAAIJ,EAAI,YAAa3E,KAAK8e,eAG5B9e,KAAKsjB,iBAELtjB,KAAKujB,eAEDnf,GACFkC,GAAIb,SAASkG,KAAM,cAAe,IAGpCrF,GAAI4I,GAAQ,YAAa,IAErBlB,IACE2B,KACF3B,EAAIuD,YAAcvD,EAAI0H,kBACrBxU,EAAQiX,YAAcnK,EAAI2H,mBAG7BvG,IAAWA,GAAQzJ,YAAcyJ,GAAQzJ,WAAW8d,YAAYrU,KAE5DC,KAAWF,IAAYS,IAA2C,UAA5BA,GAAYgC,cAEpDpC,IAAWA,GAAQ7J,YAAc6J,GAAQ7J,WAAW8d,YAAYjU,IAG9DN,KACElP,KAAKiZ,iBACPlU,EAAImK,GAAQ,UAAWlP,MAGzBoc,GAAkBlN,IAElBA,GAAOzI,MAAM,eAAiB,GAG1BkJ,KAAU+C,IACZzM,GAAYiJ,GAAQU,GAAcA,GAAY1O,QAAQuW,WAAazX,KAAKkB,QAAQuW,YAAY,GAG9FxR,GAAYiJ,GAAQlP,KAAKkB,QAAQwW,aAAa,GAE9ChH,GAAe,CACb3C,SAAU/N,KACVkG,KAAM,WACN2K,KAAM1B,GACNc,SAAU,KACVC,kBAAmB,KACnBnB,cAAef,IAGbqB,KAAWF,IACTc,IAAY,IAEdS,GAAe,CACbrB,OAAQF,GACRjJ,KAAM,MACN2K,KAAM1B,GACN2B,OAAQzB,GACRN,cAAef,IAIjB0C,GAAe,CACb3C,SAAU/N,KACVkG,KAAM,SACN2K,KAAM1B,GACNJ,cAAef,IAIjB0C,GAAe,CACbrB,OAAQF,GACRjJ,KAAM,OACN2K,KAAM1B,GACN2B,OAAQzB,GACRN,cAAef,IAGjB0C,GAAe,CACb3C,SAAU/N,KACVkG,KAAM,OACN2K,KAAM1B,GACNJ,cAAef,KAInB4B,IAAeA,GAAY8T,QAEvBzT,KAAaF,IACXE,IAAY,IAEdS,GAAe,CACb3C,SAAU/N,KACVkG,KAAM,SACN2K,KAAM1B,GACNJ,cAAef,IAGjB0C,GAAe,CACb3C,SAAU/N,KACVkG,KAAM,OACN2K,KAAM1B,GACNJ,cAAef,KAMnBjE,GAAS+F,SAEK,MAAZG,KAAkC,IAAdA,KACtBA,GAAWF,GACXG,GAAoBF,IAGtBU,GAAe,CACb3C,SAAU/N,KACVkG,KAAM,MACN2K,KAAM1B,GACNJ,cAAef,IAIjBhO,KAAK0jB,WA9IT1jB,KAAKuf,UAoJT,EACAA,SAAU,WACR1R,GAAY,UAAW7N,MACvBqP,GAASH,GAASC,GAAWC,GAAUE,GAASE,GAAUD,GAAaE,GAAcuC,GAASC,GAAWtC,GAAQM,GAAWC,GAAoBH,GAAWC,GAAoBsC,GAAaC,GAAgB3C,GAAcmC,GAAchI,GAASE,QAAUF,GAASC,MAAQD,GAASW,MAAQX,GAAS+F,OAAS,KAC/SmD,GAAkB3T,SAAQ,SAAUqF,GAClCA,EAAG8Y,SAAU,CACf,IACAxK,GAAkBzT,OAAS0S,GAASC,GAAS,CAC/C,EACAwR,YAAa,SAEb3V,GACE,OAAQA,EAAIgP,MACV,IAAK,OACL,IAAK,UACHhd,KAAKqe,QAAQrQ,GAEb,MAEF,IAAK,YACL,IAAK,WACCkB,KACFlP,KAAKyW,YAAYzI,GA8K3B,SAEAA,GACMA,EAAIiK,eACNjK,EAAIiK,aAAa2L,WAAa,QAGhC5V,EAAIuD,YAAcvD,EAAI0H,gBACxB,CApLUmO,CAAgB7V,IAGlB,MAEF,IAAK,cACHA,EAAI0H,iBAGV,EAMAoO,QAAS,WAQP,IAPA,IACInf,EADAof,EAAQ,GAER9kB,EAAWe,KAAK2E,GAAG1F,SACnBiD,EAAI,EACJwF,EAAIzI,EAASO,OACb0B,EAAUlB,KAAKkB,QAEZgB,EAAIwF,EAAGxF,IAGR0D,GAFJjB,EAAK1F,EAASiD,GAEEhB,EAAQgJ,UAAWlK,KAAK2E,IAAI,IAC1Cof,EAAMtkB,KAAKkF,EAAGqf,aAAa9iB,EAAQmX,aAAeiE,GAAY3X,IAIlE,OAAOof,CACT,EAMAhN,KAAM,SAAcgN,EAAOE,GACzB,IAAItlB,EAAQ,CAAC,EACT0Q,EAASrP,KAAK2E,GAClB3E,KAAK8jB,UAAUxkB,SAAQ,SAAUoB,EAAIwB,GACnC,IAAIyC,EAAK0K,EAAOpQ,SAASiD,GAErB0D,GAAQjB,EAAI3E,KAAKkB,QAAQgJ,UAAWmF,GAAQ,KAC9C1Q,EAAM+B,GAAMiE,EAEhB,GAAG3E,MACHikB,GAAgBjkB,KAAKmZ,wBACrB4K,EAAMzkB,SAAQ,SAAUoB,GAClB/B,EAAM+B,KACR2O,EAAOoU,YAAY9kB,EAAM+B,IACzB2O,EAAO4Q,YAAYthB,EAAM+B,IAE7B,IACAujB,GAAgBjkB,KAAKga,YACvB,EAKA0J,KAAM,WACJ,IAAIzM,EAAQjX,KAAKkB,QAAQ+V,MACzBA,GAASA,EAAMiN,KAAOjN,EAAMiN,IAAIlkB,KAClC,EAQA4F,QAAS,SAAmBjB,EAAIO,GAC9B,OAAOU,GAAQjB,EAAIO,GAAYlF,KAAKkB,QAAQgJ,UAAWlK,KAAK2E,IAAI,EAClE,EAQA8I,OAAQ,SAAgBvH,EAAMhG,GAC5B,IAAIgB,EAAUlB,KAAKkB,QAEnB,QAAc,IAAVhB,EACF,OAAOgB,EAAQgF,GAEf,IAAIwI,EAAgBpB,GAAciB,aAAavO,KAAMkG,EAAMhG,GAGzDgB,EAAQgF,QADmB,IAAlBwI,EACOA,EAEAxO,EAGL,UAATgG,GACF4O,GAAc5T,EAGpB,EAKAijB,QAAS,WACPtW,GAAY,UAAW7N,MACvB,IAAI2E,EAAK3E,KAAK2E,GACdA,EAAGqI,IAAW,KACdjI,EAAIJ,EAAI,YAAa3E,KAAKkZ,aAC1BnU,EAAIJ,EAAI,aAAc3E,KAAKkZ,aAC3BnU,EAAIJ,EAAI,cAAe3E,KAAKkZ,aAExBlZ,KAAKiZ,kBACPlU,EAAIJ,EAAI,WAAY3E,MACpB+E,EAAIJ,EAAI,YAAa3E,OAIvBokB,MAAMvhB,UAAUvD,QAAQ6D,KAAKwB,EAAG0f,iBAAiB,gBAAgB,SAAU1f,GACzEA,EAAGub,gBAAgB,YACrB,IAEAlgB,KAAKqe,UAELre,KAAKse,4BAEL1L,GAAUiH,OAAOjH,GAAUrP,QAAQvD,KAAK2E,IAAK,GAC7C3E,KAAK2E,GAAKA,EAAK,IACjB,EACAwb,WAAY,WACV,IAAK1Q,GAAa,CAEhB,GADA5B,GAAY,YAAa7N,MACrB+J,GAASkE,cAAe,OAC5B3H,GAAIkJ,GAAS,UAAW,QAEpBxP,KAAKkB,QAAQqW,mBAAqB/H,GAAQ7J,YAC5C6J,GAAQ7J,WAAW8d,YAAYjU,IAGjCC,IAAc,CAChB,CACF,EACA4T,WAAY,SAAoBzT,GAC9B,GAAgC,UAA5BA,EAAYgC,aAMhB,GAAInC,GAAa,CAEf,GADA5B,GAAY,YAAa7N,MACrB+J,GAASkE,cAAe,OAExBiB,GAAOvJ,YAAc0J,IAAWrP,KAAKkB,QAAQgU,MAAMO,YAE5CnG,GACTD,GAAOgR,aAAa7Q,GAASF,IAE7BD,GAAO4Q,YAAYzQ,IAJnBH,GAAOgR,aAAa7Q,GAASN,IAO3BlP,KAAKkB,QAAQgU,MAAMO,aACrBzV,KAAK6a,QAAQ3L,GAAQM,IAGvBlJ,GAAIkJ,GAAS,UAAW,IACxBC,IAAc,CAChB,OAvBEzP,KAAKmgB,YAwBT,GAsKEjN,IACFxO,EAAGe,SAAU,aAAa,SAAUuI,IAC7BjE,GAAS+F,QAAU4C,KAAwB1E,EAAIuD,YAClDvD,EAAI0H,gBAER,IAIF3L,GAASua,MAAQ,CACf5f,GAAIA,EACJK,IAAKA,EACLuB,IAAKA,GACLgB,KAAMA,GACNid,GAAI,SAAY5f,EAAIO,GAClB,QAASU,GAAQjB,EAAIO,EAAUP,GAAI,EACrC,EACAjG,OA3kEF,SAAgB8lB,EAAKhI,GACnB,GAAIgI,GAAOhI,EACT,IAAK,IAAIpa,KAAOoa,EACVA,EAAItZ,eAAed,KACrBoiB,EAAIpiB,GAAOoa,EAAIpa,IAKrB,OAAOoiB,CACT,EAkkEEvY,SAAUA,GACVrG,QAASA,GACTK,YAAaA,GACbyE,MAAOA,GACPH,MAAOA,GACPka,SAAU7H,GACV8H,eAAgB7H,GAChB8H,gBAAiBjR,GACjB/J,SAAUA,IAQZI,GAAS/L,IAAM,SAAU4mB,GACvB,OAAOA,EAAQ5X,GACjB,EAOAjD,GAASwD,MAAQ,WACf,IAAK,IAAIsX,EAAO9kB,UAAUP,OAAQ2N,EAAU,IAAIiX,MAAMS,GAAOC,EAAO,EAAGA,EAAOD,EAAMC,IAClF3X,EAAQ2X,GAAQ/kB,UAAU+kB,GAGxB3X,EAAQ,GAAGtN,cAAgBukB,QAAOjX,EAAUA,EAAQ,IACxDA,EAAQ7N,SAAQ,SAAUkO,GACxB,IAAKA,EAAO3K,YAAc2K,EAAO3K,UAAUhD,YACzC,KAAM,gEAAgE+N,OAAO,CAAC,EAAEgJ,SAASzT,KAAKqK,IAG5FA,EAAO8W,QAAOva,GAASua,MAAQtiB,EAAeA,EAAe,CAAC,EAAG+H,GAASua,OAAQ9W,EAAO8W,QAC7FhX,GAAcC,MAAMC,EACtB,GACF,EAQAzD,GAASgb,OAAS,SAAUpgB,EAAIzD,GAC9B,OAAO,IAAI6I,GAASpF,EAAIzD,EAC1B,EAGA6I,GAASib,QAhiFK,SAkiFd,IACIC,GACAC,GAEAC,GACAC,GACAC,GACAC,GAPAC,GAAc,GAGdC,IAAY,EAoHhB,SAASC,KACPF,GAAYjmB,SAAQ,SAAUomB,GAC5BlC,cAAckC,EAAWC,IAC3B,IACAJ,GAAc,EAChB,CAEA,SAASK,KACPpC,cAAc8B,GAChB,CAEA,IAAII,GAAazZ,IAAS,SAAU+B,EAAK9M,EAASmO,EAAQwW,GAExD,GAAK3kB,EAAQ4kB,OAAb,CACA,IAMIC,EANAvZ,GAAKwB,EAAI8H,QAAU9H,EAAI8H,QAAQ,GAAK9H,GAAKgI,QACzCvJ,GAAKuB,EAAI8H,QAAU9H,EAAI8H,QAAQ,GAAK9H,GAAKiI,QACzC+P,EAAO9kB,EAAQ+kB,kBACfC,EAAQhlB,EAAQilB,YAChBrb,EAAcnD,KACdye,GAAqB,EAGrBlB,KAAiB7V,IACnB6V,GAAe7V,EACfoW,KACAR,GAAW/jB,EAAQ4kB,OACnBC,EAAiB7kB,EAAQmlB,UAER,IAAbpB,KACFA,GAAWzb,GAA2B6F,GAAQ,KAIlD,IAAIiX,EAAY,EACZC,EAAgBtB,GAEpB,EAAG,CACD,IAAItgB,EAAK4hB,EACLlQ,EAAOvO,GAAQnD,GACf0D,EAAMgO,EAAKhO,IACXE,EAAS8N,EAAK9N,OACdD,EAAO+N,EAAK/N,KACZE,EAAQ6N,EAAK7N,MACbE,EAAQ2N,EAAK3N,MACbD,EAAS4N,EAAK5N,OACd+d,OAAa,EACbC,OAAa,EACbpb,EAAc1G,EAAG0G,YACjBE,EAAe5G,EAAG4G,aAClBoI,EAAQrN,GAAI3B,GACZ+hB,EAAa/hB,EAAGoG,WAChB4b,EAAahiB,EAAGqG,UAEhBrG,IAAOmG,GACT0b,EAAa9d,EAAQ2C,IAAoC,SAApBsI,EAAMlI,WAA4C,WAApBkI,EAAMlI,WAA8C,YAApBkI,EAAMlI,WACzGgb,EAAahe,EAAS8C,IAAqC,SAApBoI,EAAMjI,WAA4C,WAApBiI,EAAMjI,WAA8C,YAApBiI,EAAMjI,aAE3G8a,EAAa9d,EAAQ2C,IAAoC,SAApBsI,EAAMlI,WAA4C,WAApBkI,EAAMlI,WACzEgb,EAAahe,EAAS8C,IAAqC,SAApBoI,EAAMjI,WAA4C,WAApBiI,EAAMjI,YAG7E,IAAIkb,EAAKJ,IAAeza,KAAK4S,IAAInW,EAAQgE,IAAMwZ,GAAQU,EAAahe,EAAQ2C,IAAgBU,KAAK4S,IAAIrW,EAAOkE,IAAMwZ,KAAUU,GACxHG,EAAKJ,IAAe1a,KAAK4S,IAAIpW,EAASkE,IAAMuZ,GAAQW,EAAale,EAAS8C,IAAiBQ,KAAK4S,IAAItW,EAAMoE,IAAMuZ,KAAUW,GAE9H,IAAKpB,GAAYe,GACf,IAAK,IAAIpkB,EAAI,EAAGA,GAAKokB,EAAWpkB,IACzBqjB,GAAYrjB,KACfqjB,GAAYrjB,GAAK,CAAC,GAKpBqjB,GAAYe,GAAWM,IAAMA,GAAMrB,GAAYe,GAAWO,IAAMA,GAAMtB,GAAYe,GAAW3hB,KAAOA,IACtG4gB,GAAYe,GAAW3hB,GAAKA,EAC5B4gB,GAAYe,GAAWM,GAAKA,EAC5BrB,GAAYe,GAAWO,GAAKA,EAC5BrD,cAAc+B,GAAYe,GAAWX,KAE3B,GAANiB,GAAiB,GAANC,IACbT,GAAqB,EAGrBb,GAAYe,GAAWX,IAAMpF,YAAY,WAEnCsF,GAA6B,IAAf7lB,KAAK8mB,OACrB/c,GAAS+F,OAAO+O,aAAawG,IAI/B,IAAI0B,EAAgBxB,GAAYvlB,KAAK8mB,OAAOD,GAAKtB,GAAYvlB,KAAK8mB,OAAOD,GAAKX,EAAQ,EAClFc,EAAgBzB,GAAYvlB,KAAK8mB,OAAOF,GAAKrB,GAAYvlB,KAAK8mB,OAAOF,GAAKV,EAAQ,EAExD,mBAAnBH,GACoI,aAAzIA,EAAe5iB,KAAK4G,GAASE,QAAQtE,WAAWqH,IAAUga,EAAeD,EAAe/Y,EAAKqX,GAAYE,GAAYvlB,KAAK8mB,OAAOniB,KAKvI4H,GAASgZ,GAAYvlB,KAAK8mB,OAAOniB,GAAIqiB,EAAeD,EACtD,EAAE9X,KAAK,CACL6X,MAAOR,IACL,MAIRA,GACF,OAASplB,EAAQ+lB,cAAgBV,IAAkBzb,IAAgByb,EAAgB/c,GAA2B+c,GAAe,KAE7Hf,GAAYY,CA/Fe,CAgG7B,GAAG,IAECc,GAAO,SAAcrY,GACvB,IAAIE,EAAgBF,EAAKE,cACrBa,EAAcf,EAAKe,YACnBV,EAASL,EAAKK,OACdW,EAAiBhB,EAAKgB,eACtBY,EAAwB5B,EAAK4B,sBAC7BN,EAAqBtB,EAAKsB,mBAC1BE,EAAuBxB,EAAKwB,qBAChC,GAAKtB,EAAL,CACA,IAAIoY,EAAavX,GAAeC,EAChCM,IACA,IAAI8M,EAAQlO,EAAcqY,gBAAkBrY,EAAcqY,eAAe5nB,OAASuP,EAAcqY,eAAe,GAAKrY,EAChH9M,EAASwD,SAASga,iBAAiBxC,EAAMjH,QAASiH,EAAMhH,SAC5D5F,IAEI8W,IAAeA,EAAWxiB,GAAGmY,SAAS7a,KACxCwO,EAAsB,SACtBzQ,KAAKqnB,QAAQ,CACXnY,OAAQA,EACRU,YAAaA,IAXS,CAc5B,EAEA,SAAS0X,KAAU,CAsCnB,SAASC,KAAU,CApCnBD,GAAOzkB,UAAY,CACjB2kB,WAAY,KACZC,UAAW,SAAmBC,GAC5B,IAAI1X,EAAoB0X,EAAM1X,kBAC9BhQ,KAAKwnB,WAAaxX,CACpB,EACAqX,QAAS,SAAiBM,GACxB,IAAIzY,EAASyY,EAAMzY,OACfU,EAAc+X,EAAM/X,YACxB5P,KAAK+N,SAASoL,wBAEVvJ,GACFA,EAAYuJ,wBAGd,IAAI+E,EAAcvU,GAAS3J,KAAK+N,SAASpJ,GAAI3E,KAAKwnB,WAAYxnB,KAAKkB,SAE/Dgd,EACFle,KAAK+N,SAASpJ,GAAG0b,aAAanR,EAAQgP,GAEtCle,KAAK+N,SAASpJ,GAAGsb,YAAY/Q,GAG/BlP,KAAK+N,SAASiM,aAEVpK,GACFA,EAAYoK,YAEhB,EACAkN,KAAMA,IAGRlkB,EAASskB,GAAQ,CACf3Z,WAAY,kBAKd4Z,GAAO1kB,UAAY,CACjBwkB,QAAS,SAAiBO,GACxB,IAAI1Y,EAAS0Y,EAAM1Y,OAEf2Y,EADcD,EAAMhY,aACY5P,KAAK+N,SACzC8Z,EAAe1O,wBACfjK,EAAOvJ,YAAcuJ,EAAOvJ,WAAW8d,YAAYvU,GACnD2Y,EAAe7N,YACjB,EACAkN,KAAMA,IAGRlkB,EAASukB,GAAQ,CACf5Z,WAAY,kBA4sBd5D,GAASwD,MAAM,IAt/Bf,WACE,SAASua,IASP,IAAK,IAAIjjB,KART7E,KAAKoN,SAAW,CACd0Y,QAAQ,EACRiC,yBAAyB,EACzB9B,kBAAmB,GACnBE,YAAa,GACbc,cAAc,GAGDjnB,KACQ,MAAjB6E,EAAGoM,OAAO,IAAkC,mBAAbjR,KAAK6E,KACtC7E,KAAK6E,GAAM7E,KAAK6E,GAAIoK,KAAKjP,MAG/B,CAyFA,OAvFA8nB,EAAWjlB,UAAY,CACrB6M,YAAa,SAAqBb,GAChC,IAAIE,EAAgBF,EAAKE,cAErB/O,KAAK+N,SAASkL,gBAChBvU,EAAGe,SAAU,WAAYzF,KAAKgoB,mBAE1BhoB,KAAKkB,QAAQ8X,eACftU,EAAGe,SAAU,cAAezF,KAAKioB,2BACxBlZ,EAAc+G,QACvBpR,EAAGe,SAAU,YAAazF,KAAKioB,2BAE/BvjB,EAAGe,SAAU,YAAazF,KAAKioB,0BAGrC,EACAC,kBAAmB,SAA2BR,GAC5C,IAAI3Y,EAAgB2Y,EAAM3Y,cAGrB/O,KAAKkB,QAAQinB,gBAAmBpZ,EAAcM,QACjDrP,KAAKgoB,kBAAkBjZ,EAE3B,EACAmY,KAAM,WACAlnB,KAAK+N,SAASkL,gBAChBlU,EAAIU,SAAU,WAAYzF,KAAKgoB,oBAE/BjjB,EAAIU,SAAU,cAAezF,KAAKioB,2BAClCljB,EAAIU,SAAU,YAAazF,KAAKioB,2BAChCljB,EAAIU,SAAU,YAAazF,KAAKioB,4BAGlCrC,KACAH,KAxpEJxL,aAAalU,IACbA,QAAmB,CAypEjB,EACAqiB,QAAS,WACP/C,GAAaH,GAAeD,GAAWO,GAAYF,GAA6BH,GAAkBC,GAAkB,KACpHG,GAAY/lB,OAAS,CACvB,EACAyoB,0BAA2B,SAAmCja,GAC5DhO,KAAKgoB,kBAAkBha,GAAK,EAC9B,EACAga,kBAAmB,SAA2Bha,EAAKqR,GACjD,IAAIhT,EAAQrM,KAERwM,GAAKwB,EAAI8H,QAAU9H,EAAI8H,QAAQ,GAAK9H,GAAKgI,QACzCvJ,GAAKuB,EAAI8H,QAAU9H,EAAI8H,QAAQ,GAAK9H,GAAKiI,QACzC/K,EAAOzF,SAASga,iBAAiBjT,EAAGC,GAMxC,GALA4Y,GAAarX,EAKTqR,GAAYrf,KAAKkB,QAAQ6mB,yBAA2B7jB,GAAQD,GAAcG,EAAQ,CACpFshB,GAAW1X,EAAKhO,KAAKkB,QAASgK,EAAMmU,GAEpC,IAAIgJ,EAAiB7e,GAA2B0B,GAAM,IAElDsa,IAAeF,IAA8B9Y,IAAM2Y,IAAmB1Y,IAAM2Y,KAC9EE,IAA8BM,KAE9BN,GAA6B/E,aAAY,WACvC,IAAI+H,EAAU9e,GAA2B/D,SAASga,iBAAiBjT,EAAGC,IAAI,GAEtE6b,IAAYD,IACdA,EAAiBC,EACjB7C,MAGFC,GAAW1X,EAAK3B,EAAMnL,QAASonB,EAASjJ,EAC1C,GAAG,IACH8F,GAAkB3Y,EAClB4Y,GAAkB3Y,EAEtB,KAAO,CAEL,IAAKzM,KAAKkB,QAAQ+lB,cAAgBzd,GAA2B0B,GAAM,KAAUvD,KAE3E,YADA8d,KAIFC,GAAW1X,EAAKhO,KAAKkB,QAASsI,GAA2B0B,GAAM,IAAQ,EACzE,CACF,GAEKlI,EAAS8kB,EAAY,CAC1Bna,WAAY,SACZN,qBAAqB,GAEzB,GA24BAtD,GAASwD,MAAMga,GAAQD,IAEvB,YCtsHM,GAA+BxpB,OAAOC,IAAIC,IAAI,OAAQ,iDCA5D,MAAM,GAA+BF,OAAOC,IAAIC,IAAI,OAAQ,wCCA5D,MAAM,GAA+BF,OAAOC,IAAIC,IAAI,OAAQ,8DCA5D,MAAM,GAA+BF,OAAOC,IAAIC,IAAI,OAAQ,sDCA5D,MAAM,GAA+BF,OAAOC,IAAIC,IAAI,OAAQ,wCCA5D,MAAM,GAA+BF,OAAOC,IAAIC,IAAI,OAAQ,qECe7C,MAAMuqB,WAAqB,MACxC1oB,cACEC,SAASC,YACT,OAAgBC,KAAM,WAAO,IAC7B,OAAgBA,KAAM,YAAQ,IAC9B,OAAgBA,KAAM,YAAQ,IAC9B,OAAgBA,KAAM,mBAAe,IACrC,OAAgBA,KAAM,aAAS,IAC/B,OAAgBA,KAAM,YAAQ,IAC9B,OAAgBA,KAAM,gBAAY,IAClC,OAAgBA,KAAM,eAAW,EACnC,CACAwoB,OAAOC,GACL3oB,MAAM0oB,OAAOC,GACbzoB,KAAKT,IAAMS,KAAKhB,MAAM0pB,OAAS,uBAAuB,QACtD1oB,KAAKkG,KAAO,KAAOlG,KAAKT,IAAI2G,QAAU,IACtClG,KAAK2oB,KAAO,KAAO3oB,KAAKT,IAAIopB,QAAU,IACtC3oB,KAAK4oB,YAAc,KAAO5oB,KAAKT,IAAIqpB,eAAiB,IACpD5oB,KAAK6oB,MAAQ,KAAO7oB,KAAKT,IAAIspB,SAAW,IACxC7oB,KAAK3B,KAAO,KAAO2B,KAAKT,IAAIlB,QAAU,IACtC2B,KAAK8oB,SAAW,KAAO9oB,KAAKT,IAAIupB,aAAc,GAC9C9oB,KAAK+oB,QAAU,KAAO/oB,KAAKhB,MAAM+pB,UAAW,EAC9C,CACA3pB,YACE,MAAO,2BACT,CACA4pB,QACE,OAAOhpB,KAAKkG,QAAS,EAAAxG,EAAA,GAAS,uBAAuB,OAAQ,CAC3DupB,WAAYjpB,KAAKkpB,gBACb,qBAAqB,mCAC7B,CACAC,UACE,OAAOxpB,EAAE,MAAO,CACdP,UAAW,cACVO,EAAE,KAAM,KAAMK,KAAKopB,SAAStF,WACjC,CACAsF,SACE,MAAMzqB,EAAQ,IAAI,MAiElB,OAhEAA,EAAMC,IAAI,OAAQe,EAAE,MAAO,CACzBP,UAAW,cACVO,EAAE,QAAS,KAAM,qBAAqB,0CAA2CA,EAAE,QAAS,CAC7FP,UAAW,cACXiqB,YAAa,qBAAqB,+CAClCnpB,MAAOF,KAAKkG,OACZojB,QAAS5P,IACP,MAAMzX,EAASyX,EAAEzX,OACjBjC,KAAKkG,KAAKjE,EAAO/B,OACjBF,KAAK2oB,MAAK,KAAAA,MAAK1mB,EAAO/B,OAAO,KAE5B,IACLvB,EAAMC,IAAI,OAAQe,EAAE,MAAO,CACzBP,UAAW,cACVO,EAAE,QAAS,KAAM,qBAAqB,0CAA2CA,EAAE,QAAS,CAC7FP,UAAW,cACXmqB,KAAMvpB,KAAK2oB,QACR,IACLhqB,EAAMC,IAAI,cAAee,EAAE,MAAO,CAChCP,UAAW,cACVO,EAAE,QAAS,KAAM,qBAAqB,iDAAkDA,EAAE,WAAY,CACvGP,UAAW,cACXmqB,KAAMvpB,KAAK4oB,eACR,IACLjqB,EAAMC,IAAI,QAASe,EAAE,MAAO,CAC1BP,UAAW,cACVO,EAAE,QAAS,KAAM,qBAAqB,2CAA4CA,EAAE,KAAmB,CACxGP,UAAW,cACXiqB,YAAa,UACbE,KAAMvpB,KAAK6oB,SACR,IACLlqB,EAAMC,IAAI,OAAQe,EAAE,MAAO,CACzBP,UAAW,cACVO,EAAE,QAAS,KAAM,qBAAqB,0CAA2CA,EAAE,MAAO,CAC3FP,UAAW,YACV,qBAAqB,uCAAwC,CAC9D6J,EAAGtJ,EAAE,IAAK,CACR8c,KAAM,uCACN+M,SAAU,UAET7pB,EAAE,QAAS,CACdP,UAAW,cACXiqB,YAAa,cACbE,KAAMvpB,KAAK3B,QACR,IACLM,EAAMC,IAAI,SAAUe,EAAE,MAAO,CAC3BP,UAAW,cACVO,EAAE,MAAO,KAAMA,EAAE,QAAS,CAC3BP,UAAW,YACVO,EAAE,QAAS,CACZqd,KAAM,WACNuM,KAAMvpB,KAAK8oB,WACT,qBAAqB,4CAA6C,IACtEnqB,EAAMC,IAAI,SAAUe,EAAE,MAAO,CAC3BP,UAAW,4BACVO,EAAE,IAAQ,CACXqd,KAAM,SACN5d,UAAW,2CACXqqB,QAASzpB,KAAKypB,SACb,qBAAqB,6CAA8CzpB,KAAKT,IAAImqB,QAAU/pB,EAAE,SAAU,CACnGqd,KAAM,SACN5d,UAAW,6BACXyB,QAASb,KAAK2pB,OAAO1a,KAAKjP,OACzB,qBAAqB,mDAAoD,IACrErB,CACT,CACAuqB,aACE,MAAO,CACLhjB,KAAMlG,KAAKkG,OACXyiB,KAAM3oB,KAAK2oB,OACXC,YAAa5oB,KAAK4oB,cAClBC,MAAO7oB,KAAK6oB,QACZxqB,KAAM2B,KAAK3B,OACXyqB,SAAU9oB,KAAK8oB,WACfC,QAAS/oB,KAAK+oB,UAElB,CACAhoB,SAAS2Y,GACPA,EAAEhE,iBACF1V,KAAKypB,SAAU,EAIfzpB,KAAKT,IAAImkB,KAAK1jB,KAAKkpB,cAAc3oB,MAAK,IAAMP,KAAK4pB,SAAQ,IAAM5pB,KAAKypB,SAAU,GAChF,CACAE,SACE,GAAIE,QAAQ,KAAY,qBAAqB,wDAAyD,CACpG,MAAM5qB,EAAW,cAAc,QAAQuB,QAAOjB,GAAOA,EAAIgK,WAAavJ,KAAKT,MAC3ES,KAAKT,IAAIoqB,SAASppB,MAAK,KACrBtB,EAASK,SAAQC,GAAOA,EAAIuqB,SAAS,CACnCb,WAAY,CACVc,SAAS,GAGXC,cAAe,CACbzgB,OAAQ,UAGZ5J,EAAEgB,QAAQ,IAEZX,KAAK4pB,MACP,CACF,ECjJF,SAASK,GAAQ1qB,GACf,OAAOI,EAAE,KAAM,CACb,UAAWJ,EAAImB,KACf+F,MAAO,CACLoiB,MAAOtpB,EAAIspB,UAEZlpB,EAAE,MAAO,CACVP,UAAW,qBACV,EAAA8qB,EAAA,GAAQ3qB,GAAMI,EAAE,OAAQ,CACzBP,UAAW,oBACVG,EAAI2G,QAASvG,EAAE,IAAQ,CACxBP,UAAW,sBACXf,KAAM,oBACNwC,QAAS,IAAM,eAAe0nB,GAAc,CAC1CG,MAAOnpB,QAELA,EAAIwqB,WAAgC,OAAnBxqB,EAAI4qB,YAAuBxqB,EAAE,KAAM,CACxDP,UAAW,iCACV,EAAAC,EAAA,GAAS,cAAc,SAASmB,QAAO6Y,GAASA,EAAM9P,WAAahK,IAAK0B,IAAIgpB,KACjF,CDgIAnsB,OAAOC,IAAIa,IAAI,cAAe,gCAAiC2pB,IC/HhD,MAAM6B,WAAiB,MACpC5B,OAAOC,GACL3oB,MAAM0oB,OAAOC,GAMbzoB,KAAKqqB,iBAAmB,EACxBrqB,KAAKypB,SAAU,EACf,iBAAiB,CAAC,WAAWlpB,MAAK,KAChCP,KAAKypB,SAAU,EACf9pB,EAAEgB,QAAQ,GAEd,CACAwoB,UACE,GAAInpB,KAAKypB,QACP,OAAO9pB,EAAE,IAAkB,MAE7B,MAAM2qB,EAAiBtqB,KAAKuqB,QAAQ,+BAAgC,GAC9DC,EAAiBxqB,KAAKuqB,QAAQ,+BAAgC,GAC9DE,EAAmBzqB,KAAKuqB,QAAQ,iCAAkC,GAClEG,EAAmB1qB,KAAKuqB,QAAQ,iCAAkC,GAClExrB,GAAO,EAAAM,EAAA,GAAS,cAAc,QAAQmB,QAAOjB,IAAQA,EAAIgK,YAC/D,OAAO5J,EAAE,MAAO,CACdP,UAAW,eACVO,EAAE,MAAO,CACVP,UAAW,oBACVO,EAAE,MAAO,CACVP,UAAW,YACXgD,IAAKpC,KAAKqqB,iBACVM,SAAU3qB,KAAK4qB,eAAe3b,KAAKjP,OAClCL,EAAE,MAAO,CACVP,UAAW,kBACVO,EAAE,MAAO,CACVP,UAAW,YACVO,EAAE,QAAS,KAAM,qBAAqB,2CAA4CA,EAAE,KAAM,CAC3FP,UAAW,4BACVL,EAAKyB,QAAOjB,GAA0B,OAAnBA,EAAI4qB,aAAwB5qB,EAAIwqB,YAAW9oB,IAAIgpB,KAAWtqB,EAAE,IAAQ,CACxFP,UAAW,wBACXf,KAAM,cACNwC,QAAS,IAAM,eAAe0nB,GAAc,CAC1CQ,SAAS,KAEV,qBAAqB,sDAAuDppB,EAAE,MAAO,CACtFP,UAAW,gCACVO,EAAE,QAAS,KAAM,qBAAqB,6CAA8CA,EAAE,KAAM,CAC7FP,UAAW,WACVL,EAAKyB,QAAOjB,GAA0B,OAAnBA,EAAI4qB,aAAqBpT,MAAK,CAAC9N,EAAG6W,IAAM7W,EAAE/C,OAAO2kB,cAAc/K,EAAE5Z,UAASjF,IAAIgpB,KAAWtqB,EAAE,IAAQ,CACvHP,UAAW,wBACXf,KAAM,cACNwC,QAAS,IAAM,eAAe0nB,GAAc,CAC1CQ,SAAS,KAEV,qBAAqB,wDAAyDppB,EAAE,KAAM,CACvFrB,MAAO,qBAAqB,4CAC3BqB,EAAE,MAAO,CACVP,UAAW,cACVO,EAAE,QAAS,KAAM,qBAAqB,4DAA6DA,EAAE,MAAO,CAC7GP,UAAW,YACV,qBAAqB,yDAA0DO,EAAE,MAAO,CACzFP,UAAW,0BACVO,EAAE,QAAS,CACZP,UAAW,cACX4d,KAAM,SACN8N,IAAK,IACL5qB,MAAOoqB,IACPhB,QAAS,KAAS,QAAStpB,KAAK+qB,WAAW9b,KAAKjP,KAAMsqB,EAAgBE,MACpE,qBAAqB,uDAAwD7qB,EAAE,QAAS,CAC1FP,UAAW,cACX4d,KAAM,SACN8N,IAAKR,IACLf,KAAMiB,MACF7qB,EAAE,MAAO,CACbP,UAAW,cACVO,EAAE,QAAS,KAAM,qBAAqB,8DAA+DA,EAAE,MAAO,CAC/GP,UAAW,YACV,qBAAqB,2DAA4DO,EAAE,MAAO,CAC3FP,UAAW,0BACVO,EAAE,QAAS,CACZP,UAAW,cACX4d,KAAM,SACN8N,IAAK,IACL5qB,MAAOuqB,IACPnB,QAAS,KAAS,QAAStpB,KAAK+qB,WAAW9b,KAAKjP,KAAMyqB,EAAkBC,MACtE,qBAAqB,uDAAwD/qB,EAAE,QAAS,CAC1FP,UAAW,cACX4d,KAAM,SACN8N,IAAKL,IACLlB,KAAMmB,MACF/qB,EAAE,MAAO,CACbP,UAAW,4BACVY,KAAKgrB,kBAAmBrrB,EAAE,MAAO,CAClCP,UAAW,sBACVO,EAAE,IAAK,KAAM,qBAAqB,8CACvC,CACAirB,eAAenC,GACbzoB,KAAK2M,EAAE,YAAY3O,MAAMiD,KAAIyY,IAC3B,UAAgBA,EAAG,CACjBxE,MAAO,OACPoD,MAAO,GACPC,kBAAkB,EAClBC,oBAAqB,EACrBV,UAAW,IACXV,cAAe,IACfO,UAAW,oBACXF,WAAY,uBACZwT,OAAQvR,GAAK1Z,KAAKkrB,aAAaxR,IAC/B,GAEN,CACAqR,WAAWI,EAASC,EAASlrB,GAC3BirB,EAAQjrB,GACRkrB,EAAQrf,KAAK+O,IAAI5a,EAAOkrB,KAC1B,CACAF,aAAaxR,GAIPA,EAAEjI,gBAAgB4Z,kBAAoB3R,EAAElI,cAAc8Z,kBACxD,kBAAkB,OAAQ5R,EAAEhI,KAAKsS,aAAa,YAAY8F,SAAS,CACjEb,WAAY,CACVkB,SAAU,KACVJ,SAAS,GAEXC,cAAe,CACbzgB,OAAQ,QAOd,MAAMwa,EAAQ/jB,KAAK2M,EAAE,0BAA0B1L,KAAI,WACjD,MAAO,CACLP,GAAIiM,EAAE3M,MAAMgP,KAAK,MACjB/P,SAAU0N,EAAE3M,MAAMsH,KAAK,MAAMrG,KAAI,WAC/B,OAAO0L,EAAE3M,MAAMgP,KAAK,KACtB,IAAGhR,MAEP,IAAGA,MAKH+lB,EAAMzkB,SAAQ,CAACC,EAAK2C,KAClB,MAAMqH,EAAS,kBAAkB,OAAQhK,EAAImB,IAC7C6I,EAAOugB,SAAS,CACdb,WAAY,CACVkB,SAAUjoB,EACV6nB,SAAS,GAEXC,cAAe,CACbzgB,OAAQ,QAGZhK,EAAIN,SAASK,SAAQ,CAAC+Z,EAAOkS,KAC3B,kBAAkB,OAAQlS,GAAOyQ,SAAS,CACxCb,WAAY,CACVkB,SAAUoB,EACVxB,SAAS,GAEXC,cAAe,CACbzgB,WAEF,GACF,IAEJ,YAAY,CACViiB,IAAK,oBAAoB,UAAY,cACrCC,OAAQ,OACR9f,KAAM,CACJoY,WAGJ/jB,KAAKqqB,mBACL1qB,EAAEgB,QACJ,EAEF7C,OAAOC,IAAIa,IAAI,cAAe,4BAA6BwrB,6BC/M5C,MAAMsB,GACnB7rB,eACE,OAAgBG,KAAM,sBAAkB,EAC1C,CACA2rB,WAAWlrB,GAIT,QAHiB,IAAbA,IACFA,EAAW,KAERT,KAAK4rB,eACR,OAAO5rB,KAAK6rB,MAAMprB,GAEpB,MAAMqrB,EAAmBrrB,EAASD,QAAOurB,IAAY/rB,KAAK4rB,eAAeI,IAAID,KAC7E,OAAgC,IAA5BD,EAAiBtsB,OACZysB,QAAQC,QAAQ,eAAc,SAEhClsB,KAAK6rB,MAAMC,EACpB,CACAH,YAAYlrB,GAMV,YAJiB,IAAbA,IACFA,EAAW,IAEmC,MAAxBT,KAAK4rB,iBAAiD5rB,KAAK4rB,eAAiB,IAAIO,KACjG,gBAAe,OAAQ,CAC5BJ,QAAStrB,EAAS2U,KAAK,OACtB7U,MAAKiG,IACN/F,EAASnB,SAAQysB,GAAW/rB,KAAK4rB,eAAehtB,IAAImtB,KAC7CvlB,IAEX,EAEF1I,OAAOC,IAAIa,IAAI,cAAe,6BAA8B8sB,ICjC5D,MAAM,GAA+B5tB,OAAOC,IAAIC,IAAI,OAAQ,mCCA5D,MAAM,GAA+BF,OAAOC,IAAIC,IAAI,OAAQ,wCCA5D,MAAM,GAA+BF,OAAOC,IAAIC,IAAI,OAAQ,+BCE7C,MAAMouB,WAAY,MAC/BlmB,OACE,OAAO,eAAgB,QAAQ/C,KAAKnD,KACtC,CACA2oB,OACE,OAAO,eAAgB,QAAQxlB,KAAKnD,KACtC,CACA4oB,cACE,OAAO,eAAgB,eAAezlB,KAAKnD,KAC7C,CACA6oB,QACE,OAAO,eAAgB,SAAS1lB,KAAKnD,KACvC,CACAqsB,gBACE,OAAO,eAAgB,iBAAiBlpB,KAAKnD,KAC/C,CACAssB,iBACE,OAAO,eAAgB,kBAAkBnpB,KAAKnD,KAChD,CACA3B,OACE,OAAO,eAAgB,QAAQ8E,KAAKnD,KACtC,CACAmqB,WACE,OAAO,eAAgB,YAAYhnB,KAAKnD,KAC1C,CACAuJ,SACE,OAAO,YAAa,UAAUpG,KAAKnD,KACrC,CACAf,WACE,OAAO,aAAc,YAAYkE,KAAKnD,KACxC,CACAusB,cACE,OAAO,eAAgB,eAAeppB,KAAKnD,KAC7C,CACA+pB,UACE,OAAO,eAAgB,WAAW5mB,KAAKnD,KACzC,CACA8oB,WACE,OAAO,eAAgB,YAAY3lB,KAAKnD,KAC1C,CACAwsB,kBACE,OAAO,eAAgB,mBAAmBrpB,KAAKnD,KACjD,CACAysB,eACE,OAAO,eAAgB,eAAgB,oBAAqBtpB,KAAKnD,KACnE,CACA0sB,uBACE,OAAO,YAAa,wBAAwBvpB,KAAKnD,KACnD,CACA2sB,eACE,OAAO,eAAgB,gBAAgBxpB,KAAKnD,KAC9C,CACA4sB,qBACE,OAAO,eAAgB,sBAAsBzpB,KAAKnD,KACpD,CACA6sB,qBACE,OAAO,eAAgB,sBAAsB1pB,KAAKnD,KACpD,CACA8sB,YACE,OAAO,KAAS,WAAY,UAAU,CAAC3C,EAAU5gB,IAAwB,OAAb4gB,IAAgC,IAAX5gB,IAAkBpG,KAAKnD,KAC1G,EAEFlC,OAAOC,IAAIa,IAAI,cAAe,oBAAqBwtB,IC9DnD,WAAgB,IAAI,aACnBxtB,IAAI,OAAQwtB,KCMb,qBAAqB,eAAenuB,IAClCA,EAAI8uB,QAAU,IAAIrB,GAClBztB,EAAIC,cAAcC,IAAI,eAAe6uB,aAAa5C,KCAlD,IAAA1rB,QAAO,cAA0B,UAAU,WACzCsB,KAAKypB,SAAU,CACjB,KACA,IAAA/qB,QAAO,cAA0B,YAAY,WAC3C,mBAAmB6B,MAAK,KACtBP,KAAKypB,SAAU,EACf9pB,EAAEgB,QAAQ,GAEd,KACA,IAAAssB,UAAS,cAA0B,QAAQ,SAAUC,EAAUzE,GAC7D,OAAIzoB,KAAKypB,QACA9pB,EAAE,IAAkB,MAEtButB,EAASzE,EAClB,KACA,IAAAwE,UAAS,IAAK,0BAA0B,CAACC,EAAUzuB,KACjD,MAAM0uB,EAAY1uB,EAAWsF,MAAM,aACnC,OAAIopB,EAEeD,EADQzuB,EAAWyS,OAAOic,EAAU,GAAG3tB,SAExCyB,KAAImsB,GAAYD,EAAU,GAAKC,IAE1CF,EAASzuB,EAAW,KAE7B,IAAAC,QAAO,cAA0B,cAAcC,KAC7C,EAAAU,EAAA,GAAS,cAAc,SAASmB,QAAOjB,GAAOA,EAAIotB,iBAAgBrtB,SAAQC,GAAOZ,EAAMC,IAAI,MAAQW,EAAImB,KAAM,CAC3GpC,OAAO,EAAAoB,EAAA,GAASH,GAChB8tB,SAAU,IAAM9tB,EAAImkB,KAAK,CACvBiJ,cAAc,IAEhBW,OAAQ5b,GACF,YAAaA,EAAa,KACN,cAApBA,EAAKjT,YAAkD,oBAApBiT,EAAKjT,YAAoCiT,EAAKjT,WAAW8uB,WAAW,iBAAqC,IAAnB7b,EAAK8b,WAAuB9b,EAAK8b,UACrJ7tB,EAAE,IAAoB,CAC3BlB,WAAY,MAAMmP,OAAOrO,EAAImB,KAAM,KAAKkN,OAAO8D,EAAKjT,YACpDgvB,WAAY/b,EAAK+b,aAGd,QAER,KAEL,IAAA/uB,QAAO,cAA0B,qBAAqBC,IACpD,MAAMI,GAAO,EAAAM,EAAA,GAAS,cAAc,QAAQmB,QAAOjB,IAAQA,EAAIotB,kBAC3D5tB,EAAKS,QACPb,EAAMC,IAAI,MAAOe,EAAE,IAAU,CAC3BP,UAAW,0BACXsuB,gBAAiB,sBACjBpvB,MAAO,qBAAqB,yDAC5BD,KAAM,cACNsvB,UAAW,MACV5uB,EAAKkC,KAAI1B,GAAOI,EAAE,IAAQ,CAC3BtB,MAAM,EACNwC,QAAS,IAAMtB,EAAImkB,KAAK,CACtBiJ,cAAc,KAEf,EAAC,EAAAzC,EAAA,GAAQ3qB,EAAK,CACfH,UAAW,gBACT,IAAKG,EAAI2G,YACf,IDzDF0nB,IACAC,KETA,IAAAnvB,QAAO,cAA0B,cAAcC,IAC7CA,EAAMC,IAAI,iBAAkB,CAC1BP,KAAM,aACNC,MAAO,qBAAqB,uDAC5BisB,QAAS,KACP,MAAMuD,EAAUhlB,SAAS,mCAAoC,IAC7D,OAAOnJ,EAAE,IAAiB,CACxBouB,aAAcD,EAAU,qBAAqB,4DAA6D,CACxGE,MAAOF,IACJ,qBAAqB,6DAC1B1rB,IAAK,mBACLlB,QAAS,CAAC,CACRhB,MAAO,KACP5B,MAAO,qBAAqB,8DAC3B,CACD4B,MAAO,KACP5B,MAAO,qBAAqB,6DAC3B,CACD4B,MAAO,QACP5B,MAAO,qBAAqB,+DAE9B,GAEH,GAAG,KCxBR,IAAAI,QAAO,cAAqB,2BAA2B,SAAUC,GAC/DA,EAAMC,IAAI,2BAA2BI,GAC5BW,EAAEC,EAA4B6B,OAAOwB,OAAO,CAAC,EAAGjE,EAAO,CAC5DqB,aAAcL,KAAKiuB,SAASjvB,EAAMurB,aAGxC,GHMiC,uEIfpB,SAASL,EAAQ3qB,EAAKP,EAAOivB,QAC5B,IAAVjvB,IACFA,EAAQ,CAAC,QAEM,IAAbivB,IACFA,EAAW,CAAC,GAEd,MAAMC,EAAU3uB,GAAOA,EAAIlB,QACrB,SACJ8vB,GAAW,GACTF,EAQJ,OAPAjvB,EAAMI,UAAY,IAAU,CAACJ,EAAMI,UAAW,oBAAqB8uB,EAAU3uB,EAAIlB,OAAS,YACtFkB,GAAO4uB,GACTnvB,EAAMyH,MAAQzH,EAAMyH,OAAS,CAAC,EAC9BzH,EAAMyH,MAAM,WAAalH,EAAIspB,SACnBtpB,IACVP,EAAMI,WAAa,aAEd8uB,EAAUvuB,EAAE,IAAKX,GAASW,EAAE,OAAQX,EAC7C,CACAlB,OAAOC,IAAIa,IAAI,cAAe,yBAA0BsrB,qIChBzC,SAASxqB,EAASH,EAAKP,QACtB,IAAVA,IACFA,EAAQ,CAAC,GAEXA,EAAMyH,MAAQzH,EAAMyH,OAAS,CAAC,EAC9BzH,EAAMI,UAAY,aAAeJ,EAAMI,WAAa,IACpD,MAAMF,EAAO,IAAQF,EAAO,QACtBovB,EAAU7uB,EAAMA,EAAI2G,OAASjI,IAAIM,WAAWC,MAAM,oCACxD,GAAIe,EAAK,CACP,MAAMspB,EAAQtpB,EAAIspB,QACdA,IACF7pB,EAAMyH,MAAM,YAAcoiB,EAC1B7pB,EAAMI,UAAY,IAAUJ,EAAMI,UAAW,UAAW,IAAkBypB,KAExE3pB,IACFF,EAAMgqB,MAAQzpB,EAAIqpB,eAAiB,GACnC5pB,EAAMyd,KAAOxe,IAAIowB,MAAM,MAAO,CAC5BtvB,KAAMQ,EAAIopB,UAGVppB,EAAIwqB,YACN/qB,EAAMI,WAAa,mBAEvB,MACEJ,EAAMI,WAAa,YAErB,OAAOO,EAAET,EAAO,IAAO,OAAQF,EAAOW,EAAE,OAAQ,CAC9CP,UAAW,iBACVG,GAAOA,EAAIlB,SAAU,OAAQkB,EAAK,CACnCH,UAAW,iBACV,CACD+uB,UAAU,IACRxuB,EAAE,OAAQ,CACZP,UAAW,iBACVgvB,IACL,CACAtwB,OAAOC,IAAIa,IAAI,cAAe,0BAA2Bc,0CCzC1C,SAASL,EAASN,GAC/B,OAAOA,EAAKqa,MAAM,GAAGrC,MAAK,CAAC9N,EAAG6W,KAC5B,MAAMwO,EAAOrlB,EAAEkhB,WACToE,EAAOzO,EAAEqK,WAIf,GAAa,OAATmE,GAA0B,OAATC,EAAe,OAAOzO,EAAE0M,kBAAoBvjB,EAAEujB,kBAInE,GAAa,OAAT+B,EAAe,OAAQ,EAC3B,GAAa,OAATD,EAAe,OAAO,EAI1B,MAAME,EAAUvlB,EAAEM,SACZklB,EAAU3O,EAAEvW,SAIlB,OAAIilB,IAAYC,EAAgBH,EAAOC,EAG9BC,GAAWC,EAAgBD,EAAQrE,WAAasE,EAAQtE,WAIxDqE,EAAgBA,IAAY1O,EAAI,EAAI0O,EAAQrE,WAAaoE,EAAcE,EAAgBA,IAAYxlB,GAAK,EAAIqlB,EAAOG,EAAQtE,WAC7H,CAAC,GAEZ,kBACArsB,OAAOC,IAAIa,IAAI,cAAe,wBAAyBS,yBChCvDqvB,EAAOC,QAAU7wB,OAAOC,IAAIC,IAAI,OAAQ,0CCAxC0wB,EAAOC,QAAU7wB,OAAOC,IAAIC,IAAI,OAAQ,oCCAxC0wB,EAAOC,QAAU7wB,OAAOC,IAAIC,IAAI,OAAQ,kDCAxC0wB,EAAOC,QAAU7wB,OAAOC,IAAIC,IAAI,OAAQ,gDCAxC0wB,EAAOC,QAAU7wB,OAAOC,IAAIC,IAAI,OAAQ,4DCAxC0wB,EAAOC,QAAU7wB,OAAOC,IAAIC,IAAI,OAAQ,iDCAxC0wB,EAAOC,QAAU7wB,OAAOC,IAAIC,IAAI,OAAQ,kDCAxC0wB,EAAOC,QAAU7wB,OAAOC,IAAIC,IAAI,OAAQ,0DCAxC0wB,EAAOC,QAAU7wB,OAAOC,IAAIC,IAAI,OAAQ,0DCAxC0wB,EAAOC,QAAU7wB,OAAOC,IAAIC,IAAI,OAAQ,6CCAxC0wB,EAAOC,QAAU7wB,OAAOC,IAAIC,IAAI,OAAQ,gDCAxC0wB,EAAOC,QAAU7wB,OAAOC,IAAIC,IAAI,OAAQ,8CCAxC0wB,EAAOC,QAAU7wB,OAAOC,IAAIC,IAAI,OAAQ,wDCAzB,SAASyE,EAAQC,GAG9B,OAAOD,EAAU,mBAAqBE,QAAU,iBAAmBA,OAAOC,SAAW,SAAUF,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAO,mBAAqBC,QAAUD,EAAI7C,cAAgB8C,QAAUD,IAAQC,OAAOE,UAAY,gBAAkBH,CAC1H,EAAGD,EAAQC,EACb,CCPe,SAASL,EAAgBK,EAAKN,EAAKlC,GAYhD,OAXAkC,ECAa,SAAwBwsB,GACrC,IAAIxsB,ECFS,SAAsBysB,EAAOC,GAC1C,GAAuB,WAAnBrsB,EAAQosB,IAAiC,OAAVA,EAAgB,OAAOA,EAC1D,IAAIE,EAAOF,EAAMlsB,OAAOqsB,aACxB,QAAalgB,IAATigB,EAAoB,CACtB,IAAIE,EAAMF,EAAK5rB,KAAK0rB,EAAOC,GAC3B,GAAqB,WAAjBrsB,EAAQwsB,GAAmB,OAAOA,EACtC,MAAM,IAAIC,UAAU,+CACtB,CACA,OAA4BC,OAAiBN,EAC/C,CDPYG,CAAYJ,EAAK,UAC3B,MAAwB,WAAjBnsB,EAAQL,GAAoBA,EAAM+sB,OAAO/sB,EAClD,CDHQgtB,CAAchtB,MACTM,EACTjB,OAAOe,eAAeE,EAAKN,EAAK,CAC9BlC,MAAOA,EACP4B,YAAY,EACZgB,cAAc,EACdC,UAAU,IAGZL,EAAIN,GAAOlC,EAENwC,CACT,oBGbI2sB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBzgB,IAAjB0gB,EACH,OAAOA,EAAab,QAGrB,IAAID,EAASW,EAAyBE,GAAY,CAGjDZ,QAAS,CAAC,GAOX,OAHAc,EAAoBF,GAAUb,EAAQA,EAAOC,QAASW,GAG/CZ,EAAOC,OACf,CAGAW,EAAoB3vB,EAAI8vB,ECxBxBH,EAAoB5nB,EAAKgnB,IACxB,IAAIgB,EAAShB,GAAUA,EAAOiB,WAC7B,IAAOjB,EAAiB,QACxB,IAAM,EAEP,OADAY,EAAoBnmB,EAAEumB,EAAQ,CAAEzmB,EAAGymB,IAC5BA,CAAM,ECLdJ,EAAoBnmB,EAAI,CAACwlB,EAASiB,KACjC,IAAI,IAAIxtB,KAAOwtB,EACXN,EAAoBO,EAAED,EAAYxtB,KAASktB,EAAoBO,EAAElB,EAASvsB,IAC5EX,OAAOe,eAAemsB,EAASvsB,EAAK,CAAEN,YAAY,EAAM9D,IAAK4xB,EAAWxtB,IAE1E,ECNDktB,EAAoB7V,EAAI,CAAC,EAGzB6V,EAAoB5V,EAAKoW,GACjB7D,QAAQ8D,IAAItuB,OAAOD,KAAK8tB,EAAoB7V,GAAGuW,QAAO,CAACC,EAAU7tB,KACvEktB,EAAoB7V,EAAErX,GAAK0tB,EAASG,GAC7BA,IACL,KCNJX,EAAoBY,EAAKJ,GAEjB,yCCHRR,EAAoBa,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOpwB,MAAQ,IAAIqwB,SAAS,cAAb,EAGhB,CAFE,MAAO3W,GACR,GAAsB,iBAAX7V,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxByrB,EAAoBO,EAAI,CAACntB,EAAK6D,IAAU9E,OAAOoB,UAAUK,eAAeC,KAAKT,EAAK6D,G1DA9E3I,EAAa,CAAC,EACdC,EAAoB,kBAExByxB,EAAoBgB,EAAI,CAAC9E,EAAK+E,EAAMnuB,EAAK0tB,KACxC,GAAGlyB,EAAW4tB,GAAQ5tB,EAAW4tB,GAAK/rB,KAAK8wB,OAA3C,CACA,IAAIC,EAAQC,EACZ,QAAW3hB,IAAR1M,EAEF,IADA,IAAIsuB,EAAUjrB,SAASgC,qBAAqB,UACpCvF,EAAI,EAAGA,EAAIwuB,EAAQlxB,OAAQ0C,IAAK,CACvC,IAAIyuB,EAAID,EAAQxuB,GAChB,GAAGyuB,EAAE3M,aAAa,QAAUwH,GAAOmF,EAAE3M,aAAa,iBAAmBnmB,EAAoBuE,EAAK,CAAEouB,EAASG,EAAG,KAAO,CACpH,CAEGH,IACHC,GAAa,GACbD,EAAS/qB,SAAS6N,cAAc,WAEzBsd,QAAU,QACjBJ,EAAOK,QAAU,IACbvB,EAAoBwB,IACvBN,EAAOO,aAAa,QAASzB,EAAoBwB,IAElDN,EAAOO,aAAa,eAAgBlzB,EAAoBuE,GACxDouB,EAAOhU,IAAMgP,GAEd5tB,EAAW4tB,GAAO,CAAC+E,GACnB,IAAIS,EAAmB,CAACC,EAAMrsB,KAE7B4rB,EAAOU,QAAUV,EAAOW,OAAS,KACjClX,aAAa4W,GACb,IAAIO,EAAUxzB,EAAW4tB,GAIzB,UAHO5tB,EAAW4tB,GAClBgF,EAAO7qB,YAAc6qB,EAAO7qB,WAAW8d,YAAY+M,GACnDY,GAAWA,EAAQ9xB,SAASuF,GAAQA,EAAGD,KACpCqsB,EAAM,OAAOA,EAAKrsB,EAAM,EAExBisB,EAAUvkB,WAAW0kB,EAAiB/hB,KAAK,UAAMH,EAAW,CAAEkO,KAAM,UAAW/a,OAAQuuB,IAAW,MACtGA,EAAOU,QAAUF,EAAiB/hB,KAAK,KAAMuhB,EAAOU,SACpDV,EAAOW,OAASH,EAAiB/hB,KAAK,KAAMuhB,EAAOW,QACnDV,GAAchrB,SAAS4rB,KAAKpR,YAAYuQ,EAnCkB,CAmCX,E2DtChDlB,EAAoBgC,EAAK3C,IACH,oBAAXhsB,QAA0BA,OAAO4uB,aAC1C9vB,OAAOe,eAAemsB,EAAShsB,OAAO4uB,YAAa,CAAErxB,MAAO,WAE7DuB,OAAOe,eAAemsB,EAAS,aAAc,CAAEzuB,OAAO,GAAO,QCL9D,IAAIsxB,EACAlC,EAAoBa,EAAEsB,gBAAeD,EAAYlC,EAAoBa,EAAEuB,SAAW,IACtF,IAAIjsB,EAAW6pB,EAAoBa,EAAE1qB,SACrC,IAAK+rB,GAAa/rB,IACbA,EAASksB,gBACZH,EAAY/rB,EAASksB,cAAcnV,MAC/BgV,GAAW,CACf,IAAId,EAAUjrB,EAASgC,qBAAqB,UACzCipB,EAAQlxB,SAAQgyB,EAAYd,EAAQA,EAAQlxB,OAAS,GAAGgd,IAC5D,CAID,IAAKgV,EAAW,MAAM,IAAII,MAAM,yDAChCJ,EAAYA,EAAUnrB,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpFipB,EAAoB5hB,EAAI8jB,MCfxBlC,EAAoB7V,EAAEoY,OAAS,CAAC/B,EAASG,KAExC,MAAM6B,EAAoBxC,EAAoBgB,EAC9ChB,EAAoBgB,EAAIxyB,OAAOC,IAAIg0B,UAAU9iB,KAAKnR,OAAOC,IAAK+zB,EAAkB,QCEjF,IAAIE,EAAkB,CACrB,IAAK,GAGN1C,EAAoB7V,EAAE8R,EAAI,CAACuE,EAASG,KAElC,IAAIgC,EAAqB3C,EAAoBO,EAAEmC,EAAiBlC,GAAWkC,EAAgBlC,QAAWhhB,EACtG,GAA0B,IAAvBmjB,EAGF,GAAGA,EACFhC,EAASxwB,KAAKwyB,EAAmB,QAC3B,CAGL,IAAIC,EAAU,IAAIjG,SAAQ,CAACC,EAASiG,IAAYF,EAAqBD,EAAgBlC,GAAW,CAAC5D,EAASiG,KAC1GlC,EAASxwB,KAAKwyB,EAAmB,GAAKC,GAGtC,IAAI1G,EAAM8D,EAAoB5hB,EAAI4hB,EAAoBY,EAAEJ,GAEpDsC,EAAQ,IAAIR,MAgBhBtC,EAAoBgB,EAAE9E,GAfF5mB,IACnB,GAAG0qB,EAAoBO,EAAEmC,EAAiBlC,KAEf,KAD1BmC,EAAqBD,EAAgBlC,MACRkC,EAAgBlC,QAAWhhB,GACrDmjB,GAAoB,CACtB,IAAII,EAAYztB,IAAyB,SAAfA,EAAMoY,KAAkB,UAAYpY,EAAMoY,MAChEsV,EAAU1tB,GAASA,EAAM3C,QAAU2C,EAAM3C,OAAOua,IACpD4V,EAAMG,QAAU,iBAAmBzC,EAAU,cAAgBuC,EAAY,KAAOC,EAAU,IAC1FF,EAAMlsB,KAAO,iBACbksB,EAAMpV,KAAOqV,EACbD,EAAMI,QAAUF,EAChBL,EAAmB,GAAGG,EACvB,CACD,GAEwC,SAAWtC,EAASA,EAE/D,CACD,EAcF,IAAI2C,EAAuB,CAACC,EAA4B1jB,KACvD,IAGIugB,EAAUO,GAHT6C,EAAUC,EAAaC,GAAW7jB,EAGhB9M,EAAI,EAC3B,GAAGywB,EAASzc,MAAMxV,GAAgC,IAAxBsxB,EAAgBtxB,KAAa,CACtD,IAAI6uB,KAAYqD,EACZtD,EAAoBO,EAAE+C,EAAarD,KACrCD,EAAoB3vB,EAAE4vB,GAAYqD,EAAYrD,IAG7CsD,GAAsBA,EAAQvD,EAClC,CAEA,IADGoD,GAA4BA,EAA2B1jB,GACrD9M,EAAIywB,EAASnzB,OAAQ0C,IACzB4tB,EAAU6C,EAASzwB,GAChBotB,EAAoBO,EAAEmC,EAAiBlC,IAAYkC,EAAgBlC,IACrEkC,EAAgBlC,GAAS,KAE1BkC,EAAgBlC,GAAW,CAC5B,EAIGgD,EAAqBC,KAAiC,2BAAIA,KAAiC,4BAAK,GACpGD,EAAmBxzB,QAAQmzB,EAAqBxjB,KAAK,KAAM,IAC3D6jB,EAAmBrzB,KAAOgzB,EAAqBxjB,KAAK,KAAM6jB,EAAmBrzB,KAAKwP,KAAK6jB","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/external root \"flarum.reg.get('core', 'admin/components/AdminPage')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/./src/admin/components/SelectTagsSettingComponent.tsx","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/./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/./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/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Modal')\"","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');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/AdminPage');","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');","/**!\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 Modal from 'flarum/common/components/Modal';\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 Modal {\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 sortable from 'sortablejs';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport withAttr from 'flarum/common/utils/withAttr';\nimport Form from 'flarum/common/components/Form';\nimport EditTagModal from './EditTagModal';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport sortTags from '../../common/utils/sortTags';\nfunction tagItem(tag) {\n return m(\"li\", {\n \"data-id\": tag.id(),\n style: {\n color: tag.color()\n }\n }, m(\"div\", {\n className: \"TagListItem-info\"\n }, tagIcon(tag), m(\"span\", {\n className: \"TagListItem-name\"\n }, tag.name()), m(Button, {\n className: \"Button Button--link\",\n icon: \"fas fa-pencil-alt\",\n onclick: () => 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(\"div\", {\n className: \"SettingsGroups\"\n }, m(\"div\", {\n className: \"TagGroup\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tags.primary_heading')), 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(\"div\", {\n className: \"TagGroup TagGroup--secondary\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tags.secondary_heading')), 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(Form, {\n label: app.translator.trans('flarum-tags.admin.tags.settings_heading')\n }, 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 includes.forEach(include => this.loadedIncludes.add(include));\n return val;\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);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nexport default [new Extend.Store() //\n.add('tags', Tag)];","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 AdminPage from 'flarum/admin/components/AdminPage';\nimport SelectTagsSettingComponent from './components/SelectTagsSettingComponent';\nexport default function () {\n extend(AdminPage.prototype, 'customSettingComponents', function (items) {\n items.add('flarum-tags.select-tags', attrs => {\n return m(SelectTagsSettingComponent, Object.assign({}, attrs, {\n settingValue: this.settings[attrs.setting]\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/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/components/Modal');","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","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","addChunkModule","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","tagItem","tagIcon","position","TagsPage","forcedRefreshKey","minPrimaryTags","setting","maxPrimaryTags","minSecondaryTags","maxSecondaryTags","oncreate","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","tagList","registerPage","override","original","tagPrefix","required","onremove","render","startsWith","tagScoped","allowGuest","buttonClassName","caretIcon","addTagPermission","addTagsHomePageOption","minutes","defaultLabel","count","settings","hasIcon","useColor","tagText","route","aPos","bPos","aParent","bParent","module","exports","arg","input","hint","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","r","toStringTag","scriptUrl","importScripts","location","currentScript","Error","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/external root \"flarum.reg.get('core', 'admin/components/AdminPage')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/./src/admin/components/SelectTagsSettingComponent.tsx","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/./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/./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');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/AdminPage');","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');","/**!\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 sortable from 'sortablejs';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport withAttr from 'flarum/common/utils/withAttr';\nimport Form from 'flarum/common/components/Form';\nimport EditTagModal from './EditTagModal';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport sortTags from '../../common/utils/sortTags';\nfunction tagItem(tag) {\n return m(\"li\", {\n \"data-id\": tag.id(),\n style: {\n color: tag.color()\n }\n }, m(\"div\", {\n className: \"TagListItem-info\"\n }, tagIcon(tag), m(\"span\", {\n className: \"TagListItem-name\"\n }, tag.name()), m(Button, {\n className: \"Button Button--link\",\n icon: \"fas fa-pencil-alt\",\n onclick: () => 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(\"div\", {\n className: \"SettingsGroups\"\n }, m(\"div\", {\n className: \"TagGroup\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tags.primary_heading')), 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(\"div\", {\n className: \"TagGroup TagGroup--secondary\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tags.secondary_heading')), 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(Form, {\n label: app.translator.trans('flarum-tags.admin.tags.settings_heading')\n }, 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 includes.forEach(include => this.loadedIncludes.add(include));\n return val;\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);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nexport default [new Extend.Store() //\n.add('tags', Tag)];","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 AdminPage from 'flarum/admin/components/AdminPage';\nimport SelectTagsSettingComponent from './components/SelectTagsSettingComponent';\nexport default function () {\n extend(AdminPage.prototype, 'customSettingComponents', function (items) {\n items.add('flarum-tags.select-tags', attrs => {\n return m(SelectTagsSettingComponent, Object.assign({}, attrs, {\n settingValue: this.settings[attrs.setting]\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","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","addChunkModule","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","tagItem","tagIcon","position","TagsPage","forcedRefreshKey","minPrimaryTags","setting","maxPrimaryTags","minSecondaryTags","maxSecondaryTags","oncreate","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","tagList","registerPage","override","original","tagPrefix","required","onremove","render","startsWith","tagScoped","allowGuest","buttonClassName","caretIcon","addTagPermission","addTagsHomePageOption","minutes","defaultLabel","count","settings","hasIcon","useColor","tagText","route","aPos","bPos","aParent","bParent","module","exports","arg","input","hint","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","r","toStringTag","scriptUrl","importScripts","location","currentScript","Error","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 2856d5a896..4cd46c506f 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(686),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.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)}}]); //# 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 c57f46b656..cf131e3d26 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 Modal from 'flarum/common/components/Modal';\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 Modal {\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.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 diff --git a/extensions/tags/js/dist/forum.js b/extensions/tags/js/dist/forum.js index 677292652d..8b276d21cf 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:()=>a});var r=s(836),o=s.n(r);function a(t,e,s){void 0===e&&(e={}),void 0===s&&(s={});const r=t&&t.icon(),{useColor:a=!0}=s;return e.className=o()([e.className,"icon text-colored",r?t.icon():"TagIcon"]),t&&a?(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",a)},924:(t,e,s)=>{"use strict";s.d(e,{Z:()=>g});var r=s(780),o=s.n(r),a=s(678),n=s.n(a),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=o()(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 o=t.parent(),a=e.parent();return o===a?s-r:o&&a?o.position()-a.position():o?o===e?1:o.position()-r:a?a===t?-1:s-a.position():0}))}s.d(e,{Z:()=>r}),flarum.reg.add("flarum-tags","common/utils/sortTags",r)},503:(t,e,s)=>{"use strict";s.d(e,{l:()=>yt});var r=s(892),o=s.n(r),a=s(905),n=s(351),i=s.n(n);class l{constructor(){(0,a.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=>(t.forEach((t=>this.loadedIncludes.add(t))),e)))}}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),v=s(678),b=s.n(v),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(b(),{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 N=flarum.reg.get("core","common/components/Page");var k=s.n(N);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 M=s.n(Z),j=s(679),E=s.n(j),B=s(596),H=s.n(B),O=s(924),R=s(648);class q extends(k()){constructor(){super(...arguments),(0,a.Z)(this,"tags",void 0),(0,a.Z)(this,"loading",void 0)}oninit(t){super.oninit(t),o().history.push("tags",H()(o().translator.trans("flarum-tags.forum.header.back_to_tags_tooltip"))),this.tags=[];const e=o().preloadedApiDocument();e?this.tags=(0,R.Z)(e.filter((t=>!t.isChild()))):(this.loading=!0,o().tagList.load(["children","lastPostedDiscussion","parent"]).then((()=>{this.tags=(0,R.Z)(o().store.all("tags").filter((t=>!t.isChild()))),this.loading=!1,m.redraw()})))}oncreate(t){super.oncreate(t),o().setTitle(H()(o().translator.trans("flarum-tags.forum.all_tags.meta_title_text"))),o().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,R.Z)(t.children()||[]);return m("li",{className:y()("TagTile",{colored:t.color()},E()(t.color())),style:{"--tag-bg":t.color()}},m(b(),{className:"TagTile-info",href:o().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(b(),{href:o().route.tag(t)},t.name())," "])))),e?m(b(),{className:"TagTile-lastPostedDiscussion",href:o().route.discussion(e,e.lastPostNumber())},m("span",{className:"TagTile-lastPostedDiscussion-title"},e.title()),M()(e.lastPostedAt())):m("span",{className:"TagTile-lastPostedDiscussion"}))}cloudView(t){return m("div",{className:"TagCloud"},t.map((t=>[(0,O.Z)(t,{link:!0})," "])))}}flarum.reg.add("flarum-tags","forum/components/TagsPage",q);const V=flarum.reg.get("core","forum/components/IndexPage");var $=s.n(V);const K=flarum.reg.get("core","forum/states/DiscussionListState");var U=s.n(K);const z=flarum.reg.get("core","forum/states/GlobalSearchState");var F=s.n(z),G=s(433),W=s.n(G);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=>o().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,...o}=e;return o.className=y()("TagsLabel",o.className),t?(0,R.Z)(t).forEach((e=>{(e||1===t.length)&&s.push((0,O.Z)(e,{link:r}))})):s.push((0,O.Z)()),m("span",o,s)}s(780),flarum.reg.add("flarum-tags","common/helpers/tagsLabel",st);const rt=flarum.reg.get("core","forum/utils/DiscussionControls");var ot=s.n(rt),at=s(645),nt=s.n(at);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 vt=flarum.reg.get("core","common/Model");var bt=s.n(vt);class Tt extends(bt()){name(){return bt().attribute("name").call(this)}slug(){return bt().attribute("slug").call(this)}description(){return bt().attribute("description").call(this)}color(){return bt().attribute("color").call(this)}backgroundUrl(){return bt().attribute("backgroundUrl").call(this)}backgroundMode(){return bt().attribute("backgroundMode").call(this)}icon(){return bt().attribute("icon").call(this)}position(){return bt().attribute("position").call(this)}parent(){return bt().hasOne("parent").call(this)}children(){return bt().hasMany("children").call(this)}defaultSort(){return bt().attribute("defaultSort").call(this)}isChild(){return bt().attribute("isChild").call(this)}isHidden(){return bt().attribute("isHidden").call(this)}discussionCount(){return bt().attribute("discussionCount").call(this)}lastPostedAt(){return bt().attribute("lastPostedAt",bt().transformDate).call(this)}lastPostedDiscussion(){return bt().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return bt().attribute("isRestricted").call(this)}canStartDiscussion(){return bt().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return bt().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=[(new(ct().Store)).add("tags",Tt),(new(ct().Routes)).add("tags","/tags",q).add("tag","/t/:tags",$()).helper("tag",(t=>o().route("tag",{tags:t.slug()}))),(new(ct().PostTypes)).add("discussionTagged",ft),new(ct().Model)(mt()).hasMany("tags").attribute("canTag")];o().initializers.add("flarum-tags",(function(){o().tagList=new l,(0,c.extend)(d().prototype,"navItems",(function(t){if(t.add("tags",m(h(),{icon:"fas fa-th-large",href:o().route("tags")},o().translator.trans("flarum-tags.forum.index.tags_link")),-10),o().current.matches(q))return;t.add("separator",m(f(),null),-12);const e=o().search.stickyParams(),s=o().store.all("tags"),r=o().currentTag(),a=s=>{let o=r===s;!o&&r&&(o=r.parent()===s),t.add("tag"+s.id(),m(w,{model:s,params:e,active:o},null==s?void 0:s.name()),-14)};(0,R.Z)(s).filter((t=>null!==t.position()&&(!t.isChild()||r&&(t.parent()===r||t.parent()===r.parent())))).forEach(a);const n=s.filter((t=>null===t.position())).sort(((t,e)=>e.discussionCount()-t.discussionCount()));n.splice(0,3).forEach(a),n.length&&t.add("moreTags",m(h(),{href:o().route("tags")},o().translator.trans("flarum-tags.forum.index.more_link")),-16)})),o().currentTag=function(t){if(this.currentActiveTag&&!t)return this.currentActiveTag;const e=this.search.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)($().prototype,"view",(function(t){o().currentTag(!0)})),(0,c.override)($().prototype,"hero",(function(t){const e=o().currentTag();return e?m(J,{model:e}):t()})),(0,c.extend)($().prototype,"view",(function(t){const e=o().currentTag();e&&(t.attrs.className+=" IndexPage--tag"+e.id())})),(0,c.extend)($().prototype,"setTitle",(function(){const t=o().currentTag();t&&o().setTitle(t.name())})),(0,c.extend)(d().prototype,"items",(function(t){const e=o().currentTag();if(e){const s=e.color(),r=e.canStartDiscussion()||!o().session.user,a=t.get("newDiscussion");s&&(a.attrs.className=y()([a.attrs.className,"Button--tagColored",E()(s)]),a.attrs.style={"--color":s}),a.attrs.disabled=!r,a.children=o().translator.trans(r?"core.forum.index.start_discussion_button":"core.forum.index.cannot_start_discussion_button")}})),(0,c.extend)(F().prototype,"params",(function(t){t.tags=m.route.param("tags")})),(0,c.extend)(U().prototype,"requestParams",(function(t){var e;if("string"==typeof t.include?t.include=[t.include]:null==(e=t.include)||e.push("tags","tags.parent"),this.params.tags){var s;const e=null!=(s=t.filter)?s:{};e.tag=this.params.tags;const r=e.q;r&&(e.q="".concat(r," tag:").concat(this.params.tags)),t.filter=e}})),(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,R.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)(ot(),"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=o().currentTag();if(e){const s=e.parent(),r=s?[s,e]:[e];t.then((t=>t.fields.tags=r))}else o().composer.fields.tags=[]})),(0,c.extend)("flarum/forum/components/DiscussionComposer","oninit",(function(){o().tagList.load(["parent"]).then((()=>m.redraw())),this.constructor.prototype.chooseTags=function(){(0,it.Z)().length&&o().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"},o().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())),a=e.filter((t=>null===t.position())),n=(0,it.Z)(),i=parseInt(o().forum.attribute("minPrimaryTags")),l=parseInt(o().forum.attribute("minSecondaryTags")),c=parseInt(o().forum.attribute("maxPrimaryTags")),u=parseInt(o().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")},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")},686:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Modal")},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 o(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 o=s.call(t,e);if("object"!==r(o))return o;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:()=>o})}},r={};function o(t){var e=r[t];if(void 0!==e)return e.exports;var a=r[t]={exports:{}};return s[t](a,a.exports,o),a.exports}o.m=s,o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var s in e)o.o(e,s)&&!o.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},o.f={},o.e=t=>Promise.all(Object.keys(o.f).reduce(((e,s)=>(o.f[s](t,e),e)),[])),o.u=t=>"forum/components/TagDiscussionModal.js",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",o.l=(s,r,a,n)=>{if(t[s])t[s].push(r);else{var i,l;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u{i.onerror=i.onload=null,clearTimeout(g);var o=t[s];if(delete t[s],i.parentNode&&i.parentNode.removeChild(i),o&&o.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)}},o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;o.g.importScripts&&(t=o.g.location+"");var e=o.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(/\/[^\/]+$/,"/"),o.p=t})(),o.f.compat=(t,e)=>{const s=o.l;o.l=flarum.reg.loadChunk.bind(flarum.reg,s)},(()=>{var t={315:0};o.f.j=(e,s)=>{var r=o.o(t,e)?t[e]:void 0;if(0!==r)if(r)s.push(r[2]);else{var a=new Promise(((s,o)=>r=t[e]=[s,o]));s.push(r[2]=a);var n=o.p+o.u(e),i=new Error;o.l(n,(s=>{if(o.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var a=s&&("load"===s.type?"missing":s.type),n=s&&s.target&&s.target.src;i.message="Loading chunk "+e+" failed.\n("+a+": "+n+")",i.name="ChunkLoadError",i.type=a,i.request=n,r[1](i)}}),"chunk-"+e,e)}};var e=(e,s)=>{var r,a,[n,i,l]=s,c=0;if(n.some((e=>0!==t[e]))){for(r in i)o.o(i,r)&&(o.m[r]=i[r]);l&&l(o)}for(e&&e(s);c{"use strict";o.r(a),o.d(a,{extend:()=>s.l});var t=o(270),e={};for(const s in t)"default"!==s&&(e[s]=()=>t[s]);o.d(a,e);var s=o(503)})(),module.exports=a})(); +(()=>{var t,e,s={974:(t,e,s)=>{"use strict";s.d(e,{Z:()=>a});var r=s(836),o=s.n(r);function a(t,e,s){void 0===e&&(e={}),void 0===s&&(s={});const r=t&&t.icon(),{useColor:a=!0}=s;return e.className=o()([e.className,"icon text-colored",r?t.icon():"TagIcon"]),t&&a?(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",a)},924:(t,e,s)=>{"use strict";s.d(e,{Z:()=>g});var r=s(780),o=s.n(r),a=s(678),n=s.n(a),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=o()(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 o=t.parent(),a=e.parent();return o===a?s-r:o&&a?o.position()-a.position():o?o===e?1:o.position()-r:a?a===t?-1:s-a.position():0}))}s.d(e,{Z:()=>r}),flarum.reg.add("flarum-tags","common/utils/sortTags",r)},503:(t,e,s)=>{"use strict";s.d(e,{l:()=>yt});var r=s(892),o=s.n(r),a=s(905),n=s(351),i=s.n(n);class l{constructor(){(0,a.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=>(t.forEach((t=>this.loadedIncludes.add(t))),e)))}}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),v=s(678),b=s.n(v),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(b(),{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 N=flarum.reg.get("core","common/components/Page");var k=s.n(N);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 M=s.n(Z),j=s(679),E=s.n(j),B=s(596),H=s.n(B),O=s(924),R=s(648);class q extends(k()){constructor(){super(...arguments),(0,a.Z)(this,"tags",void 0),(0,a.Z)(this,"loading",void 0)}oninit(t){super.oninit(t),o().history.push("tags",H()(o().translator.trans("flarum-tags.forum.header.back_to_tags_tooltip"))),this.tags=[];const e=o().preloadedApiDocument();e?this.tags=(0,R.Z)(e.filter((t=>!t.isChild()))):(this.loading=!0,o().tagList.load(["children","lastPostedDiscussion","parent"]).then((()=>{this.tags=(0,R.Z)(o().store.all("tags").filter((t=>!t.isChild()))),this.loading=!1,m.redraw()})))}oncreate(t){super.oncreate(t),o().setTitle(H()(o().translator.trans("flarum-tags.forum.all_tags.meta_title_text"))),o().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,R.Z)(t.children()||[]);return m("li",{className:y()("TagTile",{colored:t.color()},E()(t.color())),style:{"--tag-bg":t.color()}},m(b(),{className:"TagTile-info",href:o().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(b(),{href:o().route.tag(t)},t.name())," "])))),e?m(b(),{className:"TagTile-lastPostedDiscussion",href:o().route.discussion(e,e.lastPostNumber())},m("span",{className:"TagTile-lastPostedDiscussion-title"},e.title()),M()(e.lastPostedAt())):m("span",{className:"TagTile-lastPostedDiscussion"}))}cloudView(t){return m("div",{className:"TagCloud"},t.map((t=>[(0,O.Z)(t,{link:!0})," "])))}}flarum.reg.add("flarum-tags","forum/components/TagsPage",q);const V=flarum.reg.get("core","forum/components/IndexPage");var $=s.n(V);const F=flarum.reg.get("core","forum/states/DiscussionListState");var K=s.n(F);const U=flarum.reg.get("core","forum/states/GlobalSearchState");var z=s.n(U),G=s(433),W=s.n(G);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=>o().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,...o}=e;return o.className=y()("TagsLabel",o.className),t?(0,R.Z)(t).forEach((e=>{(e||1===t.length)&&s.push((0,O.Z)(e,{link:r}))})):s.push((0,O.Z)()),m("span",o,s)}s(780),flarum.reg.add("flarum-tags","common/helpers/tagsLabel",st);const rt=flarum.reg.get("core","forum/utils/DiscussionControls");var ot=s.n(rt),at=s(645),nt=s.n(at);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 vt=flarum.reg.get("core","common/Model");var bt=s.n(vt);class Tt extends(bt()){name(){return bt().attribute("name").call(this)}slug(){return bt().attribute("slug").call(this)}description(){return bt().attribute("description").call(this)}color(){return bt().attribute("color").call(this)}backgroundUrl(){return bt().attribute("backgroundUrl").call(this)}backgroundMode(){return bt().attribute("backgroundMode").call(this)}icon(){return bt().attribute("icon").call(this)}position(){return bt().attribute("position").call(this)}parent(){return bt().hasOne("parent").call(this)}children(){return bt().hasMany("children").call(this)}defaultSort(){return bt().attribute("defaultSort").call(this)}isChild(){return bt().attribute("isChild").call(this)}isHidden(){return bt().attribute("isHidden").call(this)}discussionCount(){return bt().attribute("discussionCount").call(this)}lastPostedAt(){return bt().attribute("lastPostedAt",bt().transformDate).call(this)}lastPostedDiscussion(){return bt().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return bt().attribute("isRestricted").call(this)}canStartDiscussion(){return bt().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return bt().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=[(new(ct().Store)).add("tags",Tt),(new(ct().Routes)).add("tags","/tags",q).add("tag","/t/:tags",$()).helper("tag",(t=>o().route("tag",{tags:t.slug()}))),(new(ct().PostTypes)).add("discussionTagged",ft),new(ct().Model)(mt()).hasMany("tags").attribute("canTag")];o().initializers.add("flarum-tags",(function(){o().tagList=new l,(0,c.extend)(d().prototype,"navItems",(function(t){if(t.add("tags",m(h(),{icon:"fas fa-th-large",href:o().route("tags")},o().translator.trans("flarum-tags.forum.index.tags_link")),-10),o().current.matches(q))return;t.add("separator",m(f(),null),-12);const e=o().search.stickyParams(),s=o().store.all("tags"),r=o().currentTag(),a=s=>{let o=r===s;!o&&r&&(o=r.parent()===s),t.add("tag"+s.id(),m(w,{model:s,params:e,active:o},null==s?void 0:s.name()),-14)};(0,R.Z)(s).filter((t=>null!==t.position()&&(!t.isChild()||r&&(t.parent()===r||t.parent()===r.parent())))).forEach(a);const n=s.filter((t=>null===t.position())).sort(((t,e)=>e.discussionCount()-t.discussionCount()));n.splice(0,3).forEach(a),n.length&&t.add("moreTags",m(h(),{href:o().route("tags")},o().translator.trans("flarum-tags.forum.index.more_link")),-16)})),o().currentTag=function(t){if(this.currentActiveTag&&!t)return this.currentActiveTag;const e=this.search.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)($().prototype,"view",(function(t){o().currentTag(!0)})),(0,c.override)($().prototype,"hero",(function(t){const e=o().currentTag();return e?m(J,{model:e}):t()})),(0,c.extend)($().prototype,"view",(function(t){const e=o().currentTag();e&&(t.attrs.className+=" IndexPage--tag"+e.id())})),(0,c.extend)($().prototype,"setTitle",(function(){const t=o().currentTag();t&&o().setTitle(t.name())})),(0,c.extend)(d().prototype,"items",(function(t){const e=o().currentTag();if(e){const s=e.color(),r=e.canStartDiscussion()||!o().session.user,a=t.get("newDiscussion");s&&(a.attrs.className=y()([a.attrs.className,"Button--tagColored",E()(s)]),a.attrs.style={"--color":s}),a.attrs.disabled=!r,a.children=o().translator.trans(r?"core.forum.index.start_discussion_button":"core.forum.index.cannot_start_discussion_button")}})),(0,c.extend)(z().prototype,"params",(function(t){t.tags=m.route.param("tags")})),(0,c.extend)(K().prototype,"requestParams",(function(t){var e;if("string"==typeof t.include?t.include=[t.include]:null==(e=t.include)||e.push("tags","tags.parent"),this.params.tags){var s;const e=null!=(s=t.filter)?s:{};e.tag=this.params.tags;const r=e.q;r&&(e.q="".concat(r," tag:").concat(this.params.tags)),t.filter=e}})),(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,R.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)(ot(),"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=o().currentTag();if(e){const s=e.parent(),r=s?[s,e]:[e];t.then((t=>t.fields.tags=r))}else o().composer.fields.tags=[]})),(0,c.extend)("flarum/forum/components/DiscussionComposer","oninit",(function(){o().tagList.load(["parent"]).then((()=>m.redraw())),this.constructor.prototype.chooseTags=function(){(0,it.Z)().length&&o().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"},o().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())),a=e.filter((t=>null===t.position())),n=(0,it.Z)(),i=parseInt(o().forum.attribute("minPrimaryTags")),l=parseInt(o().forum.attribute("minSecondaryTags")),c=parseInt(o().forum.attribute("maxPrimaryTags")),u=parseInt(o().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 o(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 o=s.call(t,e);if("object"!==r(o))return o;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:()=>o})}},r={};function o(t){var e=r[t];if(void 0!==e)return e.exports;var a=r[t]={exports:{}};return s[t](a,a.exports,o),a.exports}o.m=s,o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var s in e)o.o(e,s)&&!o.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},o.f={},o.e=t=>Promise.all(Object.keys(o.f).reduce(((e,s)=>(o.f[s](t,e),e)),[])),o.u=t=>"forum/components/TagDiscussionModal.js",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",o.l=(s,r,a,n)=>{if(t[s])t[s].push(r);else{var i,l;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u{i.onerror=i.onload=null,clearTimeout(g);var o=t[s];if(delete t[s],i.parentNode&&i.parentNode.removeChild(i),o&&o.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)}},o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;o.g.importScripts&&(t=o.g.location+"");var e=o.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(/\/[^\/]+$/,"/"),o.p=t})(),o.f.compat=(t,e)=>{const s=o.l;o.l=flarum.reg.loadChunk.bind(flarum.reg,s)},(()=>{var t={315:0};o.f.j=(e,s)=>{var r=o.o(t,e)?t[e]:void 0;if(0!==r)if(r)s.push(r[2]);else{var a=new Promise(((s,o)=>r=t[e]=[s,o]));s.push(r[2]=a);var n=o.p+o.u(e),i=new Error;o.l(n,(s=>{if(o.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var a=s&&("load"===s.type?"missing":s.type),n=s&&s.target&&s.target.src;i.message="Loading chunk "+e+" failed.\n("+a+": "+n+")",i.name="ChunkLoadError",i.type=a,i.request=n,r[1](i)}}),"chunk-"+e,e)}};var e=(e,s)=>{var r,a,[n,i,l]=s,c=0;if(n.some((e=>0!==t[e]))){for(r in i)o.o(i,r)&&(o.m[r]=i[r]);l&&l(o)}for(e&&e(s);c{"use strict";o.r(a),o.d(a,{extend:()=>s.l});var t=o(270),e={};for(const s in t)"default"!==s&&(e[s]=()=>t[s]);o.d(a,e);var s=o(503)})(),module.exports=a})(); //# 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 0aafa5ae89..d287e1856c 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,IACNb,EAASc,SAAQT,GAAWP,KAAKG,eAAehC,IAAIoC,KAC7CQ,IAEX,EAEF9C,OAAOC,IAAIC,IAAI,cAAe,6BAA8B2B,GCjC5D,MAAM,EAA+B7B,OAAOC,IAAI+C,IAAI,OAAQ,iBCAtD,EAA+BhD,OAAOC,IAAI+C,IAAI,OAAQ,iC,aCA5D,MAAM,EAA+BhD,OAAOC,IAAI+C,IAAI,OAAQ,+B,aCA5D,MAAM,EAA+BhD,OAAOC,IAAI+C,IAAI,OAAQ,gC,0DCI7C,MAAMC,UAAsB,KACzCC,KAAKC,GACH,MAAM7D,EAAMyC,KAAKxC,MAAM6D,MACjBzC,EAAcrB,GAAOA,EAAIqB,cACzBf,EAAY,IAAU,wBAAyB,CACnDyD,MAAO/D,EAAI0B,WACVe,KAAKxC,MAAMK,WACd,OAAOG,EAAE,IAAM,CACbH,UAAWA,EACXgB,KAAMmB,KAAKxC,MAAMsB,MACjBhB,MAAOP,EAAM,CACX,UAAWA,EAAIQ,cACbwD,EACJ5C,MAAOC,QAAe2C,IACrB,EAAAjE,EAAA,GAAQC,EAAK,CACdM,UAAW,gBACTG,EAAE,OAAQ,CACZH,UAAW,gBACVN,EAAMA,EAAIgB,OAASC,IAAIC,WAAWC,MAAM,0CAC7C,CACA8C,iBAAiBhE,GACfiE,MAAMC,UAAUlE,GAChB,MAAMD,EAAMC,EAAM6D,MAClB7D,EAAMmE,OAAO5C,KAAOxB,EAAMA,EAAIyB,OAAS,WACvCxB,EAAMsB,MAAQN,IAAIM,MAAM,MAAOtB,EAAMmE,OACvC,EAEF1D,OAAOC,IAAIC,IAAI,cAAe,iCAAkC+C,GC/BhE,MAAM,EAA+BjD,OAAOC,IAAI+C,IAAI,OAAQ,0B,aCA5D,MAAM,EAA+BhD,OAAOC,IAAI+C,IAAI,OAAQ,kC,aCA5D,MAAM,EAA+BhD,OAAOC,IAAI+C,IAAI,OAAQ,gC,+BCA5D,MAAM,EAA+BhD,OAAOC,IAAI+C,IAAI,OAAQ,yB,aCA5D,MAAM,EAA+BhD,OAAOC,IAAI+C,IAAI,OAAQ,4B,mECgB7C,MAAMW,UAAiB,KACpC7B,cACE0B,SAASI,YACT,OAAgB7B,KAAM,YAAQ,IAC9B,OAAgBA,KAAM,eAAW,EACnC,CACA8B,OAAOV,GACLK,MAAMK,OAAOV,GACb,iBAAiB,OAAQ,IAAY,qBAAqB,mDAC1DpB,KAAKjB,KAAO,GACZ,MAAMgD,EAAY,2BACdA,EACF/B,KAAKjB,MAAO,EAAAG,EAAA,GAAS6C,EAAUzB,QAAO/C,IAAQA,EAAI0B,cAGpDe,KAAKgC,SAAU,EACf,iBAAiB,CAAC,WAAY,uBAAwB,WAAWlB,MAAK,KACpEd,KAAKjB,MAAO,EAAAG,EAAA,GAAS,cAAc,QAAQoB,QAAO/C,IAAQA,EAAI0B,aAC9De,KAAKgC,SAAU,EACfhE,EAAEiE,QAAQ,IAEd,CACAC,SAASd,GACPK,MAAMS,SAASd,GACf,aAAa,IAAY,qBAAqB,gDAC9C,kBAAkB,EACpB,CACAD,OACE,OAAOnD,EAAE,IAAe,CACtBH,UAAW,WACXsE,KAAMnC,KAAKmC,KAAKC,KAAKpC,MACrBqC,QAASrC,KAAKqC,QAAQD,KAAKpC,OAC1BA,KAAKsC,eAAeC,UACzB,CACAD,eACE,MAAME,EAAQ,IAAI,KAClB,GAAIxC,KAAKgC,QACPQ,EAAMrE,IAAI,UAAWH,EAAE,IAAkB,WACpC,CACL,MAAMyE,EAASzC,KAAKjB,KAAKuB,QAAO/C,GAA0B,OAAnBA,EAAIiC,aACrCkD,EAAQ1C,KAAKjB,KAAKuB,QAAO/C,GAA0B,OAAnBA,EAAIiC,aAC1CgD,EAAMrE,IAAI,WAAY6B,KAAK2C,gBAAgBF,GAAS,KAChDC,EAAMjC,QACR+B,EAAMrE,IAAI,QAAS6B,KAAK4C,UAAUF,GAAQ,GAE9C,CACA,OAAOF,CACT,CACAL,OACE,OAAOnE,EAAE,IAAa,KACxB,CACAqE,UACE,OAAOrE,EAAE,IAAc,KACzB,CACA2E,gBAAgBF,GACd,OAAOzE,EAAE,KAAM,CACbH,UAAW,YACV4E,EAAOI,IAAI7C,KAAK8C,YAAYV,KAAKpC,OACtC,CACA8C,YAAYvF,GACV,MAAMwF,EAAuBxF,EAAIwF,uBAC3BC,GAAW,EAAA9D,EAAA,GAAS3B,EAAIyF,YAAc,IAC5C,OAAOhF,EAAE,KAAM,CACbH,UAAW,IAAU,UAAW,CAC9BoF,QAAS1F,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,iBAAkBoE,GAAYhF,EAAE,MAAO,CAC5CH,UAAW,oBACVmF,EAASH,KAAIvB,GAAS,CAACtD,EAAE,IAAM,CAChCa,KAAM,cAAcyC,IACnBA,EAAM/C,QAAS,SAASwE,EAAuB/E,EAAE,IAAM,CACxDH,UAAW,+BACXgB,KAAM,qBAAqBkE,EAAsBA,EAAqBG,mBACrElF,EAAE,OAAQ,CACXH,UAAW,sCACVkF,EAAqBpE,SAAU,IAAUoE,EAAqBI,iBAAmBnF,EAAE,OAAQ,CAC5FH,UAAW,iCAEf,CACA+E,UAAUF,GACR,OAAO1E,EAAE,MAAO,CACdH,UAAW,YACV6E,EAAMG,KAAItF,GAAO,EAAC,EAAAa,EAAA,GAASb,EAAK,CACjCc,MAAM,IACJ,OACN,EAEFJ,OAAOC,IAAIC,IAAI,cAAe,4BAA6ByD,GCrH3D,MAAM,EAA+B3D,OAAOC,IAAI+C,IAAI,OAAQ,8B,aCA5D,MAAM,EAA+BhD,OAAOC,IAAI+C,IAAI,OAAQ,oC,aCA5D,MAAM,EAA+BhD,OAAOC,IAAI+C,IAAI,OAAQ,kC,+BCI7C,MAAMmC,UAAgB,KACnCjC,OACE,MAAM5D,EAAMyC,KAAKxC,MAAM6D,MACjBtD,EAAQR,EAAIQ,QAClB,OAAOC,EAAE,SAAU,CACjBH,UAAW,IAAU,OAAQ,UAAW,CACtC,mBAAoBE,EACpB,CAAC,IAAkBA,IAASA,IAE9BD,MAAOC,EAAQ,CACb,YAAaA,QACXwD,GACHvD,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,2BAA4BiF,GCpB1D,MAAMC,EAAUrE,GAAQ,cAAc,QAAQsE,MAAK/F,GAE5C,IAFmDA,EAAIyB,OAAOuE,cAAcvE,OAAMuC,EAAW,CAClGiC,YAAa,WCVT,EAA+BvF,OAAOC,IAAI+C,IAAI,OAAQ,uC,aCA5D,MAAM,GAA+BhD,OAAOC,IAAI+C,IAAI,OAAQ,mC,eCI7C,SAASwC,GAAU1E,EAAMvB,QACxB,IAAVA,IACFA,EAAQ,CAAC,GAEX,MAAMwF,EAAW,IACX,KACJ3E,KACGqF,GACDlG,EAaJ,OAZAkG,EAAW7F,UAAY,IAAU,YAAa6F,EAAW7F,WACrDkB,GACF,EAAAG,EAAA,GAASH,GAAMiC,SAAQzD,KACjBA,GAAuB,IAAhBwB,EAAK0B,SACduC,EAASW,MAAK,EAAAvF,EAAA,GAASb,EAAK,CAC1Bc,SAEJ,IAGF2E,EAASW,MAAK,EAAAvF,EAAA,MAETJ,EAAE,OAAQ0F,EAAYV,EAC/B,C,OACA/E,OAAOC,IAAIC,IAAI,cAAe,2BAA4BsF,IC3B1D,MAAM,GAA+BxF,OAAOC,IAAI+C,IAAI,OAAQ,kC,oCCe3DhD,OAAOC,IAAI0F,eAAe,MAAO,MAAO,cAAe,uCACxD3F,OAAOC,IAAI0F,eAAe,MAAO,MAAO,cAAe,wGACvD3F,OAAOC,IAAI0F,eAAe,MAAO,MAAO,cAAe,wGACvD3F,OAAOC,IAAI0F,eAAe,MAAO,MAAO,cAAe,iG,cClBvD,MAAM,GAA+B3F,OAAOC,IAAI+C,IAAI,OAAQ,oB,eCA5D,MAAM,GAA+BhD,OAAOC,IAAI+C,IAAI,OAAQ,4B,eCA5D,MAAM,GAA+BhD,OAAOC,IAAI+C,IAAI,OAAQ,8B,eCE7C,MAAM4C,WAA6B,MAChDrC,iBAAiBhE,GACfiE,MAAMC,UAAUlE,GAChB,MAAMsG,EAAUtG,EAAMuG,KAAKC,UAAU,GAC/BC,EAAUzG,EAAMuG,KAAKC,UAAU,GACrC,SAASE,EAASC,EAAOC,GACvB,OAAOD,EAAM7D,QAAO/C,IAA+B,IAAxB6G,EAAMC,QAAQ9G,KAAasF,KAAIyB,GAAM9F,IAAI+F,MAAMC,QAAQ,OAAQF,IAC5F,CACA9G,EAAMiH,UAAYP,EAASD,EAASH,GACpCtG,EAAMkH,YAAcR,EAASJ,EAASG,EACxC,CACAtG,OACE,MAAO,YACT,CACAgH,iBACE,OAAI3E,KAAKxC,MAAMiH,UAAUhE,OACnBT,KAAKxC,MAAMkH,YAAYjE,OAClB,4DAEF,gDAEF,iDACT,CACAmE,kBACE,MAAMC,EAAO,CAAC,EAiBd,OAhBI7E,KAAKxC,MAAMiH,UAAUhE,SACvBoE,EAAKJ,UAAYjG,IAAIC,WAAWC,MAAM,0CAA2C,CAC/EK,KAAM0E,GAAUzD,KAAKxC,MAAMiH,UAAW,CACpCpG,MAAM,IAERyG,MAAO9E,KAAKxC,MAAMiH,UAAUhE,UAG5BT,KAAKxC,MAAMkH,YAAYjE,SACzBoE,EAAKH,YAAclG,IAAIC,WAAWC,MAAM,0CAA2C,CACjFK,KAAM0E,GAAUzD,KAAKxC,MAAMkH,YAAa,CACtCrG,MAAM,IAERyG,MAAO9E,KAAKxC,MAAMkH,YAAYjE,UAG3BoE,CACT,EAEF5G,OAAOC,IAAIC,IAAI,cAAe,wCAAyC0F,IC9CvE,MAAM,GAA+B5F,OAAOC,IAAI+C,IAAI,OAAQ,yB,eCA5D,MAAM,GAA+BhD,OAAOC,IAAI+C,IAAI,OAAQ,gB,eCE7C,MAAM8D,WAAY,MAC/BxG,OACE,OAAO,eAAgB,QAAQyG,KAAKhF,KACtC,CACAhB,OACE,OAAO,eAAgB,QAAQgG,KAAKhF,KACtC,CACApB,cACE,OAAO,eAAgB,eAAeoG,KAAKhF,KAC7C,CACAjC,QACE,OAAO,eAAgB,SAASiH,KAAKhF,KACvC,CACAiF,gBACE,OAAO,eAAgB,iBAAiBD,KAAKhF,KAC/C,CACAkF,iBACE,OAAO,eAAgB,kBAAkBF,KAAKhF,KAChD,CACArC,OACE,OAAO,eAAgB,QAAQqH,KAAKhF,KACtC,CACAR,WACE,OAAO,eAAgB,YAAYwF,KAAKhF,KAC1C,CACAJ,SACE,OAAO,YAAa,UAAUoF,KAAKhF,KACrC,CACAgD,WACE,OAAO,aAAc,YAAYgC,KAAKhF,KACxC,CACAmF,cACE,OAAO,eAAgB,eAAeH,KAAKhF,KAC7C,CACAf,UACE,OAAO,eAAgB,WAAW+F,KAAKhF,KACzC,CACAoF,WACE,OAAO,eAAgB,YAAYJ,KAAKhF,KAC1C,CACAN,kBACE,OAAO,eAAgB,mBAAmBsF,KAAKhF,KACjD,CACAmD,eACE,OAAO,eAAgB,eAAgB,oBAAqB6B,KAAKhF,KACnE,CACA+C,uBACE,OAAO,YAAa,wBAAwBiC,KAAKhF,KACnD,CACAqF,eACE,OAAO,eAAgB,gBAAgBL,KAAKhF,KAC9C,CACAsF,qBACE,OAAO,eAAgB,sBAAsBN,KAAKhF,KACpD,CACAuF,qBACE,OAAO,eAAgB,sBAAsBP,KAAKhF,KACpD,CACAwF,YACE,OAAO,KAAS,WAAY,UAAU,CAAChG,EAAUI,IAAwB,OAAbJ,IAAgC,IAAXI,IAAkBoF,KAAKhF,KAC1G,EAEF/B,OAAOC,IAAIC,IAAI,cAAe,oBAAqB4G,IC9DnD,MCKA,KDLgB,IAAI,aACnB5G,IAAI,OAAQ4G,KCIoB,IAAI,cACpC5G,IAAI,OAAQ,QAASyD,GACrBzD,IAAI,MAAO,WAAY,KACvBsH,OAAO,OAAOlI,GAAO,UAAU,MAAO,CACrCwB,KAAMxB,EAAIyB,YACP,IAAI,iBACRb,IAAI,mBAAoB0F,IAAuB,IAAI,YAAa,MAChE6B,QAAQ,QACRC,UAAU,WCPX,qBAAqB,eAAe,WAClC,YAAc,IAAI7F,GCElB,IAAA8F,QAAO,cAAwB,YAAY,SAAUpD,GAKnD,GAJAA,EAAMrE,IAAI,OAAQH,EAAE,IAAY,CAC9BL,KAAM,kBACNkB,KAAM,UAAU,SACf,qBAAqB,uCAAwC,IAC5D,oBAAoB+C,GAAW,OACnCY,EAAMrE,IAAI,YAAaH,EAAE,IAAW,OAAQ,IAC5C,MAAM2D,EAAS,0BACT5C,EAAO,cAAc,QACrB8G,EAAa,iBACbC,EAASvI,IACb,IAAIwI,EAASF,IAAetI,GACvBwI,GAAUF,IACbE,EAASF,EAAWjG,WAAarC,GAQnCiF,EAAMrE,IAAI,MAAQZ,EAAI+G,KAAMtG,EAAEkD,EAAe,CAC3CG,MAAO9D,EACPoE,OAAQA,EACRoE,OAAQA,GACA,MAAPxI,OAAc,EAASA,EAAIgB,SAAU,GAAG,GAE7C,EAAAW,EAAA,GAASH,GAAMuB,QAAO/C,GAA0B,OAAnBA,EAAIiC,cAAyBjC,EAAI0B,WAAa4G,IAAetI,EAAIqC,WAAaiG,GAActI,EAAIqC,WAAaiG,EAAWjG,aAAYoB,QAAQ8E,GACzK,MAAME,EAAOjH,EAAKuB,QAAO/C,GAA0B,OAAnBA,EAAIiC,aAAqBJ,MAAK,CAACC,EAAGC,IAAMA,EAAEI,kBAAoBL,EAAEK,oBAChGsG,EAAKC,OAAO,EAAG,GAAGjF,QAAQ8E,GACtBE,EAAKvF,QACP+B,EAAMrE,IAAI,WAAYH,EAAE,IAAY,CAClCa,KAAM,UAAU,SACf,qBAAqB,uCAAwC,GAEpE,IhBjCA,eAAiB,SAAUqH,GACzB,GAAIlG,KAAKmG,mBAAqBD,EAC5B,OAAOlG,KAAKmG,iBAEd,MAAMnH,EAAOgB,KAAKoG,OAAOzE,SAAS5C,KAClC,IAAIxB,EAAM,KAIV,GAHIyB,IACFzB,EAAM8F,EAAQrE,IAEZA,IAASzB,GAAOA,IAAQA,EAAI0B,YAAc1B,EAAIyF,WAAY,CAC5D,GAAIhD,KAAKqG,kBACP,OAEFrG,KAAKqG,mBAAoB,EAMzBrG,KAAKuE,MAAMjB,KAAK,OAAQtE,EAAM,CAC5BuB,QAAS,0CACRO,MAAK,KACNd,KAAKmG,iBAAmB9C,EAAQrE,GAChChB,EAAEiE,QAAQ,IACTqE,SAAQ,KACTtG,KAAKqG,mBAAoB,CAAK,GAElC,CACA,GAAI9I,EAEF,OADAyC,KAAKmG,iBAAmB5I,EACjByC,KAAKmG,iBAEdnG,KAAKmG,sBAAmB5E,CAE1B,GACA,IAAAqE,QAAO,cAAqB,QAAQ,SAAUW,GAC5C,gBAAe,EACjB,KAGA,IAAAC,UAAS,cAAqB,QAAQ,SAAUC,GAC9C,MAAMlJ,EAAM,iBACZ,OAAIA,EAAYS,EAAEoF,EAAS,CACzB/B,MAAO9D,IAEFkJ,GACT,KACA,IAAAb,QAAO,cAAqB,QAAQ,SAAUW,GAC5C,MAAMhJ,EAAM,iBACRA,IAAKgJ,EAAK/I,MAAMK,WAAa,kBAAoBN,EAAI+G,KAC3D,KACA,IAAAsB,QAAO,cAAqB,YAAY,WACtC,MAAMrI,EAAM,iBACRA,GACF,aAAaA,EAAIgB,OAErB,KAIA,IAAAqH,QAAO,cAAwB,SAAS,SAAUpD,GAChD,MAAMjF,EAAM,iBACZ,GAAIA,EAAK,CACP,MAAMQ,EAAQR,EAAIQ,QACZuH,EAAqB/H,EAAI+H,uBAAyB,iBAClDoB,EAAgBlE,EAAMvB,IAAI,iBAC5BlD,IACF2I,EAAclJ,MAAMK,UAAY,IAAU,CAAC6I,EAAclJ,MAAMK,UAAW,qBAAsB,IAAkBE,KAClH2I,EAAclJ,MAAMM,MAAQ,CAC1B,UAAWC,IAGf2I,EAAclJ,MAAMmJ,UAAYrB,EAChCoB,EAAc1D,SAAW,qBAAqBsC,EAAqB,2CAA6C,kDAClH,CACF,KAIA,IAAAM,QAAO,cAA6B,UAAU,SAAUjE,GACtDA,EAAO5C,KAAOf,EAAEc,MAAM8H,MAAM,OAC9B,KAGA,IAAAhB,QAAO,cAA+B,iBAAiB,SAAUjE,GAI7D,IAAIkF,EAGN,GAN8B,iBAAnBlF,EAAOpB,QAChBoB,EAAOpB,QAAU,CAACoB,EAAOpB,SAGa,OAArCsG,EAAkBlF,EAAOpB,UAA4BsG,EAAgBlD,KAAK,OAAQ,eAEjF3D,KAAK2B,OAAO5C,KAAM,CACpB,IAAI+H,EACJ,MAAMxG,EAA6C,OAAnCwG,EAAiBnF,EAAOrB,QAAkBwG,EAAiB,CAAC,EAC5ExG,EAAO/C,IAAMyC,KAAK2B,OAAO5C,KAEzB,MAAMgI,EAAIzG,EAAOyG,EACbA,IACFzG,EAAOyG,EAAI,GAAGC,OAAOD,EAAG,SAASC,OAAOhH,KAAK2B,OAAO5C,OAEtD4C,EAAOrB,OAASA,CAClB,CACF,KiB1GA,IAAAsF,QAAO,cAA8B,aAAa,SAAUpD,GAC1D,MAAMzD,EAAOiB,KAAKxC,MAAMyJ,WAAWlI,OAC/BA,GAAQA,EAAK0B,QACf+B,EAAMrE,IAAI,OAAQsF,GAAU1E,GAAO,GAEvC,KAGA,IAAA6G,QAAO,eAA0B,QAAQ,SAAUzE,GACjD,MAAMpC,GAAO,EAAAG,EAAA,GAASc,KAAKxC,MAAMyJ,WAAWlI,QAC5C,GAAIA,GAAQA,EAAK0B,OAAQ,CACvB,MAAM1C,EAAQgB,EAAK,GAAGhB,QAClBA,IACFoD,EAAK3D,MAAMM,MAAQ,CACjB,YAAaC,GAEfoD,EAAK3D,MAAMK,UAAY,IAAUsD,EAAK3D,MAAMK,UAAW,0BAA2B,IAAkBE,IAExG,CACF,KAIA,IAAA6H,QAAO,eAA0B,SAAS,SAAUpD,GAClD,MAAMzD,EAAOiB,KAAKxC,MAAMyJ,WAAWlI,OAC/BA,GAAQA,EAAK0B,QACf+B,EAAMrE,IAAI,OAAQsF,GAAU1E,EAAM,CAChCV,MAAM,IACJ,EAER,KZlCA,IAAAuH,QAAO,KAAoB,sBAAsB,SAAUpD,EAAOyE,GAC5DA,EAAWC,UACb1E,EAAMrE,IAAI,OAAQH,EAAE,KAAQ,CAC1BL,KAAM,aACNwJ,QAAS,IAAM3I,IAAI4I,MAAMC,MAAK,IAAM,8BAAmI,CACrKJ,gBAEDzI,IAAIC,WAAWC,MAAM,2DAE5B,KaPA,IAAAkH,QAAO,cAAwB,uBAAuB,SAAU0B,GAE9D,MAAM/J,EAAM,iBACZ,GAAIA,EAAK,CACP,MAAMqC,EAASrC,EAAIqC,SACbb,EAAOa,EAAS,CAACA,EAAQrC,GAAO,CAACA,GACvC+J,EAAQxG,MAAKyG,GAAYA,EAASC,OAAOzI,KAAOA,GAClD,MACE,yBAA2B,EAE/B,KACA,IAAA6G,QAAO,6CAA8C,UAAU,WAC7D,iBAAiB,CAAC,WAAW9E,MAAK,IAAM9C,EAAEiE,WAG1CjC,KAAKD,YAAY0H,UAAUC,WAAa,YACf,EAAAC,GAAA,KACHlH,QACpB,gBAAe,IAAM,8BAAmI,CACtJmH,cAAe5H,KAAKuH,SAASC,OAAOzI,MAAQ,IAAII,MAAM,GACtD0I,SAAU9I,IACRiB,KAAKuH,SAASC,OAAOzI,KAAOA,EAC5BiB,KAAK8H,EAAE,YAAYC,OAAO,GAGhC,CACF,KAIA,IAAAnC,QAAO,6CAA8C,eAAe,SAAUpD,GAC5E,MAAMzD,EAAOiB,KAAKuH,SAASC,OAAOzI,MAAQ,GACpCiJ,GAAiB,EAAAL,GAAA,KACvBnF,EAAMrE,IAAI,OAAQH,EAAE,IAAK,CACvBH,UAAW,IAAU,CAAC,iCAAkCmK,EAAevH,QAAU,aACjF0G,QAASnH,KAAK0H,WAAWtF,KAAKpC,OAC7BjB,EAAK0B,OAASgD,GAAU1E,GAAQf,EAAE,OAAQ,CAC3CH,UAAW,qBACV,qBAAqB,4DAA6D,GACvF,KACA,IAAA2I,UAAS,6CAA8C,YAAY,SAAUC,GAC3E,MAAMwB,EAAajI,KAAKuH,SAASC,OAAOzI,MAAQ,GAC1CmJ,EAAoBD,EAAW3H,QAAO/C,GAA0B,OAAnBA,EAAIiC,aAAwBjC,EAAI0B,YAC7EkJ,EAAsBF,EAAW3H,QAAO/C,GAA0B,OAAnBA,EAAIiC,aACnDwI,GAAiB,EAAAL,GAAA,KACjBS,EAAiBC,SAAS,oBAAoB,mBAC9CC,EAAmBD,SAAS,oBAAoB,qBAChDE,EAAiBF,SAAS,oBAAoB,mBAC9CG,EAAmBH,SAAS,oBAAoB,uBAChDJ,EAAWxH,QAA6B,IAAnB8H,GAA6C,IAArBC,GAA0BN,EAAkBzH,OAAS2H,GAAkBD,EAAoB1H,OAAS6H,IAAqBN,EAAevH,OACzL,gBAAe,IAAM,8BAAmI,CACtJmH,aAAcK,EACdJ,SAAU9I,IACRiB,KAAKuH,SAASC,OAAOzI,KAAOA,EAC5B0H,GAAU,IAIdA,GAEJ,KAGA,IAAAb,QAAO,6CAA8C,QAAQ,SAAUf,GACrEA,EAAK4D,cAAgB5D,EAAK4D,eAAiB,CAAC,EAC5C5D,EAAK4D,cAAc1J,KAAOiB,KAAKuH,SAASC,OAAOzI,IACjD,GH1DF,G,6BIfe,SAAS4I,EAAkBV,GACxC,IAAIlI,EAAOP,IAAI+F,MAAMmE,IAAI,QACzB,GAAIzB,EAAY,CACd,MAAM0B,EAAiB1B,EAAWlI,QAAU,GAC5CA,EAAOA,EAAKuB,QAAO/C,GAAOA,EAAIgI,sBAAwBoD,EAAezI,SAAS3C,IAChF,MACEwB,EAAOA,EAAKuB,QAAO/C,GAAOA,EAAI+H,uBAEhC,OAAOvG,CACT,C,iBACAd,OAAOC,IAAIC,IAAI,cAAe,gCAAiCwJ,E,uBCV/DiB,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,mB,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,a,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,2B,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,yB,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,qC,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,0B,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,2B,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,mC,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,mC,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,sB,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,yB,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,uB,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,2B,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,Y,uBCAxC2H,EAAOC,QAAU5K,OAAOC,IAAI+C,IAAI,OAAQ,kC,6BCAzB,SAAS6H,EAAQC,GAG9B,OAAOD,EAAU,mBAAqBE,QAAU,iBAAmBA,OAAOC,SAAW,SAAUF,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAO,mBAAqBC,QAAUD,EAAIhJ,cAAgBiJ,QAAUD,IAAQC,OAAOvB,UAAY,gBAAkBsB,CAC1H,EAAGD,EAAQC,EACb,CCPe,SAASG,EAAgBH,EAAKI,EAAKC,GAYhD,OAXAD,ECAa,SAAwBE,GACrC,IAAIF,ECFS,SAAsBG,EAAOC,GAC1C,GAAuB,WAAnBT,EAAQQ,IAAiC,OAAVA,EAAgB,OAAOA,EAC1D,IAAIE,EAAOF,EAAMN,OAAOS,aACxB,QAAalI,IAATiI,EAAoB,CACtB,IAAIE,EAAMF,EAAKxE,KAAKsE,EAAOC,GAC3B,GAAqB,WAAjBT,EAAQY,GAAmB,OAAOA,EACtC,MAAM,IAAIC,UAAU,+CACtB,CACA,OAA4BC,OAAiBN,EAC/C,CDPYG,CAAYJ,EAAK,UAC3B,MAAwB,WAAjBP,EAAQK,GAAoBA,EAAMS,OAAOT,EAClD,CDHQU,CAAcV,MACTJ,EACTe,OAAOC,eAAehB,EAAKI,EAAK,CAC9BC,MAAOA,EACPY,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZnB,EAAII,GAAOC,EAENL,CACT,C,mBGbIoB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB9I,IAAjB+I,EACH,OAAOA,EAAazB,QAGrB,IAAID,EAASuB,EAAyBE,GAAY,CAGjDxB,QAAS,CAAC,GAOX,OAHA0B,EAAoBF,GAAUzB,EAAQA,EAAOC,QAASuB,GAG/CxB,EAAOC,OACf,CAGAuB,EAAoBpM,EAAIuM,ECxBxBH,EAAoBI,EAAK5B,IACxB,IAAI6B,EAAS7B,GAAUA,EAAO8B,WAC7B,IAAO9B,EAAiB,QACxB,IAAM,EAEP,OADAwB,EAAoBO,EAAEF,EAAQ,CAAEpL,EAAGoL,IAC5BA,CAAM,ECLdL,EAAoBO,EAAI,CAAC9B,EAAS+B,KACjC,IAAI,IAAIzB,KAAOyB,EACXR,EAAoBS,EAAED,EAAYzB,KAASiB,EAAoBS,EAAEhC,EAASM,IAC5EW,OAAOC,eAAelB,EAASM,EAAK,CAAEa,YAAY,EAAM/I,IAAK2J,EAAWzB,IAE1E,ECNDiB,EAAoBU,EAAI,CAAC,EAGzBV,EAAoBW,EAAKC,GACjBtK,QAAQgI,IAAIoB,OAAOmB,KAAKb,EAAoBU,GAAGI,QAAO,CAACC,EAAUhC,KACvEiB,EAAoBU,EAAE3B,GAAK6B,EAASG,GAC7BA,IACL,KCNJf,EAAoBgB,EAAKJ,GAEjB,yCCHRZ,EAAoBiB,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOtL,MAAQ,IAAIuL,SAAS,cAAb,EAGhB,CAFE,MAAOR,GACR,GAAsB,iBAAXS,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBpB,EAAoBS,EAAI,CAAC9B,EAAK0C,IAAU3B,OAAOrC,UAAUiE,eAAe1G,KAAK+D,EAAK0C,GjEA9ErO,EAAa,CAAC,EACdC,EAAoB,kBAExB+M,EAAoBuB,EAAI,CAACC,EAAKC,EAAM1C,EAAK6B,KACxC,GAAG5N,EAAWwO,GAAQxO,EAAWwO,GAAKjI,KAAKkI,OAA3C,CACA,IAAIC,EAAQC,EACZ,QAAWxK,IAAR4H,EAEF,IADA,IAAI6C,EAAUC,SAASC,qBAAqB,UACpCC,EAAI,EAAGA,EAAIH,EAAQvL,OAAQ0L,IAAK,CACvC,IAAIC,EAAIJ,EAAQG,GAChB,GAAGC,EAAEC,aAAa,QAAUT,GAAOQ,EAAEC,aAAa,iBAAmBhP,EAAoB8L,EAAK,CAAE2C,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,eAAgBrP,EAAoB8L,GACxD2C,EAAOa,IAAMf,GAEdxO,EAAWwO,GAAO,CAACC,GACnB,IAAIe,EAAmB,CAACC,EAAMC,KAE7BhB,EAAOiB,QAAUjB,EAAOkB,OAAS,KACjCC,aAAaT,GACb,IAAIU,EAAU9P,EAAWwO,GAIzB,UAHOxO,EAAWwO,GAClBE,EAAOqB,YAAcrB,EAAOqB,WAAWC,YAAYtB,GACnDoB,GAAWA,EAAQlM,SAASqM,GAAQA,EAAGP,KACpCD,EAAM,OAAOA,EAAKC,EAAM,EAExBN,EAAUc,WAAWV,EAAiBxK,KAAK,UAAMb,EAAW,CAAEgM,KAAM,UAAWC,OAAQ1B,IAAW,MACtGA,EAAOiB,QAAUH,EAAiBxK,KAAK,KAAM0J,EAAOiB,SACpDjB,EAAOkB,OAASJ,EAAiBxK,KAAK,KAAM0J,EAAOkB,QACnDjB,GAAcE,SAASwB,KAAKC,YAAY5B,EAnCkB,CAmCX,EkEtChD1B,EAAoBuD,EAAK9E,IACH,oBAAXG,QAA0BA,OAAO4E,aAC1C9D,OAAOC,eAAelB,EAASG,OAAO4E,YAAa,CAAExE,MAAO,WAE7DU,OAAOC,eAAelB,EAAS,aAAc,CAAEO,OAAO,GAAO,E,MCL9D,IAAIyE,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,EAAQvL,SAAQoN,EAAY7B,EAAQA,EAAQvL,OAAS,GAAGkM,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,EAAI1N,OAAOC,IAAIoQ,UAAUlM,KAAKnE,OAAOC,IAAKmQ,EAAkB,E,MCEjF,IAAIE,EAAkB,CACrB,IAAK,GAGNnE,EAAoBU,EAAE0D,EAAI,CAACxD,EAASG,KAElC,IAAIsD,EAAqBrE,EAAoBS,EAAE0D,EAAiBvD,GAAWuD,EAAgBvD,QAAWzJ,EACtG,GAA0B,IAAvBkN,EAGF,GAAGA,EACFtD,EAASxH,KAAK8K,EAAmB,QAC3B,CAGL,IAAInH,EAAU,IAAI5G,SAAQ,CAACC,EAAS+N,IAAYD,EAAqBF,EAAgBvD,GAAW,CAACrK,EAAS+N,KAC1GvD,EAASxH,KAAK8K,EAAmB,GAAKnH,GAGtC,IAAIsE,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,QAAWzJ,GACrDkN,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,EAAMpQ,KAAO,iBACboQ,EAAMpB,KAAOqB,EACbD,EAAMI,QAAUF,EAChBJ,EAAmB,GAAGE,EACvB,CACD,GAEwC,SAAW3D,EAASA,EAE/D,CACD,EAcF,IAAIgE,EAAuB,CAACC,EAA4BpK,KACvD,IAGIwF,EAAUW,GAHTkE,EAAUC,EAAaC,GAAWvK,EAGhBsH,EAAI,EAC3B,GAAG+C,EAASG,MAAM/K,GAAgC,IAAxBiK,EAAgBjK,KAAa,CACtD,IAAI+F,KAAY8E,EACZ/E,EAAoBS,EAAEsE,EAAa9E,KACrCD,EAAoBpM,EAAEqM,GAAY8E,EAAY9E,IAG7C+E,GAAsBA,EAAQhF,EAClC,CAEA,IADG6E,GAA4BA,EAA2BpK,GACrDsH,EAAI+C,EAASzO,OAAQ0L,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,EAAmBtO,QAAQgO,EAAqB5M,KAAK,KAAM,IAC3DkN,EAAmB3L,KAAOqL,EAAqB5M,KAAK,KAAMkN,EAAmB3L,KAAKvB,KAAKkN,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/./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/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Modal')\"","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 includes.forEach(include => this.loadedIncludes.add(include));\n return val;\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.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 var _params$filter;\n const filter = (_params$filter = params.filter) != null ? _params$filter : {};\n filter.tag = this.params.tags;\n // TODO: replace this with a more robust system.\n const q = filter.q;\n if (q) {\n filter.q = \"\".concat(q, \" tag:\").concat(this.params.tags);\n }\n params.filter = filter;\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);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nexport default [new Extend.Store() //\n.add('tags', Tag)];","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.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/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/components/Modal');","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","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","helper","hasMany","attribute","extend","currentTag","addTag","active","more","splice","reload","currentActiveTag","search","currentTagLoading","finally","vdom","override","original","newDiscussion","disabled","param","_params$include","_params$filter","q","concat","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","key","value","arg","input","hint","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/./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 includes.forEach(include => this.loadedIncludes.add(include));\n return val;\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.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 var _params$filter;\n const filter = (_params$filter = params.filter) != null ? _params$filter : {};\n filter.tag = this.params.tags;\n // TODO: replace this with a more robust system.\n const q = filter.q;\n if (q) {\n filter.q = \"\".concat(q, \" tag:\").concat(this.params.tags);\n }\n params.filter = filter;\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);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nexport default [new Extend.Store() //\n.add('tags', Tag)];","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.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","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","helper","hasMany","attribute","extend","currentTag","addTag","active","more","splice","reload","currentActiveTag","search","currentTagLoading","finally","vdom","override","original","newDiscussion","disabled","param","_params$include","_params$filter","q","concat","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","key","value","arg","input","hint","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 63e2eb3ecc..3049d85d42 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(686),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),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)}}]); //# 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 a358ceac78..c259308ddd 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 Modal from 'flarum/common/components/Modal';\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 Modal {\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.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 diff --git a/extensions/tags/js/src/admin/components/EditTagModal.tsx b/extensions/tags/js/src/admin/components/EditTagModal.tsx index 62c412ebe8..ffc76c2880 100644 --- a/extensions/tags/js/src/admin/components/EditTagModal.tsx +++ b/extensions/tags/js/src/admin/components/EditTagModal.tsx @@ -1,5 +1,5 @@ import app from 'flarum/admin/app'; -import Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal'; +import FormModal, { IFormModalAttrs } from 'flarum/common/components/FormModal'; import Button from 'flarum/common/components/Button'; import ColorPreviewInput from 'flarum/common/components/ColorPreviewInput'; import ItemList from 'flarum/common/utils/ItemList'; @@ -12,7 +12,7 @@ import type Mithril from 'mithril'; import tagLabel from '../../common/helpers/tagLabel'; import type Tag from '../../common/models/Tag'; -export interface EditTagModalAttrs extends IInternalModalAttrs { +export interface EditTagModalAttrs extends IFormModalAttrs { primary?: boolean; model?: Tag; } @@ -21,7 +21,7 @@ export interface EditTagModalAttrs extends IInternalModalAttrs { * The `EditTagModal` component shows a modal dialog which allows the user * to create or edit a tag. */ -export default class EditTagModal extends Modal { +export default class EditTagModal extends FormModal { tag!: Tag; name!: Stream; diff --git a/extensions/tags/js/src/common/components/TagSelectionModal.tsx b/extensions/tags/js/src/common/components/TagSelectionModal.tsx index 496a958c81..68e8affb42 100644 --- a/extensions/tags/js/src/common/components/TagSelectionModal.tsx +++ b/extensions/tags/js/src/common/components/TagSelectionModal.tsx @@ -5,7 +5,7 @@ import extractText from 'flarum/common/utils/extractText'; import highlight from 'flarum/common/helpers/highlight'; import KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable'; import LoadingIndicator from 'flarum/common/components/LoadingIndicator'; -import Modal from 'flarum/common/components/Modal'; +import FormModal from 'flarum/common/components/FormModal'; import Stream from 'flarum/common/utils/Stream'; import sortTags from '../utils/sortTags'; @@ -14,7 +14,7 @@ import tagIcon from '../helpers/tagIcon'; import ToggleButton from '../../forum/components/ToggleButton'; import type Tag from '../models/Tag'; -import type { IInternalModalAttrs } from 'flarum/common/components/Modal'; +import type { IFormModalAttrs } from 'flarum/common/components/FormModal'; import type Mithril from 'mithril'; export interface ITagSelectionModalLimits { @@ -34,7 +34,7 @@ export interface ITagSelectionModalLimits { }; } -export interface ITagSelectionModalAttrs extends IInternalModalAttrs { +export interface ITagSelectionModalAttrs extends IFormModalAttrs { /** Custom modal className to use. */ className?: string; /** Modal title, defaults to 'Choose Tags'. */ @@ -64,7 +64,7 @@ export type ITagSelectionModalState = undefined; export default class TagSelectionModal< CustomAttrs extends ITagSelectionModalAttrs = ITagSelectionModalAttrs, CustomState extends ITagSelectionModalState = ITagSelectionModalState -> extends Modal { +> extends FormModal { protected loading = true; protected tags!: Tag[]; protected selected: Tag[] = []; @@ -108,7 +108,7 @@ export default class TagSelectionModal< .onSelect(this.select.bind(this)) .onRemove(() => this.selected.splice(this.selected.length - 1, 1)); - app.tagList.load(['parent']).then((tags) => { + app.tagList.load(['parent']).then((tags: Tag[]) => { this.loading = false; if (this.attrs.selectableTags) { diff --git a/extensions/tags/js/src/common/states/TagListState.ts b/extensions/tags/js/src/common/states/TagListState.ts index e0db4a215e..06661a4c1e 100644 --- a/extensions/tags/js/src/common/states/TagListState.ts +++ b/extensions/tags/js/src/common/states/TagListState.ts @@ -21,7 +21,7 @@ export default class TagListState { async query(includes: string[] = []): Promise { this.loadedIncludes ??= new Set(); - return app.store.find('tags', { include: includes.join(',') }).then((val) => { + return app.store.find('tags', { include: includes.join(',') }).then((val: Tag) => { includes.forEach((include) => this.loadedIncludes!.add(include)); return val; }); diff --git a/extensions/tags/src/Content/Tag.php b/extensions/tags/src/Content/Tag.php index 01804fc909..0d2afa4267 100644 --- a/extensions/tags/src/Content/Tag.php +++ b/extensions/tags/src/Content/Tag.php @@ -96,8 +96,15 @@ protected function getApiDocument(Request $request, array $params): object protected function getTagsDocument(Request $request, string $slug): object { - return json_decode($this->api->withParentRequest($request)->withQueryParams([ - 'include' => 'children,children.parent,parent,parent.children.parent,state' - ])->get("/tags/$slug")->getBody()); + return json_decode( + $this->api + ->withoutErrorHandling() + ->withParentRequest($request) + ->withQueryParams([ + 'include' => 'children,children.parent,parent,parent.children.parent,state' + ]) + ->get("/tags/$slug") + ->getBody() + ); } } diff --git a/extensions/tags/src/Content/Tags.php b/extensions/tags/src/Content/Tags.php index b17c5da0bb..a62618495b 100644 --- a/extensions/tags/src/Content/Tags.php +++ b/extensions/tags/src/Content/Tags.php @@ -58,8 +58,16 @@ public function __invoke(Document $document, Request $request): Document protected function getTagsDocument(Request $request): array { - return json_decode($this->api->withParentRequest($request)->withQueryParams([ - 'include' => 'children,lastPostedDiscussion,parent' - ])->get('/tags')->getBody(), true); + return json_decode( + $this->api + ->withoutErrorHandling() + ->withParentRequest($request) + ->withQueryParams([ + 'include' => 'children,lastPostedDiscussion,parent' + ]) + ->get('/tags') + ->getBody(), + true + ); } } diff --git a/framework/core/js/dist-typings/admin/components/AdminPage.d.ts b/framework/core/js/dist-typings/admin/components/AdminPage.d.ts index 0d7f37f1f9..4c63a3689b 100644 --- a/framework/core/js/dist-typings/admin/components/AdminPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/AdminPage.d.ts @@ -48,13 +48,13 @@ declare const ImageUploadSettingType: "image-upload"; * Valid options for the setting component builder to generate a Switch. */ export interface SwitchSettingComponentOptions extends CommonSettingsItemOptions { - type: typeof BooleanSettingTypes[number]; + type: (typeof BooleanSettingTypes)[number]; } /** * Valid options for the setting component builder to generate a Select dropdown. */ export interface SelectSettingComponentOptions extends CommonSettingsItemOptions { - type: typeof SelectSettingTypes[number]; + type: (typeof SelectSettingTypes)[number]; /** * Map of values to their labels */ @@ -67,7 +67,7 @@ export interface SelectSettingComponentOptions extends CommonSettingsItemOptions * Valid options for the setting component builder to generate a Textarea. */ export interface TextareaSettingComponentOptions extends CommonSettingsItemOptions { - type: typeof TextareaSettingTypes[number]; + type: (typeof TextareaSettingTypes)[number]; } /** * Valid options for the setting component builder to generate a ColorPreviewInput. diff --git a/framework/core/js/dist-typings/admin/components/CreateUserModal.d.ts b/framework/core/js/dist-typings/admin/components/CreateUserModal.d.ts index 2639f63480..2d6510affe 100644 --- a/framework/core/js/dist-typings/admin/components/CreateUserModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/CreateUserModal.d.ts @@ -1,9 +1,9 @@ /// -import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; +import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import ItemList from '../../common/utils/ItemList'; import Stream from '../../common/utils/Stream'; import type Mithril from 'mithril'; -export interface ICreateUserModalAttrs extends IInternalModalAttrs { +export interface ICreateUserModalAttrs extends IFormModalAttrs { username?: string; email?: string; password?: string; @@ -16,7 +16,7 @@ export declare type SignupBody = { isEmailConfirmed: boolean; password: string; }; -export default class CreateUserModal extends Modal { +export default class CreateUserModal extends FormModal { /** * The value of the username input. */ diff --git a/framework/core/js/dist-typings/admin/components/EditGroupModal.d.ts b/framework/core/js/dist-typings/admin/components/EditGroupModal.d.ts index e1bd733bf0..7a2709965e 100644 --- a/framework/core/js/dist-typings/admin/components/EditGroupModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/EditGroupModal.d.ts @@ -1,16 +1,16 @@ -import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; +import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Group from '../../common/models/Group'; import ItemList from '../../common/utils/ItemList'; import Stream from '../../common/utils/Stream'; import Mithril from 'mithril'; -export interface IEditGroupModalAttrs extends IInternalModalAttrs { +export interface IEditGroupModalAttrs extends IFormModalAttrs { group?: Group; } /** * The `EditGroupModal` component shows a modal dialog which allows the user * to create or edit a group. */ -export default class EditGroupModal extends Modal { +export default class EditGroupModal extends FormModal { group: Group; nameSingular: Stream; namePlural: Stream; diff --git a/framework/core/js/dist-typings/admin/components/LoadingModal.d.ts b/framework/core/js/dist-typings/admin/components/LoadingModal.d.ts index 83c5a912ab..5891f479ac 100644 --- a/framework/core/js/dist-typings/admin/components/LoadingModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/LoadingModal.d.ts @@ -3,12 +3,10 @@ import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; export interface ILoadingModalAttrs extends IInternalModalAttrs { } export default class LoadingModal extends Modal { - /** - * @inheritdoc - */ - static readonly isDismissible: boolean; + protected static readonly isDismissibleViaCloseButton: boolean; + protected static readonly isDismissibleViaEscKey: boolean; + protected static readonly isDismissibleViaBackdropClick: boolean; className(): string; title(): import("@askvortsov/rich-icu-message-formatter").NestedStringArray; content(): null; - onsubmit(e: Event): void; } diff --git a/framework/core/js/dist-typings/admin/components/SettingsModal.d.ts b/framework/core/js/dist-typings/admin/components/SettingsModal.d.ts index 930c8220dd..765014dfb6 100644 --- a/framework/core/js/dist-typings/admin/components/SettingsModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/SettingsModal.d.ts @@ -1,10 +1,10 @@ -import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; +import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Stream from '../../common/utils/Stream'; import Mithril from 'mithril'; import { MutableSettings, SettingValue } from './AdminPage'; -export interface ISettingsModalAttrs extends IInternalModalAttrs { +export interface ISettingsModalAttrs extends IFormModalAttrs { } -export default abstract class SettingsModal extends Modal { +export default abstract class SettingsModal extends FormModal { settings: MutableSettings; loading: boolean; form(): Mithril.Children; diff --git a/framework/core/js/dist-typings/common/Application.d.ts b/framework/core/js/dist-typings/common/Application.d.ts index 88dd99821f..695658c37e 100644 --- a/framework/core/js/dist-typings/common/Application.d.ts +++ b/framework/core/js/dist-typings/common/Application.d.ts @@ -20,12 +20,6 @@ export declare type FlarumGenericRoute = RouteItem; export interface FlarumRequestOptions extends Omit, 'extract'> { errorHandler?: (error: RequestError) => void; url: string; - /** - * Manipulate the response text before it is parsed into JSON. - * - * @deprecated Please use `modifyText` instead. - */ - extract?: (responseText: string) => string; /** * Manipulate the response text before it is parsed into JSON. * diff --git a/framework/core/js/dist-typings/common/Store.d.ts b/framework/core/js/dist-typings/common/Store.d.ts index 150a50c846..c036ef2e94 100644 --- a/framework/core/js/dist-typings/common/Store.d.ts +++ b/framework/core/js/dist-typings/common/Store.d.ts @@ -39,7 +39,11 @@ export interface ApiPayloadPlural { next?: string; prev?: string; }; - meta?: MetaInformation; + meta?: MetaInformation & { + total?: number; + page?: number; + perPage?: number; + }; } export declare type ApiPayload = ApiPayloadSingle | ApiPayloadPlural; export declare type ApiResponseSingle = M & { @@ -92,7 +96,6 @@ export default class Store { * registered for this resource type. */ pushObject(data: SavedModelData): M | null; - pushObject(data: SavedModelData, allowUnregistered: false): M; /** * Make a request to the API to find record(s) of a specific type. */ diff --git a/framework/core/js/dist-typings/common/common.d.ts b/framework/core/js/dist-typings/common/common.d.ts index 3b99e4172c..5533086345 100644 --- a/framework/core/js/dist-typings/common/common.d.ts +++ b/framework/core/js/dist-typings/common/common.d.ts @@ -61,6 +61,7 @@ import './components/SelectDropdown'; import './components/ModalManager'; import './components/Button'; import './components/Modal'; +import './components/FormModal'; import './components/GroupBadge'; import './components/TextEditor'; import './components/TextEditorButton'; diff --git a/framework/core/js/dist-typings/common/components/Button.d.ts b/framework/core/js/dist-typings/common/components/Button.d.ts index 1e07080620..a2092a6539 100644 --- a/framework/core/js/dist-typings/common/components/Button.d.ts +++ b/framework/core/js/dist-typings/common/components/Button.d.ts @@ -21,18 +21,6 @@ export interface IButtonAttrs extends ComponentAttrs { * Default: `false` */ loading?: boolean; - /** - * **DEPRECATED:** Please use the `aria-label` attribute instead. For tooltips, use - * the `` component. - * - * Accessible text for the button. This should always be present if the button only - * contains an icon. - * - * The textual content of this attribute is passed to the DOM element as `aria-label`. - * - * @deprecated - */ - title?: string | Mithril.ChildArray; /** * Accessible text for the button. This should always be present if the button only * contains an icon. diff --git a/framework/core/js/dist-typings/common/components/EditUserModal.d.ts b/framework/core/js/dist-typings/common/components/EditUserModal.d.ts index 33a015f433..dbf7c69112 100644 --- a/framework/core/js/dist-typings/common/components/EditUserModal.d.ts +++ b/framework/core/js/dist-typings/common/components/EditUserModal.d.ts @@ -1,14 +1,14 @@ /// -import Modal, { IInternalModalAttrs } from './Modal'; +import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import ItemList from '../utils/ItemList'; import Stream from '../utils/Stream'; import type Mithril from 'mithril'; import type User from '../models/User'; import type { SaveAttributes } from '../Model'; -export interface IEditUserModalAttrs extends IInternalModalAttrs { +export interface IEditUserModalAttrs extends IFormModalAttrs { user: User; } -export default class EditUserModal extends Modal { +export default class EditUserModal extends FormModal { protected username: Stream; protected email: Stream; protected isEmailConfirmed: Stream; diff --git a/framework/core/js/dist-typings/common/components/FormModal.d.ts b/framework/core/js/dist-typings/common/components/FormModal.d.ts new file mode 100644 index 0000000000..d94f3e3e8c --- /dev/null +++ b/framework/core/js/dist-typings/common/components/FormModal.d.ts @@ -0,0 +1,28 @@ +import Modal from './Modal'; +import type { IInternalModalAttrs } from './Modal'; +import RequestError from '../utils/RequestError'; +import Mithril from 'mithril'; +export interface IFormModalAttrs extends IInternalModalAttrs { +} +/** + * The `FormModal` component displays a modal dialog, wrapped in a form. + * Subclasses should implement the `className`, `title`, and `content` methods. + */ +export default abstract class FormModal extends Modal { + wrapper(children: Mithril.Children): Mithril.Children; + /** + * Handle the modal form's submit event. + */ + onsubmit(e: SubmitEvent): void; + /** + * Callback executed when the modal is shown and ready to be interacted with. + * + * @remark Focuses the first input in the modal. + */ + onready(): void; + /** + * Shows an alert describing an error returned from the API, and gives focus to + * the first relevant field involved in the error. + */ + onerror(error: RequestError): void; +} diff --git a/framework/core/js/dist-typings/common/components/Modal.d.ts b/framework/core/js/dist-typings/common/components/Modal.d.ts index 8272a53bb7..af45315904 100644 --- a/framework/core/js/dist-typings/common/components/Modal.d.ts +++ b/framework/core/js/dist-typings/common/components/Modal.d.ts @@ -2,7 +2,6 @@ import Component from '../Component'; import { AlertAttrs } from './Alert'; import type Mithril from 'mithril'; import type ModalManagerState from '../states/ModalManagerState'; -import type RequestError from '../utils/RequestError'; import type ModalManager from './ModalManager'; export interface IInternalModalAttrs { state: ModalManagerState; @@ -10,10 +9,6 @@ export interface IInternalModalAttrs { animateHide: ModalManager['animateHide']; } export interface IDismissibleOptions { - /** - * @deprecated Check specific individual attributes instead. Will be removed in Flarum 2.0. - */ - isDismissible: boolean; viaCloseButton: boolean; viaEscKey: boolean; viaBackdropClick: boolean; @@ -23,12 +18,6 @@ export interface IDismissibleOptions { * should implement the `className`, `title`, and `content` methods. */ export default abstract class Modal extends Component { - /** - * Determine whether or not the modal should be dismissible via an 'x' button. - * - * @deprecated Use the individual `isDismissibleVia...` attributes instead and remove references to this. - */ - static readonly isDismissible: boolean; /** * Can the model be dismissed with a close button (X)? * @@ -49,13 +38,14 @@ export default abstract class Modal): void; oncreate(vnode: Mithril.VnodeDOM): void; onbeforeremove(vnode: Mithril.VnodeDOM): Promise | void; /** * @todo split into FormModal and Modal in 2.0 */ view(): JSX.Element; + protected wrapper(children: Mithril.Children): Mithril.Children; + protected inner(): Mithril.Children; /** * Get the class name to apply to the modal. */ @@ -68,14 +58,8 @@ export default abstract class Modal { + /** + * This value should not be relied upon when preloading an API document. + * In those cases the pageSize should be taken from the meta information of the preloaded + * document. Checkout `DiscussionListState.loadPage` for an example. + */ + static DEFAULT_PAGE_SIZE: number; protected location: PaginationLocation; - protected pageSize: number; + protected pageSize: number | null; protected pages: Page[]; protected params: P; protected initialLoading: boolean; protected loadingPrev: boolean; protected loadingNext: boolean; - protected constructor(params?: P, page?: number, pageSize?: number); + protected constructor(params?: P, page?: number, pageSize?: number | null); abstract get type(): string; clear(): void; loadPrev(): Promise; diff --git a/framework/core/js/dist-typings/common/utils/ItemList.d.ts b/framework/core/js/dist-typings/common/utils/ItemList.d.ts index 9e2878d0f5..b0dcb2d2ac 100644 --- a/framework/core/js/dist-typings/common/utils/ItemList.d.ts +++ b/framework/core/js/dist-typings/common/utils/ItemList.d.ts @@ -17,15 +17,6 @@ export default class ItemList { * The items in the list. */ protected _items: Record>; - /** - * A **read-only copy** of items in the list. - * - * We don't allow adding new items to the ItemList via setting new properties, - * nor do we allow modifying existing items directly. - * - * @deprecated Use {@link ItemList.toObject} instead. - */ - get items(): DeepReadonly>>; /** * Check whether the list is empty. */ @@ -51,30 +42,6 @@ export default class ItemList { * will be positioned before items with a lower priority. */ add(key: string, content: T, priority?: number): this; - /** - * Replace an item and/or priority in the list, only if it is already present. - * - * If `content` or `priority` are `null`, these values will not be replaced. - * - * If the provided `key` is not present, nothing will happen. - * - * @deprecated Please use the {@link ItemList.setContent} and {@link ItemList.setPriority} - * methods to replace items and their priorities. This method will be removed in Flarum 2.0. - * - * @param key The key of the item in the list - * @param content The item's new content - * @param priority The item's new priority - * - * @example Replace priority and not content. - * items.replace('myItem', null, 10); - * - * @example Replace content and not priority. - * items.replace('myItem',

                  My new value.

                  ); - * - * @example Replace content and priority. - * items.replace('myItem',

                  My new value.

                  , 10); - */ - replace(key: string, content?: T | null, priority?: number | null): this; /** * Replaces an item's content, if the provided item key exists. * diff --git a/framework/core/js/dist-typings/common/utils/evented.d.ts b/framework/core/js/dist-typings/common/utils/evented.d.ts deleted file mode 100644 index 70c2436589..0000000000 --- a/framework/core/js/dist-typings/common/utils/evented.d.ts +++ /dev/null @@ -1,98 +0,0 @@ -declare namespace _default { - const handlers: Record; - /** - * Get all of the registered handlers for an event. - * - * @param {string} event The name of the event. - * @return {Function[]} - * @protected - * - * @deprecated - */ - function getHandlers(event: string): Function[]; - /** - * Get all of the registered handlers for an event. - * - * @param {string} event The name of the event. - * @return {Function[]} - * @protected - * - * @deprecated - */ - function getHandlers(event: string): Function[]; - /** - * Trigger an event. - * - * @param {string} event The name of the event. - * @param {any[]} args Arguments to pass to event handlers. - * - * @deprecated - */ - function trigger(event: string, ...args: any[]): void; - /** - * Trigger an event. - * - * @param {string} event The name of the event. - * @param {any[]} args Arguments to pass to event handlers. - * - * @deprecated - */ - function trigger(event: string, ...args: any[]): void; - /** - * Register an event handler. - * - * @param {string} event The name of the event. - * @param {Function} handler The function to handle the event. - * - * @deprecated - */ - function on(event: string, handler: Function): void; - /** - * Register an event handler. - * - * @param {string} event The name of the event. - * @param {Function} handler The function to handle the event. - * - * @deprecated - */ - function on(event: string, handler: Function): void; - /** - * Register an event handler so that it will run only once, and then - * unregister itself. - * - * @param {string} event The name of the event. - * @param {Function} handler The function to handle the event. - * - * @deprecated - */ - function one(event: string, handler: Function): void; - /** - * Register an event handler so that it will run only once, and then - * unregister itself. - * - * @param {string} event The name of the event. - * @param {Function} handler The function to handle the event. - * - * @deprecated - */ - function one(event: string, handler: Function): void; - /** - * Unregister an event handler. - * - * @param {string} event The name of the event. - * @param {Function} handler The function that handles the event. - * - * @deprecated - */ - function off(event: string, handler: Function): void; - /** - * Unregister an event handler. - * - * @param {string} event The name of the event. - * @param {Function} handler The function that handles the event. - * - * @deprecated - */ - function off(event: string, handler: Function): void; -} -export default _default; diff --git a/framework/core/js/dist-typings/forum/components/ChangeEmailModal.d.ts b/framework/core/js/dist-typings/forum/components/ChangeEmailModal.d.ts index 4d648dbac5..e431140fb7 100644 --- a/framework/core/js/dist-typings/forum/components/ChangeEmailModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/ChangeEmailModal.d.ts @@ -1,5 +1,5 @@ /// -import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; +import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Stream from '../../common/utils/Stream'; import type Mithril from 'mithril'; import RequestError from '../../common/utils/RequestError'; @@ -8,7 +8,7 @@ import ItemList from '../../common/utils/ItemList'; * The `ChangeEmailModal` component shows a modal dialog which allows the user * to change their email address. */ -export default class ChangeEmailModal extends Modal { +export default class ChangeEmailModal extends FormModal { /** * The value of the email input. */ diff --git a/framework/core/js/dist-typings/forum/components/ChangePasswordModal.d.ts b/framework/core/js/dist-typings/forum/components/ChangePasswordModal.d.ts index 365f00e685..cd9f5868f3 100644 --- a/framework/core/js/dist-typings/forum/components/ChangePasswordModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/ChangePasswordModal.d.ts @@ -1,12 +1,12 @@ /// -import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; +import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Mithril from 'mithril'; import ItemList from '../../common/utils/ItemList'; /** * The `ChangePasswordModal` component shows a modal dialog which allows the * user to send themself a password reset email. */ -export default class ChangePasswordModal extends Modal { +export default class ChangePasswordModal extends FormModal { className(): string; title(): import("@askvortsov/rich-icu-message-formatter").NestedStringArray; content(): JSX.Element; diff --git a/framework/core/js/dist-typings/forum/components/ForgotPasswordModal.d.ts b/framework/core/js/dist-typings/forum/components/ForgotPasswordModal.d.ts index c4c3978d7f..6b52d46056 100644 --- a/framework/core/js/dist-typings/forum/components/ForgotPasswordModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/ForgotPasswordModal.d.ts @@ -1,17 +1,17 @@ /// -import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; +import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Stream from '../../common/utils/Stream'; import Mithril from 'mithril'; import RequestError from '../../common/utils/RequestError'; import ItemList from '../../common/utils/ItemList'; -export interface IForgotPasswordModalAttrs extends IInternalModalAttrs { +export interface IForgotPasswordModalAttrs extends IFormModalAttrs { email?: string; } /** * The `ForgotPasswordModal` component displays a modal which allows the user to * enter their email address and request a link to reset their password. */ -export default class ForgotPasswordModal extends Modal { +export default class ForgotPasswordModal extends FormModal { /** * The value of the email input. */ diff --git a/framework/core/js/dist-typings/forum/components/LogInModal.d.ts b/framework/core/js/dist-typings/forum/components/LogInModal.d.ts index 27b490c461..d91a5ca47a 100644 --- a/framework/core/js/dist-typings/forum/components/LogInModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/LogInModal.d.ts @@ -1,16 +1,16 @@ /// -import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; +import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import ItemList from '../../common/utils/ItemList'; import Stream from '../../common/utils/Stream'; import type Mithril from 'mithril'; import RequestError from '../../common/utils/RequestError'; import type { LoginParams } from '../../common/Session'; -export interface ILoginModalAttrs extends IInternalModalAttrs { +export interface ILoginModalAttrs extends IFormModalAttrs { identification?: string; password?: string; remember?: boolean; } -export default class LogInModal extends Modal { +export default class LogInModal extends FormModal { /** * The value of the identification input. */ diff --git a/framework/core/js/dist-typings/forum/components/NewAccessTokenModal.d.ts b/framework/core/js/dist-typings/forum/components/NewAccessTokenModal.d.ts index 47581abceb..e0b9879034 100644 --- a/framework/core/js/dist-typings/forum/components/NewAccessTokenModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/NewAccessTokenModal.d.ts @@ -1,12 +1,12 @@ -import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; +import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Stream from '../../common/utils/Stream'; import type AccessToken from '../../common/models/AccessToken'; import type { SaveAttributes } from '../../common/Model'; import type Mithril from 'mithril'; -export interface INewAccessTokenModalAttrs extends IInternalModalAttrs { +export interface INewAccessTokenModalAttrs extends IFormModalAttrs { onsuccess: (token: AccessToken) => void; } -export default class NewAccessTokenModal extends Modal { +export default class NewAccessTokenModal extends FormModal { protected titleInput: Stream; className(): string; title(): Mithril.Children; diff --git a/framework/core/js/dist-typings/forum/components/RenameDiscussionModal.d.ts b/framework/core/js/dist-typings/forum/components/RenameDiscussionModal.d.ts index 0b6410be6f..0869e51d6a 100644 --- a/framework/core/js/dist-typings/forum/components/RenameDiscussionModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/RenameDiscussionModal.d.ts @@ -1,16 +1,16 @@ /// -import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; +import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Stream from '../../common/utils/Stream'; import Mithril from 'mithril'; import Discussion from '../../common/models/Discussion'; -export interface IRenameDiscussionModalAttrs extends IInternalModalAttrs { +export interface IRenameDiscussionModalAttrs extends IFormModalAttrs { discussion: Discussion; currentTitle: string; } /** * The 'RenameDiscussionModal' displays a modal dialog with an input to rename a discussion */ -export default class RenameDiscussionModal extends Modal { +export default class RenameDiscussionModal extends FormModal { discussion: Discussion; currentTitle: string; newTitle: Stream; diff --git a/framework/core/js/dist-typings/forum/components/Search.d.ts b/framework/core/js/dist-typings/forum/components/Search.d.ts index 2d2a34efb4..280766ae3c 100644 --- a/framework/core/js/dist-typings/forum/components/Search.d.ts +++ b/framework/core/js/dist-typings/forum/components/Search.d.ts @@ -50,13 +50,6 @@ export default class Search extends Compone * The instance of `SearchState` for this component. */ protected searchState: SearchState; - /** - * The instance of `SearchState` for this component. - * - * @deprecated Replace with`this.searchState` instead. - */ - get state(): SearchState; - set state(state: SearchState); /** * Whether or not the search input has focus. */ diff --git a/framework/core/js/dist-typings/forum/components/SignUpModal.d.ts b/framework/core/js/dist-typings/forum/components/SignUpModal.d.ts index 592c8844b2..4e0c8b9788 100644 --- a/framework/core/js/dist-typings/forum/components/SignUpModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/SignUpModal.d.ts @@ -1,9 +1,9 @@ /// -import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; +import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import ItemList from '../../common/utils/ItemList'; import Stream from '../../common/utils/Stream'; import type Mithril from 'mithril'; -export interface ISignupModalAttrs extends IInternalModalAttrs { +export interface ISignupModalAttrs extends IFormModalAttrs { username?: string; email?: string; password?: string; @@ -18,7 +18,7 @@ export declare type SignupBody = { } | { password: string; }); -export default class SignUpModal extends Modal { +export default class SignUpModal extends FormModal { /** * The value of the username input. */ diff --git a/framework/core/js/dist-typings/forum/components/WelcomeHero.d.ts b/framework/core/js/dist-typings/forum/components/WelcomeHero.d.ts index 221362f305..75cfe94f24 100644 --- a/framework/core/js/dist-typings/forum/components/WelcomeHero.d.ts +++ b/framework/core/js/dist-typings/forum/components/WelcomeHero.d.ts @@ -8,10 +8,6 @@ export interface IWelcomeHeroAttrs { * forum. */ export default class WelcomeHero extends Component { - /** - * @deprecated Extend the `isHidden` method instead. - */ - hidden: boolean; oninit(vnode: Mithril.Vnode): void; view(vnode: Mithril.Vnode): JSX.Element | null; /** diff --git a/framework/core/js/dist/admin.js b/framework/core/js/dist/admin.js index 3f63b07d28..6fc7559a13 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={2190:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(7905);class o{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",o)},9175:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7905),o=n(7465),i=n(4300);class s{constructor(t,e){void 0===t&&(t={}),void 0===e&&(e=o.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 s&&((0,i.w)("Providing models as attributes to `Model.pushData()` or `Model.pushAttributes()` is deprecated.","3249"),delete t.attributes[e],t.relationships||(t.relationships={}),t.relationships[e]={data:s.getIdentifier(n)})}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 o;o=r instanceof s?{data:s.getIdentifier(r)}:r instanceof Array?{data:r.map(s.getIdentifier)}:r,t.relationships[n]=o,e[n]=o}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(s.getIdentifier):s.getIdentifier(r)})}delete t.relationships}const r=this.copyData();this.pushData(n);const i={data:n,meta:e.meta||void 0};return o.Z.request({method:this.exists?"PATCH":"POST",url:o.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?o.Z.request({method:"DELETE",url:o.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",s)},7465:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});const r=window,o=new Proxy({},{get:(t,e)=>Reflect.get(r.app,e,r.app),set:(t,e,n)=>Reflect.set(r.app,e,n,r.app)}),i=o;flarum.reg.add("core","common/app",o)},3817:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(2190),o=n(7202),i=n(1268),s=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,s.Z)(e,"type");e.className=(0,a.Z)("Alert","Alert--".concat(n),e.className);const r=(0,s.Z)(e,"title"),u=(0,s.Z)(e,"icon"),d=(0,s.Z)(e,"content")||t.children,h=(0,s.Z)(e,"controls")||[],p=(0,s.Z)(e,"dismissible"),f=(0,s.Z)(e,"ondismiss"),g=[];return(p||void 0===p)&&g.push(m(o.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,i.Z)(h.concat(g)))))}}flarum.reg.add("core","common/components/Alert",u)},3804:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(6439),o=n(2190),i=n(3344),s=n(9215),a=n(9133);class l extends o.Z{view(){const{type:t,icon:e,label:n,color:o,style:l={},...c}=this.attrs,u=(0,i.Z)("Badge",[t&&"Badge--".concat(t)],c.className,(0,s.Z)(o)),d=e?m(a.Z,{name:e,className:"Badge-icon"}):m.trust(" "),h={...l,"--badge-bg":o},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)},7202:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(2190),o=n(4300),i=n(3344),s=n(1552),a=n(5226),l=n(9133);class c extends r.Z{view(t){let{type:e,title:n,"aria-label":r,icon:o,disabled:a,loading:l,className:c,class:u,...d}=this.attrs;e||(e="button"),r||(r=n),"object"==typeof r&&(r=(0,s.Z)(r)),(a||l)&&delete d.onclick,c=(0,i.Z)(u,c,{hasIcon:o,disabled:a||l,loading:l});const h={disabled:a,className:c,type:e,"aria-label":r,...d};return m("button",h,this.getButtonContent(t.children))}oncreate(t){var e,n;super.oncreate(t);const{"aria-label":r}=this.attrs;this.view!==c.prototype.view||r||(0,s.Z)(t.children)||null!=(e=this.element)&&null!=(n=e.getAttribute)&&n.call(e,"aria-label")||(0,o.Z)('[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(l.Z,{name:e,className:"Button-icon"}),t&&m("span",{className:"Button-label"},t),this.attrs.loading&&m(a.Z,{size:"small",display:"inline"})]}}flarum.reg.add("core","common/components/Button",c)},6352:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(2190),o=n(3344);class i extends r.Z{view(t){const{label:e,description:n,className:r,...i}=t.attrs;return m("div",Object.assign({className:(0,o.Z)("Form",r)},i),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",i)},6697:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(3804);class o 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",o)},9133:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(3344),o=n(2190);class i extends o.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",i)},5226:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7465),o=n(2190),i=n(3344);class s extends o.Z{view(){const{display:t="block",size:e="medium",containerClassName:n,className:o,...s}=this.attrs,a=(0,i.Z)("LoadingIndicator",o),l=(0,i.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"},s.containerAttrs,{"data-size":e,className:l}),m("div",Object.assign({"aria-hidden":"true",className:a},s)))}}flarum.reg.add("core","common/components/LoadingIndicator",s)},7108:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(7905),o=n(7465),i=n(2190),s=n(3817),a=n(7202),l=n(4300),c=n(3344);class u extends i.Z{constructor(){super(...arguments),(0,r.Z)(this,"loading",!1),(0,r.Z)(this,"alertAttrs",null)}static get dismissibleOptions(){return this.isDismissible?{isDismissible:!0,viaCloseButton:this.isDismissibleViaCloseButton,viaEscKey:this.isDismissibleViaEscKey,viaBackdropClick:this.isDismissibleViaBackdropClick}:{isDismissible:!1,viaCloseButton:!1,viaEscKey:!1,viaBackdropClick:!1}}oninit(t){super.oninit(t);const e=[];["className","title","content","onsubmit"].forEach((t=>{this[t]||(this[t]=function(){},e.push(t))})),e.length>0&&(0,l.Z)("Modal `".concat(this.constructor.name,"` does not implement all abstract methods of the Modal super class. Missing methods: ").concat(e.join(", "),"."))}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,c.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":o.Z.translator.trans("core.lib.modal.close")})),m("form",{onsubmit:this.onsubmit.bind(this)},m("div",{className:"Modal-header"},m("h3",{className:"App-titleControl App-titleControl--text"},this.title())),!!this.alertAttrs&&m("div",{className:"Modal-alert"},m(s.Z,this.alertAttrs)),this.content())))}onsubmit(t){}onready(){this.$().find("input, select, textarea").first().trigger("focus").trigger("select")}hide(){this.attrs.animateHide()}loaded(){this.loading=!1,m.redraw()}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()}get dismissibleOptions(){return this.constructor.dismissibleOptions}}(0,r.Z)(u,"isDismissible",!0),(0,r.Z)(u,"isDismissibleViaCloseButton",!0),(0,r.Z)(u,"isDismissibleViaEscKey",!0),(0,r.Z)(u,"isDismissibleViaBackdropClick",!0),flarum.reg.add("core","common/components/Modal",u)},6439:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(7905),o=n(2190),i=n(3344),s=n(1552);class a extends o.Z{constructor(){super(...arguments),(0,r.Z)(this,"firstChild",null),(0,r.Z)(this,"childDomNode",null),(0,r.Z)(this,"oldText",""),(0,r.Z)(this,"oldVisibility",void 0),(0,r.Z)(this,"shouldRecreateTooltip",!1),(0,r.Z)(this,"shouldChangeTooltipVisibility",!1)}view(t){const e=t.children,{text:n,tooltipVisible:r,showOnFocus:o=!0,position:i="top",ignoreTitleWarning:s=!1,html:a=!1,delay:l=0,...c}=this.attrs;this.attrs.title&&!s&&console.warn("`title` attribute was passed to Tooltip component. Was this intentional? Tooltip content should be passed to the `text` attr instead.");const u=this.getRealText();if(u!==this.oldText&&(this.oldText=u,this.shouldRecreateTooltip=!0),r!==this.oldVisibility&&(this.oldVisibility=this.attrs.tooltipVisible,this.shouldChangeTooltipVisibility=!0),void 0===e)throw new Error("Tooltip component was provided with no direct child DOM element. Tooltips must contain a single direct DOM node to attach to.");if(1!==e.length)throw new Error("Tooltip component was either passed more than one or no child node.\n\nPlease wrap multiple children in another element, such as a
                  or .");const d=e[0];if("object"!=typeof d||Array.isArray(d)||null===d)throw new Error("Tooltip component was provided with no direct child DOM element. Tooltips must contain a single direct DOM node to attach to.");if("string"==typeof d.tag&&["#","[","<"].includes(d.tag))throw new Error('Tooltip component with provided with a vnode with tag "'.concat(d.tag,'". This is not a DOM element, so is not a valid child element. Please wrap this vnode in another element, such as a
                  or .'));return this.firstChild=d,e}oncreate(t){super.oncreate(t),this.checkDomNodeChanged(),this.recreateTooltip()}onupdate(t){super.onupdate(t),this.checkDomNodeChanged(),this.recreateTooltip()}recreateTooltip(){this.shouldRecreateTooltip&&null!==this.childDomNode&&($(this.childDomNode).tooltip("destroy","DANGEROUS_tooltip_jquery_fn_deprecation_exempt"),this.createTooltip(),this.shouldRecreateTooltip=!1),this.shouldChangeTooltipVisibility&&(this.shouldChangeTooltipVisibility=!1,this.updateVisibility())}updateVisibility(){null!==this.childDomNode&&(!0===this.attrs.tooltipVisible?$(this.childDomNode).tooltip("show","DANGEROUS_tooltip_jquery_fn_deprecation_exempt"):!1===this.attrs.tooltipVisible&&$(this.childDomNode).tooltip("hide","DANGEROUS_tooltip_jquery_fn_deprecation_exempt"))}createTooltip(){if(null===this.childDomNode)return;const{showOnFocus:t=!0,position:e="top",delay:n,html:r=!1,tooltipVisible:o,text:s}=this.attrs,a="boolean"==typeof o?"manual":(0,i.Z)("hover",[t&&"focus"]),l=this.getRealText();this.childDomNode.setAttribute("title",l),this.childDomNode.setAttribute("aria-label",l),$(this.childDomNode).tooltip({html:r,delay:n,placement:e,trigger:a},"DANGEROUS_tooltip_jquery_fn_deprecation_exempt")}getRealText(){const{text:t}=this.attrs;return Array.isArray(t)?(0,s.Z)(t):t}checkDomNodeChanged(){const t=this.firstChild.dom;t&&!t.isSameNode(this.childDomNode)&&(this.childDomNode=t,this.shouldRecreateTooltip=!0)}}flarum.reg.add("core","common/components/Tooltip",a)},4300:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o,w:()=>i});var r=n(7465);function o(){r.Z.forum.attribute("debug")&&console.warn(...arguments)}function i(t,e,n,r){void 0===n&&(n="2.0"),void 0===r&&(r="flarum/core"),o("[Flarum ".concat(n," Deprecation] ").concat(t,"\n\nSee: https://github.com/").concat(r,"/pull/").concat(e))}flarum.reg.add("core","common/helpers/fireDebugWarning",o)},1268:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(2903),o=n(3344);function i(t){return"object"==typeof t&&null!==t&&"tag"in t}function s(t){return i(t)&&t.tag===r.Z}function a(t,e,n){void 0===e&&(e="li"),void 0===n&&(n={});const r=e;return function(t){const e=[];let n;return t.filter(Boolean).forEach(((r,o)=>{(!s(r)||n&&!s(n)&&o!==t.length-1)&&(n=r,e.push(r))})),e}(t instanceof Array?t:[t]).map((t=>{var e;const s=[t.itemName&&"item-".concat(t.itemName)];if(i(t)&&t.tag.isListItem)return t.attrs=t.attrs||{},t.attrs.key=t.attrs.key||t.itemName,t.key=t.attrs.key,t;var a,l,c;i(t)&&(s.push((null==(a=t.attrs)?void 0:a.itemClassName)||t.itemClassName),null!=(l=(c=t.tag).isActive)&&l.call(c,t.attrs)&&s.push("active"));const u=i(t)&&(null==t||null==(e=t.attrs)?void 0:e.key)||t.itemName;return m(r,Object.assign({className:(0,o.Z)(s),key:u},n),t)}))}flarum.reg.add("core","common/helpers/listItems",a)},9215:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(6476);function o(t){return t?(0,r.Z)(t)?"text-contrast--light":"text-contrast--dark":"text-contrast--unchanged"}flarum.reg.add("core","common/helpers/textContrastClass",o)},7645:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(7905),o=n(9175);class i extends o.Z{nameSingular(){return o.Z.attribute("nameSingular").call(this)}namePlural(){return o.Z.attribute("namePlural").call(this)}color(){return o.Z.attribute("color").call(this)}icon(){return o.Z.attribute("icon").call(this)}isHidden(){return o.Z.attribute("isHidden").call(this)}}(0,r.Z)(i,"ADMINISTRATOR_ID","1"),(0,r.Z)(i,"GUEST_ID","2"),(0,r.Z)(i,"MEMBER_ID","3"),flarum.reg.add("core","common/models/Group",i)},4041:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7905),o=n(7531);class i{constructor(t,e){(0,r.Z)(this,"content",void 0),(0,r.Z)(this,"priority",void 0),this.content=t,this.priority=e}}class s{constructor(){(0,r.Z)(this,"_items",{})}get items(){return new Proxy(this._items,{set:()=>(console.warn("Modifying `ItemList.items` is not allowed."),!1)})}isEmpty(){return 0===Object.keys(this._items).length}has(t){return Object.keys(this._items).includes(t)}get(t){return this._items[t].content}getPriority(t){return this._items[t].priority}add(t,e,n){return void 0===n&&(n=0),this._items[t]=new i(e,n),this}replace(t,e,n){return void 0===e&&(e=null),void 0===n&&(n=null),this.has(t)?(null!==e&&(this._items[t].content=e),null!==n&&(this._items[t].priority=n),this):this}setContent(t,e){if(!this.has(t))throw new Error("[ItemList] Cannot set content of Item. Key `".concat(t,"` is not present."));return this.replace(t,e)}setPriority(t,e){if(!this.has(t))throw new Error("[ItemList] Cannot set priority of Item. Key `".concat(t,"` is not present."));return this._items[t].priority=e,this}remove(t){return delete this._items[t],this}merge(t){return Object.keys(t._items).forEach((e=>{const n=t._items[e];n instanceof i&&(this._items[e]=n)})),this}toArray(t){return void 0===t&&(t=!1),Object.keys(this._items).map(((e,n)=>{const r=this._items[e];return!t||(0,o.Z)(r.content)?{...r,content:this.createItemContentProxy((0,o.Z)(r.content)?r.content:Object(r.content),e)}:{...r}})).sort(((t,e)=>e.priority-t.priority)).map((t=>t.content))}toObject(){return Object.keys(this._items).reduce(((t,e)=>{const n={content:this.get(e),itemName:e,priority:this.getPriority(e)};return t[e]=n,t}),{})}createItemContentProxy(t,e){return new Proxy(t,{get:(t,n,r)=>"itemName"===n?e:Reflect.get(t,n,r),set(t,n,r,o){if(null!==e&&"itemName"===n)throw new Error("`itemName` property is read-only");return Reflect.set(t,n,r,o)}})}}flarum.reg.add("core","common/utils/ItemList",s)},6458:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(562),o=n.n(r);const i=o();flarum.reg.add("core","common/utils/Stream",o())},117:()=>{Array.prototype.flat||(Array.prototype.flat=function t(e){return(null!=e?e:1)>0?Array.prototype.reduce.call(this,((n,r)=>n.concat(Array.isArray(r)?t.call(r,e-1):r)),[]):[...this]})},3344:(t,e,n)=>{"use strict";function r(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;ei});const o=function(){for(var t,e,n=0,o="";n{"use strict";function r(t,e){const n=t[e];return delete t[e],n}n.d(e,{Z:()=>r}),flarum.reg.add("core","common/utils/extract",r)},1552:(t,e,n)=>{"use strict";function r(t){return t instanceof Array?t.map((t=>r(t))).join(""):"object"==typeof t&&null!==t?r(t.children):String(t)}n.d(e,{Z:()=>r}),flarum.reg.add("core","common/utils/extractText",r)},6476:(t,e,n)=>{"use strict";function r(t){if(!t||t.length<4)return!1;let e=t.replace("#","");return 3===e.length&&(e+=e),(299*parseInt(e.slice(0,2),16)+587*parseInt(e.slice(2,4),16)+114*parseInt(e.slice(4,6),16))/1e3<(parseInt(getComputedStyle(document.body).getPropertyValue("--yiq-threshold").trim())||128)}n.d(e,{Z:()=>r}),flarum.reg.add("core","common/utils/isDark",r)},7531:(t,e,n)=>{"use strict";function r(t){const e=typeof t;return"function"===e||"object"===e&&!!t}n.d(e,{Z:()=>r}),flarum.reg.add("core","common/utils/isObject",r)},9361:()=>{!function(t){"use strict";var e=function(n,r){this.options=t.extend({},e.DEFAULTS,r);var o=this.options.target===e.DEFAULTS.target?t(this.options.target):t(document).find(this.options.target);this.$target=o.on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(n),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function n(n){return this.each((function(){var r=t(this),o=r.data("bs.affix"),i="object"==typeof n&&n;o||r.data("bs.affix",o=new e(this,i)),"string"==typeof n&&o[n]()}))}e.VERSION="3.4.1",e.RESET="affix affix-top affix-bottom",e.DEFAULTS={offset:0,target:window},e.prototype.getState=function(t,e,n,r){var o=this.$target.scrollTop(),i=this.$element.offset(),s=this.$target.height();if(null!=n&&"top"==this.affixed)return o=t-r&&"bottom"},e.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(e.RESET).addClass("affix");var t=this.$target.scrollTop(),n=this.$element.offset();return this.pinnedOffset=n.top-t},e.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},e.prototype.checkPosition=function(){if(this.$element.is(":visible")){var n=this.$element.height(),r=this.options.offset,o=r.top,i=r.bottom,s=Math.max(t(document).height(),t(document.body).height());"object"!=typeof r&&(i=o=r),"function"==typeof o&&(o=r.top(this.$element)),"function"==typeof i&&(i=r.bottom(this.$element));var a=this.getState(s,n,o,i);if(this.affixed!=a){null!=this.unpin&&this.$element.css("top","");var l="affix"+(a?"-"+a:""),c=t.Event(l+".bs.affix");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=a,this.unpin="bottom"==a?this.getPinnedOffset():null,this.$element.removeClass(e.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==a&&this.$element.offset({top:s-n-i})}};var r=t.fn.affix;t.fn.affix=n,t.fn.affix.Constructor=e,t.fn.affix.noConflict=function(){return t.fn.affix=r,this},t(window).on("load",(function(){t('[data-spy="affix"]').each((function(){var e=t(this),r=e.data();r.offset=r.offset||{},null!=r.offsetBottom&&(r.offset.bottom=r.offsetBottom),null!=r.offsetTop&&(r.offset.top=r.offsetTop),n.call(e,r)}))}))}(jQuery)},6013:()=>{!function(t){"use strict";var e='[data-toggle="dropdown"]',n=function(e){t(e).on("click.bs.dropdown",this.toggle)};function r(e){var n=e.attr("data-target");n||(n=(n=e.attr("href"))&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var r="#"!==n?t(document).find(n):null;return r&&r.length?r:e.parent()}function o(n){n&&3===n.which||(t(".dropdown-backdrop").remove(),t(e).each((function(){var e=t(this),o=r(e),i={relatedTarget:this};o.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&t.contains(o[0],n.target)||(o.trigger(n=t.Event("hide.bs.dropdown",i)),n.isDefaultPrevented()||(e.attr("aria-expanded","false"),o.removeClass("open").trigger(t.Event("hidden.bs.dropdown",i)))))})))}n.VERSION="3.4.1",n.prototype.toggle=function(e){var n=t(this);if(!n.is(".disabled, :disabled")){var i=r(n),s=i.hasClass("open");if(o(),!s){"ontouchstart"in document.documentElement&&!i.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",o);var a={relatedTarget:this};if(i.trigger(e=t.Event("show.bs.dropdown",a)),e.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),i.toggleClass("open").trigger(t.Event("shown.bs.dropdown",a))}return!1}},n.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var o=t(this);if(n.preventDefault(),n.stopPropagation(),!o.is(".disabled, :disabled")){var i=r(o),s=i.hasClass("open");if(!s&&27!=n.which||s&&27==n.which)return 27==n.which&&i.find(e).trigger("focus"),o.trigger("click");var a=i.find(".dropdown-menu li:not(.disabled):visible a");if(a.length){var l=a.index(n.target);38==n.which&&l>0&&l--,40==n.which&&l{!function(t){"use strict";var e=["sanitize","whiteList","sanitizeFn"],n=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],r=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,o=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function i(e,i){var s=e.nodeName.toLowerCase();if(-1!==t.inArray(s,i))return-1===t.inArray(s,n)||Boolean(e.nodeValue.match(r)||e.nodeValue.match(o));for(var a=t(i).filter((function(t,e){return e instanceof RegExp})),l=0,c=a.length;l
                  ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]}},a.prototype.init=function(e,n,r){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(r),this.$viewport=this.options.viewport&&t(document).find(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),i=o.length;i--;){var s=o[i];if("click"==s)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",l="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},a.prototype.getDefaults=function(){return a.DEFAULTS},a.prototype.getOptions=function(n){var r=this.$element.data();for(var o in r)r.hasOwnProperty(o)&&-1!==t.inArray(o,e)&&delete r[o];return(n=t.extend({},this.getDefaults(),r,n)).delay&&"number"==typeof n.delay&&(n.delay={show:n.delay,hide:n.delay}),n.sanitize&&(n.template=s(n.template,n.whiteList,n.sanitizeFn)),n},a.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,(function(t,r){n[t]!=r&&(e[t]=r)})),e},a.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusin"==e.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState)n.hoverState="in";else{if(clearTimeout(n.timeout),n.hoverState="in",!n.options.delay||!n.options.delay.show)return n.show();n.timeout=setTimeout((function(){"in"==n.hoverState&&n.show()}),n.options.delay.show)}},a.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},a.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n)),e instanceof t.Event&&(n.inState["focusout"==e.type?"focus":"hover"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState="out",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout((function(){"out"==n.hoverState&&n.hide()}),n.options.delay.hide)}},a.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var n=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!n)return;var r=this,o=this.tip(),i=this.getUID(this.type);this.setContent(),o.attr("id",i),this.$element.attr("aria-describedby",i),this.options.animation&&o.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,c=l.test(s);c&&(s=s.replace(l,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?o.appendTo(t(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var u=this.getPosition(),d=o[0].offsetWidth,h=o[0].offsetHeight;if(c){var p=s,m=this.getPosition(this.$viewport);s="bottom"==s&&u.bottom+h>m.bottom?"top":"top"==s&&u.top-hm.width?"left":"left"==s&&u.left-ds.top+s.height&&(o.top=s.top+s.height-l)}else{var c=e.left-i,u=e.left+i+n;cs.right&&(o.left=s.left+s.width-u)}return o},a.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},a.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},a.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},a.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},a.prototype.enable=function(){this.enabled=!0},a.prototype.disable=function(){this.enabled=!1},a.prototype.toggleEnabled=function(){this.enabled=!this.enabled},a.prototype.toggle=function(e){var n=this;e&&((n=t(e.currentTarget).data("bs."+this.type))||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},a.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide((function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null}))},a.prototype.sanitizeHtml=function(t){return s(t,this.options.whiteList,this.options.sanitizeFn)};var l=t.fn.tooltip;t.fn.tooltip=function(e){return this.each((function(){var n=t(this),r=n.data("bs.tooltip"),o="object"==typeof e&&e;!r&&/destroy|hide/.test(e)||(r||n.data("bs.tooltip",r=new a(this,o)),"string"==typeof e&&r[e]())}))},t.fn.tooltip.Constructor=a,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=l,this}}(jQuery)},3929:()=>{!function(t){"use strict";t.fn.emulateTransitionEnd=function(e){var n=!1,r=this;return t(this).one("bsTransitionEnd",(function(){n=!0})),setTimeout((function(){n||t(r).trigger(t.support.transition.end)}),e),this},t((function(){t.support.transition=function(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})}))}(jQuery)},613:t=>{var e=function(t){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),document.body.appendChild(this.canvas),this.width=this.canvas.width=t.width,this.height=this.canvas.height=t.height,this.context.drawImage(t,0,0,this.width,this.height)};e.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},e.prototype.update=function(t){this.context.putImageData(t,0,0)},e.prototype.getPixelCount=function(){return this.width*this.height},e.prototype.getImageData=function(){return this.context.getImageData(0,0,this.width,this.height)},e.prototype.removeCanvas=function(){this.canvas.parentNode.removeChild(this.canvas)};var n=function(){};if(n.prototype.getColor=function(t,e){return this.getPalette(t,5,e)[0]},n.prototype.getPalette=function(t,n,r){void 0===n&&(n=10),(void 0===r||1>r)&&(r=10);for(var i,s,a,l,c=new e(t),u=c.getImageData().data,d=c.getPixelCount(),h=[],p=0;d>p;p+=r)s=u[0+(i=4*p)],a=u[i+1],l=u[i+2],u[i+3]>=125&&(s>250&&a>250&&l>250||h.push([s,a,l]));var m=o.quantize(h,n),f=m?m.palette():null;return c.removeCanvas(),f},!r)var r={map:function(t,e){var n={};return e?t.map((function(t,r){return n.index=r,e.call(n,t)})):t.slice()},naturalOrder:function(t,e){return e>t?-1:t>e?1:0},sum:function(t,e){var n={};return t.reduce(e?function(t,r,o){return n.index=o,t+e.call(n,r)}:function(t,e){return t+e},0)},max:function(t,e){return Math.max.apply(null,e?r.map(t,e):t)}};var o=function(){function t(t,e,n){return(t<<2*l)+(e<>c,o=e[1]>>c,i=e[2]>>c,n=t(r,o,i),s[n]=(s[n]||0)+1})),s}function s(t,e){var r,o,i,s=1e6,a=0,l=1e6,u=0,d=1e6,h=0;return t.forEach((function(t){r=t[0]>>c,o=t[1]>>c,i=t[2]>>c,s>r?s=r:r>a&&(a=r),l>o?l=o:o>u&&(u=o),d>i?d=i:i>h&&(h=i)})),new n(s,a,l,u,d,h,e)}function a(e,n){if(n.count()){var o=n.r2-n.r1+1,i=n.g2-n.g1+1,s=n.b2-n.b1+1,a=r.max([o,i,s]);if(1==n.count())return[n.copy()];var l,c,u,d,h=0,p=[],m=[];if(a==o)for(l=n.r1;l<=n.r2;l++){for(d=0,c=n.g1;c<=n.g2;c++)for(u=n.b1;u<=n.b2;u++)d+=e[t(l,c,u)]||0;h+=d,p[l]=h}else if(a==i)for(l=n.g1;l<=n.g2;l++){for(d=0,c=n.r1;c<=n.r2;c++)for(u=n.b1;u<=n.b2;u++)d+=e[t(c,l,u)]||0;h+=d,p[l]=h}else for(l=n.b1;l<=n.b2;l++){for(d=0,c=n.r1;c<=n.r2;c++)for(u=n.g1;u<=n.g2;u++)d+=e[t(c,u,l)]||0;h+=d,p[l]=h}return p.forEach((function(t,e){m[e]=h-t})),function(t){var e,r,o,i,s,a=t+"1",c=t+"2",u=0;for(l=n[a];l<=n[c];l++)if(p[l]>h/2){for(o=n.copy(),i=n.copy(),e=l-n[a],s=(r=n[c]-l)>=e?Math.min(n[c]-1,~~(l+r/2)):Math.max(n[a],~~(l-1-e/2));!p[s];)s++;for(u=m[s];!u&&p[s-1];)u=m[--s];return o[c]=s,i[a]=o[c]+1,[o,i]}}(a==o?"r":a==i?"g":"b")}}var l=5,c=8-l;return n.prototype={volume:function(t){var e=this;return(!e._volume||t)&&(e._volume=(e.r2-e.r1+1)*(e.g2-e.g1+1)*(e.b2-e.b1+1)),e._volume},count:function(e){var n=this,r=n.histo;if(!n._count_set||e){var o,i,s,a=0;for(o=n.r1;o<=n.r2;o++)for(i=n.g1;i<=n.g2;i++)for(s=n.b1;s<=n.b2;s++)index=t(o,i,s),a+=r[index]||0;n._count=a,n._count_set=!0}return n._count},copy:function(){var t=this;return new n(t.r1,t.r2,t.g1,t.g2,t.b1,t.b2,t.histo)},avg:function(e){var n=this,r=n.histo;if(!n._avg||e){var o,i,s,a,c=0,u=1<<8-l,d=0,h=0,p=0;for(i=n.r1;i<=n.r2;i++)for(s=n.g1;s<=n.g2;s++)for(a=n.b1;a<=n.b2;a++)c+=o=r[t(i,s,a)]||0,d+=o*(i+.5)*u,h+=o*(s+.5)*u,p+=o*(a+.5)*u;n._avg=c?[~~(d/c),~~(h/c),~~(p/c)]:[~~(u*(n.r1+n.r2+1)/2),~~(u*(n.g1+n.g2+1)/2),~~(u*(n.b1+n.b2+1)/2)]}return n._avg},contains:function(t){var e=this,n=t[0]>>c;return gval=t[1]>>c,bval=t[2]>>c,n>=e.r1&&n<=e.r2&&gval>=e.g1&&gval<=e.g2&&bval>=e.b1&&bval<=e.b2}},o.prototype={push:function(t){this.vboxes.push({vbox:t,color:t.avg()})},palette:function(){return this.vboxes.map((function(t){return t.color}))},size:function(){return this.vboxes.size()},map:function(t){for(var e=this.vboxes,n=0;n(n=Math.sqrt(Math.pow(t[0]-o.peek(i).color[0],2)+Math.pow(t[1]-o.peek(i).color[1],2)+Math.pow(t[2]-o.peek(i).color[2],2)))||void 0===e)&&(e=n,r=o.peek(i).color);return r},forcebw:function(){var t=this.vboxes;t.sort((function(t,e){return r.naturalOrder(r.sum(t.color),r.sum(e.color))}));var e=t[0].color;e[0]<5&&e[1]<5&&e[2]<5&&(t[0].color=[0,0,0]);var n=t.length-1,o=t[n].color;o[0]>251&&o[1]>251&&o[2]>251&&(t[n].color=[255,255,255])}},{quantize:function(t,n){function l(t,e){for(var n,r=1,o=0;1e3>o;)if((n=t.pop()).count()){var i=a(c,n),s=i[0],l=i[1];if(!s)return;if(t.push(s),l&&(t.push(l),r++),r>=e)return;if(o++>1e3)return}else t.push(n),o++}if(!t.length||2>n||n>256)return!1;var c=i(t);c.forEach((function(){}));var u=s(t,c),d=new e((function(t,e){return r.naturalOrder(t.count(),e.count())}));d.push(u),l(d,.75*n);for(var h=new e((function(t,e){return r.naturalOrder(t.count()*t.volume(),e.count()*e.volume())}));d.size();)h.push(d.pop());l(h,n-h.size());for(var p=new o;h.size();)p.push(h.pop());return p}}}();t.exports=n},3860:function(t){t.exports=function(){"use strict";var t=6e4,e=36e5,n="millisecond",r="second",o="minute",i="hour",s="day",a="week",l="month",c="quarter",u="year",d="date",h="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,m=/\[([^\]]+)]|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,f={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},g=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:g,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),o=n%60;return(e<=0?"+":"-")+g(r,2,"0")+":"+g(o,2,"0")},m:function t(e,n){if(e.date()1)return t(s[0])}else{var a=e.name;y[a]=e,o=a}return!r&&o&&(b=o),o||!r&&b},N=function(t,e){if(w(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},E=v;E.l=x,E.i=w,E.w=function(t,e){return N(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function f(t){this.$L=x(t.locale,null,!0),this.parse(t)}var g=f.prototype;return g.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(E.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(p);if(r){var o=r[2]-1||0,i=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)):new Date(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},g.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},g.$utils=function(){return E},g.isValid=function(){return!(this.$d.toString()===h)},g.isSame=function(t,e){var n=N(t);return this.startOf(e)<=n&&n<=this.endOf(e)},g.isAfter=function(t,e){return N(t)0,g<=f.r||!f.r){g<=1&&m>0&&(f=h[m-1]);var v=d[f.l];a&&(g=a(""+g)),c="string"==typeof v?v.replace("%d",g):v(g,r,f.l,u);break}}if(r)return c;var b=u?d.future:d.past;return"function"==typeof b?b(c):b.replace("%s",c)},r.to=function(t,e){return i(t,e,this,!0)},r.from=function(t,e){return i(t,e,this)};var s=function(t){return t.$u?n.utc():n()};r.toNow=function(t){return this.to(s(this),t)},r.fromNow=function(t){return this.from(s(this),t)}}}()},7749:(t,e,n)=>{"use strict";t.exports=function(){if("object"==typeof globalThis)return globalThis;var t;try{t=this||new Function("return this")()}catch(t){if("object"==typeof window)return window;if("object"==typeof self)return self;if(void 0!==n.g)return n.g}return t}()},2045:function(){!function(t){function e(e){if("string"==typeof e.data&&(e.data={keys:e.data}),e.data&&e.data.keys&&"string"==typeof e.data.keys){var n=e.handler,r=e.data.keys.toLowerCase().split(" ");e.handler=function(e){if(this===e.target||!(t.hotkeys.options.filterInputAcceptingElements&&t.hotkeys.textInputTypes.test(e.target.nodeName)||t.hotkeys.options.filterContentEditable&&t(e.target).attr("contenteditable")||t.hotkeys.options.filterTextInputs&&t.inArray(e.target.type,t.hotkeys.textAcceptingInputTypes)>-1)){var o="keypress"!==e.type&&t.hotkeys.specialKeys[e.which],i=String.fromCharCode(e.which).toLowerCase(),s="",a={};t.each(["alt","ctrl","shift"],(function(t,n){e[n+"Key"]&&o!==n&&(s+=n+"+")})),e.metaKey&&!e.ctrlKey&&"meta"!==o&&(s+="meta+"),e.metaKey&&"meta"!==o&&s.indexOf("alt+ctrl+shift+")>-1&&(s=s.replace("alt+ctrl+shift+","hyper+")),o?a[s+o]=!0:(a[s+i]=!0,a[s+t.hotkeys.shiftNums[i]]=!0,"shift+"===s&&(a[t.hotkeys.shiftNums[i]]=!0));for(var l=0,c=r.length;l","/":"?","\\":"|"},textAcceptingInputTypes:["text","password","number","email","url","range","date","month","week","time","datetime","datetime-local","search","color","tel"],textInputTypes:/textarea|input|select/i,options:{filterInputAcceptingElements:!0,filterTextInputs:!0,filterContentEditable:!0}},t.each(["keydown","keyup","keypress"],(function(){t.event.special[this]={add:e}}))}(jQuery||this.jQuery||window.jQuery)},2890:function(t,e){var n;!function(e,n){"use strict";"object"==typeof t.exports?t.exports=e.document?n(e,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return n(t)}:n(e)}("undefined"!=typeof window?window:this,(function(r,o){"use strict";var i=[],s=Object.getPrototypeOf,a=i.slice,l=i.flat?function(t){return i.flat.call(t)}:function(t){return i.concat.apply([],t)},c=i.push,u=i.indexOf,d={},h=d.toString,p=d.hasOwnProperty,m=p.toString,f=m.call(Object),g={},v=function(t){return"function"==typeof t&&"number"!=typeof t.nodeType&&"function"!=typeof t.item},b=function(t){return null!=t&&t===t.window},y=r.document,w={type:!0,src:!0,nonce:!0,noModule:!0};function x(t,e,n){var r,o,i=(n=n||y).createElement("script");if(i.text=t,e)for(r in w)(o=e[r]||e.getAttribute&&e.getAttribute(r))&&i.setAttribute(r,o);n.head.appendChild(i).parentNode.removeChild(i)}function N(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?d[h.call(t)]||"object":typeof t}var E="3.6.1",_=function(t,e){return new _.fn.init(t,e)};function T(t){var e=!!t&&"length"in t&&t.length,n=N(t);return!v(t)&&!b(t)&&("array"===n||0===e||"number"==typeof e&&e>0&&e-1 in t)}_.fn=_.prototype={jquery:E,constructor:_,length:0,toArray:function(){return a.call(this)},get:function(t){return null==t?a.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=_.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return _.each(this,t)},map:function(t){return this.pushStack(_.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return this.pushStack(a.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(_.grep(this,(function(t,e){return(e+1)%2})))},odd:function(){return this.pushStack(_.grep(this,(function(t,e){return e%2})))},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n+~]|[\\x20\\t\\r\\n\\f])[\\x20\\t\\r\\n\\f]*"),z=new RegExp(M+"|>"),W=new RegExp(R),G=new RegExp("^"+B+"$"),V={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),TAG:new RegExp("^("+B+"|[*])"),ATTR:new RegExp("^"+$),PSEUDO:new RegExp("^"+R),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)","i"),bool:new RegExp("^(?:"+j+")$","i"),needsContext:new RegExp("^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,K=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,tt=/[+~]/,et=new RegExp("\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\([^\\r\\n\\f])","g"),nt=function(t,e){var n="0x"+t.slice(1)-65536;return e||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},rt=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ot=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},it=function(){h()},st=wt((function(t){return!0===t.disabled&&"fieldset"===t.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{O.apply(A=I.call(x.childNodes),x.childNodes),A[x.childNodes.length].nodeType}catch(t){O={apply:A.length?function(t,e){P.apply(t,I.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}function at(t,e,r,o){var i,a,c,u,d,m,v,b=e&&e.ownerDocument,x=e?e.nodeType:9;if(r=r||[],"string"!=typeof t||!t||1!==x&&9!==x&&11!==x)return r;if(!o&&(h(e),e=e||p,f)){if(11!==x&&(d=Q.exec(t)))if(i=d[1]){if(9===x){if(!(c=e.getElementById(i)))return r;if(c.id===i)return r.push(c),r}else if(b&&(c=b.getElementById(i))&&y(e,c)&&c.id===i)return r.push(c),r}else{if(d[2])return O.apply(r,e.getElementsByTagName(t)),r;if((i=d[3])&&n.getElementsByClassName&&e.getElementsByClassName)return O.apply(r,e.getElementsByClassName(i)),r}if(n.qsa&&!S[t+" "]&&(!g||!g.test(t))&&(1!==x||"object"!==e.nodeName.toLowerCase())){if(v=t,b=e,1===x&&(z.test(t)||U.test(t))){for((b=tt.test(t)&&vt(e.parentNode)||e)===e&&n.scope||((u=e.getAttribute("id"))?u=u.replace(rt,ot):e.setAttribute("id",u=w)),a=(m=s(t)).length;a--;)m[a]=(u?"#"+u:":scope")+" "+yt(m[a]);v=m.join(",")}try{return O.apply(r,b.querySelectorAll(v)),r}catch(e){S(t,!0)}finally{u===w&&e.removeAttribute("id")}}}return l(t.replace(q,"$1"),e,r,o)}function lt(){var t=[];return function e(n,o){return t.push(n+" ")>r.cacheLength&&delete e[t.shift()],e[n+" "]=o}}function ct(t){return t[w]=!0,t}function ut(t){var e=p.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function dt(t,e){for(var n=t.split("|"),o=n.length;o--;)r.attrHandle[n[o]]=e}function ht(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function pt(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function mt(t){return function(e){var n=e.nodeName.toLowerCase();return("input"===n||"button"===n)&&e.type===t}}function ft(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&st(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function gt(t){return ct((function(e){return e=+e,ct((function(n,r){for(var o,i=t([],n.length,e),s=i.length;s--;)n[o=i[s]]&&(n[o]=!(r[o]=n[o]))}))}))}function vt(t){return t&&void 0!==t.getElementsByTagName&&t}for(e in n=at.support={},i=at.isXML=function(t){var e=t&&t.namespaceURI,n=t&&(t.ownerDocument||t).documentElement;return!Y.test(e||n&&n.nodeName||"HTML")},h=at.setDocument=function(t){var e,o,s=t?t.ownerDocument||t:x;return s!=p&&9===s.nodeType&&s.documentElement?(m=(p=s).documentElement,f=!i(p),x!=p&&(o=p.defaultView)&&o.top!==o&&(o.addEventListener?o.addEventListener("unload",it,!1):o.attachEvent&&o.attachEvent("onunload",it)),n.scope=ut((function(t){return m.appendChild(t).appendChild(p.createElement("div")),void 0!==t.querySelectorAll&&!t.querySelectorAll(":scope fieldset div").length})),n.attributes=ut((function(t){return t.className="i",!t.getAttribute("className")})),n.getElementsByTagName=ut((function(t){return t.appendChild(p.createComment("")),!t.getElementsByTagName("*").length})),n.getElementsByClassName=J.test(p.getElementsByClassName),n.getById=ut((function(t){return m.appendChild(t).id=w,!p.getElementsByName||!p.getElementsByName(w).length})),n.getById?(r.filter.ID=function(t){var e=t.replace(et,nt);return function(t){return t.getAttribute("id")===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&f){var n=e.getElementById(t);return n?[n]:[]}}):(r.filter.ID=function(t){var e=t.replace(et,nt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return n&&n.value===e}},r.find.ID=function(t,e){if(void 0!==e.getElementById&&f){var n,r,o,i=e.getElementById(t);if(i){if((n=i.getAttributeNode("id"))&&n.value===t)return[i];for(o=e.getElementsByName(t),r=0;i=o[r++];)if((n=i.getAttributeNode("id"))&&n.value===t)return[i]}return[]}}),r.find.TAG=n.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):n.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],o=0,i=e.getElementsByTagName(t);if("*"===t){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},r.find.CLASS=n.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&f)return e.getElementsByClassName(t)},v=[],g=[],(n.qsa=J.test(p.querySelectorAll))&&(ut((function(t){var e;m.appendChild(t).innerHTML="",t.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),t.querySelectorAll("[selected]").length||g.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|"+j+")"),t.querySelectorAll("[id~="+w+"-]").length||g.push("~="),(e=p.createElement("input")).setAttribute("name",""),t.appendChild(e),t.querySelectorAll("[name='']").length||g.push("\\[[\\x20\\t\\r\\n\\f]*name[\\x20\\t\\r\\n\\f]*=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),t.querySelectorAll(":checked").length||g.push(":checked"),t.querySelectorAll("a#"+w+"+*").length||g.push(".#.+[+~]"),t.querySelectorAll("\\\f"),g.push("[\\r\\n\\f]")})),ut((function(t){t.innerHTML="";var e=p.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&g.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),m.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),g.push(",.*:")}))),(n.matchesSelector=J.test(b=m.matches||m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&ut((function(t){n.disconnectedMatch=b.call(t,"*"),b.call(t,"[s!='']:x"),v.push("!=",R)})),g=g.length&&new RegExp(g.join("|")),v=v.length&&new RegExp(v.join("|")),e=J.test(m.compareDocumentPosition),y=e||J.test(m.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},C=e?function(t,e){if(t===e)return d=!0,0;var r=!t.compareDocumentPosition-!e.compareDocumentPosition;return r||(1&(r=(t.ownerDocument||t)==(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!n.sortDetached&&e.compareDocumentPosition(t)===r?t==p||t.ownerDocument==x&&y(x,t)?-1:e==p||e.ownerDocument==x&&y(x,e)?1:u?L(u,t)-L(u,e):0:4&r?-1:1)}:function(t,e){if(t===e)return d=!0,0;var n,r=0,o=t.parentNode,i=e.parentNode,s=[t],a=[e];if(!o||!i)return t==p?-1:e==p?1:o?-1:i?1:u?L(u,t)-L(u,e):0;if(o===i)return ht(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)a.unshift(n);for(;s[r]===a[r];)r++;return r?ht(s[r],a[r]):s[r]==x?-1:a[r]==x?1:0},p):p},at.matches=function(t,e){return at(t,null,null,e)},at.matchesSelector=function(t,e){if(h(t),n.matchesSelector&&f&&!S[e+" "]&&(!v||!v.test(e))&&(!g||!g.test(e)))try{var r=b.call(t,e);if(r||n.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){S(e,!0)}return at(e,p,null,[t]).length>0},at.contains=function(t,e){return(t.ownerDocument||t)!=p&&h(t),y(t,e)},at.attr=function(t,e){(t.ownerDocument||t)!=p&&h(t);var o=r.attrHandle[e.toLowerCase()],i=o&&Z.call(r.attrHandle,e.toLowerCase())?o(t,e,!f):void 0;return void 0!==i?i:n.attributes||!f?t.getAttribute(e):(i=t.getAttributeNode(e))&&i.specified?i.value:null},at.escape=function(t){return(t+"").replace(rt,ot)},at.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},at.uniqueSort=function(t){var e,r=[],o=0,i=0;if(d=!n.detectDuplicates,u=!n.sortStable&&t.slice(0),t.sort(C),d){for(;e=t[i++];)e===t[i]&&(o=r.push(i));for(;o--;)t.splice(r[o],1)}return u=null,t},o=at.getText=function(t){var e,n="",r=0,i=t.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=o(t)}else if(3===i||4===i)return t.nodeValue}else for(;e=t[r++];)n+=o(e);return n},r=at.selectors={cacheLength:50,createPseudo:ct,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(et,nt),t[3]=(t[3]||t[4]||t[5]||"").replace(et,nt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||at.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&at.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return V.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":n&&W.test(n)&&(e=s(n,!0))&&(e=n.indexOf(")",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(et,nt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=_[t+" "];return e||(e=new RegExp("(^|[\\x20\\t\\r\\n\\f])"+t+"("+M+"|$)"))&&_(t,(function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")}))},ATTR:function(t,e,n){return function(r){var o=at.attr(r,t);return null==o?"!="===e:!e||(o+="","="===e?o===n:"!="===e?o!==n:"^="===e?n&&0===o.indexOf(n):"*="===e?n&&o.indexOf(n)>-1:"$="===e?n&&o.slice(-n.length)===n:"~="===e?(" "+o.replace(F," ")+" ").indexOf(n)>-1:"|="===e&&(o===n||o.slice(0,n.length+1)===n+"-"))}},CHILD:function(t,e,n,r,o){var i="nth"!==t.slice(0,3),s="last"!==t.slice(-4),a="of-type"===e;return 1===r&&0===o?function(t){return!!t.parentNode}:function(e,n,l){var c,u,d,h,p,m,f=i!==s?"nextSibling":"previousSibling",g=e.parentNode,v=a&&e.nodeName.toLowerCase(),b=!l&&!a,y=!1;if(g){if(i){for(;f;){for(h=e;h=h[f];)if(a?h.nodeName.toLowerCase()===v:1===h.nodeType)return!1;m=f="only"===t&&!m&&"nextSibling"}return!0}if(m=[s?g.firstChild:g.lastChild],s&&b){for(y=(p=(c=(u=(d=(h=g)[w]||(h[w]={}))[h.uniqueID]||(d[h.uniqueID]={}))[t]||[])[0]===N&&c[1])&&c[2],h=p&&g.childNodes[p];h=++p&&h&&h[f]||(y=p=0)||m.pop();)if(1===h.nodeType&&++y&&h===e){u[t]=[N,p,y];break}}else if(b&&(y=p=(c=(u=(d=(h=e)[w]||(h[w]={}))[h.uniqueID]||(d[h.uniqueID]={}))[t]||[])[0]===N&&c[1]),!1===y)for(;(h=++p&&h&&h[f]||(y=p=0)||m.pop())&&((a?h.nodeName.toLowerCase()!==v:1!==h.nodeType)||!++y||(b&&((u=(d=h[w]||(h[w]={}))[h.uniqueID]||(d[h.uniqueID]={}))[t]=[N,y]),h!==e)););return(y-=o)===r||y%r==0&&y/r>=0}}},PSEUDO:function(t,e){var n,o=r.pseudos[t]||r.setFilters[t.toLowerCase()]||at.error("unsupported pseudo: "+t);return o[w]?o(e):o.length>1?(n=[t,t,"",e],r.setFilters.hasOwnProperty(t.toLowerCase())?ct((function(t,n){for(var r,i=o(t,e),s=i.length;s--;)t[r=L(t,i[s])]=!(n[r]=i[s])})):function(t){return o(t,0,n)}):o}},pseudos:{not:ct((function(t){var e=[],n=[],r=a(t.replace(q,"$1"));return r[w]?ct((function(t,e,n,o){for(var i,s=r(t,null,o,[]),a=t.length;a--;)(i=s[a])&&(t[a]=!(e[a]=i))})):function(t,o,i){return e[0]=t,r(e,null,i,n),e[0]=null,!n.pop()}})),has:ct((function(t){return function(e){return at(t,e).length>0}})),contains:ct((function(t){return t=t.replace(et,nt),function(e){return(e.textContent||o(e)).indexOf(t)>-1}})),lang:ct((function(t){return G.test(t||"")||at.error("unsupported lang: "+t),t=t.replace(et,nt).toLowerCase(),function(e){var n;do{if(n=f?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(n=n.toLowerCase())===t||0===n.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}})),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===m},focus:function(t){return t===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:ft(!1),disabled:ft(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!r.pseudos.empty(t)},header:function(t){return X.test(t.nodeName)},input:function(t){return K.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:gt((function(){return[0]})),last:gt((function(t,e){return[e-1]})),eq:gt((function(t,e,n){return[n<0?n+e:n]})),even:gt((function(t,e){for(var n=0;ne?e:n;--r>=0;)t.push(r);return t})),gt:gt((function(t,e,n){for(var r=n<0?n+e:n;++r1?function(e,n,r){for(var o=t.length;o--;)if(!t[o](e,n,r))return!1;return!0}:t[0]}function Nt(t,e,n,r,o){for(var i,s=[],a=0,l=t.length,c=null!=e;a-1&&(i[c]=!(s[c]=d))}}else v=Nt(v===s?v.splice(m,v.length):v),o?o(null,s,v,l):O.apply(s,v)}))}function _t(t){for(var e,n,o,i=t.length,s=r.relative[t[0].type],a=s||r.relative[" "],l=s?1:0,u=wt((function(t){return t===e}),a,!0),d=wt((function(t){return L(e,t)>-1}),a,!0),h=[function(t,n,r){var o=!s&&(r||n!==c)||((e=n).nodeType?u(t,n,r):d(t,n,r));return e=null,o}];l1&&xt(h),l>1&&yt(t.slice(0,l-1).concat({value:" "===t[l-2].type?"*":""})).replace(q,"$1"),n,l0,o=t.length>0,i=function(i,s,a,l,u){var d,m,g,v=0,b="0",y=i&&[],w=[],x=c,E=i||o&&r.find.TAG("*",u),_=N+=null==x?1:Math.random()||.1,T=E.length;for(u&&(c=s==p||s||u);b!==T&&null!=(d=E[b]);b++){if(o&&d){for(m=0,s||d.ownerDocument==p||(h(d),a=!f);g=t[m++];)if(g(d,s||p,a)){l.push(d);break}u&&(N=_)}n&&((d=!g&&d)&&v--,i&&y.push(d))}if(v+=b,n&&b!==v){for(m=0;g=e[m++];)g(y,w,s,a);if(i){if(v>0)for(;b--;)y[b]||w[b]||(w[b]=D.call(l));w=Nt(w)}O.apply(l,w),u&&!i&&w.length>0&&v+e.length>1&&at.uniqueSort(l)}return u&&(N=_,c=x),y};return n?ct(i):i}(i,o)),a.selector=t}return a},l=at.select=function(t,e,n,o){var i,l,c,u,d,h="function"==typeof t&&t,p=!o&&s(t=h.selector||t);if(n=n||[],1===p.length){if((l=p[0]=p[0].slice(0)).length>2&&"ID"===(c=l[0]).type&&9===e.nodeType&&f&&r.relative[l[1].type]){if(!(e=(r.find.ID(c.matches[0].replace(et,nt),e)||[])[0]))return n;h&&(e=e.parentNode),t=t.slice(l.shift().value.length)}for(i=V.needsContext.test(t)?0:l.length;i--&&(c=l[i],!r.relative[u=c.type]);)if((d=r.find[u])&&(o=d(c.matches[0].replace(et,nt),tt.test(l[0].type)&&vt(e.parentNode)||e))){if(l.splice(i,1),!(t=o.length&&yt(l)))return O.apply(n,o),n;break}}return(h||a(t,p))(o,e,!f,n,!e||tt.test(t)&&vt(e.parentNode)||e),n},n.sortStable=w.split("").sort(C).join("")===w,n.detectDuplicates=!!d,h(),n.sortDetached=ut((function(t){return 1&t.compareDocumentPosition(p.createElement("fieldset"))})),ut((function(t){return t.innerHTML="","#"===t.firstChild.getAttribute("href")}))||dt("type|href|height|width",(function(t,e,n){if(!n)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)})),n.attributes&&ut((function(t){return t.innerHTML="",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")}))||dt("value",(function(t,e,n){if(!n&&"input"===t.nodeName.toLowerCase())return t.defaultValue})),ut((function(t){return null==t.getAttribute("disabled")}))||dt(j,(function(t,e,n){var r;if(!n)return!0===t[e]?e.toLowerCase():(r=t.getAttributeNode(e))&&r.specified?r.value:null})),at}(r);_.find=k,_.expr=k.selectors,_.expr[":"]=_.expr.pseudos,_.uniqueSort=_.unique=k.uniqueSort,_.text=k.getText,_.isXMLDoc=k.isXML,_.contains=k.contains,_.escapeSelector=k.escape;var S=function(t,e,n){for(var r=[],o=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(o&&_(t).is(n))break;r.push(t)}return r},C=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},Z=_.expr.match.needsContext;function A(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}var D=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function P(t,e,n){return v(e)?_.grep(t,(function(t,r){return!!e.call(t,r,t)!==n})):e.nodeType?_.grep(t,(function(t){return t===e!==n})):"string"!=typeof e?_.grep(t,(function(t){return u.call(e,t)>-1!==n})):_.filter(e,t,n)}_.filter=function(t,e,n){var r=e[0];return n&&(t=":not("+t+")"),1===e.length&&1===r.nodeType?_.find.matchesSelector(r,t)?[r]:[]:_.find.matches(t,_.grep(e,(function(t){return 1===t.nodeType})))},_.fn.extend({find:function(t){var e,n,r=this.length,o=this;if("string"!=typeof t)return this.pushStack(_(t).filter((function(){for(e=0;e1?_.uniqueSort(n):n},filter:function(t){return this.pushStack(P(this,t||[],!1))},not:function(t){return this.pushStack(P(this,t||[],!0))},is:function(t){return!!P(this,"string"==typeof t&&Z.test(t)?_(t):t||[],!1).length}});var O,I=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(_.fn.init=function(t,e,n){var r,o;if(!t)return this;if(n=n||O,"string"==typeof t){if(!(r="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:I.exec(t))||!r[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(r[1]){if(e=e instanceof _?e[0]:e,_.merge(this,_.parseHTML(r[1],e&&e.nodeType?e.ownerDocument||e:y,!0)),D.test(r[1])&&_.isPlainObject(e))for(r in e)v(this[r])?this[r](e[r]):this.attr(r,e[r]);return this}return(o=y.getElementById(r[2]))&&(this[0]=o,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):v(t)?void 0!==n.ready?n.ready(t):t(_):_.makeArray(t,this)}).prototype=_.fn,O=_(y);var L=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function M(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}_.fn.extend({has:function(t){var e=_(t,this),n=e.length;return this.filter((function(){for(var t=0;t-1:1===n.nodeType&&_.find.matchesSelector(n,t))){i.push(n);break}return this.pushStack(i.length>1?_.uniqueSort(i):i)},index:function(t){return t?"string"==typeof t?u.call(_(t),this[0]):u.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(_.uniqueSort(_.merge(this.get(),_(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),_.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return S(t,"parentNode")},parentsUntil:function(t,e,n){return S(t,"parentNode",n)},next:function(t){return M(t,"nextSibling")},prev:function(t){return M(t,"previousSibling")},nextAll:function(t){return S(t,"nextSibling")},prevAll:function(t){return S(t,"previousSibling")},nextUntil:function(t,e,n){return S(t,"nextSibling",n)},prevUntil:function(t,e,n){return S(t,"previousSibling",n)},siblings:function(t){return C((t.parentNode||{}).firstChild,t)},children:function(t){return C(t.firstChild)},contents:function(t){return null!=t.contentDocument&&s(t.contentDocument)?t.contentDocument:(A(t,"template")&&(t=t.content||t),_.merge([],t.childNodes))}},(function(t,e){_.fn[t]=function(n,r){var o=_.map(this,e,n);return"Until"!==t.slice(-5)&&(r=n),r&&"string"==typeof r&&(o=_.filter(r,o)),this.length>1&&(j[t]||_.uniqueSort(o),L.test(t)&&o.reverse()),this.pushStack(o)}}));var B=/[^\x20\t\r\n\f]+/g;function $(t){return t}function R(t){throw t}function F(t,e,n,r){var o;try{t&&v(o=t.promise)?o.call(t).done(e).fail(n):t&&v(o=t.then)?o.call(t,e,n):e.apply(void 0,[t].slice(r))}catch(t){n.apply(void 0,[t])}}_.Callbacks=function(t){t="string"==typeof t?function(t){var e={};return _.each(t.match(B)||[],(function(t,n){e[n]=!0})),e}(t):_.extend({},t);var e,n,r,o,i=[],s=[],a=-1,l=function(){for(o=o||t.once,r=e=!0;s.length;a=-1)for(n=s.shift();++a-1;)i.splice(n,1),n<=a&&a--})),this},has:function(t){return t?_.inArray(t,i)>-1:i.length>0},empty:function(){return i&&(i=[]),this},disable:function(){return o=s=[],i=n="",this},disabled:function(){return!i},lock:function(){return o=s=[],n||e||(i=n=""),this},locked:function(){return!!o},fireWith:function(t,n){return o||(n=[t,(n=n||[]).slice?n.slice():n],s.push(n),e||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},_.extend({Deferred:function(t){var e=[["notify","progress",_.Callbacks("memory"),_.Callbacks("memory"),2],["resolve","done",_.Callbacks("once memory"),_.Callbacks("once memory"),0,"resolved"],["reject","fail",_.Callbacks("once memory"),_.Callbacks("once memory"),1,"rejected"]],n="pending",o={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},catch:function(t){return o.then(null,t)},pipe:function(){var t=arguments;return _.Deferred((function(n){_.each(e,(function(e,r){var o=v(t[r[4]])&&t[r[4]];i[r[1]]((function(){var t=o&&o.apply(this,arguments);t&&v(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+"With"](this,o?[t]:arguments)}))})),t=null})).promise()},then:function(t,n,o){var i=0;function s(t,e,n,o){return function(){var a=this,l=arguments,c=function(){var r,c;if(!(t=i&&(n!==R&&(a=void 0,l=[r]),e.rejectWith(a,l))}};t?u():(_.Deferred.getStackHook&&(u.stackTrace=_.Deferred.getStackHook()),r.setTimeout(u))}}return _.Deferred((function(r){e[0][3].add(s(0,r,v(o)?o:$,r.notifyWith)),e[1][3].add(s(0,r,v(t)?t:$)),e[2][3].add(s(0,r,v(n)?n:R))})).promise()},promise:function(t){return null!=t?_.extend(t,o):o}},i={};return _.each(e,(function(t,r){var s=r[2],a=r[5];o[r[1]]=s.add,a&&s.add((function(){n=a}),e[3-t][2].disable,e[3-t][3].disable,e[0][2].lock,e[0][3].lock),s.add(r[3].fire),i[r[0]]=function(){return i[r[0]+"With"](this===i?void 0:this,arguments),this},i[r[0]+"With"]=s.fireWith})),o.promise(i),t&&t.call(i,i),i},when:function(t){var e=arguments.length,n=e,r=Array(n),o=a.call(arguments),i=_.Deferred(),s=function(t){return function(n){r[t]=this,o[t]=arguments.length>1?a.call(arguments):n,--e||i.resolveWith(r,o)}};if(e<=1&&(F(t,i.done(s(n)).resolve,i.reject,!e),"pending"===i.state()||v(o[n]&&o[n].then)))return i.then();for(;n--;)F(o[n],s(n),i.reject);return i.promise()}});var q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;_.Deferred.exceptionHook=function(t,e){r.console&&r.console.warn&&t&&q.test(t.name)&&r.console.warn("jQuery.Deferred exception: "+t.message,t.stack,e)},_.readyException=function(t){r.setTimeout((function(){throw t}))};var H=_.Deferred();function U(){y.removeEventListener("DOMContentLoaded",U),r.removeEventListener("load",U),_.ready()}_.fn.ready=function(t){return H.then(t).catch((function(t){_.readyException(t)})),this},_.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--_.readyWait:_.isReady)||(_.isReady=!0,!0!==t&&--_.readyWait>0||H.resolveWith(y,[_]))}}),_.ready.then=H.then,"complete"===y.readyState||"loading"!==y.readyState&&!y.documentElement.doScroll?r.setTimeout(_.ready):(y.addEventListener("DOMContentLoaded",U),r.addEventListener("load",U));var z=function(t,e,n,r,o,i,s){var a=0,l=t.length,c=null==n;if("object"===N(n))for(a in o=!0,n)z(t,e,a,n[a],!0,i,s);else if(void 0!==r&&(o=!0,v(r)||(s=!0),c&&(s?(e.call(t,r),e=null):(c=e,e=function(t,e,n){return c.call(_(t),n)})),e))for(;a1,null,!0)},removeData:function(t){return this.each((function(){Q.remove(this,t)}))}}),_.extend({queue:function(t,e,n){var r;if(t)return e=(e||"fx")+"queue",r=J.get(t,e),n&&(!r||Array.isArray(n)?r=J.access(t,e,_.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||"fx";var n=_.queue(t,e),r=n.length,o=n.shift(),i=_._queueHooks(t,e);"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===e&&n.unshift("inprogress"),delete i.stop,o.call(t,(function(){_.dequeue(t,e)}),i)),!r&&i&&i.empty.fire()},_queueHooks:function(t,e){var n=e+"queueHooks";return J.get(t,n)||J.access(t,n,{empty:_.Callbacks("once memory").add((function(){J.remove(t,[e+"queue",n])}))})}}),_.fn.extend({queue:function(t,e){var n=2;return"string"!=typeof t&&(e=t,t="fx",n--),arguments.length\x20\t\r\n\f]*)/i,bt=/^$|^module$|\/(?:java|ecma)script/i;mt=y.createDocumentFragment().appendChild(y.createElement("div")),(ft=y.createElement("input")).setAttribute("type","radio"),ft.setAttribute("checked","checked"),ft.setAttribute("name","t"),mt.appendChild(ft),g.checkClone=mt.cloneNode(!0).cloneNode(!0).lastChild.checked,mt.innerHTML="",g.noCloneChecked=!!mt.cloneNode(!0).lastChild.defaultValue,mt.innerHTML="",g.option=!!mt.lastChild;var yt={thead:[1,"","
                  "],col:[2,"","
                  "],tr:[2,"","
                  "],td:[3,"","
                  "],_default:[0,"",""]};function wt(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[],void 0===e||e&&A(t,e)?_.merge([t],n):n}function xt(t,e){for(var n=0,r=t.length;n",""]);var Nt=/<|&#?\w+;/;function Et(t,e,n,r,o){for(var i,s,a,l,c,u,d=e.createDocumentFragment(),h=[],p=0,m=t.length;p-1)o&&o.push(i);else if(c=at(i),s=wt(d.appendChild(i),"script"),c&&xt(s),n)for(u=0;i=s[u++];)bt.test(i.type||"")&&n.push(i);return d}var _t=/^([^.]*)(?:\.(.+)|)/;function Tt(){return!0}function kt(){return!1}function St(t,e){return t===function(){try{return y.activeElement}catch(t){}}()==("focus"===e)}function Ct(t,e,n,r,o,i){var s,a;if("object"==typeof e){for(a in"string"!=typeof n&&(r=r||n,n=void 0),e)Ct(t,a,n,r,e[a],i);return t}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&("string"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),!1===o)o=kt;else if(!o)return t;return 1===i&&(s=o,o=function(t){return _().off(t),s.apply(this,arguments)},o.guid=s.guid||(s.guid=_.guid++)),t.each((function(){_.event.add(this,e,o,r,n)}))}function Zt(t,e,n){n?(J.set(t,e,!1),_.event.add(t,e,{namespace:!1,handler:function(t){var r,o,i=J.get(this,e);if(1&t.isTrigger&&this[e]){if(i.length)(_.event.special[e]||{}).delegateType&&t.stopPropagation();else if(i=a.call(arguments),J.set(this,e,i),r=n(this,e),this[e](),i!==(o=J.get(this,e))||r?J.set(this,e,!1):o={},i!==o)return t.stopImmediatePropagation(),t.preventDefault(),o&&o.value}else i.length&&(J.set(this,e,{value:_.event.trigger(_.extend(i[0],_.Event.prototype),i.slice(1),this)}),t.stopImmediatePropagation())}})):void 0===J.get(t,e)&&_.event.add(t,e,Tt)}_.event={global:{},add:function(t,e,n,r,o){var i,s,a,l,c,u,d,h,p,m,f,g=J.get(t);if(K(t))for(n.handler&&(n=(i=n).handler,o=i.selector),o&&_.find.matchesSelector(st,o),n.guid||(n.guid=_.guid++),(l=g.events)||(l=g.events=Object.create(null)),(s=g.handle)||(s=g.handle=function(e){return void 0!==_&&_.event.triggered!==e.type?_.event.dispatch.apply(t,arguments):void 0}),c=(e=(e||"").match(B)||[""]).length;c--;)p=f=(a=_t.exec(e[c])||[])[1],m=(a[2]||"").split(".").sort(),p&&(d=_.event.special[p]||{},p=(o?d.delegateType:d.bindType)||p,d=_.event.special[p]||{},u=_.extend({type:p,origType:f,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&_.expr.match.needsContext.test(o),namespace:m.join(".")},i),(h=l[p])||((h=l[p]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(t,r,m,s)||t.addEventListener&&t.addEventListener(p,s)),d.add&&(d.add.call(t,u),u.handler.guid||(u.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,u):h.push(u),_.event.global[p]=!0)},remove:function(t,e,n,r,o){var i,s,a,l,c,u,d,h,p,m,f,g=J.hasData(t)&&J.get(t);if(g&&(l=g.events)){for(c=(e=(e||"").match(B)||[""]).length;c--;)if(p=f=(a=_t.exec(e[c])||[])[1],m=(a[2]||"").split(".").sort(),p){for(d=_.event.special[p]||{},h=l[p=(r?d.delegateType:d.bindType)||p]||[],a=a[2]&&new RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=i=h.length;i--;)u=h[i],!o&&f!==u.origType||n&&n.guid!==u.guid||a&&!a.test(u.namespace)||r&&r!==u.selector&&("**"!==r||!u.selector)||(h.splice(i,1),u.selector&&h.delegateCount--,d.remove&&d.remove.call(t,u));s&&!h.length&&(d.teardown&&!1!==d.teardown.call(t,m,g.handle)||_.removeEvent(t,p,g.handle),delete l[p])}else for(p in l)_.event.remove(t,p+e[c],n,r,!0);_.isEmptyObject(l)&&J.remove(t,"handle events")}},dispatch:function(t){var e,n,r,o,i,s,a=new Array(arguments.length),l=_.event.fix(t),c=(J.get(this,"events")||Object.create(null))[l.type]||[],u=_.event.special[l.type]||{};for(a[0]=l,e=1;e=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==t.type||!0!==c.disabled)){for(i=[],s={},n=0;n-1:_.find(o,this,null,[c]).length),s[o]&&i.push(r);i.length&&a.push({elem:c,handlers:i})}return c=this,l\s*$/g;function Ot(t,e){return A(t,"table")&&A(11!==e.nodeType?e:e.firstChild,"tr")&&_(t).children("tbody")[0]||t}function It(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function Lt(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute("type"),t}function jt(t,e){var n,r,o,i,s,a;if(1===e.nodeType){if(J.hasData(t)&&(a=J.get(t).events))for(o in J.remove(e,"handle events"),a)for(n=0,r=a[o].length;n1&&"string"==typeof m&&!g.checkClone&&Dt.test(m))return t.each((function(o){var i=t.eq(o);f&&(e[0]=m.call(this,o,i.html())),Bt(i,e,n,r)}));if(h&&(i=(o=Et(e,t[0].ownerDocument,!1,t,r)).firstChild,1===o.childNodes.length&&(o=i),i||r)){for(a=(s=_.map(wt(o,"script"),It)).length;d0&&xt(s,!l&&wt(t,"script")),a},cleanData:function(t){for(var e,n,r,o=_.event.special,i=0;void 0!==(n=t[i]);i++)if(K(n)){if(e=n[J.expando]){if(e.events)for(r in e.events)o[r]?_.event.remove(n,r):_.removeEvent(n,r,e.handle);n[J.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),_.fn.extend({detach:function(t){return $t(this,t,!0)},remove:function(t){return $t(this,t)},text:function(t){return z(this,(function(t){return void 0===t?_.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)}))}),null,t,arguments.length)},append:function(){return Bt(this,arguments,(function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Ot(this,t).appendChild(t)}))},prepend:function(){return Bt(this,arguments,(function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=Ot(this,t);e.insertBefore(t,e.firstChild)}}))},before:function(){return Bt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this)}))},after:function(){return Bt(this,arguments,(function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)}))},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(_.cleanData(wt(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map((function(){return _.clone(this,t,e)}))},html:function(t){return z(this,(function(t){var e=this[0]||{},n=0,r=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!At.test(t)&&!yt[(vt.exec(t)||["",""])[1].toLowerCase()]){t=_.htmlPrefilter(t);try{for(;n=0&&(l+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-i-l-a-.5))||0),l}function re(t,e,n){var r=qt(t),o=(!g.boxSizingReliable()||n)&&"border-box"===_.css(t,"boxSizing",!1,r),i=o,s=Wt(t,e,r),a="offset"+e[0].toUpperCase()+e.slice(1);if(Rt.test(s)){if(!n)return s;s="auto"}return(!g.boxSizingReliable()&&o||!g.reliableTrDimensions()&&A(t,"tr")||"auto"===s||!parseFloat(s)&&"inline"===_.css(t,"display",!1,r))&&t.getClientRects().length&&(o="border-box"===_.css(t,"boxSizing",!1,r),(i=a in t)&&(s=t[a])),(s=parseFloat(s)||0)+ne(t,e,n||(o?"border":"content"),i,r,s)+"px"}function oe(t,e,n,r,o){return new oe.prototype.init(t,e,n,r,o)}_.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=Wt(t,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,n,r){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var o,i,s,a=Y(e),l=Ft.test(e),c=t.style;if(l||(e=Xt(a)),s=_.cssHooks[e]||_.cssHooks[a],void 0===n)return s&&"get"in s&&void 0!==(o=s.get(t,!1,r))?o:c[e];"string"==(i=typeof n)&&(o=ot.exec(n))&&o[1]&&(n=ut(t,e,o),i="number"),null!=n&&n==n&&("number"!==i||l||(n+=o&&o[3]||(_.cssNumber[a]?"":"px")),g.clearCloneStyle||""!==n||0!==e.indexOf("background")||(c[e]="inherit"),s&&"set"in s&&void 0===(n=s.set(t,n,r))||(l?c.setProperty(e,n):c[e]=n))}},css:function(t,e,n,r){var o,i,s,a=Y(e);return Ft.test(e)||(e=Xt(a)),(s=_.cssHooks[e]||_.cssHooks[a])&&"get"in s&&(o=s.get(t,!0,n)),void 0===o&&(o=Wt(t,e,r)),"normal"===o&&e in te&&(o=te[e]),""===n||n?(i=parseFloat(o),!0===n||isFinite(i)?i||0:o):o}}),_.each(["height","width"],(function(t,e){_.cssHooks[e]={get:function(t,n,r){if(n)return!Jt.test(_.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?re(t,e,r):Ht(t,Qt,(function(){return re(t,e,r)}))},set:function(t,n,r){var o,i=qt(t),s=!g.scrollboxSize()&&"absolute"===i.position,a=(s||r)&&"border-box"===_.css(t,"boxSizing",!1,i),l=r?ne(t,e,r,a,i):0;return a&&s&&(l-=Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-parseFloat(i[e])-ne(t,e,"border",!1,i)-.5)),l&&(o=ot.exec(n))&&"px"!==(o[3]||"px")&&(t.style[e]=n,n=_.css(t,e)),ee(0,n,l)}}})),_.cssHooks.marginLeft=Gt(g.reliableMarginLeft,(function(t,e){if(e)return(parseFloat(Wt(t,"marginLeft"))||t.getBoundingClientRect().left-Ht(t,{marginLeft:0},(function(){return t.getBoundingClientRect().left})))+"px"})),_.each({margin:"",padding:"",border:"Width"},(function(t,e){_.cssHooks[t+e]={expand:function(n){for(var r=0,o={},i="string"==typeof n?n.split(" "):[n];r<4;r++)o[t+it[r]+e]=i[r]||i[r-2]||i[0];return o}},"margin"!==t&&(_.cssHooks[t+e].set=ee)})),_.fn.extend({css:function(t,e){return z(this,(function(t,e,n){var r,o,i={},s=0;if(Array.isArray(e)){for(r=qt(t),o=e.length;s1)}}),_.Tween=oe,oe.prototype={constructor:oe,init:function(t,e,n,r,o,i){this.elem=t,this.prop=n,this.easing=o||_.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=r,this.unit=i||(_.cssNumber[n]?"":"px")},cur:function(){var t=oe.propHooks[this.prop];return t&&t.get?t.get(this):oe.propHooks._default.get(this)},run:function(t){var e,n=oe.propHooks[this.prop];return this.options.duration?this.pos=e=_.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):oe.propHooks._default.set(this),this}},oe.prototype.init.prototype=oe.prototype,oe.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=_.css(t.elem,t.prop,""))&&"auto"!==e?e:0},set:function(t){_.fx.step[t.prop]?_.fx.step[t.prop](t):1!==t.elem.nodeType||!_.cssHooks[t.prop]&&null==t.elem.style[Xt(t.prop)]?t.elem[t.prop]=t.now:_.style(t.elem,t.prop,t.now+t.unit)}}},oe.propHooks.scrollTop=oe.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},_.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},_.fx=oe.prototype.init,_.fx.step={};var ie,se,ae=/^(?:toggle|show|hide)$/,le=/queueHooks$/;function ce(){se&&(!1===y.hidden&&r.requestAnimationFrame?r.requestAnimationFrame(ce):r.setTimeout(ce,_.fx.interval),_.fx.tick())}function ue(){return r.setTimeout((function(){ie=void 0})),ie=Date.now()}function de(t,e){var n,r=0,o={height:t};for(e=e?1:0;r<4;r+=2-e)o["margin"+(n=it[r])]=o["padding"+n]=t;return e&&(o.opacity=o.width=t),o}function he(t,e,n){for(var r,o=(pe.tweeners[e]||[]).concat(pe.tweeners["*"]),i=0,s=o.length;i1)},removeAttr:function(t){return this.each((function(){_.removeAttr(this,t)}))}}),_.extend({attr:function(t,e,n){var r,o,i=t.nodeType;if(3!==i&&8!==i&&2!==i)return void 0===t.getAttribute?_.prop(t,e,n):(1===i&&_.isXMLDoc(t)||(o=_.attrHooks[e.toLowerCase()]||(_.expr.match.bool.test(e)?me:void 0)),void 0!==n?null===n?void _.removeAttr(t,e):o&&"set"in o&&void 0!==(r=o.set(t,n,e))?r:(t.setAttribute(e,n+""),n):o&&"get"in o&&null!==(r=o.get(t,e))?r:null==(r=_.find.attr(t,e))?void 0:r)},attrHooks:{type:{set:function(t,e){if(!g.radioValue&&"radio"===e&&A(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,r=0,o=e&&e.match(B);if(o&&1===t.nodeType)for(;n=o[r++];)t.removeAttribute(n)}}),me={set:function(t,e,n){return!1===e?_.removeAttr(t,n):t.setAttribute(n,n),n}},_.each(_.expr.match.bool.source.match(/\w+/g),(function(t,e){var n=fe[e]||_.find.attr;fe[e]=function(t,e,r){var o,i,s=e.toLowerCase();return r||(i=fe[s],fe[s]=o,o=null!=n(t,e,r)?s:null,fe[s]=i),o}}));var ge=/^(?:input|select|textarea|button)$/i,ve=/^(?:a|area)$/i;function be(t){return(t.match(B)||[]).join(" ")}function ye(t){return t.getAttribute&&t.getAttribute("class")||""}function we(t){return Array.isArray(t)?t:"string"==typeof t&&t.match(B)||[]}_.fn.extend({prop:function(t,e){return z(this,_.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each((function(){delete this[_.propFix[t]||t]}))}}),_.extend({prop:function(t,e,n){var r,o,i=t.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&_.isXMLDoc(t)||(e=_.propFix[e]||e,o=_.propHooks[e]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(t,n,e))?r:t[e]=n:o&&"get"in o&&null!==(r=o.get(t,e))?r:t[e]},propHooks:{tabIndex:{get:function(t){var e=_.find.attr(t,"tabindex");return e?parseInt(e,10):ge.test(t.nodeName)||ve.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),g.optSelected||(_.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),_.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){_.propFix[this.toLowerCase()]=this})),_.fn.extend({addClass:function(t){var e,n,r,o,i,s;return v(t)?this.each((function(e){_(this).addClass(t.call(this,e,ye(this)))})):(e=we(t)).length?this.each((function(){if(r=ye(this),n=1===this.nodeType&&" "+be(r)+" "){for(i=0;i-1;)n=n.replace(" "+o+" "," ");s=be(n),r!==s&&this.setAttribute("class",s)}})):this:this.attr("class","")},toggleClass:function(t,e){var n,r,o,i,s=typeof t,a="string"===s||Array.isArray(t);return v(t)?this.each((function(n){_(this).toggleClass(t.call(this,n,ye(this),e),e)})):"boolean"==typeof e&&a?e?this.addClass(t):this.removeClass(t):(n=we(t),this.each((function(){if(a)for(i=_(this),o=0;o-1)return!0;return!1}});var xe=/\r/g;_.fn.extend({val:function(t){var e,n,r,o=this[0];return arguments.length?(r=v(t),this.each((function(n){var o;1===this.nodeType&&(null==(o=r?t.call(this,n,_(this).val()):t)?o="":"number"==typeof o?o+="":Array.isArray(o)&&(o=_.map(o,(function(t){return null==t?"":t+""}))),(e=_.valHooks[this.type]||_.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,o,"value")||(this.value=o))}))):o?(e=_.valHooks[o.type]||_.valHooks[o.nodeName.toLowerCase()])&&"get"in e&&void 0!==(n=e.get(o,"value"))?n:"string"==typeof(n=o.value)?n.replace(xe,""):null==n?"":n:void 0}}),_.extend({valHooks:{option:{get:function(t){var e=_.find.attr(t,"value");return null!=e?e:be(_.text(t))}},select:{get:function(t){var e,n,r,o=t.options,i=t.selectedIndex,s="select-one"===t.type,a=s?null:[],l=s?i+1:o.length;for(r=i<0?l:s?i:0;r-1)&&(n=!0);return n||(t.selectedIndex=-1),i}}}}),_.each(["radio","checkbox"],(function(){_.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=_.inArray(_(t).val(),e)>-1}},g.checkOn||(_.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})})),g.focusin="onfocusin"in r;var Ne=/^(?:focusinfocus|focusoutblur)$/,Ee=function(t){t.stopPropagation()};_.extend(_.event,{trigger:function(t,e,n,o){var i,s,a,l,c,u,d,h,m=[n||y],f=p.call(t,"type")?t.type:t,g=p.call(t,"namespace")?t.namespace.split("."):[];if(s=h=a=n=n||y,3!==n.nodeType&&8!==n.nodeType&&!Ne.test(f+_.event.triggered)&&(f.indexOf(".")>-1&&(g=f.split("."),f=g.shift(),g.sort()),c=f.indexOf(":")<0&&"on"+f,(t=t[_.expando]?t:new _.Event(f,"object"==typeof t&&t)).isTrigger=o?2:3,t.namespace=g.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=n),e=null==e?[t]:_.makeArray(e,[t]),d=_.event.special[f]||{},o||!d.trigger||!1!==d.trigger.apply(n,e))){if(!o&&!d.noBubble&&!b(n)){for(l=d.delegateType||f,Ne.test(l+f)||(s=s.parentNode);s;s=s.parentNode)m.push(s),a=s;a===(n.ownerDocument||y)&&m.push(a.defaultView||a.parentWindow||r)}for(i=0;(s=m[i++])&&!t.isPropagationStopped();)h=s,t.type=i>1?l:d.bindType||f,(u=(J.get(s,"events")||Object.create(null))[t.type]&&J.get(s,"handle"))&&u.apply(s,e),(u=c&&s[c])&&u.apply&&K(s)&&(t.result=u.apply(s,e),!1===t.result&&t.preventDefault());return t.type=f,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(m.pop(),e)||!K(n)||c&&v(n[f])&&!b(n)&&((a=n[c])&&(n[c]=null),_.event.triggered=f,t.isPropagationStopped()&&h.addEventListener(f,Ee),n[f](),t.isPropagationStopped()&&h.removeEventListener(f,Ee),_.event.triggered=void 0,a&&(n[c]=a)),t.result}},simulate:function(t,e,n){var r=_.extend(new _.Event,n,{type:t,isSimulated:!0});_.event.trigger(r,null,e)}}),_.fn.extend({trigger:function(t,e){return this.each((function(){_.event.trigger(t,e,this)}))},triggerHandler:function(t,e){var n=this[0];if(n)return _.event.trigger(t,e,n,!0)}}),g.focusin||_.each({focus:"focusin",blur:"focusout"},(function(t,e){var n=function(t){_.event.simulate(e,t.target,_.event.fix(t))};_.event.special[e]={setup:function(){var r=this.ownerDocument||this.document||this,o=J.access(r,e);o||r.addEventListener(t,n,!0),J.access(r,e,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,o=J.access(r,e)-1;o?J.access(r,e,o):(r.removeEventListener(t,n,!0),J.remove(r,e))}}}));var _e=r.location,Te={guid:Date.now()},ke=/\?/;_.parseXML=function(t){var e,n;if(!t||"string"!=typeof t)return null;try{e=(new r.DOMParser).parseFromString(t,"text/xml")}catch(t){}return n=e&&e.getElementsByTagName("parsererror")[0],e&&!n||_.error("Invalid XML: "+(n?_.map(n.childNodes,(function(t){return t.textContent})).join("\n"):t)),e};var Se=/\[\]$/,Ce=/\r?\n/g,Ze=/^(?:submit|button|image|reset|file)$/i,Ae=/^(?:input|select|textarea|keygen)/i;function De(t,e,n,r){var o;if(Array.isArray(e))_.each(e,(function(e,o){n||Se.test(t)?r(t,o):De(t+"["+("object"==typeof o&&null!=o?e:"")+"]",o,n,r)}));else if(n||"object"!==N(e))r(t,e);else for(o in e)De(t+"["+o+"]",e[o],n,r)}_.param=function(t,e){var n,r=[],o=function(t,e){var n=v(e)?e():e;r[r.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==n?"":n)};if(null==t)return"";if(Array.isArray(t)||t.jquery&&!_.isPlainObject(t))_.each(t,(function(){o(this.name,this.value)}));else for(n in t)De(n,t[n],e,o);return r.join("&")},_.fn.extend({serialize:function(){return _.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var t=_.prop(this,"elements");return t?_.makeArray(t):this})).filter((function(){var t=this.type;return this.name&&!_(this).is(":disabled")&&Ae.test(this.nodeName)&&!Ze.test(t)&&(this.checked||!gt.test(t))})).map((function(t,e){var n=_(this).val();return null==n?null:Array.isArray(n)?_.map(n,(function(t){return{name:e.name,value:t.replace(Ce,"\r\n")}})):{name:e.name,value:n.replace(Ce,"\r\n")}})).get()}});var Pe=/%20/g,Oe=/#.*$/,Ie=/([?&])_=[^&]*/,Le=/^(.*?):[ \t]*([^\r\n]*)$/gm,je=/^(?:GET|HEAD)$/,Me=/^\/\//,Be={},$e={},Re="*/".concat("*"),Fe=y.createElement("a");function qe(t){return function(e,n){"string"!=typeof e&&(n=e,e="*");var r,o=0,i=e.toLowerCase().match(B)||[];if(v(n))for(;r=i[o++];)"+"===r[0]?(r=r.slice(1)||"*",(t[r]=t[r]||[]).unshift(n)):(t[r]=t[r]||[]).push(n)}}function He(t,e,n,r){var o={},i=t===$e;function s(a){var l;return o[a]=!0,_.each(t[a]||[],(function(t,a){var c=a(e,n,r);return"string"!=typeof c||i||o[c]?i?!(l=c):void 0:(e.dataTypes.unshift(c),s(c),!1)})),l}return s(e.dataTypes[0])||!o["*"]&&s("*")}function Ue(t,e){var n,r,o=_.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((o[n]?t:r||(r={}))[n]=e[n]);return r&&_.extend(!0,t,r),t}Fe.href=_e.href,_.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:_e.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(_e.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Re,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":_.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?Ue(Ue(t,_.ajaxSettings),e):Ue(_.ajaxSettings,t)},ajaxPrefilter:qe(Be),ajaxTransport:qe($e),ajax:function(t,e){"object"==typeof t&&(e=t,t=void 0),e=e||{};var n,o,i,s,a,l,c,u,d,h,p=_.ajaxSetup({},e),m=p.context||p,f=p.context&&(m.nodeType||m.jquery)?_(m):_.event,g=_.Deferred(),v=_.Callbacks("once memory"),b=p.statusCode||{},w={},x={},N="canceled",E={readyState:0,getResponseHeader:function(t){var e;if(c){if(!s)for(s={};e=Le.exec(i);)s[e[1].toLowerCase()+" "]=(s[e[1].toLowerCase()+" "]||[]).concat(e[2]);e=s[t.toLowerCase()+" "]}return null==e?null:e.join(", ")},getAllResponseHeaders:function(){return c?i:null},setRequestHeader:function(t,e){return null==c&&(t=x[t.toLowerCase()]=x[t.toLowerCase()]||t,w[t]=e),this},overrideMimeType:function(t){return null==c&&(p.mimeType=t),this},statusCode:function(t){var e;if(t)if(c)E.always(t[E.status]);else for(e in t)b[e]=[b[e],t[e]];return this},abort:function(t){var e=t||N;return n&&n.abort(e),T(0,e),this}};if(g.promise(E),p.url=((t||p.url||_e.href)+"").replace(Me,_e.protocol+"//"),p.type=e.method||e.type||p.method||p.type,p.dataTypes=(p.dataType||"*").toLowerCase().match(B)||[""],null==p.crossDomain){l=y.createElement("a");try{l.href=p.url,l.href=l.href,p.crossDomain=Fe.protocol+"//"+Fe.host!=l.protocol+"//"+l.host}catch(t){p.crossDomain=!0}}if(p.data&&p.processData&&"string"!=typeof p.data&&(p.data=_.param(p.data,p.traditional)),He(Be,p,e,E),c)return E;for(d in(u=_.event&&p.global)&&0==_.active++&&_.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!je.test(p.type),o=p.url.replace(Oe,""),p.hasContent?p.data&&p.processData&&0===(p.contentType||"").indexOf("application/x-www-form-urlencoded")&&(p.data=p.data.replace(Pe,"+")):(h=p.url.slice(o.length),p.data&&(p.processData||"string"==typeof p.data)&&(o+=(ke.test(o)?"&":"?")+p.data,delete p.data),!1===p.cache&&(o=o.replace(Ie,"$1"),h=(ke.test(o)?"&":"?")+"_="+Te.guid+++h),p.url=o+h),p.ifModified&&(_.lastModified[o]&&E.setRequestHeader("If-Modified-Since",_.lastModified[o]),_.etag[o]&&E.setRequestHeader("If-None-Match",_.etag[o])),(p.data&&p.hasContent&&!1!==p.contentType||e.contentType)&&E.setRequestHeader("Content-Type",p.contentType),E.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Re+"; q=0.01":""):p.accepts["*"]),p.headers)E.setRequestHeader(d,p.headers[d]);if(p.beforeSend&&(!1===p.beforeSend.call(m,E,p)||c))return E.abort();if(N="abort",v.add(p.complete),E.done(p.success),E.fail(p.error),n=He($e,p,e,E)){if(E.readyState=1,u&&f.trigger("ajaxSend",[E,p]),c)return E;p.async&&p.timeout>0&&(a=r.setTimeout((function(){E.abort("timeout")}),p.timeout));try{c=!1,n.send(w,T)}catch(t){if(c)throw t;T(-1,t)}}else T(-1,"No Transport");function T(t,e,s,l){var d,h,y,w,x,N=e;c||(c=!0,a&&r.clearTimeout(a),n=void 0,i=l||"",E.readyState=t>0?4:0,d=t>=200&&t<300||304===t,s&&(w=function(t,e,n){for(var r,o,i,s,a=t.contents,l=t.dataTypes;"*"===l[0];)l.shift(),void 0===r&&(r=t.mimeType||e.getResponseHeader("Content-Type"));if(r)for(o in a)if(a[o]&&a[o].test(r)){l.unshift(o);break}if(l[0]in n)i=l[0];else{for(o in n){if(!l[0]||t.converters[o+" "+l[0]]){i=o;break}s||(s=o)}i=i||s}if(i)return i!==l[0]&&l.unshift(i),n[i]}(p,E,s)),!d&&_.inArray("script",p.dataTypes)>-1&&_.inArray("json",p.dataTypes)<0&&(p.converters["text script"]=function(){}),w=function(t,e,n,r){var o,i,s,a,l,c={},u=t.dataTypes.slice();if(u[1])for(s in t.converters)c[s.toLowerCase()]=t.converters[s];for(i=u.shift();i;)if(t.responseFields[i]&&(n[t.responseFields[i]]=e),!l&&r&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),l=i,i=u.shift())if("*"===i)i=l;else if("*"!==l&&l!==i){if(!(s=c[l+" "+i]||c["* "+i]))for(o in c)if((a=o.split(" "))[1]===i&&(s=c[l+" "+a[0]]||c["* "+a[0]])){!0===s?s=c[o]:!0!==c[o]&&(i=a[0],u.unshift(a[1]));break}if(!0!==s)if(s&&t.throws)e=s(e);else try{e=s(e)}catch(t){return{state:"parsererror",error:s?t:"No conversion from "+l+" to "+i}}}return{state:"success",data:e}}(p,w,E,d),d?(p.ifModified&&((x=E.getResponseHeader("Last-Modified"))&&(_.lastModified[o]=x),(x=E.getResponseHeader("etag"))&&(_.etag[o]=x)),204===t||"HEAD"===p.type?N="nocontent":304===t?N="notmodified":(N=w.state,h=w.data,d=!(y=w.error))):(y=N,!t&&N||(N="error",t<0&&(t=0))),E.status=t,E.statusText=(e||N)+"",d?g.resolveWith(m,[h,N,E]):g.rejectWith(m,[E,N,y]),E.statusCode(b),b=void 0,u&&f.trigger(d?"ajaxSuccess":"ajaxError",[E,p,d?h:y]),v.fireWith(m,[E,N]),u&&(f.trigger("ajaxComplete",[E,p]),--_.active||_.event.trigger("ajaxStop")))}return E},getJSON:function(t,e,n){return _.get(t,e,n,"json")},getScript:function(t,e){return _.get(t,void 0,e,"script")}}),_.each(["get","post"],(function(t,e){_[e]=function(t,n,r,o){return v(n)&&(o=o||r,r=n,n=void 0),_.ajax(_.extend({url:t,type:e,dataType:o,data:n,success:r},_.isPlainObject(t)&&t))}})),_.ajaxPrefilter((function(t){var e;for(e in t.headers)"content-type"===e.toLowerCase()&&(t.contentType=t.headers[e]||"")})),_._evalUrl=function(t,e,n){return _.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(t){_.globalEval(t,e,n)}})},_.fn.extend({wrapAll:function(t){var e;return this[0]&&(v(t)&&(t=t.call(this[0])),e=_(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map((function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t})).append(this)),this},wrapInner:function(t){return v(t)?this.each((function(e){_(this).wrapInner(t.call(this,e))})):this.each((function(){var e=_(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)}))},wrap:function(t){var e=v(t);return this.each((function(n){_(this).wrapAll(e?t.call(this,n):t)}))},unwrap:function(t){return this.parent(t).not("body").each((function(){_(this).replaceWith(this.childNodes)})),this}}),_.expr.pseudos.hidden=function(t){return!_.expr.pseudos.visible(t)},_.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},_.ajaxSettings.xhr=function(){try{return new r.XMLHttpRequest}catch(t){}};var ze={0:200,1223:204},We=_.ajaxSettings.xhr();g.cors=!!We&&"withCredentials"in We,g.ajax=We=!!We,_.ajaxTransport((function(t){var e,n;if(g.cors||We&&!t.crossDomain)return{send:function(o,i){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];for(s in t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest"),o)a.setRequestHeader(s,o[s]);e=function(t){return function(){e&&(e=n=a.onload=a.onerror=a.onabort=a.ontimeout=a.onreadystatechange=null,"abort"===t?a.abort():"error"===t?"number"!=typeof a.status?i(0,"error"):i(a.status,a.statusText):i(ze[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=e(),n=a.onerror=a.ontimeout=e("error"),void 0!==a.onabort?a.onabort=n:a.onreadystatechange=function(){4===a.readyState&&r.setTimeout((function(){e&&n()}))},e=e("abort");try{a.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}})),_.ajaxPrefilter((function(t){t.crossDomain&&(t.contents.script=!1)})),_.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return _.globalEval(t),t}}}),_.ajaxPrefilter("script",(function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")})),_.ajaxTransport("script",(function(t){var e,n;if(t.crossDomain||t.scriptAttrs)return{send:function(r,o){e=_("