\n );\n}\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\n this.loading = true;\n\n app.store.find('tags', { include: 'parent' }).then(() => {\n this.loading = false;\n\n m.redraw();\n });\n }\n\n content() {\n if (this.loading) {\n return ;\n }\n\n const minPrimaryTags = this.setting('flarum-tags.min_primary_tags', 0);\n const maxPrimaryTags = this.setting('flarum-tags.max_primary_tags', 0);\n\n const minSecondaryTags = this.setting('flarum-tags.min_secondary_tags', 0);\n const maxSecondaryTags = this.setting('flarum-tags.max_secondary_tags', 0);\n\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.parent()));\n \n return (\n
\n );\n}\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\n this.loading = true;\n\n app.store.find('tags', { include: 'parent' }).then(() => {\n this.loading = false;\n\n m.redraw();\n });\n }\n\n content() {\n if (this.loading) {\n return ;\n }\n\n const minPrimaryTags = this.setting('flarum-tags.min_primary_tags', 0);\n const maxPrimaryTags = this.setting('flarum-tags.max_primary_tags', 0);\n\n const minSecondaryTags = this.setting('flarum-tags.min_secondary_tags', 0);\n const maxSecondaryTags = this.setting('flarum-tags.max_secondary_tags', 0);\n\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.parent()));\n \n return (\n
\n );\n }\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\n setMinTags(minTags, maxTags, value) {\n minTags(value);\n maxTags(Math.max(value, maxTags()));\n }\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: { parent: null }\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')\n .map(function () {\n return {\n id: $(this).data('id'),\n children: $(this).find('li')\n .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: { 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: { parent }\n });\n });\n });\n\n app.request({\n url: app.forum.attribute('apiUrl') + '/tags/order',\n method: 'POST',\n body: { order }\n });\n\n this.forcedRefreshKey++;\n m.redraw();\n }\n}\n","import sortTags from './utils/sortTags';\nimport Tag from './models/Tag';\nimport tagsLabel from './helpers/tagsLabel';\nimport tagIcon from './helpers/tagIcon';\nimport tagLabel from './helpers/tagLabel';\n\nexport default {\n 'tags/utils/sortTags': sortTags,\n 'tags/models/Tag': Tag,\n 'tags/helpers/tagsLabel': tagsLabel,\n 'tags/helpers/tagIcon': tagIcon,\n 'tags/helpers/tagLabel': tagLabel\n};\n","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\n\nexport default function tagsLabel(tags, attrs = {}) {\n const children = [];\n const link = extract(attrs, 'link');\n\n attrs.className = 'TagsLabel ' + (attrs.className || '');\n\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {link}));\n }\n });\n } else {\n children.push(tagLabel());\n }\n\n return {children};\n}\n","import compat from '../common/compat';\n\nimport addTagsHomePageOption from './addTagsHomePageOption';\nimport addTagChangePermission from './addTagChangePermission';\nimport TagsPage from './components/TagsPage';\nimport EditTagModal from './components/EditTagModal';\nimport addTagPermission from './addTagPermission';\nimport addTagsPermissionScope from './addTagsPermissionScope';\n\nexport default Object.assign(compat, {\n 'tags/addTagsHomePageOption': addTagsHomePageOption,\n 'tags/addTagChangePermission': addTagChangePermission,\n 'tags/components/TagsPage': TagsPage,\n 'tags/components/EditTagModal': EditTagModal,\n 'tags/addTagPermission': addTagPermission,\n 'tags/addTagsPermissionScope': addTagsPermissionScope,\n});\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core;","import app from 'flarum/admin/app';\nimport Tag from '../common/models/Tag';\nimport addTagsPermissionScope from './addTagsPermissionScope';\nimport addTagPermission from './addTagPermission';\nimport addTagsHomePageOption from './addTagsHomePageOption';\nimport addTagChangePermission from './addTagChangePermission';\nimport TagsPage from './components/TagsPage';\n\napp.initializers.add('flarum-tags', app => {\n app.store.models.tags = Tag;\n\n app.extensionData.for('flarum-tags').registerPage(TagsPage);\n\n addTagsPermissionScope();\n addTagPermission();\n addTagsHomePageOption();\n addTagChangePermission();\n});\n\n\n// Expose compat API\nimport tagsCompat from './compat';\nimport { compat } from '@flarum/core/admin';\n\nObject.assign(compat, tagsCompat);\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","// 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};"],"names":["flarum","core","compat","_setPrototypeOf","o","p","Object","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","prototype","create","constructor","Tag","name","Model","call","this","slug","description","color","backgroundUrl","backgroundMode","icon","position","parent","children","defaultSort","isChild","isHidden","discussionCount","lastPostedAt","lastPostedDiscussion","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimary","computed","tagIcon","tag","attrs","settings","hasIcon","useColor","className","classList","style","tagLabel","link","extract","tagText","app","translator","trans","title","href","route","tags","m","Link","sortTags","slice","sort","a","b","aPos","bPos","aParent","bParent","extend","PermissionGrid","loading","then","redraw","override","original","vnode","permission","tagPrefix","match","substr","length","map","required","items","filter","forEach","add","id","label","onremove","save","render","item","indexOf","tagScoped","PermissionDropdown","allowGuest","buttonClassName","caretIcon","onclick","extensionData","registerPermission","BasicsPage","path","setting","minutes","parseInt","data","allow_tag_change","SettingDropdown","defaultLabel","count","key","options","value","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread2","target","i","arguments","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","iterator","configurable","writable","_extends","assign","hasOwnProperty","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","userAgent","pattern","window","navigator","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","state","replace","css","prop","val","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","elMatrix","scaleX","scaleY","d","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","display","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","pluginName","concat","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_excluded","_ref","undefined","originalEvent","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","CustomEvent","createEvent","initEvent","bubbles","cancelable","to","from","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","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","get","captureAnimationState","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","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","c","cssMatrix","appendChild","_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","handleEvent","dropEffect","_globalDragOver","toArray","order","getAttribute","useAnimation","set","destroy","Array","querySelectorAll","removeAttribute","utils","is","dst","nextTick","cancelNextTick","detectDirection","element","_len","_key","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","primary","oninit","model","Stream","attributes","submitData","content","fields","ItemList","placeholder","oninput","bidi","tabindex","Button","exists","onsubmit","hide","confirm","extractText","pushData","relationships","Modal","tagItem","modal","show","all","TagsPage","forcedRefreshKey","include","minPrimaryTags","maxPrimaryTags","minSecondaryTags","maxSecondaryTags","oncreate","onListOnCreate","localeCompare","min","withAttr","setMinTags","submitButton","onSort","onSortUpdate","minTags","maxTags","HTMLOListElement","HTMLUListElement","getById","j","request","url","forum","attribute","method","ExtensionPage","addTagsHomePageOption","addTagChangePermission","addTagPermission","addTagsPermissionScope","models","registerPage","tagsCompat","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","getter","__esModule","definition","r","toStringTag"],"sourceRoot":""}
\ No newline at end of file
diff --git a/extensions/tags/js/dist/forum.js b/extensions/tags/js/dist/forum.js
index 8fef50d72..45c5abf59 100644
--- a/extensions/tags/js/dist/forum.js
+++ b/extensions/tags/js/dist/forum.js
@@ -1,2 +1,2 @@
-(()=>{var t={195:(t,e,n)=>{t.exports=n(236)},236:t=>{var e=function(t){"use strict";var e,n=Object.prototype,r=n.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},s=a.iterator||"@@iterator",o=a.asyncIterator||"@@asyncIterator",i=a.toStringTag||"@@toStringTag";function c(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,n){return t[e]=n}}function u(t,e,n,r){var a=e&&e.prototype instanceof g?e:g,s=Object.create(a.prototype),o=new C(r||[]);return s._invoke=function(t,e,n){var r=p;return function(a,s){if(r===m)throw new Error("Generator is already running");if(r===f){if("throw"===a)throw s;return D()}for(n.method=a,n.arg=s;;){var o=n.delegate;if(o){var i=L(o,n);if(i){if(i===h)continue;return i}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===p)throw r=f,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=m;var c=l(t,e,n);if("normal"===c.type){if(r=n.done?f:d,c.arg===h)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r=f,n.method="throw",n.arg=c.arg)}}}(t,n,o),s}function l(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=u;var p="suspendedStart",d="suspendedYield",m="executing",f="completed",h={};function g(){}function v(){}function y(){}var b={};c(b,s,(function(){return this}));var T=Object.getPrototypeOf,x=T&&T(T(k([])));x&&x!==n&&r.call(x,s)&&(b=x);var w=y.prototype=g.prototype=Object.create(b);function N(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function _(t,e){function n(a,s,o,i){var c=l(t[a],t,s);if("throw"!==c.type){var u=c.arg,p=u.value;return p&&"object"==typeof p&&r.call(p,"__await")?e.resolve(p.__await).then((function(t){n("next",t,o,i)}),(function(t){n("throw",t,o,i)})):e.resolve(p).then((function(t){u.value=t,o(u)}),(function(t){return n("throw",t,o,i)}))}i(c.arg)}var a;this._invoke=function(t,r){function s(){return new e((function(e,a){n(t,r,e,a)}))}return a=a?a.then(s,s):s()}}function L(t,n){var r=t.iterator[n.method];if(r===e){if(n.delegate=null,"throw"===n.method){if(t.iterator.return&&(n.method="return",n.arg=e,L(t,n),"throw"===n.method))return h;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return h}var a=l(r,t.iterator,n.arg);if("throw"===a.type)return n.method="throw",n.arg=a.arg,n.delegate=null,h;var s=a.arg;return s?s.done?(n[t.resultName]=s.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,h):s:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,h)}function P(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function I(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function C(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(P,this),this.reset(!0)}function k(t){if(t){var n=t[s];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function n(){for(;++a=0;--s){var o=this.tryEntries[s],i=o.completion;if("root"===o.tryLoc)return a("end");if(o.tryLoc<=this.prev){var c=r.call(o,"catchLoc"),u=r.call(o,"finallyLoc");if(c&&u){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),I(n),h}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var a=r.arg;I(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:k(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),h}},t}(t.exports);try{regeneratorRuntime=e}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=e:Function("r","regeneratorRuntime = r")(e)}},656:()=>{},464:(t,e,n)=>{"use strict";const r=flarum.core.compat.Model;var a=n.n(r);const s=flarum.core.compat["models/Discussion"];var o=n.n(s);const i=flarum.core.compat["components/IndexPage"];var c=n.n(i);function u(t,e){return u=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},u(t,e)}function l(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,u(t,e)}const p=flarum.core.compat["utils/mixin"];var d=n.n(p);const f=flarum.core.compat["utils/computed"];var h=n.n(f),g=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e}(d()(a(),{name:a().attribute("name"),slug:a().attribute("slug"),description:a().attribute("description"),color:a().attribute("color"),backgroundUrl:a().attribute("backgroundUrl"),backgroundMode:a().attribute("backgroundMode"),icon:a().attribute("icon"),position:a().attribute("position"),parent:a().hasOne("parent"),children:a().hasMany("children"),defaultSort:a().attribute("defaultSort"),isChild:a().attribute("isChild"),isHidden:a().attribute("isHidden"),discussionCount:a().attribute("discussionCount"),lastPostedAt:a().attribute("lastPostedAt",a().transformDate),lastPostedDiscussion:a().hasOne("lastPostedDiscussion"),isRestricted:a().attribute("isRestricted"),canStartDiscussion:a().attribute("canStartDiscussion"),canAddToDiscussion:a().attribute("canAddToDiscussion"),isPrimary:h()("position","parent",(function(t,e){return null!==t&&!1===e}))}));const v=flarum.core.compat["components/Page"];var y=n.n(v);const b=flarum.core.compat["components/Link"];var T=n.n(b);const x=flarum.core.compat["components/LoadingIndicator"];var w=n.n(x);const N=flarum.core.compat["helpers/listItems"];var _=n.n(N);const L=flarum.core.compat["helpers/humanTime"];var P=n.n(L);const I=flarum.core.compat["utils/classList"];var C=n.n(I);function k(t,e,n){void 0===e&&(e={}),void 0===n&&(n={});var r=t&&t.icon(),a=n.useColor,s=void 0===a||a;return e.className=C()([e.className,"icon",r?t.icon():"TagIcon"]),t&&s?(e.style=e.style||{},e.style["--color"]=t.color(),r&&(e.style.color=t.color())):t||(e.className+=" untagged"),r?m("i",e):m("span",e)}const D=flarum.core.compat["utils/extract"];var S=n.n(D);function O(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");var n=S()(e,"link"),r=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){var a=t.color();a&&(e.style["--tag-bg"]=a,e.className+=" colored"),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?T():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&k(t,{},{useColor:!1})," ",r))}function E(t){return t.slice(0).sort((function(t,e){var n=t.position(),r=e.position();if(null===n&&null===r)return e.discussionCount()-t.discussionCount();if(null===r)return-1;if(null===n)return 1;var a=t.parent(),s=e.parent();return a===s?n-r:a&&s?a.position()-s.position():a?a===e?1:a.position()-r:s?s===t?-1:n-s.position():0}))}var A=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.oninit=function(e){var n=this;t.prototype.oninit.call(this,e),app.history.push("tags",app.translator.trans("flarum-tags.forum.header.back_to_tags_tooltip")),this.tags=[];var r=app.preloadedApiDocument();r?this.tags=E(r.filter((function(t){return!t.isChild()}))):(this.loading=!0,app.tagList.load(["children","lastPostedDiscussion","parent"]).then((function(){n.tags=E(app.store.all("tags").filter((function(t){return!t.isChild()}))),n.loading=!1,m.redraw()})))},n.view=function(){if(this.loading)return m(w(),null);var t=this.tags.filter((function(t){return null!==t.position()})),e=this.tags.filter((function(t){return null===t.position()}));return m("div",{className:"TagsPage"},c().prototype.hero(),m("div",{className:"container"},m("nav",{className:"TagsPage-nav IndexPage-nav sideNav"},m("ul",null,_()(c().prototype.sidebarItems().toArray()))),m("div",{className:"TagsPage-content sideNavOffset"},m("ul",{className:"TagTiles"},t.map((function(t){var e=t.lastPostedDiscussion(),n=E(t.children()||[]);return m("li",{className:"TagTile "+(t.color()?"colored":""),style:{"--tag-bg":t.color()}},m(T(),{className:"TagTile-info",href:app.route.tag(t)},t.icon()&&k(t,{},{useColor:!1}),m("h3",{className:"TagTile-name"},t.name()),m("p",{className:"TagTile-description"},t.description()),n?m("div",{className:"TagTile-children"},n.map((function(t){return[m(T(),{href:app.route.tag(t)},t.name())," "]}))):""),e?m(T(),{className:"TagTile-lastPostedDiscussion",href:app.route.discussion(e,e.lastPostNumber())},m("span",{className:"TagTile-lastPostedDiscussion-title"},e.title()),P()(e.lastPostedAt())):m("span",{className:"TagTile-lastPostedDiscussion"}))}))),e.length?m("div",{className:"TagCloud"},e.map((function(t){return[O(t,{link:!0})," "]}))):"")))},n.oncreate=function(e){t.prototype.oncreate.call(this,e),app.setTitle(app.translator.trans("flarum-tags.forum.all_tags.meta_title_text")),app.setTitleCount(0)},e}(y());const j=flarum.core.compat["components/EventPost"];function R(t,e){void 0===e&&(e={});var n=[],r=S()(e,"link");return e.className="TagsLabel "+(e.className||""),t?E(t).forEach((function(e){(e||1===t.length)&&n.push(O(e,{link:r}))})):n.push(O()),m("span",e,n)}var M=function(t){function e(){return t.apply(this,arguments)||this}l(e,t),e.initAttrs=function(e){t.initAttrs.call(this,e);var n=e.post.content()[0],r=e.post.content()[1];function a(t,e){return t.filter((function(t){return-1===e.indexOf(t)})).map((function(t){return app.store.getById("tags",t)}))}e.tagsAdded=a(r,n),e.tagsRemoved=a(n,r)};var n=e.prototype;return n.icon=function(){return"fas fa-tag"},n.descriptionKey=function(){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"},n.descriptionData=function(){var t={};return this.attrs.tagsAdded.length&&(t.tagsAdded=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:R(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:R(this.attrs.tagsRemoved,{link:!0}),count:this.attrs.tagsRemoved.length})),t},e}(n.n(j)());function q(t,e,n,r,a,s,o){try{var i=t[s](o),c=i.value}catch(t){return void n(t)}i.done?e(c):Promise.resolve(c).then(r,a)}var B=n(195),H=n.n(B),F=function(){function t(){this.loadedIncludes=new Set}return t.prototype.load=function(){var t,e=(t=H().mark((function t(e){var n,r=this;return H().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(void 0===e&&(e=[]),0!==(n=e.filter((function(t){return!r.loadedIncludes.has(t)}))).length){t.next=4;break}return t.abrupt("return",Promise.resolve(app.store.all("tags")));case 4:return t.abrupt("return",app.store.find("tags",{include:n.join(",")}).then((function(t){return n.forEach((function(t){return r.loadedIncludes.add(t)})),t})));case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,a){var s=t.apply(e,n);function o(t){q(s,r,a,o,i,"next",t)}function i(t){q(s,r,a,o,i,"throw",t)}o(void 0)}))});return function(t){return e.apply(this,arguments)}}(),t}();const G=flarum.core.compat.extend,K=flarum.core.compat["components/Separator"];var $=n.n(K);const U=flarum.core.compat["components/LinkButton"];var Y=n.n(U),z=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e.prototype.view=function(t){var e=this.attrs.model,n=(this.constructor.isActive(this.attrs),e&&e.description()),r=C()(["TagLinkButton","hasIcon",this.attrs.className,e.isChild()&&"child"]);return m(T(),{className:r,href:this.attrs.route,style:e?{"--color":e.color()}:"",title:n||""},k(e,{className:"Button-icon"}),m("span",{className:"Button-label"},e?e.name():app.translator.trans("flarum-tags.forum.index.untagged_link")))},e.initAttrs=function(e){t.initAttrs.call(this,e);var n=e.model;e.params.tags=n?n.slug():"untagged",e.route=app.route("tag",e.params)},e}(Y());function J(){(0,G.extend)(c().prototype,"navItems",(function(t){if(t.add("tags",m(Y(),{icon:"fas fa-th-large",href:app.route("tags")},app.translator.trans("flarum-tags.forum.index.tags_link")),-10),!app.current.matches(A)){t.add("separator",$().component(),-12);var e=app.search.stickyParams(),n=app.store.all("tags"),r=this.currentTag(),a=function(n){var a=r===n;!a&&r&&(a=r.parent()===n),t.add("tag"+n.id(),z.component({model:n,params:e,active:a},null==n?void 0:n.name()),-14)};E(n).filter((function(t){return null!==t.position()&&(!t.isChild()||r&&(t.parent()===r||t.parent()===r.parent()))})).forEach(a);var s=n.filter((function(t){return null===t.position()})).sort((function(t,e){return e.discussionCount()-t.discussionCount()}));s.splice(0,3).forEach(a),s.length&&t.add("moreTags",m(Y(),{href:app.route("tags")},app.translator.trans("flarum-tags.forum.index.more_link")),-16)}}))}const Q=flarum.core.compat["states/DiscussionListState"];var V=n.n(Q);const W=flarum.core.compat["states/GlobalSearchState"];var X=n.n(W);const Z=flarum.core.compat.Component;var tt=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e.prototype.view=function(){var t=this.attrs.model,e=t.color();return m("header",{className:"Hero TagHero"+(e?" TagHero--colored":""),style:e?{"--hero-bg":e}:""},m("div",{className:"container"},m("div",{className:"containerNarrow"},m("h2",{className:"Hero-title"},t.icon()&&k(t,{},{useColor:!1})," ",t.name()),m("div",{className:"Hero-subtitle"},t.description()))))},e}(n.n(Z)()),et=function(t){return app.store.all("tags").find((function(e){return 0===e.slug().localeCompare(t,void 0,{sensitivity:"base"})}))};function nt(){c().prototype.currentTag=function(){var t=this;if(this.currentActiveTag)return this.currentActiveTag;var e=app.search.params().tags,n=null;if(e&&(n=et(e)),e&&!n||n&&!n.isChild()&&!n.children()){if(this.currentTagLoading)return;this.currentTagLoading=!0,app.store.find("tags",e,{include:"children,children.parent,parent,state"}).then((function(){t.currentActiveTag=et(e),m.redraw()})).finally((function(){t.currentTagLoading=!1}))}return n?(this.currentActiveTag=n,this.currentActiveTag):void 0},(0,G.override)(c().prototype,"hero",(function(t){var e=this.currentTag();return e?m(tt,{model:e}):t()})),(0,G.extend)(c().prototype,"view",(function(t){var e=this.currentTag();e&&(t.attrs.className+=" IndexPage--tag"+e.id())})),(0,G.extend)(c().prototype,"setTitle",(function(){var t=this.currentTag();t&&app.setTitle(t.name())})),(0,G.extend)(c().prototype,"sidebarItems",(function(t){var e=this.currentTag();if(e){var n=e.color(),r=e.canStartDiscussion()||!app.session.user,a=t.get("newDiscussion");n&&(a.attrs.className=C()([a.attrs.className,"Button--tagColored"]),a.attrs.style={"--color":n}),a.attrs.disabled=!r,a.children=app.translator.trans(r?"core.forum.index.start_discussion_button":"core.forum.index.cannot_start_discussion_button")}})),(0,G.extend)(X().prototype,"params",(function(t){t.tags=m.route.param("tags")})),(0,G.extend)(V().prototype,"requestParams",(function(t){if(t.include.push("tags","tags.parent"),this.params.tags){t.filter.tag=this.params.tags;var e=t.filter.q;e&&(t.filter.q=e+" tag:"+this.params.tags)}}))}const rt=flarum.core.compat["components/DiscussionListItem"];var at=n.n(rt);const st=flarum.core.compat["components/DiscussionHero"];var ot=n.n(st);function it(){(0,G.extend)(at().prototype,"infoItems",(function(t){var e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",R(e),10)})),(0,G.extend)(ot().prototype,"view",(function(t){var e=E(this.attrs.discussion.tags());if(e&&e.length){var n=e[0].color();n&&(t.attrs.style={"--hero-bg":n},t.attrs.className+=" DiscussionHero--colored")}})),(0,G.extend)(ot().prototype,"items",(function(t){var e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",R(e,{link:!0}),5)}))}const ct=flarum.core.compat["utils/DiscussionControls"];var ut=n.n(ct);const lt=flarum.core.compat["components/Button"];var pt=n.n(lt);const dt=flarum.core.compat["components/Modal"];var mt=n.n(dt);const ft=flarum.core.compat["components/DiscussionPage"];var ht=n.n(ft);const gt=flarum.core.compat["helpers/highlight"];var vt=n.n(gt);const yt=flarum.core.compat["utils/extractText"];var bt=n.n(yt);const Tt=flarum.core.compat["utils/KeyboardNavigatable"];var xt=n.n(Tt);const wt=flarum.core.compat["utils/Stream"];var Nt=n.n(wt);function _t(t){var e=app.store.all("tags");return t?e.filter((function(e){return e.canAddToDiscussion()||-1!==t.tags().indexOf(e)})):e.filter((function(t){return t.canStartDiscussion()}))}const Lt=flarum.core.compat["common/Component"];var Pt=n.n(Lt);const It=flarum.core.compat["common/components/Button"];var Ct=n.n(It);const kt=flarum.core.compat["common/utils/classList"];var Dt=n.n(kt),St=["className","isToggled"],Ot=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e.prototype.view=function(t){var e=this.attrs,n=e.className,r=e.isToggled,a=function(t,e){if(null==t)return{};var n,r,a={},s=Object.keys(t);for(r=0;r=0||(a[n]=t[n]);return a}(e,St),s=r?"far fa-check-circle":"far fa-circle";return m(Ct(),Object.assign({},a,{icon:s,className:Dt()([n,r&&"Button--toggled"])}),t.children)},e}(Pt()),Et=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.oninit=function(e){var n=this;t.prototype.oninit.call(this,e),this.tagsLoading=!0,this.selected=[],this.filter=Nt()(""),this.focused=!1,this.minPrimary=app.forum.attribute("minPrimaryTags"),this.maxPrimary=app.forum.attribute("maxPrimaryTags"),this.minSecondary=app.forum.attribute("minSecondaryTags"),this.maxSecondary=app.forum.attribute("maxSecondaryTags"),this.bypassReqs=!1,this.navigator=new(xt()),this.navigator.onUp((function(){return n.setIndex(n.getCurrentNumericIndex()-1,!0)})).onDown((function(){return n.setIndex(n.getCurrentNumericIndex()+1,!0)})).onSelect(this.select.bind(this)).onRemove((function(){return n.selected.splice(n.selected.length-1,1)})),app.tagList.load(["parent"]).then((function(){n.tagsLoading=!1,n.tags=E(_t(n.attrs.discussion)),n.attrs.selectedTags?n.attrs.selectedTags.map(n.addTag.bind(n)):n.attrs.discussion&&n.attrs.discussion.tags().map(n.addTag.bind(n)),n.index=n.tags[0].id(),m.redraw()}))},n.primaryCount=function(){return this.selected.filter((function(t){return t.isPrimary()})).length},n.secondaryCount=function(){return this.selected.filter((function(t){return!t.isPrimary()})).length},n.addTag=function(t){if(t.canStartDiscussion()){var e=t.parent();e&&!this.selected.includes(e)&&this.selected.push(e),this.selected.includes(t)||this.selected.push(t)}},n.removeTag=function(t){var e=this.selected.indexOf(t);-1!==e&&(this.selected.splice(e,1),this.selected.filter((function(e){return e.parent()===t})).forEach(this.removeTag.bind(this)))},n.className=function(){return"TagDiscussionModal"},n.title=function(){return this.attrs.discussion?app.translator.trans("flarum-tags.forum.choose_tags.edit_title",{title:m("em",null,this.attrs.discussion.title())}):app.translator.trans("flarum-tags.forum.choose_tags.title")},n.getInstruction=function(t,e){if(this.bypassReqs)return"";if(t=this.maxPrimary&&!this.bypassReqs&&(e=e.filter((function(e){return!e.isPrimary()||t.selected.includes(e)}))),a>=this.maxSecondary&&!this.bypassReqs&&(e=e.filter((function(e){return e.isPrimary()||t.selected.includes(e)}))),n&&(e=e.filter((function(t){return t.name().substr(0,n.length).toLowerCase()===n}))),e.includes(this.index)||(this.index=e[0]);var s=Math.max(bt()(this.getInstruction(r,a)).length,this.filter().length);return[m("div",{className:"Modal-body"},m("div",{className:"TagDiscussionModal-form"},m("div",{className:"TagDiscussionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:function(){return t.$(".TagsInput input").focus()}},m("span",{className:"TagsInput-selected"},this.selected.map((function(e){return m("span",{className:"TagsInput-tag",onclick:function(){t.removeTag(e),t.onready()}},O(e))}))),m("input",{className:"FormControl",placeholder:bt()(this.getInstruction(r,a)),bidi:this.filter,style:{width:s+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:function(){return t.focused=!0},onblur:function(){return t.focused=!1}}))),m("div",{className:"TagDiscussionModal-form-submit App-primaryControl"},m(pt(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(r,a),icon:"fas fa-check"},app.translator.trans("flarum-tags.forum.choose_tags.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagDiscussionModal-list SelectTagList"},e.filter((function(e){return n||!e.parent()||t.selected.includes(e.parent())})).map((function(e){return m("li",{"data-index":e.id(),className:C()({pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:t.selected.includes(e),active:t.index===e}),style:{color:e.color()},onmouseover:function(){return t.index=e},onclick:t.toggleTag.bind(t,e)},k(e),m("span",{className:"SelectTagListItem-name"},vt()(e.name(),n)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")}))),!!app.forum.attribute("canBypassTagCounts")&&m("div",{className:"TagDiscussionModal-controls"},m(Ot,{className:"Button",onclick:function(){return t.bypassReqs=!t.bypassReqs},isToggled:this.bypassReqs},app.translator.trans("flarum-tags.forum.choose_tags.bypass_requirements"))))]},n.meetsRequirements=function(t,e){return!!this.bypassReqs||t>=this.minPrimary&&e>=this.minSecondary},n.toggleTag=function(t){this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.index=this.tags[0]),this.onready()},n.select=function(t){t.metaKey||t.ctrlKey||this.selected.includes(this.index)?this.selected.length&&this.$('button[type="submit"]').click():this.getItem(this.index)[0].dispatchEvent(new Event("click"))},n.selectableItems=function(){return this.$(".TagDiscussionModal-list > li")},n.getCurrentNumericIndex=function(){return this.selectableItems().index(this.getItem(this.index))},n.getItem=function(t){return this.selectableItems().filter('[data-index="'+t.id()+'"]')},n.setIndex=function(t,e){var n=this.selectableItems(),r=n.parent();t<0?t=n.length-1:t>=n.length&&(t=0);var a=n.eq(t);if(this.index=app.store.getById("tags",a.attr("data-index")),m.redraw(),e){var s,o=r.scrollTop(),i=r.offset().top,c=i+r.outerHeight(),u=a.offset().top,l=u+a.outerHeight();uc&&(s=o-c+l+parseInt(r.css("padding-bottom"),10)),void 0!==s&&r.stop(!0).animate({scrollTop:s},100)}},n.onsubmit=function(t){t.preventDefault();var e=this.attrs.discussion,n=this.selected;e&&e.save({relationships:{tags:n}}).then((function(){app.current.matches(ht())&&app.current.get("stream").update(),m.redraw()})),this.attrs.onsubmit&&this.attrs.onsubmit(n),this.hide()},e}(mt());function At(){(0,G.extend)(ut(),"moderationControls",(function(t,e){e.canTag()&&t.add("tags",m(pt(),{icon:"fas fa-tag",onclick:function(){return app.modal.show(Et,{discussion:e})}},app.translator.trans("flarum-tags.forum.discussion_controls.edit_tags_button")))}))}const jt=flarum.core.compat["components/DiscussionComposer"];var Rt=n.n(jt);function Mt(){(0,G.extend)(c().prototype,"newDiscussionAction",(function(t){var e=this.currentTag();if(e){var n=e.parent(),r=n?[n,e]:[e];t.then((function(t){return t.fields.tags=r}))}else app.composer.fields.tags=[]})),(0,G.extend)(Rt().prototype,"oninit",(function(){app.tagList.load(["parent"]).then((function(){return m.redraw()}))})),Rt().prototype.chooseTags=function(){var t=this;_t().length&&app.modal.show(Et,{selectedTags:(this.composer.fields.tags||[]).slice(0),onsubmit:function(e){t.composer.fields.tags=e,t.$("textarea").focus()}})},(0,G.extend)(Rt().prototype,"headerItems",(function(t){var e=this.composer.fields.tags||[],n=_t();t.add("tags",m("a",{className:C()(["DiscussionComposer-changeTags",!n.length&&"disabled"]),onclick:this.chooseTags.bind(this)},e.length?R(e):m("span",{className:"TagLabel untagged"},app.translator.trans("flarum-tags.forum.composer_discussion.choose_tags_link"))),10)})),(0,G.override)(Rt().prototype,"onsubmit",(function(t){var e=this,n=this.composer.fields.tags||[],r=n.filter((function(t){return null!==t.position()&&!t.isChild()})),a=n.filter((function(t){return null===t.position()})),s=_t();(!n.length||r.length{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r);var t=n(656),e={};for(const n in t)"default"!==n&&(e[n]=()=>t[n]);n.d(r,e),n(464)})(),module.exports=r})();
+(()=>{var t={810:()=>{},395:(t,e,n)=>{"use strict";const r=flarum.core.compat["forum/app"];var a=n.n(r);const o=flarum.core.compat["common/Model"];var s=n.n(o);const i=flarum.core.compat["common/models/Discussion"];var c=n.n(i);const u=flarum.core.compat["forum/components/IndexPage"];var l=n.n(u);function d(t,e){return d=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},d(t,e)}function f(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,d(t,e)}const p=flarum.core.compat["common/utils/computed"];var h=n.n(p),g=function(t){function e(){return t.apply(this,arguments)||this}f(e,t);var n=e.prototype;return n.name=function(){return s().attribute("name").call(this)},n.slug=function(){return s().attribute("slug").call(this)},n.description=function(){return s().attribute("description").call(this)},n.color=function(){return s().attribute("color").call(this)},n.backgroundUrl=function(){return s().attribute("backgroundUrl").call(this)},n.backgroundMode=function(){return s().attribute("backgroundMode").call(this)},n.icon=function(){return s().attribute("icon").call(this)},n.position=function(){return s().attribute("position").call(this)},n.parent=function(){return s().hasOne("parent").call(this)},n.children=function(){return s().hasMany("children").call(this)},n.defaultSort=function(){return s().attribute("defaultSort").call(this)},n.isChild=function(){return s().attribute("isChild").call(this)},n.isHidden=function(){return s().attribute("isHidden").call(this)},n.discussionCount=function(){return s().attribute("discussionCount").call(this)},n.lastPostedAt=function(){return s().attribute("lastPostedAt",s().transformDate).call(this)},n.lastPostedDiscussion=function(){return s().hasOne("lastPostedDiscussion").call(this)},n.isRestricted=function(){return s().attribute("isRestricted").call(this)},n.canStartDiscussion=function(){return s().attribute("canStartDiscussion").call(this)},n.canAddToDiscussion=function(){return s().attribute("canAddToDiscussion").call(this)},n.isPrimary=function(){return h()("position","parent",(function(t,e){return null!==t&&!1===e})).call(this)},e}(s());const v=flarum.core.compat["common/components/Page"];var y=n.n(v);const T=flarum.core.compat["common/components/Link"];var b=n.n(T);const x=flarum.core.compat["common/components/LoadingIndicator"];var w=n.n(x);const N=flarum.core.compat["common/helpers/listItems"];var _=n.n(N);const L=flarum.core.compat["common/helpers/humanTime"];var P=n.n(L);const I=flarum.core.compat["common/utils/classList"];var C=n.n(I);function k(t,e,n){void 0===e&&(e={}),void 0===n&&(n={});var r=t&&t.icon(),a=n.useColor,o=void 0===a||a;return e.className=C()([e.className,"icon",r?t.icon():"TagIcon"]),t&&o?(e.style=e.style||{},e.style["--color"]=t.color(),r&&(e.style.color=t.color())):t||(e.className+=" untagged"),r?m("i",e):m("span",e)}const D=flarum.core.compat["common/utils/extract"];var S=n.n(D);function E(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");var n=S()(e,"link"),r=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){var a=t.color();a&&(e.style["--tag-bg"]=a,e.className+=" colored"),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?b():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&k(t,{},{useColor:!1})," ",r))}function O(t){return t.slice(0).sort((function(t,e){var n=t.position(),r=e.position();if(null===n&&null===r)return e.discussionCount()-t.discussionCount();if(null===r)return-1;if(null===n)return 1;var a=t.parent(),o=e.parent();return a===o?n-r:a&&o?a.position()-o.position():a?a===e?1:a.position()-r:o?o===t?-1:n-o.position():0}))}var A=function(t){function e(){return t.apply(this,arguments)||this}f(e,t);var n=e.prototype;return n.oninit=function(e){var n=this;t.prototype.oninit.call(this,e),app.history.push("tags",app.translator.trans("flarum-tags.forum.header.back_to_tags_tooltip")),this.tags=[];var r=app.preloadedApiDocument();r?this.tags=O(r.filter((function(t){return!t.isChild()}))):(this.loading=!0,app.tagList.load(["children","lastPostedDiscussion","parent"]).then((function(){n.tags=O(app.store.all("tags").filter((function(t){return!t.isChild()}))),n.loading=!1,m.redraw()})))},n.view=function(){if(this.loading)return m(w(),null);var t=this.tags.filter((function(t){return null!==t.position()})),e=this.tags.filter((function(t){return null===t.position()}));return m("div",{className:"TagsPage"},l().prototype.hero(),m("div",{className:"container"},m("nav",{className:"TagsPage-nav IndexPage-nav sideNav"},m("ul",null,_()(l().prototype.sidebarItems().toArray()))),m("div",{className:"TagsPage-content sideNavOffset"},m("ul",{className:"TagTiles"},t.map((function(t){var e=t.lastPostedDiscussion(),n=O(t.children()||[]);return m("li",{className:"TagTile "+(t.color()?"colored":""),style:{"--tag-bg":t.color()}},m(b(),{className:"TagTile-info",href:app.route.tag(t)},t.icon()&&k(t,{},{useColor:!1}),m("h3",{className:"TagTile-name"},t.name()),m("p",{className:"TagTile-description"},t.description()),n?m("div",{className:"TagTile-children"},n.map((function(t){return[m(b(),{href:app.route.tag(t)},t.name())," "]}))):""),e?m(b(),{className:"TagTile-lastPostedDiscussion",href:app.route.discussion(e,e.lastPostNumber())},m("span",{className:"TagTile-lastPostedDiscussion-title"},e.title()),P()(e.lastPostedAt())):m("span",{className:"TagTile-lastPostedDiscussion"}))}))),e.length?m("div",{className:"TagCloud"},e.map((function(t){return[E(t,{link:!0})," "]}))):"")))},n.oncreate=function(e){t.prototype.oncreate.call(this,e),app.setTitle(app.translator.trans("flarum-tags.forum.all_tags.meta_title_text")),app.setTitleCount(0)},e}(y());const j=flarum.core.compat["forum/components/EventPost"];function R(t,e){void 0===e&&(e={});var n=[],r=S()(e,"link");return e.className="TagsLabel "+(e.className||""),t?O(t).forEach((function(e){(e||1===t.length)&&n.push(E(e,{link:r}))})):n.push(E()),m("span",e,n)}var M=function(t){function e(){return t.apply(this,arguments)||this}f(e,t),e.initAttrs=function(e){t.initAttrs.call(this,e);var n=e.post.content()[0],r=e.post.content()[1];function a(t,e){return t.filter((function(t){return-1===e.indexOf(t)})).map((function(t){return app.store.getById("tags",t)}))}e.tagsAdded=a(r,n),e.tagsRemoved=a(n,r)};var n=e.prototype;return n.icon=function(){return"fas fa-tag"},n.descriptionKey=function(){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"},n.descriptionData=function(){var t={};return this.attrs.tagsAdded.length&&(t.tagsAdded=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:R(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:R(this.attrs.tagsRemoved,{link:!0}),count:this.attrs.tagsRemoved.length})),t},e}(n.n(j)());function q(t,e,n,r,a,o,s){try{var i=t[o](s),c=i.value}catch(t){return void n(t)}i.done?e(c):Promise.resolve(c).then(r,a)}var B=n(126),H=n.n(B),F=function(){function t(){this.loadedIncludes=new Set}return t.prototype.load=function(){var t,e=(t=H().mark((function t(e){var n,r=this;return H().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(void 0===e&&(e=[]),0!==(n=e.filter((function(t){return!r.loadedIncludes.has(t)}))).length){t.next=4;break}return t.abrupt("return",Promise.resolve(a().store.all("tags")));case 4:return t.abrupt("return",a().store.find("tags",{include:n.join(",")}).then((function(t){return n.forEach((function(t){return r.loadedIncludes.add(t)})),t})));case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,a){var o=t.apply(e,n);function s(t){q(o,r,a,s,i,"next",t)}function i(t){q(o,r,a,s,i,"throw",t)}s(void 0)}))});return function(t){return e.apply(this,arguments)}}(),t}();const G=flarum.core.compat["common/extend"],K=flarum.core.compat["common/components/Separator"];var $=n.n(K);const U=flarum.core.compat["common/components/LinkButton"];var Y=n.n(U),z=function(t){function e(){return t.apply(this,arguments)||this}return f(e,t),e.prototype.view=function(t){var e=this.attrs.model,n=(this.constructor.isActive(this.attrs),e&&e.description()),r=C()(["TagLinkButton","hasIcon",this.attrs.className,e.isChild()&&"child"]);return m(b(),{className:r,href:this.attrs.route,style:e?{"--color":e.color()}:"",title:n||""},k(e,{className:"Button-icon"}),m("span",{className:"Button-label"},e?e.name():app.translator.trans("flarum-tags.forum.index.untagged_link")))},e.initAttrs=function(e){t.initAttrs.call(this,e);var n=e.model;e.params.tags=n?n.slug():"untagged",e.route=app.route("tag",e.params)},e}(Y());function J(){(0,G.extend)(l().prototype,"navItems",(function(t){if(t.add("tags",m(Y(),{icon:"fas fa-th-large",href:app.route("tags")},app.translator.trans("flarum-tags.forum.index.tags_link")),-10),!app.current.matches(A)){t.add("separator",$().component(),-12);var e=app.search.stickyParams(),n=app.store.all("tags"),r=this.currentTag(),a=function(n){var a=r===n;!a&&r&&(a=r.parent()===n),t.add("tag"+n.id(),z.component({model:n,params:e,active:a},null==n?void 0:n.name()),-14)};O(n).filter((function(t){return null!==t.position()&&(!t.isChild()||r&&(t.parent()===r||t.parent()===r.parent()))})).forEach(a);var o=n.filter((function(t){return null===t.position()})).sort((function(t,e){return e.discussionCount()-t.discussionCount()}));o.splice(0,3).forEach(a),o.length&&t.add("moreTags",m(Y(),{href:app.route("tags")},app.translator.trans("flarum-tags.forum.index.more_link")),-16)}}))}const Q=flarum.core.compat["forum/states/DiscussionListState"];var V=n.n(Q);const W=flarum.core.compat["forum/states/GlobalSearchState"];var X=n.n(W);const Z=flarum.core.compat["common/Component"];var tt=n.n(Z),et=function(t){function e(){return t.apply(this,arguments)||this}return f(e,t),e.prototype.view=function(){var t=this.attrs.model,e=t.color();return m("header",{className:"Hero TagHero"+(e?" TagHero--colored":""),style:e?{"--hero-bg":e}:""},m("div",{className:"container"},m("div",{className:"containerNarrow"},m("h2",{className:"Hero-title"},t.icon()&&k(t,{},{useColor:!1})," ",t.name()),m("div",{className:"Hero-subtitle"},t.description()))))},e}(tt()),nt=function(t){return a().store.all("tags").find((function(e){return 0===e.slug().localeCompare(t,void 0,{sensitivity:"base"})}))};function rt(){l().prototype.currentTag=function(){var t=this;if(this.currentActiveTag)return this.currentActiveTag;var e=a().search.params().tags,n=null;if(e&&(n=nt(e)),e&&!n||n&&!n.isChild()&&!n.children()){if(this.currentTagLoading)return;this.currentTagLoading=!0,a().store.find("tags",e,{include:"children,children.parent,parent,state"}).then((function(){t.currentActiveTag=nt(e),m.redraw()})).finally((function(){t.currentTagLoading=!1}))}return n?(this.currentActiveTag=n,this.currentActiveTag):void 0},(0,G.override)(l().prototype,"hero",(function(t){var e=this.currentTag();return e?m(et,{model:e}):t()})),(0,G.extend)(l().prototype,"view",(function(t){var e=this.currentTag();e&&(t.attrs.className+=" IndexPage--tag"+e.id())})),(0,G.extend)(l().prototype,"setTitle",(function(){var t=this.currentTag();t&&a().setTitle(t.name())})),(0,G.extend)(l().prototype,"sidebarItems",(function(t){var e=this.currentTag();if(e){var n=e.color(),r=e.canStartDiscussion()||!a().session.user,o=t.get("newDiscussion");n&&(o.attrs.className=C()([o.attrs.className,"Button--tagColored"]),o.attrs.style={"--color":n}),o.attrs.disabled=!r,o.children=a().translator.trans(r?"core.forum.index.start_discussion_button":"core.forum.index.cannot_start_discussion_button")}})),(0,G.extend)(X().prototype,"params",(function(t){t.tags=m.route.param("tags")})),(0,G.extend)(V().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 n,r=null!=(n=t.filter)?n:{};r.tag=this.params.tags;var a=r.q;a&&(r.q=a+" tag:"+this.params.tags),t.filter=r}}))}const at=flarum.core.compat["forum/components/DiscussionListItem"];var ot=n.n(at);const st=flarum.core.compat["forum/components/DiscussionHero"];var it=n.n(st);function ct(){(0,G.extend)(ot().prototype,"infoItems",(function(t){var e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",R(e),10)})),(0,G.extend)(it().prototype,"view",(function(t){var e=O(this.attrs.discussion.tags());if(e&&e.length){var n=e[0].color();n&&(t.attrs.style={"--hero-bg":n},t.attrs.className+=" DiscussionHero--colored")}})),(0,G.extend)(it().prototype,"items",(function(t){var e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",R(e,{link:!0}),5)}))}const ut=flarum.core.compat["forum/utils/DiscussionControls"];var lt=n.n(ut);const mt=flarum.core.compat["common/components/Button"];var dt=n.n(mt);const ft=flarum.core.compat["common/components/Modal"];var pt=n.n(ft);const ht=flarum.core.compat["forum/components/DiscussionPage"];var gt=n.n(ht);const vt=flarum.core.compat["common/helpers/highlight"];var yt=n.n(vt);const Tt=flarum.core.compat["common/utils/extractText"];var bt=n.n(Tt);const xt=flarum.core.compat["forum/utils/KeyboardNavigatable"];var wt=n.n(xt);const Nt=flarum.core.compat["common/utils/Stream"];var _t=n.n(Nt);function Lt(t){var e=app.store.all("tags");return t?e.filter((function(e){return e.canAddToDiscussion()||-1!==t.tags().indexOf(e)})):e.filter((function(t){return t.canStartDiscussion()}))}var Pt=["className","isToggled"],It=function(t){function e(){return t.apply(this,arguments)||this}return f(e,t),e.prototype.view=function(t){var e=this.attrs,n=e.className,r=e.isToggled,a=function(t,e){if(null==t)return{};var n,r,a={},o=Object.keys(t);for(r=0;r=0||(a[n]=t[n]);return a}(e,Pt),o=r?"far fa-check-circle":"far fa-circle";return m(dt(),Object.assign({},a,{icon:o,className:C()([n,r&&"Button--toggled"])}),t.children)},e}(tt()),Ct=function(t){function e(){for(var e,n=arguments.length,r=new Array(n),o=0;o=this.maxPrimary&&!this.bypassReqs&&(e=e.filter((function(e){return!e.isPrimary()||t.selected.includes(e)}))),o>=this.maxSecondary&&!this.bypassReqs&&(e=e.filter((function(e){return e.isPrimary()||t.selected.includes(e)}))),n&&(e=e.filter((function(t){return t.name().substr(0,n.length).toLowerCase()===n}))),this.selectedTag&&e.includes(this.selectedTag)||(this.selectedTag=e[0]);var s=Math.max(bt()(this.getInstruction(r,o)).length,this.filter().length);return[m("div",{className:"Modal-body"},m("div",{className:"TagDiscussionModal-form"},m("div",{className:"TagDiscussionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:function(){return t.$(".TagsInput input").focus()}},m("span",{className:"TagsInput-selected"},this.selected.map((function(e){return m("span",{className:"TagsInput-tag",onclick:function(){t.removeTag(e),t.onready()}},E(e))}))),m("input",{className:"FormControl",placeholder:bt()(this.getInstruction(r,o)),bidi:this.filter,style:{width:s+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:function(){return t.focused=!0},onblur:function(){return t.focused=!1}}))),m("div",{className:"TagDiscussionModal-form-submit App-primaryControl"},m(dt(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(r,o),icon:"fas fa-check"},a().translator.trans("flarum-tags.forum.choose_tags.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagDiscussionModal-list SelectTagList"},e.filter((function(e){return n||!e.parent()||t.selected.includes(e.parent())})).map((function(e){return m("li",{"data-index":e.id(),className:C()({pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:t.selected.includes(e),active:t.selectedTag===e}),style:{color:e.color()},onmouseover:function(){return t.selectedTag=e},onclick:t.toggleTag.bind(t,e)},k(e),m("span",{className:"SelectTagListItem-name"},yt()(e.name(),n)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")}))),!!a().forum.attribute("canBypassTagCounts")&&m("div",{className:"TagDiscussionModal-controls"},m(It,{className:"Button",onclick:function(){return t.bypassReqs=!t.bypassReqs},isToggled:this.bypassReqs},a().translator.trans("flarum-tags.forum.choose_tags.bypass_requirements"))))]},n.meetsRequirements=function(t,e){return!!this.bypassReqs||t>=this.minPrimary&&e>=this.minSecondary},n.toggleTag=function(t){this.tags&&(this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.selectedTag=this.tags[0]),this.onready())},n.select=function(t){t.metaKey||t.ctrlKey||this.selectedTag&&this.selected.includes(this.selectedTag)?this.selected.length&&this.$('button[type="submit"]').click():this.selectedTag&&this.getItem(this.selectedTag)[0].dispatchEvent(new Event("click"))},n.selectableItems=function(){return this.$(".TagDiscussionModal-list > li")},n.getCurrentNumericIndex=function(){return this.selectedTag?this.selectableItems().index(this.getItem(this.selectedTag)):-1},n.getItem=function(t){return this.selectableItems().filter('[data-index="'+t.id()+'"]')},n.setIndex=function(t,e){var n=this.selectableItems(),r=n.parent();t<0?t=n.length-1:t>=n.length&&(t=0);var o=n.eq(t);if(this.selectedTag=a().store.getById("tags",o.attr("data-index")),m.redraw(),e){var s,i=r.scrollTop(),c=r.offset().top,u=c+r.outerHeight(),l=o.offset().top,d=l+o.outerHeight();lu&&(s=i-u+d+parseInt(r.css("padding-bottom"),10)),void 0!==s&&r.stop(!0).animate({scrollTop:s},100)}},n.onsubmit=function(t){t.preventDefault();var e=this.attrs.discussion,n=this.selected;e&&e.save({relationships:{tags:n}}).then((function(){a().current.matches(gt())&&a().current.get("stream").update(),m.redraw()})),this.attrs.onsubmit&&this.attrs.onsubmit(n),this.hide()},e}(pt());function kt(){(0,G.extend)(lt(),"moderationControls",(function(t,e){e.canTag()&&t.add("tags",m(dt(),{icon:"fas fa-tag",onclick:function(){return app.modal.show(Ct,{discussion:e})}},app.translator.trans("flarum-tags.forum.discussion_controls.edit_tags_button")))}))}const Dt=flarum.core.compat["forum/components/DiscussionComposer"];var St=n.n(Dt);function Et(){(0,G.extend)(l().prototype,"newDiscussionAction",(function(t){var e=this.currentTag();if(e){var n=e.parent(),r=n?[n,e]:[e];t.then((function(t){return t.fields.tags=r}))}else app.composer.fields.tags=[]})),(0,G.extend)(St().prototype,"oninit",(function(){app.tagList.load(["parent"]).then((function(){return m.redraw()}))})),St().prototype.chooseTags=function(){var t=this;Lt().length&&app.modal.show(Ct,{selectedTags:(this.composer.fields.tags||[]).slice(0),onsubmit:function(e){t.composer.fields.tags=e,t.$("textarea").focus()}})},(0,G.extend)(St().prototype,"headerItems",(function(t){var e=this.composer.fields.tags||[],n=Lt();t.add("tags",m("a",{className:C()(["DiscussionComposer-changeTags",!n.length&&"disabled"]),onclick:this.chooseTags.bind(this)},e.length?R(e):m("span",{className:"TagLabel untagged"},app.translator.trans("flarum-tags.forum.composer_discussion.choose_tags_link"))),10)})),(0,G.override)(St().prototype,"onsubmit",(function(t){var e=this,n=this.composer.fields.tags||[],r=n.filter((function(t){return null!==t.position()&&!t.isChild()})),a=n.filter((function(t){return null===t.position()})),o=Lt();(!n.length||r.length{t.exports=n(750)},750:t=>{var e=function(t){"use strict";var e,n=Object.prototype,r=n.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},o=a.iterator||"@@iterator",s=a.asyncIterator||"@@asyncIterator",i=a.toStringTag||"@@toStringTag";function c(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,n){return t[e]=n}}function u(t,e,n,r){var a=e&&e.prototype instanceof g?e:g,o=Object.create(a.prototype),s=new C(r||[]);return o._invoke=function(t,e,n){var r=m;return function(a,o){if(r===f)throw new Error("Generator is already running");if(r===p){if("throw"===a)throw o;return D()}for(n.method=a,n.arg=o;;){var s=n.delegate;if(s){var i=L(s,n);if(i){if(i===h)continue;return i}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===m)throw r=p,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=f;var c=l(t,e,n);if("normal"===c.type){if(r=n.done?p:d,c.arg===h)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r=p,n.method="throw",n.arg=c.arg)}}}(t,n,s),o}function l(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=u;var m="suspendedStart",d="suspendedYield",f="executing",p="completed",h={};function g(){}function v(){}function y(){}var T={};c(T,o,(function(){return this}));var b=Object.getPrototypeOf,x=b&&b(b(k([])));x&&x!==n&&r.call(x,o)&&(T=x);var w=y.prototype=g.prototype=Object.create(T);function N(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function _(t,e){function n(a,o,s,i){var c=l(t[a],t,o);if("throw"!==c.type){var u=c.arg,m=u.value;return m&&"object"==typeof m&&r.call(m,"__await")?e.resolve(m.__await).then((function(t){n("next",t,s,i)}),(function(t){n("throw",t,s,i)})):e.resolve(m).then((function(t){u.value=t,s(u)}),(function(t){return n("throw",t,s,i)}))}i(c.arg)}var a;this._invoke=function(t,r){function o(){return new e((function(e,a){n(t,r,e,a)}))}return a=a?a.then(o,o):o()}}function L(t,n){var r=t.iterator[n.method];if(r===e){if(n.delegate=null,"throw"===n.method){if(t.iterator.return&&(n.method="return",n.arg=e,L(t,n),"throw"===n.method))return h;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return h}var a=l(r,t.iterator,n.arg);if("throw"===a.type)return n.method="throw",n.arg=a.arg,n.delegate=null,h;var o=a.arg;return o?o.done?(n[t.resultName]=o.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,h):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,h)}function P(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function I(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function C(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(P,this),this.reset(!0)}function k(t){if(t){var n=t[o];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,s=function n(){for(;++a=0;--o){var s=this.tryEntries[o],i=s.completion;if("root"===s.tryLoc)return a("end");if(s.tryLoc<=this.prev){var c=r.call(s,"catchLoc"),u=r.call(s,"finallyLoc");if(c&&u){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),I(n),h}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var a=r.arg;I(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:k(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),h}},t}(t.exports);try{regeneratorRuntime=e}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=e:Function("r","regeneratorRuntime = r")(e)}}},e={};function n(r){var a=e[r];if(void 0!==a)return a.exports;var o=e[r]={exports:{}};return t[r](o,o.exports,n),o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r);var t=n(810),e={};for(const n in t)"default"!==n&&(e[n]=()=>t[n]);n.d(r,e),n(395)})(),module.exports=r})();
//# 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 05a6ff145..e586b217f 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":"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","sources":["webpack://@flarum/tags/./node_modules/@babel/runtime/regenerator/index.js","webpack://@flarum/tags/./node_modules/regenerator-runtime/runtime.js","webpack://@flarum/tags/external root \"flarum.core.compat['Model']\"","webpack://@flarum/tags/external root \"flarum.core.compat['models/Discussion']\"","webpack://@flarum/tags/external root \"flarum.core.compat['components/IndexPage']\"","webpack://@flarum/tags/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@flarum/tags/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/tags/external root \"flarum.core.compat['utils/mixin']\"","webpack://@flarum/tags/external root \"flarum.core.compat['utils/computed']\"","webpack://@flarum/tags/./src/common/models/Tag.js","webpack://@flarum/tags/external root \"flarum.core.compat['components/Page']\"","webpack://@flarum/tags/external root \"flarum.core.compat['components/Link']\"","webpack://@flarum/tags/external root \"flarum.core.compat['components/LoadingIndicator']\"","webpack://@flarum/tags/external root \"flarum.core.compat['helpers/listItems']\"","webpack://@flarum/tags/external root \"flarum.core.compat['helpers/humanTime']\"","webpack://@flarum/tags/external root \"flarum.core.compat['utils/classList']\"","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/external root \"flarum.core.compat['utils/extract']\"","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.js","webpack://@flarum/tags/./src/forum/components/TagsPage.js","webpack://@flarum/tags/external root \"flarum.core.compat['components/EventPost']\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/./src/forum/components/DiscussionTaggedPost.js","webpack://@flarum/tags/./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://@flarum/tags/./src/forum/states/TagListState.js","webpack://@flarum/tags/external root \"flarum.core.compat['extend']\"","webpack://@flarum/tags/external root \"flarum.core.compat['components/Separator']\"","webpack://@flarum/tags/external root \"flarum.core.compat['components/LinkButton']\"","webpack://@flarum/tags/./src/forum/components/TagLinkButton.js","webpack://@flarum/tags/./src/forum/addTagList.js","webpack://@flarum/tags/external root \"flarum.core.compat['states/DiscussionListState']\"","webpack://@flarum/tags/external root \"flarum.core.compat['states/GlobalSearchState']\"","webpack://@flarum/tags/external root \"flarum.core.compat['Component']\"","webpack://@flarum/tags/./src/forum/components/TagHero.js","webpack://@flarum/tags/./src/forum/addTagFilter.js","webpack://@flarum/tags/external root \"flarum.core.compat['components/DiscussionListItem']\"","webpack://@flarum/tags/external root \"flarum.core.compat['components/DiscussionHero']\"","webpack://@flarum/tags/./src/forum/addTagLabels.js","webpack://@flarum/tags/external root \"flarum.core.compat['utils/DiscussionControls']\"","webpack://@flarum/tags/external root \"flarum.core.compat['components/Button']\"","webpack://@flarum/tags/external root \"flarum.core.compat['components/Modal']\"","webpack://@flarum/tags/external root \"flarum.core.compat['components/DiscussionPage']\"","webpack://@flarum/tags/external root \"flarum.core.compat['helpers/highlight']\"","webpack://@flarum/tags/external root \"flarum.core.compat['utils/extractText']\"","webpack://@flarum/tags/external root \"flarum.core.compat['utils/KeyboardNavigatable']\"","webpack://@flarum/tags/external root \"flarum.core.compat['utils/Stream']\"","webpack://@flarum/tags/./src/forum/utils/getSelectableTags.js","webpack://@flarum/tags/external root \"flarum.core.compat['common/Component']\"","webpack://@flarum/tags/external root \"flarum.core.compat['common/components/Button']\"","webpack://@flarum/tags/external root \"flarum.core.compat['common/utils/classList']\"","webpack://@flarum/tags/./src/forum/components/ToggleButton.js","webpack://@flarum/tags/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://@flarum/tags/./src/forum/components/TagDiscussionModal.js","webpack://@flarum/tags/./src/forum/addTagControl.js","webpack://@flarum/tags/external root \"flarum.core.compat['components/DiscussionComposer']\"","webpack://@flarum/tags/./src/forum/addTagComposer.js","webpack://@flarum/tags/./src/common/compat.js","webpack://@flarum/tags/./src/forum/compat.js","webpack://@flarum/tags/external assign \"flarum.core\"","webpack://@flarum/tags/./src/forum/index.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/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object"],"sourcesContent":["module.exports = require(\"regenerator-runtime\");\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['Model'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['models/Discussion'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/IndexPage'];","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['utils/mixin'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['utils/computed'];","import Model from 'flarum/Model';\nimport mixin from 'flarum/utils/mixin';\nimport computed from 'flarum/utils/computed';\n\nexport default class Tag extends mixin(Model, {\n name: Model.attribute('name'),\n slug: Model.attribute('slug'),\n description: Model.attribute('description'),\n\n color: Model.attribute('color'),\n backgroundUrl: Model.attribute('backgroundUrl'),\n backgroundMode: Model.attribute('backgroundMode'),\n icon: Model.attribute('icon'),\n\n position: Model.attribute('position'),\n parent: Model.hasOne('parent'),\n children: Model.hasMany('children'),\n defaultSort: Model.attribute('defaultSort'),\n isChild: Model.attribute('isChild'),\n isHidden: Model.attribute('isHidden'),\n\n discussionCount: Model.attribute('discussionCount'),\n lastPostedAt: Model.attribute('lastPostedAt', Model.transformDate),\n lastPostedDiscussion: Model.hasOne('lastPostedDiscussion'),\n\n isRestricted: Model.attribute('isRestricted'),\n canStartDiscussion: Model.attribute('canStartDiscussion'),\n canAddToDiscussion: Model.attribute('canAddToDiscussion'),\n\n isPrimary: computed('position', 'parent', (position, parent) => position !== null && parent === false)\n}) {}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/Page'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/Link'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/LoadingIndicator'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['helpers/listItems'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['helpers/humanTime'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['utils/classList'];","import classList from 'flarum/utils/classList';\n\nexport default function tagIcon(tag, attrs = {}, settings = {}) {\n const hasIcon = tag && tag.icon();\n const { useColor = true } = settings;\n\n attrs.className = classList([\n attrs.className,\n 'icon',\n hasIcon ? tag.icon() : 'TagIcon'\n ]);\n\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n\n if (hasIcon) {\n attrs.style.color = tag.color();\n }\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n\n return hasIcon ? : ;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['utils/extract'];","import extract from 'flarum/utils/extract';\nimport Link from 'flarum/components/Link';\nimport tagIcon from './tagIcon';\n\nexport default function tagLabel(tag, attrs = {}) {\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className += ' colored';\n }\n\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {tags: tag.slug()});\n }\n\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n\n return (\n m((link ? Link : 'span'), attrs,\n \n {tag && tag.icon() && tagIcon(tag, {}, {useColor: false})} {tagText}\n \n )\n );\n}\n","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)\n 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\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent)\n return aParent.position() - bParent.position();\n\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)\n return aParent === b ? 1 : aParent.position() - bPos;\n\n else if (bParent)\n return bParent === a ? -1 : aPos - bParent.position();\n\n return 0;\n });\n}\n","import Page from 'flarum/components/Page';\nimport IndexPage from 'flarum/components/IndexPage';\nimport Link from 'flarum/components/Link';\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\nimport listItems from 'flarum/helpers/listItems';\nimport humanTime from 'flarum/helpers/humanTime';\n\nimport tagIcon from '../../common/helpers/tagIcon';\nimport tagLabel from '../../common/helpers/tagLabel';\nimport sortTags from '../../common/utils/sortTags';\n\nexport default class TagsPage extends Page {\n oninit(vnode) {\n super.oninit(vnode);\n\n app.history.push('tags', app.translator.trans('flarum-tags.forum.header.back_to_tags_tooltip'));\n\n this.tags = [];\n\n const preloaded = app.preloadedApiDocument();\n\n if (preloaded) {\n this.tags = sortTags(preloaded.filter(tag => !tag.isChild()));\n return;\n }\n\n this.loading = true;\n\n app.tagList.load(['children', 'lastPostedDiscussion', 'parent']).then(() => {\n this.tags = sortTags(app.store.all('tags').filter(tag => !tag.isChild()));\n\n this.loading = false;\n\n m.redraw();\n });\n }\n\n view() {\n if (this.loading) {\n return ;\n }\n\n const pinned = this.tags.filter(tag => tag.position() !== null);\n const cloud = this.tags.filter(tag => tag.position() === null);\n\n return (\n
\n \n );\n }\n}\n","import { extend, override } from 'flarum/extend';\nimport IndexPage from 'flarum/components/IndexPage';\nimport DiscussionListState from 'flarum/states/DiscussionListState';\nimport GlobalSearchState from 'flarum/states/GlobalSearchState';\nimport classList from 'flarum/utils/classList';\n\nimport TagHero from './components/TagHero';\n\nconst findTag = slug => app.store.all('tags').find(tag => tag.slug().localeCompare(slug, undefined, { sensitivity: 'base' }) === 0);\n\nexport default function() {\n IndexPage.prototype.currentTag = function() {\n if (this.currentActiveTag) {\n return this.currentActiveTag;\n }\n\n const slug = app.search.params().tags;\n let tag = null;\n\n if (slug) {\n tag = findTag(slug);\n }\n\n if (slug && !tag || (tag && !tag.isChild() && !tag.children())) {\n if (this.currentTagLoading) {\n return;\n }\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 app.store.find('tags', slug, { include: 'children,children.parent,parent,state'}).then(() => {\n this.currentActiveTag = findTag(slug);\n\n m.redraw();\n }).finally(() => {\n this.currentTagLoading = false;\n });\n }\n\n if (tag) {\n this.currentActiveTag = tag;\n return this.currentActiveTag;\n }\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 = this.currentTag();\n\n if (tag) return ;\n\n return original();\n });\n\n extend(IndexPage.prototype, 'view', function(vdom) {\n const tag = this.currentTag();\n\n if (tag) vdom.attrs.className += ' IndexPage--tag'+tag.id();\n });\n\n extend(IndexPage.prototype, 'setTitle', function() {\n const tag = this.currentTag();\n\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(IndexPage.prototype, 'sidebarItems', function(items) {\n const tag = this.currentTag();\n\n if (tag) {\n const color = tag.color();\n const canStartDiscussion = tag.canStartDiscussion() || !app.session.user;\n const newDiscussion = items.get('newDiscussion');\n\n if (color) {\n newDiscussion.attrs.className = classList([newDiscussion.attrs.className, 'Button--tagColored']);\n newDiscussion.attrs.style = { '--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 params.include.push('tags', 'tags.parent');\n\n if (this.params.tags) {\n params.filter.tag = this.params.tags;\n // TODO: replace this with a more robust system.\n const q = params.filter.q;\n if (q) {\n params.filter.q = `${q} tag:${this.params.tags}`;\n }\n }\n });\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/DiscussionListItem'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/DiscussionHero'];","import { extend } from 'flarum/extend';\nimport DiscussionListItem from 'flarum/components/DiscussionListItem';\nimport DiscussionHero from 'flarum/components/DiscussionHero';\n\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport sortTags from '../common/utils/sortTags';\n\nexport default function() {\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\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\n if (tags && tags.length) {\n const color = tags[0].color();\n if (color) {\n view.attrs.style = { '--hero-bg': color };\n view.attrs.className += ' DiscussionHero--colored';\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\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags, {link: true}), 5);\n }\n });\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['utils/DiscussionControls'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/Modal'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['components/DiscussionPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['helpers/highlight'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['utils/KeyboardNavigatable'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['utils/Stream'];","export default function getSelectableTags(discussion) {\n let tags = app.store.all('tags');\n\n if (discussion) {\n tags = tags.filter(tag => tag.canAddToDiscussion() || discussion.tags().indexOf(tag) !== -1);\n } else {\n tags = tags.filter(tag => tag.canStartDiscussion());\n }\n\n return tags;\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/Component'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/classList'];","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 { className, isToggled, ...attrs } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n\n return (\n \n );\n }\n}\n","export default function _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}","import Modal from 'flarum/components/Modal';\nimport DiscussionPage from 'flarum/components/DiscussionPage';\nimport Button from 'flarum/components/Button';\nimport LoadingIndicator from 'flarum/components/LoadingIndicator';\nimport highlight from 'flarum/helpers/highlight';\nimport classList from 'flarum/utils/classList';\nimport extractText from 'flarum/utils/extractText';\nimport KeyboardNavigatable from 'flarum/utils/KeyboardNavigatable';\nimport Stream from 'flarum/utils/Stream';\n\nimport tagLabel from '../../common/helpers/tagLabel';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport sortTags from '../../common/utils/sortTags';\nimport getSelectableTags from '../utils/getSelectableTags';\nimport ToggleButton from './ToggleButton';\n\nexport default class TagDiscussionModal extends Modal {\n oninit(vnode) {\n super.oninit(vnode);\n\n this.tagsLoading = true;\n\n this.selected = [];\n this.filter = Stream('');\n this.focused = false;\n\n this.minPrimary = app.forum.attribute('minPrimaryTags');\n this.maxPrimary = app.forum.attribute('maxPrimaryTags');\n this.minSecondary = app.forum.attribute('minSecondaryTags');\n this.maxSecondary = app.forum.attribute('maxSecondaryTags');\n\n this.bypassReqs = false;\n\n this.navigator = new KeyboardNavigatable();\n this.navigator\n .onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true))\n .onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true))\n .onSelect(this.select.bind(this))\n .onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n\n app.tagList.load(['parent']).then(() => {\n this.tagsLoading = false;\n\n this.tags = sortTags(getSelectableTags(this.attrs.discussion));\n\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n } else if (this.attrs.discussion) {\n this.attrs.discussion.tags().map(this.addTag.bind(this));\n }\n\n this.index = this.tags[0].id();\n\n m.redraw();\n });\n }\n\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimary()).length;\n }\n\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimary()).length;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n *\n * @param {Tag} tag\n */\n addTag(tag) {\n if (!tag.canStartDiscussion()) return;\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 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 * @param {Tag} tag\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 this.selected\n .filter(selected => selected.parent() === tag)\n .forEach(this.removeTag.bind(this));\n }\n }\n\n className() {\n return 'TagDiscussionModal';\n }\n\n title() {\n return this.attrs.discussion\n ? app.translator.trans('flarum-tags.forum.choose_tags.edit_title', {title: {this.attrs.discussion.title()}})\n : app.translator.trans('flarum-tags.forum.choose_tags.title');\n }\n\n getInstruction(primaryCount, secondaryCount) {\n if (this.bypassReqs) {\n return '';\n }\n\n if (primaryCount < this.minPrimary) {\n const remaining = this.minPrimary - primaryCount;\n return app.translator.trans('flarum-tags.forum.choose_tags.choose_primary_placeholder', {count: remaining});\n } else if (secondaryCount < this.minSecondary) {\n const remaining = this.minSecondary - secondaryCount;\n return app.translator.trans('flarum-tags.forum.choose_tags.choose_secondary_placeholder', {count: remaining});\n }\n\n return '';\n }\n\n content() {\n if (this.tagsLoading) {\n return ;\n }\n\n let tags = this.tags;\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n\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 === false || this.selected.includes(parent);\n });\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 if (primaryCount >= this.maxPrimary && !this.bypassReqs) {\n tags = tags.filter(tag => !tag.isPrimary() || this.selected.includes(tag));\n }\n\n if (secondaryCount >= this.maxSecondary && !this.bypassReqs) {\n tags = tags.filter(tag => tag.isPrimary() || this.selected.includes(tag));\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().substr(0, filter.length).toLowerCase() === filter);\n }\n\n if (!tags.includes(this.index)) this.index = tags[0];\n\n const inputWidth = Math.max(extractText(this.getInstruction(primaryCount, secondaryCount)).length, this.filter().length);\n\n return [\n
\n \n );\n }\n}\n","import app from 'flarum/forum/app';\nimport type Mithril from 'mithril';\nimport { extend, override } from 'flarum/common/extend';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport DiscussionListState from 'flarum/forum/states/DiscussionListState';\nimport GlobalSearchState from 'flarum/forum/states/GlobalSearchState';\nimport classList from 'flarum/common/utils/classList';\n\nimport TagHero from './components/TagHero';\nimport Tag from '../common/models/Tag';\nimport { ComponentAttrs } from 'flarum/common/Component';\n\nconst findTag = (slug: string) => app.store.all('tags').find(tag => tag.slug().localeCompare(slug, undefined, { sensitivity: 'base' }) === 0);\n\nexport default function() {\n IndexPage.prototype.currentTag = function() {\n if (this.currentActiveTag) {\n return this.currentActiveTag;\n }\n\n const slug = app.search.params().tags;\n let tag = null;\n\n if (slug) {\n tag = findTag(slug);\n }\n\n if (slug && !tag || (tag && !tag.isChild() && !tag.children())) {\n if (this.currentTagLoading) {\n return;\n }\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 app.store.find('tags', slug, { include: 'children,children.parent,parent,state'}).then(() => {\n this.currentActiveTag = findTag(slug);\n\n m.redraw();\n }).finally(() => {\n this.currentTagLoading = false;\n });\n }\n\n if (tag) {\n this.currentActiveTag = tag;\n return this.currentActiveTag;\n }\n\n return;\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 = this.currentTag();\n\n if (tag) return ;\n\n return original();\n });\n\n extend(IndexPage.prototype, 'view', function(vdom: Mithril.Vnode) {\n const tag = this.currentTag();\n\n if (tag) vdom.attrs.className += ' IndexPage--tag'+tag.id();\n });\n\n extend(IndexPage.prototype, 'setTitle', function() {\n const tag = this.currentTag();\n\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(IndexPage.prototype, 'sidebarItems', function(items) {\n const tag = this.currentTag();\n\n if (tag) {\n const color = tag.color();\n const canStartDiscussion = tag.canStartDiscussion() || !app.session.user;\n const newDiscussion = items.get('newDiscussion') as Mithril.Vnode;\n\n if (color) {\n newDiscussion.attrs.className = classList([newDiscussion.attrs.className, 'Button--tagColored']);\n newDiscussion.attrs.style = { '--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(this: DiscussionListState, params) {\n if (typeof params.include === 'string') {\n params.include = [params.include];\n } else {\n params.include?.push('tags', 'tags.parent');\n }\n\n if (this.params.tags) {\n const filter = 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 = `${q} tag:${this.params.tags}`;\n }\n params.filter = filter\n }\n });\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/DiscussionListItem'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/DiscussionHero'];","import { extend } from 'flarum/common/extend';\nimport DiscussionListItem from 'flarum/forum/components/DiscussionListItem';\nimport DiscussionHero from 'flarum/forum/components/DiscussionHero';\n\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport sortTags from '../common/utils/sortTags';\n\nexport default function() {\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\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\n if (tags && tags.length) {\n const color = tags[0].color();\n if (color) {\n view.attrs.style = { '--hero-bg': color };\n view.attrs.className += ' DiscussionHero--colored';\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\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags, {link: true}), 5);\n }\n });\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/utils/DiscussionControls'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Button'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/components/Modal'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/DiscussionPage'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/helpers/highlight'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/extractText'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/utils/KeyboardNavigatable'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/utils/Stream'];","export default function getSelectableTags(discussion) {\n let tags = app.store.all('tags');\n\n if (discussion) {\n tags = tags.filter(tag => tag.canAddToDiscussion() || discussion.tags().indexOf(tag) !== -1);\n } else {\n tags = tags.filter(tag => tag.canStartDiscussion());\n }\n\n return tags;\n}\n","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 { className, isToggled, ...attrs } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n\n return (\n \n );\n }\n}\n","export default function _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}","import app from 'flarum/forum/app';\nimport type Mithril from 'mithril';\nimport Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal';\nimport DiscussionPage from 'flarum/forum/components/DiscussionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport highlight from 'flarum/common/helpers/highlight';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport KeyboardNavigatable from 'flarum/forum/utils/KeyboardNavigatable';\nimport Stream from 'flarum/common/utils/Stream';\nimport Discussion from 'flarum/common/models/Discussion';\n\nimport tagLabel from '../../common/helpers/tagLabel';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport sortTags from '../../common/utils/sortTags';\nimport getSelectableTags from '../utils/getSelectableTags';\nimport ToggleButton from './ToggleButton';\nimport Tag from '../../common/models/Tag';\n\nexport interface TagDiscussionModalAttrs extends IInternalModalAttrs {\n discussion?: Discussion;\n selectedTags?: Tag[];\n onsubmit?: (tags: Tag[]) => {};\n}\n\nexport default class TagDiscussionModal extends Modal {\n tagsLoading = true;\n\n selected: Tag[] = [];\n filter = Stream('');\n focused = false;\n\n minPrimary = app.forum.attribute('minPrimaryTags');\n maxPrimary = app.forum.attribute('maxPrimaryTags');\n minSecondary = app.forum.attribute('minSecondaryTags');\n maxSecondary = app.forum.attribute('maxSecondaryTags');\n\n bypassReqs = false;\n\n navigator = new KeyboardNavigatable();\n\n tags?: Tag[];\n\n selectedTag?: Tag;\n oninit(vnode: Mithril.Vnode) {\n super.oninit(vnode);\n\n this.navigator\n .onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true))\n .onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true))\n .onSelect(this.select.bind(this))\n .onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n\n app.tagList.load(['parent']).then(() => {\n this.tagsLoading = false;\n\n const tags = sortTags(getSelectableTags(this.attrs.discussion));\n this.tags = tags;\n\n const discussionTags = this.attrs.discussion?.tags()\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n } else if (discussionTags) {\n discussionTags.forEach(tag => tag && this.addTag(tag));\n }\n\n this.selectedTag = tags[0];\n\n m.redraw();\n });\n }\n\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimary()).length;\n }\n\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimary()).length;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n */\n addTag(tag: Tag) {\n if (!tag.canStartDiscussion()) return;\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 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: 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 this.selected\n .filter(selected => selected.parent() === tag)\n .forEach(this.removeTag.bind(this));\n }\n }\n\n className() {\n return 'TagDiscussionModal';\n }\n\n title() {\n return this.attrs.discussion\n ? app.translator.trans('flarum-tags.forum.choose_tags.edit_title', {title: {this.attrs.discussion.title()}})\n : app.translator.trans('flarum-tags.forum.choose_tags.title');\n }\n\n getInstruction(primaryCount: number, secondaryCount: number) {\n if (this.bypassReqs) {\n return '';\n }\n\n if (primaryCount < this.minPrimary) {\n const remaining = this.minPrimary - primaryCount;\n return app.translator.trans('flarum-tags.forum.choose_tags.choose_primary_placeholder', {count: remaining});\n } else if (secondaryCount < this.minSecondary) {\n const remaining = this.minSecondary - secondaryCount;\n return app.translator.trans('flarum-tags.forum.choose_tags.choose_secondary_placeholder', {count: remaining});\n }\n\n return '';\n }\n\n content() {\n if (this.tagsLoading || !this.tags) {\n return ;\n }\n\n let tags = this.tags;\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n\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 the number of selected primary/secondary tags is at the maximum, then\n // we'll filter out all other tags of that type.\n if (primaryCount >= this.maxPrimary && !this.bypassReqs) {\n tags = tags.filter(tag => !tag.isPrimary() || this.selected.includes(tag));\n }\n\n if (secondaryCount >= this.maxSecondary && !this.bypassReqs) {\n tags = tags.filter(tag => tag.isPrimary() || this.selected.includes(tag));\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().substr(0, filter.length).toLowerCase() === filter);\n }\n\n if (!this.selectedTag || !tags.includes(this.selectedTag)) this.selectedTag = tags[0];\n\n const inputWidth = Math.max(extractText(this.getInstruction(primaryCount, secondaryCount)).length, this.filter().length);\n\n return [\n
\n ];\n }\n\n meetsRequirements(primaryCount: number, secondaryCount: number) {\n if (this.bypassReqs) {\n return true;\n }\n\n return primaryCount >= this.minPrimary && secondaryCount >= this.minSecondary;\n }\n\n toggleTag(tag: Tag) {\n // Won't happen, needed for type safety.\n if (!this.tags) return;\n\n if (this.selected.includes(tag)) {\n this.removeTag(tag);\n } else {\n this.addTag(tag);\n }\n\n if (this.filter()) {\n this.filter('');\n this.selectedTag = this.tags[0];\n }\n\n this.onready();\n }\n\n select(e: KeyboardEvent) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.selectedTag && this.selected.includes(this.selectedTag)) {\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.selectedTag) {\n this.getItem(this.selectedTag)[0].dispatchEvent(new Event('click'));\n }\n }\n\n selectableItems() {\n return this.$('.TagDiscussionModal-list > li');\n }\n\n getCurrentNumericIndex() {\n if (!this.selectedTag) return -1;\n\n return this.selectableItems().index(\n this.getItem(this.selectedTag)\n );\n }\n\n getItem(selectedTag: Tag) {\n return this.selectableItems().filter(`[data-index=\"${selectedTag.id()}\"]`);\n }\n\n setIndex(index: number, scrollToItem: boolean) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n\n if (index < 0) {\n index = $items.length - 1;\n } else if (index >= $items.length) {\n index = 0;\n }\n\n const $item = $items.eq(index);\n\n this.selectedTag = app.store.getById('tags', $item.attr('data-index')!);\n\n m.redraw();\n\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\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\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({scrollTop}, 100);\n }\n }\n }\n\n onsubmit(e: SubmitEvent) {\n e.preventDefault();\n\n const discussion = this.attrs.discussion;\n const tags = this.selected;\n\n if (discussion) {\n discussion.save({relationships: {tags}})\n .then(() => {\n if (app.current.matches(DiscussionPage)) {\n app.current.get('stream').update();\n }\n m.redraw();\n });\n }\n\n if (this.attrs.onsubmit) this.attrs.onsubmit(tags);\n\n this.hide();\n }\n}\n","import { extend } from 'flarum/common/extend';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nimport Button from 'flarum/common/components/Button';\n\nimport TagDiscussionModal from './components/TagDiscussionModal';\n\nexport default function() {\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', );\n }\n });\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/DiscussionComposer'];","import { extend, override } from 'flarum/common/extend';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport DiscussionComposer from 'flarum/forum/components/DiscussionComposer';\nimport classList from 'flarum/common/utils/classList';\n\nimport TagDiscussionModal from './components/TagDiscussionModal';\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport getSelectableTags from './utils/getSelectableTags';\n\nexport default function () {\n extend(IndexPage.prototype, 'newDiscussionAction', function (promise) {\n // From `addTagFilter\n const tag = this.currentTag();\n\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\n\n extend(DiscussionComposer.prototype, 'oninit', function () {\n app.tagList.load(['parent']).then(() => m.redraw())\n });\n\n // Add tag-selection abilities to the discussion composer.\n DiscussionComposer.prototype.chooseTags = function () {\n const selectableTags = getSelectableTags();\n\n if (!selectableTags.length) return;\n\n app.modal.show(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 // Add a tag-selection menu to the discussion composer's header, after the\n // title.\n extend(DiscussionComposer.prototype, 'headerItems', function (items) {\n const tags = this.composer.fields.tags || [];\n const selectableTags = getSelectableTags();\n\n items.add('tags', (\n \n {tags.length\n ? tagsLabel(tags)\n : {app.translator.trans('flarum-tags.forum.composer_discussion.choose_tags_link')}}\n \n ), 10);\n });\n\n override(DiscussionComposer.prototype, '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\n if ((!chosenTags.length\n || (chosenPrimaryTags.length < app.forum.attribute('minPrimaryTags'))\n || (chosenSecondaryTags.length < app.forum.attribute('minSecondaryTags'))\n ) && selectableTags.length) {\n app.modal.show(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(DiscussionComposer.prototype, 'data', function (data) {\n data.relationships = data.relationships || {};\n data.relationships.tags = this.composer.fields.tags;\n });\n}\n","import sortTags from './utils/sortTags';\nimport Tag from './models/Tag';\nimport tagsLabel from './helpers/tagsLabel';\nimport tagIcon from './helpers/tagIcon';\nimport tagLabel from './helpers/tagLabel';\n\nexport default {\n 'tags/utils/sortTags': sortTags,\n 'tags/models/Tag': Tag,\n 'tags/helpers/tagsLabel': tagsLabel,\n 'tags/helpers/tagIcon': tagIcon,\n 'tags/helpers/tagLabel': tagLabel\n};\n","import compat from '../common/compat';\n\nimport addTagFilter from './addTagFilter';\nimport addTagControl from './addTagControl';\nimport TagHero from './components/TagHero';\nimport TagDiscussionModal from './components/TagDiscussionModal';\nimport TagsPage from './components/TagsPage';\nimport DiscussionTaggedPost from './components/DiscussionTaggedPost';\nimport TagLinkButton from './components/TagLinkButton';\nimport addTagList from './addTagList';\nimport addTagLabels from './addTagLabels';\nimport addTagComposer from './addTagComposer';\nimport getSelectableTags from './utils/getSelectableTags';\n\nexport default Object.assign(compat, {\n 'tags/addTagFilter': addTagFilter,\n 'tags/addTagControl': addTagControl,\n 'tags/components/TagHero': TagHero,\n 'tags/components/TagDiscussionModal': TagDiscussionModal,\n 'tags/components/TagsPage': TagsPage,\n 'tags/components/DiscussionTaggedPost': DiscussionTaggedPost,\n 'tags/components/TagLinkButton': TagLinkButton,\n 'tags/addTagList': addTagList,\n 'tags/addTagLabels': addTagLabels,\n 'tags/addTagComposer': addTagComposer,\n 'tags/utils/getSelectableTags': getSelectableTags,\n});\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core;","import app from 'flarum/forum/app';\nimport Model from 'flarum/common/Model';\nimport Discussion from 'flarum/common/models/Discussion';\nimport IndexPage from 'flarum/forum/components/IndexPage';\n\nimport Tag from '../common/models/Tag';\nimport TagsPage from './components/TagsPage';\nimport DiscussionTaggedPost from './components/DiscussionTaggedPost';\n\nimport TagListState from './states/TagListState';\n\nimport addTagList from './addTagList';\nimport addTagFilter from './addTagFilter';\nimport addTagLabels from './addTagLabels';\nimport addTagControl from './addTagControl';\nimport addTagComposer from './addTagComposer';\n\napp.initializers.add('flarum-tags', function() {\n app.routes.tags = {path: '/tags', component: TagsPage };\n app.routes.tag = {path: '/t/:tags', component: IndexPage };\n\n app.route.tag = (tag: Tag) => app.route('tag', {tags: tag.slug()});\n\n app.postComponents.discussionTagged = DiscussionTaggedPost;\n\n app.store.models.tags = Tag;\n\n app.tagList = new TagListState();\n\n Discussion.prototype.tags = Model.hasMany('tags');\n Discussion.prototype.canTag = Model.attribute('canTag');\n\n addTagList();\n addTagFilter();\n addTagLabels();\n addTagControl();\n addTagComposer();\n});\n\n\n// Expose compat API\nimport tagsCompat from './compat';\nimport { compat } from '@flarum/core/forum';\n\nObject.assign(compat, tagsCompat);\n","module.exports = require(\"regenerator-runtime\");\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\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","// 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};"],"names":["flarum","core","compat","_setPrototypeOf","o","p","Object","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","prototype","create","constructor","Tag","name","Model","call","this","slug","description","color","backgroundUrl","backgroundMode","icon","position","parent","children","defaultSort","isChild","isHidden","discussionCount","lastPostedAt","lastPostedDiscussion","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimary","computed","tagIcon","tag","attrs","settings","hasIcon","useColor","className","classList","style","tagLabel","link","extract","tagText","app","translator","trans","title","href","route","tags","m","Link","sortTags","slice","sort","a","b","aPos","bPos","aParent","bParent","TagsPage","oninit","vnode","history","push","preloaded","preloadedApiDocument","filter","loading","tagList","load","then","store","all","redraw","view","pinned","cloud","IndexPage","listItems","toArray","map","child","discussion","lastPostNumber","humanTime","length","oncreate","setTitle","setTitleCount","Page","tagsLabel","forEach","DiscussionTaggedPost","initAttrs","oldTags","post","content","newTags","diffTags","tags1","tags2","indexOf","id","getById","tagsAdded","tagsRemoved","descriptionKey","descriptionData","data","count","EventPost","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","TagListState","loadedIncludes","Set","fn","includes","unloadedIncludes","include","has","join","val","add","self","args","arguments","apply","err","undefined","TagLinkButton","model","isActive","params","LinkButton","extend","items","current","matches","Separator","search","stickyParams","currentTag","addTag","active","component","more","splice","TagHero","Component","findTag","find","localeCompare","sensitivity","currentActiveTag","currentTagLoading","override","original","vdom","newDiscussion","get","disabled","GlobalSearchState","param","DiscussionListState","q","DiscussionListItem","DiscussionHero","getSelectableTags","ToggleButton","isToggled","source","excluded","i","target","sourceKeys","keys","TagDiscussionModal","tagsLoading","selected","Stream","focused","minPrimary","maxPrimary","minSecondary","maxSecondary","bypassReqs","navigator","KeyboardNavigatable","selectedTag","onUp","setIndex","getCurrentNumericIndex","onDown","onSelect","select","bind","onRemove","discussionTags","selectedTags","primaryCount","secondaryCount","removeTag","index","getInstruction","remaining","toLowerCase","substr","inputWidth","Math","max","extractText","onclick","$","focus","onready","placeholder","bidi","width","onkeydown","navigate","onfocus","onblur","type","meetsRequirements","colored","onmouseover","toggleTag","highlight","e","metaKey","ctrlKey","click","getItem","dispatchEvent","Event","selectableItems","scrollToItem","$items","$dropdown","$item","eq","attr","scrollTop","dropdownScroll","dropdownTop","offset","top","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","css","stop","animate","onsubmit","preventDefault","save","relationships","DiscussionPage","update","hide","Modal","DiscussionControls","canTag","modal","show","promise","composer","fields","DiscussionComposer","selectableTags","chooseTags","chosenTags","chosenPrimaryTags","chosenSecondaryTags","forum","attribute","assign","addTagFilter","addTagControl","addTagList","addTagLabels","addTagComposer","path","Discussion","tagsCompat","module","exports","runtime","Op","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","obj","defineProperty","enumerable","configurable","writable","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","state","GenStateSuspendedStart","method","GenStateExecuting","Error","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","result","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","TypeError","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","async","iter","object","reverse","pop","skipTempReset","prev","charAt","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","Function","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","definition","prop","r"],"sourceRoot":""}
\ No newline at end of file