From bc4356a7f5066e1fc1844633e3ee7194ce8c5374 Mon Sep 17 00:00:00 2001 From: flarum-bot Date: Sat, 28 Sep 2024 08:38:54 +0000 Subject: [PATCH] Bundled output for commit 5cea3d3b9bc4c5c6ae751bc4920a37bf032931af Includes transpiled JS/TS, and Typescript declaration files (typings). [skip ci] --- .../akismet/js/dist-typings/admin/extend.d.ts | 2 + .../akismet/js/dist-typings/admin/index.d.ts | 2 +- extensions/akismet/js/dist/admin.js | 2 +- extensions/akismet/js/dist/admin.js.map | 2 +- extensions/approval/js/dist/admin.js | 2 +- extensions/approval/js/dist/admin.js.map | 2 +- extensions/emoji/js/dist/admin.js | 2 +- extensions/emoji/js/dist/admin.js.map | 2 +- .../flags/js/dist-typings/admin/extend.d.ts | 2 + .../flags/js/dist-typings/admin/index.d.ts | 2 +- extensions/flags/js/dist/admin.js | 2 +- extensions/flags/js/dist/admin.js.map | 2 +- extensions/likes/js/dist/admin.js | 2 +- extensions/likes/js/dist/admin.js.map | 2 +- extensions/lock/js/dist/admin.js | 2 +- extensions/lock/js/dist/admin.js.map | 2 +- extensions/mentions/js/dist/admin.js | 2 +- extensions/mentions/js/dist/admin.js.map | 2 +- extensions/nicknames/js/dist/admin.js | 2 +- extensions/nicknames/js/dist/admin.js.map | 2 +- .../js/dist-typings/extend.d.ts | 2 + .../js/dist-typings/index.d.ts | 2 +- extensions/package-manager/js/dist/admin.js | 2 +- .../package-manager/js/dist/admin.js.map | 2 +- .../pusher/js/dist-typings/admin/extend.d.ts | 2 + .../pusher/js/dist-typings/admin/index.d.ts | 2 +- extensions/pusher/js/dist/admin.js | 2 +- extensions/pusher/js/dist/admin.js.map | 2 +- .../statistics/js/dist-typings/extend.d.ts | 2 + .../statistics/js/dist-typings/index.d.ts | 2 +- extensions/statistics/js/dist/admin.js | 2 +- extensions/statistics/js/dist/admin.js.map | 2 +- extensions/sticky/js/dist/admin.js | 2 +- extensions/sticky/js/dist/admin.js.map | 2 +- extensions/suspend/js/dist/admin.js | 2 +- extensions/suspend/js/dist/admin.js.map | 2 +- .../dist-typings/admin/addTagPermission.d.ts | 1 - .../tags/js/dist-typings/admin/admin.d.ts | 1 - .../tags/js/dist-typings/admin/extend.d.ts | 2 + .../tags/js/dist-typings/admin/index.d.ts | 2 +- extensions/tags/js/dist/admin.js | 2 +- extensions/tags/js/dist/admin.js.map | 2 +- .../dist-typings/admin/AdminApplication.d.ts | 18 ++++- .../core/js/dist-typings/admin/admin.d.ts | 2 +- .../admin/components/AdminPage.d.ts | 2 +- .../admin/components/AdvancedPage.d.ts | 3 +- .../admin/components/AppearancePage.d.ts | 3 +- .../admin/components/BasicsPage.d.ts | 10 +-- .../admin/components/CreateUserModal.d.ts | 2 +- .../admin/components/DashboardPage.d.ts | 2 +- .../admin/components/EditCustomCssModal.d.ts | 2 +- .../components/EditCustomFooterModal.d.ts | 2 +- .../components/EditCustomHeaderModal.d.ts | 2 +- .../admin/components/GeneralSearchSource.d.ts | 37 +++++++++ .../admin/components/HeaderSecondary.d.ts | 12 ++- .../admin/components/LoadingModal.d.ts | 2 +- .../admin/components/MailPage.d.ts | 3 +- .../admin/components/PermissionGrid.d.ts | 4 +- .../admin/components/PermissionsPage.d.ts | 7 +- .../admin/components/ReadmeModal.d.ts | 2 +- .../dist-typings/admin/components/Search.d.ts | 8 ++ .../admin/components/UserListPage.d.ts | 2 +- .../admin/states/GeneralSearchIndex.d.ts | 27 +++++++ ...{ExtensionData.d.ts => AdminRegistry.d.ts} | 19 +++-- .../js/dist-typings/common/Application.d.ts | 2 + .../common/components/AbstractSearch.d.ts | 75 +++++++++++++++++++ .../common/components/EditUserModal.d.ts | 2 +- .../common/components/FormGroup.d.ts | 14 +++- .../components/SearchModal.d.ts | 16 ++-- .../dist-typings/common/extenders/Admin.d.ts | 35 +++++++++ .../common/extenders/Notification.d.ts | 6 +- .../common/extenders/PostTypes.d.ts | 6 +- .../dist-typings/common/extenders/index.d.ts | 2 + .../forum/components/ChangeEmailModal.d.ts | 2 +- .../forum/components/ChangePasswordModal.d.ts | 2 +- .../DiscussionRenamedNotification.d.ts | 2 +- .../components/DiscussionsSearchSource.d.ts | 1 + .../forum/components/ForgotPasswordModal.d.ts | 2 +- .../forum/components/LogInModal.d.ts | 2 +- .../forum/components/PostsSearchSource.d.ts | 1 + .../components/RenameDiscussionModal.d.ts | 2 +- .../dist-typings/forum/components/Search.d.ts | 74 +----------------- .../forum/components/SignUpModal.d.ts | 2 +- .../forum/components/UsersSearchSource.d.ts | 1 + framework/core/js/dist/admin.js | 2 +- framework/core/js/dist/admin.js.map | 2 +- .../js/dist/common/components/SearchModal.js | 2 + .../dist/common/components/SearchModal.js.map | 1 + framework/core/js/dist/forum.js | 2 +- framework/core/js/dist/forum.js.map | 2 +- .../js/dist/forum/components/LogInModal.js | 2 +- .../dist/forum/components/LogInModal.js.map | 2 +- .../js/dist/forum/components/SearchModal.js | 2 - .../dist/forum/components/SearchModal.js.map | 1 - .../js/dist/forum/components/SignUpModal.js | 2 +- .../dist/forum/components/SignUpModal.js.map | 2 +- 96 files changed, 346 insertions(+), 178 deletions(-) create mode 100644 extensions/akismet/js/dist-typings/admin/extend.d.ts create mode 100644 extensions/flags/js/dist-typings/admin/extend.d.ts create mode 100644 extensions/package-manager/js/dist-typings/extend.d.ts create mode 100644 extensions/pusher/js/dist-typings/admin/extend.d.ts create mode 100644 extensions/statistics/js/dist-typings/extend.d.ts delete mode 100644 extensions/tags/js/dist-typings/admin/addTagPermission.d.ts create mode 100644 extensions/tags/js/dist-typings/admin/extend.d.ts create mode 100644 framework/core/js/dist-typings/admin/components/GeneralSearchSource.d.ts create mode 100644 framework/core/js/dist-typings/admin/components/Search.d.ts create mode 100644 framework/core/js/dist-typings/admin/states/GeneralSearchIndex.d.ts rename framework/core/js/dist-typings/admin/utils/{ExtensionData.d.ts => AdminRegistry.d.ts} (84%) create mode 100644 framework/core/js/dist-typings/common/components/AbstractSearch.d.ts rename framework/core/js/dist-typings/{forum => common}/components/SearchModal.d.ts (85%) create mode 100644 framework/core/js/dist-typings/common/extenders/Admin.d.ts create mode 100644 framework/core/js/dist/common/components/SearchModal.js create mode 100644 framework/core/js/dist/common/components/SearchModal.js.map delete mode 100644 framework/core/js/dist/forum/components/SearchModal.js delete mode 100644 framework/core/js/dist/forum/components/SearchModal.js.map diff --git a/extensions/akismet/js/dist-typings/admin/extend.d.ts b/extensions/akismet/js/dist-typings/admin/extend.d.ts new file mode 100644 index 000000000..f83ce3204 --- /dev/null +++ b/extensions/akismet/js/dist-typings/admin/extend.d.ts @@ -0,0 +1,2 @@ +declare const _default: any[]; +export default _default; diff --git a/extensions/akismet/js/dist-typings/admin/index.d.ts b/extensions/akismet/js/dist-typings/admin/index.d.ts index cb0ff5c3b..6d2293da0 100644 --- a/extensions/akismet/js/dist-typings/admin/index.d.ts +++ b/extensions/akismet/js/dist-typings/admin/index.d.ts @@ -1 +1 @@ -export {}; +export { default as extend } from './extend'; diff --git a/extensions/akismet/js/dist/admin.js b/extensions/akismet/js/dist/admin.js index d572833a3..4f453d5d0 100644 --- a/extensions/akismet/js/dist/admin.js +++ b/extensions/akismet/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var e={n:t=>{var a=t&&t.__esModule?()=>t.default:()=>t;return e.d(a,{a}),a},d:(t,a)=>{for(var r in a)e.o(a,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:a[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t);const a=flarum.reg.get("core","admin/app");var r=e.n(a);r().initializers.add("flarum-akismet",(()=>{r().extensionData.for("flarum-akismet").registerSetting({setting:"flarum-akismet.api_key",type:"text",label:r().translator.trans("flarum-akismet.admin.akismet_settings.api_key_label")}).registerSetting({setting:"flarum-akismet.delete_blatant_spam",type:"boolean",label:r().translator.trans("flarum-akismet.admin.akismet_settings.delete_blatant_spam_label"),help:r().translator.trans("flarum-akismet.admin.akismet_settings.delete_blatant_spam_help")}).registerPermission({icon:"fas fa-vote-yea",label:r().translator.trans("flarum-akismet.admin.permissions.bypass_akismet"),permission:"bypassAkismet"},"start")}))})(),module.exports=t})(); +(()=>{var e={n:t=>{var a=t&&t.__esModule?()=>t.default:()=>t;return e.d(a,{a}),a},d:(t,a)=>{for(var s in a)e.o(a,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:a[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t),e.d(t,{extend:()=>n});const a=flarum.reg.get("core","admin/app");var s=e.n(a);const r=flarum.reg.get("core","common/extenders"),n=[(new(e.n(r)().Admin)).setting((()=>({setting:"flarum-akismet.api_key",type:"text",label:s().translator.trans("flarum-akismet.admin.akismet_settings.api_key_label")}))).setting((()=>({setting:"flarum-akismet.delete_blatant_spam",type:"boolean",label:s().translator.trans("flarum-akismet.admin.akismet_settings.delete_blatant_spam_label"),help:s().translator.trans("flarum-akismet.admin.akismet_settings.delete_blatant_spam_help")}))).permission((()=>({icon:"fas fa-vote-yea",label:s().translator.trans("flarum-akismet.admin.permissions.bypass_akismet"),permission:"bypassAkismet"})),"start")];s().initializers.add("flarum-akismet",(()=>{}))})(),module.exports=t})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/akismet/js/dist/admin.js.map b/extensions/akismet/js/dist/admin.js.map index 7bba775b0..3121444cd 100644 --- a/extensions/akismet/js/dist/admin.js.map +++ b/extensions/akismet/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,IACzBH,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCC5D,qBAAqB,kBAAkB,KACrC,sBAAsB,kBAAkBW,gBAAgB,CACtDC,QAAS,yBACTC,KAAM,OACNC,MAAO,qBAAqB,yDAC3BH,gBAAgB,CAEjBC,QAAS,qCACTC,KAAM,UACNC,MAAO,qBAAqB,mEAC5BC,KAAM,qBAAqB,oEAC1BC,mBAAmB,CACpBC,KAAM,kBACNH,MAAO,qBAAqB,mDAC5BI,WAAY,iBACX,QAAQ,G","sources":["webpack://@flarum/akismet/webpack/bootstrap","webpack://@flarum/akismet/webpack/runtime/compat get default export","webpack://@flarum/akismet/webpack/runtime/define property getters","webpack://@flarum/akismet/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/akismet/webpack/runtime/make namespace object","webpack://@flarum/akismet/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/akismet/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","import app from 'flarum/admin/app';\napp.initializers.add('flarum-akismet', () => {\n app.extensionData.for('flarum-akismet').registerSetting({\n setting: 'flarum-akismet.api_key',\n type: 'text',\n label: app.translator.trans('flarum-akismet.admin.akismet_settings.api_key_label')\n }).registerSetting({\n //https://blog.akismet.com/2014/04/23/theres-a-ninja-in-your-akismet/\n setting: 'flarum-akismet.delete_blatant_spam',\n type: 'boolean',\n label: app.translator.trans('flarum-akismet.admin.akismet_settings.delete_blatant_spam_label'),\n help: app.translator.trans('flarum-akismet.admin.akismet_settings.delete_blatant_spam_help')\n }).registerPermission({\n icon: 'fas fa-vote-yea',\n label: app.translator.trans('flarum-akismet.admin.permissions.bypass_akismet'),\n permission: 'bypassAkismet'\n }, 'start');\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","registerSetting","setting","type","label","help","registerPermission","icon","permission"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,IACzBH,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oBCE5D,IAAgB,I,MAAI,WAAeW,SAAQ,KAAM,CAC/CA,QAAS,yBACTC,KAAM,OACNC,MAAO,qBAAqB,2DAC1BF,SAAQ,KAAM,CAEhBA,QAAS,qCACTC,KAAM,UACNC,MAAO,qBAAqB,mEAC5BC,KAAM,qBAAqB,sEACzBC,YAAW,KAAM,CACnBC,KAAM,kBACNH,MAAO,qBAAqB,mDAC5BE,WAAY,mBACV,UCdJ,qBAAqB,kBAAkB,Q","sources":["webpack://@flarum/akismet/webpack/bootstrap","webpack://@flarum/akismet/webpack/runtime/compat get default export","webpack://@flarum/akismet/webpack/runtime/define property getters","webpack://@flarum/akismet/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/akismet/webpack/runtime/make namespace object","webpack://@flarum/akismet/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/akismet/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/akismet/./src/admin/extend.tsx","webpack://@flarum/akismet/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","import Extend from 'flarum/common/extenders';\nimport app from 'flarum/admin/app';\nexport default [new Extend.Admin().setting(() => ({\n setting: 'flarum-akismet.api_key',\n type: 'text',\n label: app.translator.trans('flarum-akismet.admin.akismet_settings.api_key_label')\n})).setting(() => ({\n // https://blog.akismet.com/2014/04/23/theres-a-ninja-in-your-akismet/\n setting: 'flarum-akismet.delete_blatant_spam',\n type: 'boolean',\n label: app.translator.trans('flarum-akismet.admin.akismet_settings.delete_blatant_spam_label'),\n help: app.translator.trans('flarum-akismet.admin.akismet_settings.delete_blatant_spam_help')\n})).permission(() => ({\n icon: 'fas fa-vote-yea',\n label: app.translator.trans('flarum-akismet.admin.permissions.bypass_akismet'),\n permission: 'bypassAkismet'\n}), 'start')];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-akismet', () => {\n // ...\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","setting","type","label","help","permission","icon"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/approval/js/dist/admin.js b/extensions/approval/js/dist/admin.js index bb9503120..59706b796 100644 --- a/extensions/approval/js/dist/admin.js +++ b/extensions/approval/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var r={n:e=>{var s=e&&e.__esModule?()=>e.default:()=>e;return r.d(s,{a:s}),s},d:(e,s)=>{for(var a in s)r.o(s,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:s[a]})},o:(r,e)=>Object.prototype.hasOwnProperty.call(r,e),r:r=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})}},e={};(()=>{"use strict";r.r(e);const s=flarum.reg.get("core","common/extend"),a=flarum.reg.get("core","admin/app");var o=r.n(a);o().initializers.add("flarum-approval",(()=>{(0,s.extend)(o(),"getRequiredPermissions",(function(r,e){"discussion.startWithoutApproval"===e&&r.push("startDiscussion"),"discussion.replyWithoutApproval"===e&&r.push("discussion.reply")})),o().extensionData.for("flarum-approval").registerPermission({icon:"fas fa-check",label:o().translator.trans("flarum-approval.admin.permissions.start_discussions_without_approval_label"),permission:"discussion.startWithoutApproval"},"start",95).registerPermission({icon:"fas fa-check",label:o().translator.trans("flarum-approval.admin.permissions.reply_without_approval_label"),permission:"discussion.replyWithoutApproval"},"reply",95).registerPermission({icon:"fas fa-check",label:o().translator.trans("flarum-approval.admin.permissions.approve_posts_label"),permission:"discussion.approvePosts"},"moderate",65)}))})(),module.exports=e})(); +(()=>{var e={n:r=>{var s=r&&r.__esModule?()=>r.default:()=>r;return e.d(s,{a:s}),s},d:(r,s)=>{for(var o in s)e.o(s,o)&&!e.o(r,o)&&Object.defineProperty(r,o,{enumerable:!0,get:s[o]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};(()=>{"use strict";e.r(r),e.d(r,{extend:()=>i});const s=flarum.reg.get("core","common/extend"),o=flarum.reg.get("core","admin/app");var a=e.n(o);const t=flarum.reg.get("core","common/extenders"),i=[(new(e.n(t)().Admin)).permission((()=>({icon:"fas fa-check",label:a().translator.trans("flarum-approval.admin.permissions.start_discussions_without_approval_label"),permission:"discussion.startWithoutApproval"})),"start",95).permission((()=>({icon:"fas fa-check",label:a().translator.trans("flarum-approval.admin.permissions.reply_without_approval_label"),permission:"discussion.replyWithoutApproval"})),"reply",95).permission((()=>({icon:"fas fa-check",label:a().translator.trans("flarum-approval.admin.permissions.approve_posts_label"),permission:"discussion.approvePosts"})),"moderate",65)];a().initializers.add("flarum-approval",(()=>{(0,s.extend)(a(),"getRequiredPermissions",(function(e,r){"discussion.startWithoutApproval"===r&&e.push("startDiscussion"),"discussion.replyWithoutApproval"===r&&e.push("discussion.reply")}))}))})(),module.exports=r})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/approval/js/dist/admin.js.map b/extensions/approval/js/dist/admin.js.map index aaa460afd..10002b077 100644 --- a/extensions/approval/js/dist/admin.js.map +++ b/extensions/approval/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,iBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,a,aCE5D,qBAAqB,mBAAmB,MACtC,IAAAW,QAAO,IAAK,0BAA0B,SAAUC,EAAUC,GACrC,oCAAfA,GACFD,EAASE,KAAK,mBAEG,oCAAfD,GACFD,EAASE,KAAK,mBAElB,IACA,sBAAsB,mBAAmBC,mBAAmB,CAC1DC,KAAM,eACNC,MAAO,qBAAqB,8EAC5BJ,WAAY,mCACX,QAAS,IAAIE,mBAAmB,CACjCC,KAAM,eACNC,MAAO,qBAAqB,kEAC5BJ,WAAY,mCACX,QAAS,IAAIE,mBAAmB,CACjCC,KAAM,eACNC,MAAO,qBAAqB,yDAC5BJ,WAAY,2BACX,WAAY,GAAG,G","sources":["webpack://@flarum/approval/webpack/bootstrap","webpack://@flarum/approval/webpack/runtime/compat get default export","webpack://@flarum/approval/webpack/runtime/define property getters","webpack://@flarum/approval/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/approval/webpack/runtime/make namespace object","webpack://@flarum/approval/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/approval/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/approval/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\napp.initializers.add('flarum-approval', () => {\n extend(app, 'getRequiredPermissions', function (required, permission) {\n if (permission === 'discussion.startWithoutApproval') {\n required.push('startDiscussion');\n }\n if (permission === 'discussion.replyWithoutApproval') {\n required.push('discussion.reply');\n }\n });\n app.extensionData.for('flarum-approval').registerPermission({\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.start_discussions_without_approval_label'),\n permission: 'discussion.startWithoutApproval'\n }, 'start', 95).registerPermission({\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.reply_without_approval_label'),\n permission: 'discussion.replyWithoutApproval'\n }, 'reply', 95).registerPermission({\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.approve_posts_label'),\n permission: 'discussion.approvePosts'\n }, 'moderate', 65);\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","extend","required","permission","push","registerPermission","icon","label"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,iBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oBCE5D,IAAgB,I,MAAI,WAAeW,YAAW,KAAM,CAClDC,KAAM,eACNC,MAAO,qBAAqB,8EAC5BF,WAAY,qCACV,QAAS,IAAIA,YAAW,KAAM,CAChCC,KAAM,eACNC,MAAO,qBAAqB,kEAC5BF,WAAY,qCACV,QAAS,IAAIA,YAAW,KAAM,CAChCC,KAAM,eACNC,MAAO,qBAAqB,yDAC5BF,WAAY,6BACV,WAAY,KCXhB,qBAAqB,mBAAmB,MACtC,IAAAG,QAAO,IAAK,0BAA0B,SAAUC,EAAUJ,GACrC,oCAAfA,GACFI,EAASC,KAAK,mBAEG,oCAAfL,GACFI,EAASC,KAAK,mBAElB,GAAE,G","sources":["webpack://@flarum/approval/webpack/bootstrap","webpack://@flarum/approval/webpack/runtime/compat get default export","webpack://@flarum/approval/webpack/runtime/define property getters","webpack://@flarum/approval/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/approval/webpack/runtime/make namespace object","webpack://@flarum/approval/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/approval/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/approval/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/approval/./src/admin/extend.tsx","webpack://@flarum/approval/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","import Extend from 'flarum/common/extenders';\nimport app from 'flarum/admin/app';\nexport default [new Extend.Admin().permission(() => ({\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.start_discussions_without_approval_label'),\n permission: 'discussion.startWithoutApproval'\n}), 'start', 95).permission(() => ({\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.reply_without_approval_label'),\n permission: 'discussion.replyWithoutApproval'\n}), 'reply', 95).permission(() => ({\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.approve_posts_label'),\n permission: 'discussion.approvePosts'\n}), 'moderate', 65)];","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-approval', () => {\n extend(app, 'getRequiredPermissions', function (required, permission) {\n if (permission === 'discussion.startWithoutApproval') {\n required.push('startDiscussion');\n }\n if (permission === 'discussion.replyWithoutApproval') {\n required.push('discussion.reply');\n }\n });\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","permission","icon","label","extend","required","push"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/emoji/js/dist/admin.js b/extensions/emoji/js/dist/admin.js index b3666c3ed..36cffcf3c 100644 --- a/extensions/emoji/js/dist/admin.js +++ b/extensions/emoji/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var d={n:u=>{var f=u&&u.__esModule?()=>u.default:()=>u;return d.d(f,{a:f}),f},d:(u,f)=>{for(var c in f)d.o(f,c)&&!d.o(u,c)&&Object.defineProperty(u,c,{enumerable:!0,get:f[c]})},o:(d,u)=>Object.prototype.hasOwnProperty.call(d,u),r:d=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(d,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(d,"__esModule",{value:!0})}},u={};(()=>{"use strict";d.r(u);const f=flarum.reg.get("core","admin/app");var c=d.n(f),e=function(){var d={base:"https://twemoji.maxcdn.com/v/14.0.2/",ext:".png",size:"72x72",className:"emoji",convert:{fromCodePoint:function(d){var u="string"==typeof d?parseInt(d,16):d;return u<65536?t(u):t(55296+((u-=65536)>>10),56320+(1023&u))},toCodePoint:h},onerror:function(){this.parentNode&&this.parentNode.replaceChild(r(this.alt,!1),this)},parse:function(u,f){return f&&"function"!=typeof f||(f={callback:f}),("string"==typeof u?l:s)(u,{callback:f.callback||n,attributes:"function"==typeof f.attributes?f.attributes:p,base:"string"==typeof f.base?f.base:d.base,ext:f.ext||d.ext,size:f.folder||(c=f.size||d.size,"number"==typeof c?c+"x"+c:c),className:f.className||d.className,onerror:f.onerror||d.onerror});var c},replace:g,test:function(d){f.lastIndex=0;var u=f.test(d);return f.lastIndex=0,u}},u={"&":"&","<":"<",">":">","'":"'",'"':"""},f=/(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83e\udef1\ud83c\udffb\u200d\ud83e\udef2\ud83c[\udffc-\udfff]|\ud83e\udef1\ud83c\udffc\u200d\ud83e\udef2\ud83c[\udffb\udffd-\udfff]|\ud83e\udef1\ud83c\udffd\u200d\ud83e\udef2\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\udef1\ud83c\udffe\u200d\ud83e\udef2\ud83c[\udffb-\udffd\udfff]|\ud83e\udef1\ud83c\udfff\u200d\ud83e\udef2\ud83c[\udffb-\udffe]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83e\udd1d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91]|\ud83e\udd1d)|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd\udec3-\udec5\udef0-\udef6]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udedd-\udedf\udeeb\udeec\udef4-\udefc\udfe0-\udfeb\udff0]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78-\uddb4\uddb7\uddba\uddbc-\uddcc\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7c\ude80-\ude86\ude90-\udeac\udeb0-\udeba\udec0-\udec2\uded0-\uded9\udee0-\udee7]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g,c=/\uFE0F/g,e=String.fromCharCode(8205),b=/[&<>'"]/g,a=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,t=String.fromCharCode;return d;function r(d,u){return document.createTextNode(u?d.replace(c,""):d)}function n(d,u){return"".concat(u.base,u.size,"/",d,u.ext)}function o(d,u){for(var f,c,e=d.childNodes,b=e.length;b--;)3===(c=(f=e[b]).nodeType)?u.push(f):1!==c||"ownerSVGElement"in f||a.test(f.nodeName.toLowerCase())||o(f,u);return u}function i(d){return h(d.indexOf(e)<0?d.replace(c,""):d)}function s(d,u){for(var c,e,b,a,t,n,s,l,m,p,g,h,x,y=o(d,[]),v=y.length;v--;){for(b=!1,a=document.createDocumentFragment(),n=(t=y[v]).nodeValue,l=0;s=f.exec(n);){if((m=s.index)!==l&&a.appendChild(r(n.slice(l,m),!0)),h=i(g=s[0]),l=m+g.length,x=u.callback(h,u),h&&x){for(e in(p=new Image).onerror=u.onerror,p.setAttribute("draggable","false"),c=u.attributes(g,h))c.hasOwnProperty(e)&&0!==e.indexOf("on")&&!p.hasAttribute(e)&&p.setAttribute(e,c[e]);p.className=u.className,p.alt=g,p.src=x,b=!0,a.appendChild(p)}p||a.appendChild(r(g,!1)),p=null}b&&(l")}return e}))}function m(d){return u[d]}function p(){return null}function g(d,u){return String(d).replace(f,u)}function h(d,u){for(var f=[],c=0,e=0,b=0;b{c().extensionData.for("flarum-emoji").registerSetting({setting:"flarum-emoji.cdn",type:"text",label:c().translator.trans("flarum-emoji.admin.settings.cdn_label"),help:c().translator.trans("flarum-emoji.admin.settings.cdn_help",{version:b})})}))})(),module.exports=u})(); +(()=>{var d={n:u=>{var f=u&&u.__esModule?()=>u.default:()=>u;return d.d(f,{a:f}),f},d:(u,f)=>{for(var c in f)d.o(f,c)&&!d.o(u,c)&&Object.defineProperty(u,c,{enumerable:!0,get:f[c]})},o:(d,u)=>Object.prototype.hasOwnProperty.call(d,u),r:d=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(d,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(d,"__esModule",{value:!0})}},u={};(()=>{"use strict";d.r(u),d.d(u,{extend:()=>r});const f=flarum.reg.get("core","admin/app");var c=d.n(f);const e=flarum.reg.get("core","common/extenders");var b=d.n(e),a=function(){var d={base:"https://twemoji.maxcdn.com/v/14.0.2/",ext:".png",size:"72x72",className:"emoji",convert:{fromCodePoint:function(d){var u="string"==typeof d?parseInt(d,16):d;return u<65536?t(u):t(55296+((u-=65536)>>10),56320+(1023&u))},toCodePoint:h},onerror:function(){this.parentNode&&this.parentNode.replaceChild(r(this.alt,!1),this)},parse:function(u,f){return f&&"function"!=typeof f||(f={callback:f}),("string"==typeof u?l:s)(u,{callback:f.callback||n,attributes:"function"==typeof f.attributes?f.attributes:p,base:"string"==typeof f.base?f.base:d.base,ext:f.ext||d.ext,size:f.folder||(c=f.size||d.size,"number"==typeof c?c+"x"+c:c),className:f.className||d.className,onerror:f.onerror||d.onerror});var c},replace:g,test:function(d){f.lastIndex=0;var u=f.test(d);return f.lastIndex=0,u}},u={"&":"&","<":"<",">":">","'":"'",'"':"""},f=/(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83e\udef1\ud83c\udffb\u200d\ud83e\udef2\ud83c[\udffc-\udfff]|\ud83e\udef1\ud83c\udffc\u200d\ud83e\udef2\ud83c[\udffb\udffd-\udfff]|\ud83e\udef1\ud83c\udffd\u200d\ud83e\udef2\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\udef1\ud83c\udffe\u200d\ud83e\udef2\ud83c[\udffb-\udffd\udfff]|\ud83e\udef1\ud83c\udfff\u200d\ud83e\udef2\ud83c[\udffb-\udffe]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83e\udd1d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91]|\ud83e\udd1d)|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd\udec3-\udec5\udef0-\udef6]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udedd-\udedf\udeeb\udeec\udef4-\udefc\udfe0-\udfeb\udff0]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78-\uddb4\uddb7\uddba\uddbc-\uddcc\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7c\ude80-\ude86\ude90-\udeac\udeb0-\udeba\udec0-\udec2\uded0-\uded9\udee0-\udee7]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g,c=/\uFE0F/g,e=String.fromCharCode(8205),b=/[&<>'"]/g,a=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,t=String.fromCharCode;return d;function r(d,u){return document.createTextNode(u?d.replace(c,""):d)}function n(d,u){return"".concat(u.base,u.size,"/",d,u.ext)}function o(d,u){for(var f,c,e=d.childNodes,b=e.length;b--;)3===(c=(f=e[b]).nodeType)?u.push(f):1!==c||"ownerSVGElement"in f||a.test(f.nodeName.toLowerCase())||o(f,u);return u}function i(d){return h(d.indexOf(e)<0?d.replace(c,""):d)}function s(d,u){for(var c,e,b,a,t,n,s,l,m,p,g,h,x,y=o(d,[]),v=y.length;v--;){for(b=!1,a=document.createDocumentFragment(),n=(t=y[v]).nodeValue,l=0;s=f.exec(n);){if((m=s.index)!==l&&a.appendChild(r(n.slice(l,m),!0)),h=i(g=s[0]),l=m+g.length,x=u.callback(h,u),h&&x){for(e in(p=new Image).onerror=u.onerror,p.setAttribute("draggable","false"),c=u.attributes(g,h))c.hasOwnProperty(e)&&0!==e.indexOf("on")&&!p.hasAttribute(e)&&p.setAttribute(e,c[e]);p.className=u.className,p.alt=g,p.src=x,b=!0,a.appendChild(p)}p||a.appendChild(r(g,!1)),p=null}b&&(l")}return e}))}function m(d){return u[d]}function p(){return null}function g(d,u){return String(d).replace(f,u)}function h(d,u){for(var f=[],c=0,e=0,b=0;b({setting:"flarum-emoji.cdn",type:"text",label:c().translator.trans("flarum-emoji.admin.settings.cdn_label"),help:c().translator.trans("flarum-emoji.admin.settings.cdn_help",{version:t})})))];c().initializers.add("flarum-emoji",(()=>{}))})(),module.exports=u})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/emoji/js/dist/admin.js.map b/extensions/emoji/js/dist/admin.js.map index 300f8db5e..4ac955601 100644 --- a/extensions/emoji/js/dist/admin.js.map +++ b/extensions/emoji/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/emoji/webpack/bootstrap","webpack://@flarum/emoji/webpack/runtime/compat get default export","webpack://@flarum/emoji/webpack/runtime/define property getters","webpack://@flarum/emoji/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/emoji/webpack/runtime/make namespace object","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/emoji/../../../node_modules/twemoji/dist/twemoji.esm.js","webpack://@flarum/emoji/./src/common/cdn.js","webpack://@flarum/emoji/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","/*! Copyright Twitter Inc. and other contributors. Licensed under MIT */\nvar twemoji=function(){\"use strict\";var twemoji={base:\"https://twemoji.maxcdn.com/v/14.0.2/\",ext:\".png\",size:\"72x72\",className:\"emoji\",convert:{fromCodePoint:fromCodePoint,toCodePoint:toCodePoint},onerror:function onerror(){if(this.parentNode){this.parentNode.replaceChild(createText(this.alt,false),this)}},parse:parse,replace:replace,test:test},escaper={\"&\":\"&\",\"<\":\"<\",\">\":\">\",\"'\":\"'\",'\"':\""\"},re=/(?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\udef1\\ud83c\\udffb\\u200d\\ud83e\\udef2\\ud83c[\\udffc-\\udfff]|\\ud83e\\udef1\\ud83c\\udffc\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\udef1\\ud83c\\udffd\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\udef1\\ud83c\\udffe\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\udef1\\ud83c\\udfff\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc8f\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc91\\ud83c[\\udffb-\\udfff]|\\ud83e\\udd1d\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d\\udc8f\\udc91]|\\ud83e\\udd1d)|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f|\\u2696\\ufe0f|\\u2708\\ufe0f|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)((?:\\ud83c[\\udffb-\\udfff]|\\ufe0f)\\u200d[\\u2640\\u2642]\\ufe0f)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd4\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f|(?:\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f\\u200d\\u26a7\\ufe0f|\\ud83c\\udff3\\ufe0f\\u200d\\ud83c\\udf08|\\ud83d\\ude36\\u200d\\ud83c\\udf2b\\ufe0f|\\u2764\\ufe0f\\u200d\\ud83d\\udd25|\\u2764\\ufe0f\\u200d\\ud83e\\ude79|\\ud83c\\udff4\\u200d\\u2620\\ufe0f|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f|\\ud83d\\ude2e\\u200d\\ud83d\\udca8|\\ud83d\\ude35\\u200d\\ud83d\\udcab|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f|\\ud83e\\uddde\\u200d\\u2640\\ufe0f|\\ud83e\\uddde\\u200d\\u2642\\ufe0f|\\ud83e\\udddf\\u200d\\u2640\\ufe0f|\\ud83e\\udddf\\u200d\\u2642\\ufe0f|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f?\\u20e3|(?:[©®\\u2122\\u265f]\\ufe0f)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd\\udec3-\\udec5\\udef0-\\udef6]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udc8e\\udc90\\udc92-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udedd-\\udedf\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb\\udff0]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcc\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7c\\ude80-\\ude86\\ude90-\\udeac\\udeb0-\\udeba\\udec0-\\udec2\\uded0-\\uded9\\udee0-\\udee7]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f/g,UFE0Fg=/\\uFE0F/g,U200D=String.fromCharCode(8205),rescaper=/[&<>'\"]/g,shouldntBeParsed=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,fromCharCode=String.fromCharCode;return twemoji;function createText(text,clean){return document.createTextNode(clean?text.replace(UFE0Fg,\"\"):text)}function escapeHTML(s){return s.replace(rescaper,replacer)}function defaultImageSrcGenerator(icon,options){return\"\".concat(options.base,options.size,\"/\",icon,options.ext)}function grabAllTextNodes(node,allText){var childNodes=node.childNodes,length=childNodes.length,subnode,nodeType;while(length--){subnode=childNodes[length];nodeType=subnode.nodeType;if(nodeType===3){allText.push(subnode)}else if(nodeType===1&&!(\"ownerSVGElement\"in subnode)&&!shouldntBeParsed.test(subnode.nodeName.toLowerCase())){grabAllTextNodes(subnode,allText)}}return allText}function grabTheRightIcon(rawText){return toCodePoint(rawText.indexOf(U200D)<0?rawText.replace(UFE0Fg,\"\"):rawText)}function parseNode(node,options){var allText=grabAllTextNodes(node,[]),length=allText.length,attrib,attrname,modified,fragment,subnode,text,match,i,index,img,rawText,iconId,src;while(length--){modified=false;fragment=document.createDocumentFragment();subnode=allText[length];text=subnode.nodeValue;i=0;while(match=re.exec(text)){index=match.index;if(index!==i){fragment.appendChild(createText(text.slice(i,index),true))}rawText=match[0];iconId=grabTheRightIcon(rawText);i=index+rawText.length;src=options.callback(iconId,options);if(iconId&&src){img=new Image;img.onerror=options.onerror;img.setAttribute(\"draggable\",\"false\");attrib=options.attributes(rawText,iconId);for(attrname in attrib){if(attrib.hasOwnProperty(attrname)&&attrname.indexOf(\"on\")!==0&&!img.hasAttribute(attrname)){img.setAttribute(attrname,attrib[attrname])}}img.className=options.className;img.alt=rawText;img.src=src;modified=true;fragment.appendChild(img)}if(!img)fragment.appendChild(createText(rawText,false));img=null}if(modified){if(i\")}return ret})}function replacer(m){return escaper[m]}function returnNull(){return null}function toSizeSquaredAsset(value){return typeof value===\"number\"?value+\"x\"+value:value}function fromCodePoint(codepoint){var code=typeof codepoint===\"string\"?parseInt(codepoint,16):codepoint;if(code<65536){return fromCharCode(code)}code-=65536;return fromCharCode(55296+(code>>10),56320+(code&1023))}function parse(what,how){if(!how||typeof how===\"function\"){how={callback:how}}return(typeof what===\"string\"?parseString:parseNode)(what,{callback:how.callback||defaultImageSrcGenerator,attributes:typeof how.attributes===\"function\"?how.attributes:returnNull,base:typeof how.base===\"string\"?how.base:twemoji.base,ext:how.ext||twemoji.ext,size:how.folder||toSizeSquaredAsset(how.size||twemoji.size),className:how.className||twemoji.className,onerror:how.onerror||twemoji.onerror})}function replace(text,callback){return String(text).replace(re,callback)}function test(text){re.lastIndex=0;var result=re.test(text);re.lastIndex=0;return result}function toCodePoint(unicodeSurrogates,sep){var r=[],c=0,p=0,i=0;while(i {\n app.extensionData.for('flarum-emoji').registerSetting({\n setting: 'flarum-emoji.cdn',\n type: 'text',\n label: app.translator.trans('flarum-emoji.admin.settings.cdn_label'),\n help: app.translator.trans('flarum-emoji.admin.settings.cdn_help', {\n version: version\n })\n });\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","twemoji","base","ext","size","className","convert","fromCodePoint","codepoint","code","parseInt","fromCharCode","toCodePoint","onerror","this","parentNode","replaceChild","createText","alt","parse","what","how","callback","parseString","parseNode","defaultImageSrcGenerator","attributes","returnNull","folder","replace","test","text","re","lastIndex","result","escaper","UFE0Fg","U200D","String","rescaper","shouldntBeParsed","clean","document","createTextNode","icon","options","concat","grabAllTextNodes","node","allText","subnode","nodeType","childNodes","length","push","nodeName","toLowerCase","grabTheRightIcon","rawText","indexOf","attrib","attrname","modified","fragment","match","i","index","img","iconId","src","createDocumentFragment","nodeValue","exec","appendChild","slice","Image","setAttribute","hasAttribute","str","ret","replacer","m","unicodeSurrogates","sep","r","c","p","charCodeAt","toString","join","version","add","registerSetting","setting","type","label","help"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/emoji/webpack/bootstrap","webpack://@flarum/emoji/webpack/runtime/compat get default export","webpack://@flarum/emoji/webpack/runtime/define property getters","webpack://@flarum/emoji/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/emoji/webpack/runtime/make namespace object","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/emoji/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/emoji/../../../node_modules/twemoji/dist/twemoji.esm.js","webpack://@flarum/emoji/./src/common/cdn.js","webpack://@flarum/emoji/./src/admin/extend.tsx","webpack://@flarum/emoji/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","/*! Copyright Twitter Inc. and other contributors. Licensed under MIT */\nvar twemoji=function(){\"use strict\";var twemoji={base:\"https://twemoji.maxcdn.com/v/14.0.2/\",ext:\".png\",size:\"72x72\",className:\"emoji\",convert:{fromCodePoint:fromCodePoint,toCodePoint:toCodePoint},onerror:function onerror(){if(this.parentNode){this.parentNode.replaceChild(createText(this.alt,false),this)}},parse:parse,replace:replace,test:test},escaper={\"&\":\"&\",\"<\":\"<\",\">\":\">\",\"'\":\"'\",'\"':\""\"},re=/(?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\udef1\\ud83c\\udffb\\u200d\\ud83e\\udef2\\ud83c[\\udffc-\\udfff]|\\ud83e\\udef1\\ud83c\\udffc\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\udef1\\ud83c\\udffd\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\udef1\\ud83c\\udffe\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\udef1\\ud83c\\udfff\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc8f\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc91\\ud83c[\\udffb-\\udfff]|\\ud83e\\udd1d\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d\\udc8f\\udc91]|\\ud83e\\udd1d)|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f|\\u2696\\ufe0f|\\u2708\\ufe0f|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)((?:\\ud83c[\\udffb-\\udfff]|\\ufe0f)\\u200d[\\u2640\\u2642]\\ufe0f)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd4\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f|(?:\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f\\u200d\\u26a7\\ufe0f|\\ud83c\\udff3\\ufe0f\\u200d\\ud83c\\udf08|\\ud83d\\ude36\\u200d\\ud83c\\udf2b\\ufe0f|\\u2764\\ufe0f\\u200d\\ud83d\\udd25|\\u2764\\ufe0f\\u200d\\ud83e\\ude79|\\ud83c\\udff4\\u200d\\u2620\\ufe0f|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f|\\ud83d\\ude2e\\u200d\\ud83d\\udca8|\\ud83d\\ude35\\u200d\\ud83d\\udcab|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f|\\ud83e\\uddde\\u200d\\u2640\\ufe0f|\\ud83e\\uddde\\u200d\\u2642\\ufe0f|\\ud83e\\udddf\\u200d\\u2640\\ufe0f|\\ud83e\\udddf\\u200d\\u2642\\ufe0f|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f?\\u20e3|(?:[©®\\u2122\\u265f]\\ufe0f)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd\\udec3-\\udec5\\udef0-\\udef6]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udc8e\\udc90\\udc92-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udedd-\\udedf\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb\\udff0]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcc\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7c\\ude80-\\ude86\\ude90-\\udeac\\udeb0-\\udeba\\udec0-\\udec2\\uded0-\\uded9\\udee0-\\udee7]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f/g,UFE0Fg=/\\uFE0F/g,U200D=String.fromCharCode(8205),rescaper=/[&<>'\"]/g,shouldntBeParsed=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,fromCharCode=String.fromCharCode;return twemoji;function createText(text,clean){return document.createTextNode(clean?text.replace(UFE0Fg,\"\"):text)}function escapeHTML(s){return s.replace(rescaper,replacer)}function defaultImageSrcGenerator(icon,options){return\"\".concat(options.base,options.size,\"/\",icon,options.ext)}function grabAllTextNodes(node,allText){var childNodes=node.childNodes,length=childNodes.length,subnode,nodeType;while(length--){subnode=childNodes[length];nodeType=subnode.nodeType;if(nodeType===3){allText.push(subnode)}else if(nodeType===1&&!(\"ownerSVGElement\"in subnode)&&!shouldntBeParsed.test(subnode.nodeName.toLowerCase())){grabAllTextNodes(subnode,allText)}}return allText}function grabTheRightIcon(rawText){return toCodePoint(rawText.indexOf(U200D)<0?rawText.replace(UFE0Fg,\"\"):rawText)}function parseNode(node,options){var allText=grabAllTextNodes(node,[]),length=allText.length,attrib,attrname,modified,fragment,subnode,text,match,i,index,img,rawText,iconId,src;while(length--){modified=false;fragment=document.createDocumentFragment();subnode=allText[length];text=subnode.nodeValue;i=0;while(match=re.exec(text)){index=match.index;if(index!==i){fragment.appendChild(createText(text.slice(i,index),true))}rawText=match[0];iconId=grabTheRightIcon(rawText);i=index+rawText.length;src=options.callback(iconId,options);if(iconId&&src){img=new Image;img.onerror=options.onerror;img.setAttribute(\"draggable\",\"false\");attrib=options.attributes(rawText,iconId);for(attrname in attrib){if(attrib.hasOwnProperty(attrname)&&attrname.indexOf(\"on\")!==0&&!img.hasAttribute(attrname)){img.setAttribute(attrname,attrib[attrname])}}img.className=options.className;img.alt=rawText;img.src=src;modified=true;fragment.appendChild(img)}if(!img)fragment.appendChild(createText(rawText,false));img=null}if(modified){if(i\")}return ret})}function replacer(m){return escaper[m]}function returnNull(){return null}function toSizeSquaredAsset(value){return typeof value===\"number\"?value+\"x\"+value:value}function fromCodePoint(codepoint){var code=typeof codepoint===\"string\"?parseInt(codepoint,16):codepoint;if(code<65536){return fromCharCode(code)}code-=65536;return fromCharCode(55296+(code>>10),56320+(code&1023))}function parse(what,how){if(!how||typeof how===\"function\"){how={callback:how}}return(typeof what===\"string\"?parseString:parseNode)(what,{callback:how.callback||defaultImageSrcGenerator,attributes:typeof how.attributes===\"function\"?how.attributes:returnNull,base:typeof how.base===\"string\"?how.base:twemoji.base,ext:how.ext||twemoji.ext,size:how.folder||toSizeSquaredAsset(how.size||twemoji.size),className:how.className||twemoji.className,onerror:how.onerror||twemoji.onerror})}function replace(text,callback){return String(text).replace(re,callback)}function test(text){re.lastIndex=0;var result=re.test(text);re.lastIndex=0;return result}function toCodePoint(unicodeSurrogates,sep){var r=[],c=0,p=0,i=0;while(i ({\n setting: 'flarum-emoji.cdn',\n type: 'text',\n label: app.translator.trans('flarum-emoji.admin.settings.cdn_label'),\n help: app.translator.trans('flarum-emoji.admin.settings.cdn_help', {\n version: version\n })\n}))];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-emoji', () => {\n // ...\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","twemoji","base","ext","size","className","convert","fromCodePoint","codepoint","code","parseInt","fromCharCode","toCodePoint","onerror","this","parentNode","replaceChild","createText","alt","parse","what","how","callback","parseString","parseNode","defaultImageSrcGenerator","attributes","returnNull","folder","replace","test","text","re","lastIndex","result","escaper","UFE0Fg","U200D","String","rescaper","shouldntBeParsed","clean","document","createTextNode","icon","options","concat","grabAllTextNodes","node","allText","subnode","nodeType","childNodes","length","push","nodeName","toLowerCase","grabTheRightIcon","rawText","indexOf","attrib","attrname","modified","fragment","match","i","index","img","iconId","src","createDocumentFragment","nodeValue","exec","appendChild","slice","Image","setAttribute","hasAttribute","str","ret","replacer","m","unicodeSurrogates","sep","r","c","p","charCodeAt","toString","join","version","add","setting","type","label","help"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/flags/js/dist-typings/admin/extend.d.ts b/extensions/flags/js/dist-typings/admin/extend.d.ts new file mode 100644 index 000000000..f83ce3204 --- /dev/null +++ b/extensions/flags/js/dist-typings/admin/extend.d.ts @@ -0,0 +1,2 @@ +declare const _default: any[]; +export default _default; diff --git a/extensions/flags/js/dist-typings/admin/index.d.ts b/extensions/flags/js/dist-typings/admin/index.d.ts index cb0ff5c3b..6d2293da0 100644 --- a/extensions/flags/js/dist-typings/admin/index.d.ts +++ b/extensions/flags/js/dist-typings/admin/index.d.ts @@ -1 +1 @@ -export {}; +export { default as extend } from './extend'; diff --git a/extensions/flags/js/dist/admin.js b/extensions/flags/js/dist/admin.js index d6c17820e..6ca6314c9 100644 --- a/extensions/flags/js/dist/admin.js +++ b/extensions/flags/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var e={n:a=>{var s=a&&a.__esModule?()=>a.default:()=>a;return e.d(s,{a:s}),s},d:(a,s)=>{for(var r in s)e.o(s,r)&&!e.o(a,r)&&Object.defineProperty(a,r,{enumerable:!0,get:s[r]})},o:(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},a={};(()=>{"use strict";e.r(a);const s=flarum.reg.get("core","admin/app");var r=e.n(s);r().initializers.add("flarum-flags",(()=>{r().extensionData.for("flarum-flags").registerSetting({setting:"flarum-flags.guidelines_url",type:"text",label:r().translator.trans("flarum-flags.admin.settings.guidelines_url_label")},15).registerSetting({setting:"flarum-flags.can_flag_own",type:"boolean",label:r().translator.trans("flarum-flags.admin.settings.flag_own_posts_label")}).registerPermission({icon:"fas fa-flag",label:r().translator.trans("flarum-flags.admin.permissions.view_flags_label"),permission:"discussion.viewFlags"},"moderate",65).registerPermission({icon:"fas fa-flag",label:r().translator.trans("flarum-flags.admin.permissions.flag_posts_label"),permission:"discussion.flagPosts"},"reply",65)}))})(),module.exports=a})(); +(()=>{var e={n:a=>{var s=a&&a.__esModule?()=>a.default:()=>a;return e.d(s,{a:s}),s},d:(a,s)=>{for(var l in s)e.o(s,l)&&!e.o(a,l)&&Object.defineProperty(a,l,{enumerable:!0,get:s[l]})},o:(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},a={};(()=>{"use strict";e.r(a),e.d(a,{extend:()=>t});const s=flarum.reg.get("core","admin/app");var l=e.n(s);const r=flarum.reg.get("core","common/extenders"),t=[(new(e.n(r)().Admin)).setting((()=>({setting:"flarum-flags.guidelines_url",type:"text",label:l().translator.trans("flarum-flags.admin.settings.guidelines_url_label")})),15).setting((()=>({setting:"flarum-flags.can_flag_own",type:"boolean",label:l().translator.trans("flarum-flags.admin.settings.flag_own_posts_label")}))).permission((()=>({icon:"fas fa-flag",label:l().translator.trans("flarum-flags.admin.permissions.view_flags_label"),permission:"discussion.viewFlags"})),"moderate",65).permission((()=>({icon:"fas fa-flag",label:l().translator.trans("flarum-flags.admin.permissions.flag_posts_label"),permission:"discussion.flagPosts"})),"reply",65)];l().initializers.add("flarum-flags",(()=>{}))})(),module.exports=a})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/flags/js/dist/admin.js.map b/extensions/flags/js/dist/admin.js.map index e329aa4d5..0a1d77097 100644 --- a/extensions/flags/js/dist/admin.js.map +++ b/extensions/flags/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCC5D,qBAAqB,gBAAgB,KACnC,sBAAsB,gBAAgBW,gBAAgB,CACpDC,QAAS,8BACTC,KAAM,OACNC,MAAO,qBAAqB,qDAC3B,IAAIH,gBAAgB,CACrBC,QAAS,4BACTC,KAAM,UACNC,MAAO,qBAAqB,sDAC3BC,mBAAmB,CACpBC,KAAM,cACNF,MAAO,qBAAqB,mDAC5BG,WAAY,wBACX,WAAY,IAAIF,mBAAmB,CACpCC,KAAM,cACNF,MAAO,qBAAqB,mDAC5BG,WAAY,wBACX,QAAS,GAAG,G","sources":["webpack://@flarum/flags/webpack/bootstrap","webpack://@flarum/flags/webpack/runtime/compat get default export","webpack://@flarum/flags/webpack/runtime/define property getters","webpack://@flarum/flags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/flags/webpack/runtime/make namespace object","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/flags/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","import app from 'flarum/admin/app';\napp.initializers.add('flarum-flags', () => {\n app.extensionData.for('flarum-flags').registerSetting({\n setting: 'flarum-flags.guidelines_url',\n type: 'text',\n label: app.translator.trans('flarum-flags.admin.settings.guidelines_url_label')\n }, 15).registerSetting({\n setting: 'flarum-flags.can_flag_own',\n type: 'boolean',\n label: app.translator.trans('flarum-flags.admin.settings.flag_own_posts_label')\n }).registerPermission({\n icon: 'fas fa-flag',\n label: app.translator.trans('flarum-flags.admin.permissions.view_flags_label'),\n permission: 'discussion.viewFlags'\n }, 'moderate', 65).registerPermission({\n icon: 'fas fa-flag',\n label: app.translator.trans('flarum-flags.admin.permissions.flag_posts_label'),\n permission: 'discussion.flagPosts'\n }, 'reply', 65);\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","registerSetting","setting","type","label","registerPermission","icon","permission"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oBCE5D,IAAgB,I,MAAI,WAAeW,SAAQ,KAAM,CAC/CA,QAAS,8BACTC,KAAM,OACNC,MAAO,qBAAqB,uDAC1B,IAAIF,SAAQ,KAAM,CACpBA,QAAS,4BACTC,KAAM,UACNC,MAAO,qBAAqB,wDAC1BC,YAAW,KAAM,CACnBC,KAAM,cACNF,MAAO,qBAAqB,mDAC5BC,WAAY,0BACV,WAAY,IAAIA,YAAW,KAAM,CACnCC,KAAM,cACNF,MAAO,qBAAqB,mDAC5BC,WAAY,0BACV,QAAS,KChBb,qBAAqB,gBAAgB,Q","sources":["webpack://@flarum/flags/webpack/bootstrap","webpack://@flarum/flags/webpack/runtime/compat get default export","webpack://@flarum/flags/webpack/runtime/define property getters","webpack://@flarum/flags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/flags/webpack/runtime/make namespace object","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/flags/./src/admin/extend.tsx","webpack://@flarum/flags/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","import Extend from 'flarum/common/extenders';\nimport app from 'flarum/admin/app';\nexport default [new Extend.Admin().setting(() => ({\n setting: 'flarum-flags.guidelines_url',\n type: 'text',\n label: app.translator.trans('flarum-flags.admin.settings.guidelines_url_label')\n}), 15).setting(() => ({\n setting: 'flarum-flags.can_flag_own',\n type: 'boolean',\n label: app.translator.trans('flarum-flags.admin.settings.flag_own_posts_label')\n})).permission(() => ({\n icon: 'fas fa-flag',\n label: app.translator.trans('flarum-flags.admin.permissions.view_flags_label'),\n permission: 'discussion.viewFlags'\n}), 'moderate', 65).permission(() => ({\n icon: 'fas fa-flag',\n label: app.translator.trans('flarum-flags.admin.permissions.flag_posts_label'),\n permission: 'discussion.flagPosts'\n}), 'reply', 65)];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-flags', () => {\n // ...\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","setting","type","label","permission","icon"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/likes/js/dist/admin.js b/extensions/likes/js/dist/admin.js index 51f824390..b9a05234a 100644 --- a/extensions/likes/js/dist/admin.js +++ b/extensions/likes/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var e={n:r=>{var t=r&&r.__esModule?()=>r.default:()=>r;return e.d(t,{a:t}),t},d:(r,t)=>{for(var s in t)e.o(t,s)&&!e.o(r,s)&&Object.defineProperty(r,s,{enumerable:!0,get:t[s]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};(()=>{"use strict";e.r(r);const t=flarum.reg.get("core","admin/app");var s=e.n(t);s().initializers.add("flarum-likes",(()=>{s().extensionData.for("flarum-likes").registerPermission({icon:"far fa-thumbs-up",label:s().translator.trans("flarum-likes.admin.permissions.like_posts_label"),permission:"discussion.likePosts"},"reply").registerSetting({setting:"flarum-likes.like_own_post",type:"bool",label:s().translator.trans("flarum-likes.admin.settings.like_own_posts_label"),help:s().translator.trans("flarum-likes.admin.settings.like_own_posts_help")})}))})(),module.exports=r})(); +(()=>{var e={n:r=>{var t=r&&r.__esModule?()=>r.default:()=>r;return e.d(t,{a:t}),t},d:(r,t)=>{for(var s in t)e.o(t,s)&&!e.o(r,s)&&Object.defineProperty(r,s,{enumerable:!0,get:t[s]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};(()=>{"use strict";e.r(r),e.d(r,{extend:()=>u});const t=flarum.reg.get("core","admin/app");var s=e.n(t);const a=flarum.reg.get("core","common/extenders");var l=e.n(a);const n=flarum.reg.get("core","common/query/IGambit"),o=flarum.reg.get("core","common/app");var i=e.n(o);class m extends n.KeyValueGambit{key(){return i().translator.trans("flarum-likes.lib.gambits.posts.likedBy.key",{},!0)}hint(){return i().translator.trans("flarum-likes.lib.gambits.posts.likedBy.hint",{},!0)}filterKey(){return"likedBy"}}flarum.reg.add("flarum-likes","common/query/posts/LikedByGambit",m);const u=[(new(l().Search)).gambit("posts",m),(new(l().Admin)).permission((()=>({icon:"far fa-thumbs-up",label:s().translator.trans("flarum-likes.admin.permissions.like_posts_label"),permission:"discussion.likePosts"})),"reply").setting((()=>({setting:"flarum-likes.like_own_post",type:"bool",label:s().translator.trans("flarum-likes.admin.settings.like_own_posts_label"),help:s().translator.trans("flarum-likes.admin.settings.like_own_posts_help")})))];s().initializers.add("flarum-likes",(()=>{}))})(),module.exports=r})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/likes/js/dist/admin.js.map b/extensions/likes/js/dist/admin.js.map index 4575f2cc2..db3c94605 100644 --- a/extensions/likes/js/dist/admin.js.map +++ b/extensions/likes/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCC5D,qBAAqB,gBAAgB,KACnC,sBAAsB,gBAAgBW,mBAAmB,CACvDC,KAAM,mBACNC,MAAO,qBAAqB,mDAC5BC,WAAY,wBACX,SAASC,gBAAgB,CAC1BC,QAAS,6BACTC,KAAM,OACNJ,MAAO,qBAAqB,oDAC5BK,KAAM,qBAAqB,oDAC3B,G","sources":["webpack://@flarum/likes/webpack/bootstrap","webpack://@flarum/likes/webpack/runtime/compat get default export","webpack://@flarum/likes/webpack/runtime/define property getters","webpack://@flarum/likes/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/likes/webpack/runtime/make namespace object","webpack://@flarum/likes/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/likes/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","import app from 'flarum/admin/app';\napp.initializers.add('flarum-likes', () => {\n app.extensionData.for('flarum-likes').registerPermission({\n icon: 'far fa-thumbs-up',\n label: app.translator.trans('flarum-likes.admin.permissions.like_posts_label'),\n permission: 'discussion.likePosts'\n }, 'reply').registerSetting({\n setting: 'flarum-likes.like_own_post',\n type: 'bool',\n label: app.translator.trans('flarum-likes.admin.settings.like_own_posts_label'),\n help: app.translator.trans('flarum-likes.admin.settings.like_own_posts_help')\n });\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","registerPermission","icon","label","permission","registerSetting","setting","type","help"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,wBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,c,aCE7C,MAAMW,UAAsB,EAAAC,eACzCjB,MACE,OAAO,qBAAqB,6CAA8C,CAAC,GAAG,EAChF,CACAkB,OACE,OAAO,qBAAqB,8CAA+C,CAAC,GAAG,EACjF,CACAC,YACE,MAAO,SACT,EAEFL,OAAOC,IAAIK,IAAI,eAAgB,mCAAoCJ,GCXnE,MCCA,IDDgB,IAAI,aACnBK,OAAO,QAASL,ICAgB,IAAI,YAAeM,YAAW,KAAM,CACnEC,KAAM,mBACNC,MAAO,qBAAqB,mDAC5BF,WAAY,0BACV,SAASG,SAAQ,KAAM,CACzBA,QAAS,6BACTC,KAAM,OACNF,MAAO,qBAAqB,oDAC5BG,KAAM,qBAAqB,wDCT7B,qBAAqB,gBAAgB,Q","sources":["webpack://@flarum/likes/webpack/bootstrap","webpack://@flarum/likes/webpack/runtime/compat get default export","webpack://@flarum/likes/webpack/runtime/define property getters","webpack://@flarum/likes/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/likes/webpack/runtime/make namespace object","webpack://@flarum/likes/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/likes/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/likes/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/likes/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/likes/./src/common/query/posts/LikedByGambit.ts","webpack://@flarum/likes/./src/common/extend.ts","webpack://@flarum/likes/./src/admin/extend.tsx","webpack://@flarum/likes/./src/admin/index.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/app');","import { KeyValueGambit } from 'flarum/common/query/IGambit';\nimport app from 'flarum/common/app';\nexport default class LikedByGambit extends KeyValueGambit {\n key() {\n return app.translator.trans('flarum-likes.lib.gambits.posts.likedBy.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-likes.lib.gambits.posts.likedBy.hint', {}, true);\n }\n filterKey() {\n return 'likedBy';\n }\n}\nflarum.reg.add('flarum-likes', 'common/query/posts/LikedByGambit', LikedByGambit);","import Extend from 'flarum/common/extenders';\nimport LikedByGambit from './query/posts/LikedByGambit';\nexport default [new Extend.Search() //\n.gambit('posts', LikedByGambit)];","import Extend from 'flarum/common/extenders';\nimport app from 'flarum/admin/app';\nimport commonExtend from '../common/extend';\nexport default [...commonExtend, new Extend.Admin().permission(() => ({\n icon: 'far fa-thumbs-up',\n label: app.translator.trans('flarum-likes.admin.permissions.like_posts_label'),\n permission: 'discussion.likePosts'\n}), 'reply').setting(() => ({\n setting: 'flarum-likes.like_own_post',\n type: 'bool',\n label: app.translator.trans('flarum-likes.admin.settings.like_own_posts_label'),\n help: app.translator.trans('flarum-likes.admin.settings.like_own_posts_help')\n}))];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-likes', () => {\n // ...\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","LikedByGambit","KeyValueGambit","hint","filterKey","add","gambit","permission","icon","label","setting","type","help"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/lock/js/dist/admin.js b/extensions/lock/js/dist/admin.js index b87f29e27..73137d9c2 100644 --- a/extensions/lock/js/dist/admin.js +++ b/extensions/lock/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var e={n:r=>{var o=r&&r.__esModule?()=>r.default:()=>r;return e.d(o,{a:o}),o},d:(r,o)=>{for(var a in o)e.o(o,a)&&!e.o(r,a)&&Object.defineProperty(r,a,{enumerable:!0,get:o[a]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};(()=>{"use strict";e.r(r),e.d(r,{extend:()=>m});const o=flarum.reg.get("core","admin/app");var a=e.n(o);const t=flarum.reg.get("core","common/extenders");var s=e.n(t);const n=flarum.reg.get("core","common/query/IGambit"),l=flarum.reg.get("core","common/app");var i=e.n(l);class c extends n.BooleanGambit{key(){return i().translator.trans("flarum-lock.lib.gambits.discussions.locked.key",{},!0)}filterKey(){return"locked"}}flarum.reg.add("flarum-lock","common/query/discussions/LockedGambit",c);const m=[(new(s().Search)).gambit("discussions",c)];a().initializers.add("flarum-lock",(()=>{a().extensionData.for("flarum-lock").registerPermission({icon:"fas fa-lock",label:a().translator.trans("flarum-lock.admin.permissions.lock_discussions_label"),permission:"discussion.lock"},"moderate",95)}))})(),module.exports=r})(); +(()=>{var e={n:r=>{var o=r&&r.__esModule?()=>r.default:()=>r;return e.d(o,{a:o}),o},d:(r,o)=>{for(var a in o)e.o(o,a)&&!e.o(r,a)&&Object.defineProperty(r,a,{enumerable:!0,get:o[a]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};(()=>{"use strict";e.r(r),e.d(r,{extend:()=>m});const o=flarum.reg.get("core","admin/app");var a=e.n(o);const n=flarum.reg.get("core","common/extenders");var t=e.n(n);const s=flarum.reg.get("core","common/query/IGambit"),l=flarum.reg.get("core","common/app");var i=e.n(l);class c extends s.BooleanGambit{key(){return i().translator.trans("flarum-lock.lib.gambits.discussions.locked.key",{},!0)}filterKey(){return"locked"}}flarum.reg.add("flarum-lock","common/query/discussions/LockedGambit",c);const m=[(new(t().Search)).gambit("discussions",c),(new(t().Admin)).permission((()=>({icon:"fas fa-lock",label:a().translator.trans("flarum-lock.admin.permissions.lock_discussions_label"),permission:"discussion.lock"})),"moderate",95)];a().initializers.add("flarum-lock",(()=>{}))})(),module.exports=r})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/lock/js/dist/admin.js.map b/extensions/lock/js/dist/admin.js.map index 5d194a348..93e845d77 100644 --- a/extensions/lock/js/dist/admin.js.map +++ b/extensions/lock/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,wBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,c,aCE7C,MAAMW,UAAqB,EAAAC,cACxCjB,MACE,OAAO,qBAAqB,iDAAkD,CAAC,GAAG,EACpF,CACAkB,YACE,MAAO,QACT,EAEFJ,OAAOC,IAAII,IAAI,cAAe,wCAAyCH,GCRvE,UAAgB,IAAI,aACnBI,OAAO,cAAeJ,ICDvB,qBAAqB,eAAe,KAClC,sBAAsB,eAAeK,mBAAmB,CACtDC,KAAM,cACNC,MAAO,qBAAqB,wDAC5BC,WAAY,mBACX,WAAY,GAAG,G","sources":["webpack://@flarum/lock/webpack/bootstrap","webpack://@flarum/lock/webpack/runtime/compat get default export","webpack://@flarum/lock/webpack/runtime/define property getters","webpack://@flarum/lock/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/lock/webpack/runtime/make namespace object","webpack://@flarum/lock/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/lock/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/lock/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/lock/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/lock/./src/common/query/discussions/LockedGambit.ts","webpack://@flarum/lock/./src/common/extend.ts","webpack://@flarum/lock/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/app');","import { BooleanGambit } from 'flarum/common/query/IGambit';\nimport app from 'flarum/common/app';\nexport default class LockedGambit extends BooleanGambit {\n key() {\n return app.translator.trans('flarum-lock.lib.gambits.discussions.locked.key', {}, true);\n }\n filterKey() {\n return 'locked';\n }\n}\nflarum.reg.add('flarum-lock', 'common/query/discussions/LockedGambit', LockedGambit);","import Extend from 'flarum/common/extenders';\nimport LockedGambit from './query/discussions/LockedGambit';\nexport default [new Extend.Search() //\n.gambit('discussions', LockedGambit)];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-lock', () => {\n app.extensionData.for('flarum-lock').registerPermission({\n icon: 'fas fa-lock',\n label: app.translator.trans('flarum-lock.admin.permissions.lock_discussions_label'),\n permission: 'discussion.lock'\n }, 'moderate', 95);\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","LockedGambit","BooleanGambit","filterKey","add","gambit","registerPermission","icon","label","permission"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,wBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,c,aCE7C,MAAMW,UAAqB,EAAAC,cACxCjB,MACE,OAAO,qBAAqB,iDAAkD,CAAC,GAAG,EACpF,CACAkB,YACE,MAAO,QACT,EAEFJ,OAAOC,IAAII,IAAI,cAAe,wCAAyCH,GCRvE,MCCA,IDDgB,IAAI,aACnBI,OAAO,cAAeJ,ICAU,IAAI,YAAeK,YAAW,KAAM,CACnEC,KAAM,cACNC,MAAO,qBAAqB,wDAC5BF,WAAY,qBACV,WAAY,KCLhB,qBAAqB,eAAe,Q","sources":["webpack://@flarum/lock/webpack/bootstrap","webpack://@flarum/lock/webpack/runtime/compat get default export","webpack://@flarum/lock/webpack/runtime/define property getters","webpack://@flarum/lock/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/lock/webpack/runtime/make namespace object","webpack://@flarum/lock/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/lock/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/lock/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/lock/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/lock/./src/common/query/discussions/LockedGambit.ts","webpack://@flarum/lock/./src/common/extend.ts","webpack://@flarum/lock/./src/admin/extend.tsx","webpack://@flarum/lock/./src/admin/index.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/app');","import { BooleanGambit } from 'flarum/common/query/IGambit';\nimport app from 'flarum/common/app';\nexport default class LockedGambit extends BooleanGambit {\n key() {\n return app.translator.trans('flarum-lock.lib.gambits.discussions.locked.key', {}, true);\n }\n filterKey() {\n return 'locked';\n }\n}\nflarum.reg.add('flarum-lock', 'common/query/discussions/LockedGambit', LockedGambit);","import Extend from 'flarum/common/extenders';\nimport LockedGambit from './query/discussions/LockedGambit';\nexport default [new Extend.Search() //\n.gambit('discussions', LockedGambit)];","import Extend from 'flarum/common/extenders';\nimport app from 'flarum/admin/app';\nimport commonExtend from '../common/extend';\nexport default [...commonExtend, new Extend.Admin().permission(() => ({\n icon: 'fas fa-lock',\n label: app.translator.trans('flarum-lock.admin.permissions.lock_discussions_label'),\n permission: 'discussion.lock'\n}), 'moderate', 95)];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-lock', () => {\n // ...\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","LockedGambit","BooleanGambit","filterKey","add","gambit","permission","icon","label"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/mentions/js/dist/admin.js b/extensions/mentions/js/dist/admin.js index 7d2dd9a06..d82ca9034 100644 --- a/extensions/mentions/js/dist/admin.js +++ b/extensions/mentions/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t),e.d(t,{extend:()=>u});const r=flarum.reg.get("core","admin/app");var n=e.n(r);const a=flarum.reg.get("core","common/extenders");var o=e.n(a);const s=flarum.reg.get("core","common/query/IGambit"),m=flarum.reg.get("core","common/app");var i=e.n(m);class l extends s.KeyValueGambit{key(){return i().translator.trans("flarum-mentions.lib.gambits.posts.mentioned.key",{},!0)}hint(){return i().translator.trans("flarum-mentions.lib.gambits.posts.mentioned.hint",{},!0)}filterKey(){return"mentioned"}}flarum.reg.add("flarum-mentions","common/query/posts/MentionedGambit",l);const u=[(new(o().Search)).gambit("posts",l)];n().initializers.add("flarum-mentions",(()=>{n().extensionData.for("flarum-mentions").registerSetting({setting:"flarum-mentions.allow_username_format",type:"boolean",label:n().translator.trans("flarum-mentions.admin.settings.allow_username_format_label"),help:n().translator.trans("flarum-mentions.admin.settings.allow_username_format_text")}).registerPermission({permission:"mentionGroups",label:n().translator.trans("flarum-mentions.admin.permissions.mention_groups_label"),icon:"fas fa-at"},"start")}))})(),module.exports=t})(); +(()=>{var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t),e.d(t,{extend:()=>u});const n=flarum.reg.get("core","admin/app");var r=e.n(n);const a=flarum.reg.get("core","common/extenders");var o=e.n(a);const s=flarum.reg.get("core","common/query/IGambit"),m=flarum.reg.get("core","common/app");var i=e.n(m);class l extends s.KeyValueGambit{key(){return i().translator.trans("flarum-mentions.lib.gambits.posts.mentioned.key",{},!0)}hint(){return i().translator.trans("flarum-mentions.lib.gambits.posts.mentioned.hint",{},!0)}filterKey(){return"mentioned"}}flarum.reg.add("flarum-mentions","common/query/posts/MentionedGambit",l);const u=[(new(o().Search)).gambit("posts",l),(new(o().Admin)).setting((()=>({setting:"flarum-mentions.allow_username_format",type:"boolean",label:r().translator.trans("flarum-mentions.admin.settings.allow_username_format_label"),help:r().translator.trans("flarum-mentions.admin.settings.allow_username_format_text")}))).permission((()=>({permission:"mentionGroups",label:r().translator.trans("flarum-mentions.admin.permissions.mention_groups_label"),icon:"fas fa-at"})),"start")];r().initializers.add("flarum-mentions",(()=>{}))})(),module.exports=t})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/mentions/js/dist/admin.js.map b/extensions/mentions/js/dist/admin.js.map index 17ab3dee8..686daf8bb 100644 --- a/extensions/mentions/js/dist/admin.js.map +++ b/extensions/mentions/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,wBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,c,aCE7C,MAAMW,UAAwB,EAAAC,eAC3CjB,MACE,OAAO,qBAAqB,kDAAmD,CAAC,GAAG,EACrF,CACAkB,OACE,OAAO,qBAAqB,mDAAoD,CAAC,GAAG,EACtF,CACAC,YACE,MAAO,WACT,EAEFL,OAAOC,IAAIK,IAAI,kBAAmB,qCAAsCJ,GCXxE,MCDA,IDCgB,IAAI,aACnBK,OAAO,QAASL,IEDjB,qBAAqB,mBAAmB,KACtC,sBAAsB,mBAAmBM,gBAAgB,CACvDC,QAAS,wCACTC,KAAM,UACNC,MAAO,qBAAqB,8DAC5BC,KAAM,qBAAqB,+DAC1BC,mBAAmB,CACpBC,WAAY,gBACZH,MAAO,qBAAqB,0DAC5BI,KAAM,aACL,QAAQ,G","sources":["webpack://@flarum/mentions/webpack/bootstrap","webpack://@flarum/mentions/webpack/runtime/compat get default export","webpack://@flarum/mentions/webpack/runtime/define property getters","webpack://@flarum/mentions/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/mentions/webpack/runtime/make namespace object","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/mentions/./src/common/query/posts/MentionedGambit.ts","webpack://@flarum/mentions/./src/common/extend.ts","webpack://@flarum/mentions/./src/admin/extend.ts","webpack://@flarum/mentions/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/app');","import { KeyValueGambit } from 'flarum/common/query/IGambit';\nimport app from 'flarum/common/app';\nexport default class MentionedGambit extends KeyValueGambit {\n key() {\n return app.translator.trans('flarum-mentions.lib.gambits.posts.mentioned.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-mentions.lib.gambits.posts.mentioned.hint', {}, true);\n }\n filterKey() {\n return 'mentioned';\n }\n}\nflarum.reg.add('flarum-mentions', 'common/query/posts/MentionedGambit', MentionedGambit);","import Extend from 'flarum/common/extenders';\nimport MentionedGambit from './query/posts/MentionedGambit';\nexport default [new Extend.Search() //\n.gambit('posts', MentionedGambit)];","import commonExtend from '../common/extend';\nexport default [...commonExtend];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-mentions', () => {\n app.extensionData.for('flarum-mentions').registerSetting({\n setting: 'flarum-mentions.allow_username_format',\n type: 'boolean',\n label: app.translator.trans('flarum-mentions.admin.settings.allow_username_format_label'),\n help: app.translator.trans('flarum-mentions.admin.settings.allow_username_format_text')\n }).registerPermission({\n permission: 'mentionGroups',\n label: app.translator.trans('flarum-mentions.admin.permissions.mention_groups_label'),\n icon: 'fas fa-at'\n }, 'start');\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","MentionedGambit","KeyValueGambit","hint","filterKey","add","gambit","registerSetting","setting","type","label","help","registerPermission","permission","icon"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,wBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,c,aCE7C,MAAMW,UAAwB,EAAAC,eAC3CjB,MACE,OAAO,qBAAqB,kDAAmD,CAAC,GAAG,EACrF,CACAkB,OACE,OAAO,qBAAqB,mDAAoD,CAAC,GAAG,EACtF,CACAC,YACE,MAAO,WACT,EAEFL,OAAOC,IAAIK,IAAI,kBAAmB,qCAAsCJ,GCXxE,MCCA,IDDgB,IAAI,aACnBK,OAAO,QAASL,ICAgB,IAAI,YAAeM,SAAQ,KAAM,CAChEA,QAAS,wCACTC,KAAM,UACNC,MAAO,qBAAqB,8DAC5BC,KAAM,qBAAqB,iEACzBC,YAAW,KAAM,CACnBA,WAAY,gBACZF,MAAO,qBAAqB,0DAC5BG,KAAM,eACJ,UCVJ,qBAAqB,mBAAmB,Q","sources":["webpack://@flarum/mentions/webpack/bootstrap","webpack://@flarum/mentions/webpack/runtime/compat get default export","webpack://@flarum/mentions/webpack/runtime/define property getters","webpack://@flarum/mentions/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/mentions/webpack/runtime/make namespace object","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/mentions/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/mentions/./src/common/query/posts/MentionedGambit.ts","webpack://@flarum/mentions/./src/common/extend.ts","webpack://@flarum/mentions/./src/admin/extend.ts","webpack://@flarum/mentions/./src/admin/index.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/app');","import { KeyValueGambit } from 'flarum/common/query/IGambit';\nimport app from 'flarum/common/app';\nexport default class MentionedGambit extends KeyValueGambit {\n key() {\n return app.translator.trans('flarum-mentions.lib.gambits.posts.mentioned.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-mentions.lib.gambits.posts.mentioned.hint', {}, true);\n }\n filterKey() {\n return 'mentioned';\n }\n}\nflarum.reg.add('flarum-mentions', 'common/query/posts/MentionedGambit', MentionedGambit);","import Extend from 'flarum/common/extenders';\nimport MentionedGambit from './query/posts/MentionedGambit';\nexport default [new Extend.Search() //\n.gambit('posts', MentionedGambit)];","import Extend from 'flarum/common/extenders';\nimport app from 'flarum/admin/app';\nimport commonExtend from '../common/extend';\nexport default [...commonExtend, new Extend.Admin().setting(() => ({\n setting: 'flarum-mentions.allow_username_format',\n type: 'boolean',\n label: app.translator.trans('flarum-mentions.admin.settings.allow_username_format_label'),\n help: app.translator.trans('flarum-mentions.admin.settings.allow_username_format_text')\n})).permission(() => ({\n permission: 'mentionGroups',\n label: app.translator.trans('flarum-mentions.admin.permissions.mention_groups_label'),\n icon: 'fas fa-at'\n}), 'start')];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-mentions', () => {\n // ...\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","MentionedGambit","KeyValueGambit","hint","filterKey","add","gambit","setting","type","label","help","permission","icon"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/nicknames/js/dist/admin.js b/extensions/nicknames/js/dist/admin.js index d4d530bdd..f263f98b6 100644 --- a/extensions/nicknames/js/dist/admin.js +++ b/extensions/nicknames/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var e={n:n=>{var a=n&&n.__esModule?()=>n.default:()=>n;return e.d(a,{a}),a},d:(n,a)=>{for(var t in a)e.o(a,t)&&!e.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:a[t]})},o:(e,n)=>Object.prototype.hasOwnProperty.call(e,n),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},n={};(()=>{"use strict";e.r(n);const a=flarum.reg.get("core","admin/app");var t=e.n(a);const r=flarum.reg.get("core","common/components/Alert");var s=e.n(r);const i=flarum.reg.get("core","common/components/Link");var l=e.n(i);const o=flarum.reg.get("core","admin/components/BasicsPage");var c=e.n(o);const g=flarum.reg.get("core","common/utils/extractText");var u=e.n(g);const d=flarum.reg.get("core","common/extend");t().initializers.add("flarum-nicknames",(()=>{t().extensionData.for("flarum-nicknames").registerSetting((function(){if("nickname"!==t().data.settings.display_name_driver)return m("div",{className:"Form-group"},m(s(),{dismissible:!1},t().translator.trans("flarum-nicknames.admin.wrong_driver",{a:m(l(),{href:t().route("basics")})})))})).registerSetting({setting:"flarum-nicknames.set_on_registration",type:"boolean",label:t().translator.trans("flarum-nicknames.admin.settings.set_on_registration_label")}).registerSetting({setting:"flarum-nicknames.random_username",type:"boolean",label:t().translator.trans("flarum-nicknames.admin.settings.random_username_label"),help:t().translator.trans("flarum-nicknames.admin.settings.random_username_help")}).registerSetting({setting:"flarum-nicknames.unique",type:"boolean",label:t().translator.trans("flarum-nicknames.admin.settings.unique_label")}).registerSetting({setting:"flarum-nicknames.regex",type:"text",label:t().translator.trans("flarum-nicknames.admin.settings.regex_label")}).registerSetting({setting:"flarum-nicknames.min",type:"number",label:t().translator.trans("flarum-nicknames.admin.settings.min_label")}).registerSetting({setting:"flarum-nicknames.max",type:"number",label:t().translator.trans("flarum-nicknames.admin.settings.max_label")}).registerPermission({icon:"fas fa-user-tag",label:t().translator.trans("flarum-nicknames.admin.permissions.edit_own_nickname_label"),permission:"user.editOwnNickname"},"start"),(0,d.extend)(c().prototype,"driverLocale",(function(e){e.display_name.nickname=u()(t().translator.trans("flarum-nicknames.admin.basics.display_name_driver_options.nickname"))}))}))})(),module.exports=n})(); +(()=>{var e={n:n=>{var a=n&&n.__esModule?()=>n.default:()=>n;return e.d(a,{a}),a},d:(n,a)=>{for(var t in a)e.o(a,t)&&!e.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:a[t]})},o:(e,n)=>Object.prototype.hasOwnProperty.call(e,n),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},n={};(()=>{"use strict";e.r(n),e.d(n,{extend:()=>b});const a=flarum.reg.get("core","admin/app");var t=e.n(a);const r=flarum.reg.get("core","admin/components/BasicsPage");var s=e.n(r);const i=flarum.reg.get("core","common/utils/extractText");var o=e.n(i);const l=flarum.reg.get("core","common/extend"),c=flarum.reg.get("core","common/extenders");var u=e.n(c);const g=flarum.reg.get("core","common/components/Alert");var d=e.n(g);const f=flarum.reg.get("core","common/components/Link");var p=e.n(f);const b=[(new(u().Admin)).customSetting((function(){if("nickname"!==t().data.settings.display_name_driver)return m("div",{className:"Form-group"},m(d(),{dismissible:!1},t().translator.trans("flarum-nicknames.admin.wrong_driver",{a:m(p(),{href:t().route("basics")})})))})).setting((()=>({setting:"flarum-nicknames.set_on_registration",type:"boolean",label:t().translator.trans("flarum-nicknames.admin.settings.set_on_registration_label")}))).setting((()=>({setting:"flarum-nicknames.random_username",type:"boolean",label:t().translator.trans("flarum-nicknames.admin.settings.random_username_label"),help:t().translator.trans("flarum-nicknames.admin.settings.random_username_help")}))).setting((()=>({setting:"flarum-nicknames.unique",type:"boolean",label:t().translator.trans("flarum-nicknames.admin.settings.unique_label")}))).setting((()=>({setting:"flarum-nicknames.regex",type:"text",label:t().translator.trans("flarum-nicknames.admin.settings.regex_label")}))).setting((()=>({setting:"flarum-nicknames.min",type:"number",label:t().translator.trans("flarum-nicknames.admin.settings.min_label")}))).setting((()=>({setting:"flarum-nicknames.max",type:"number",label:t().translator.trans("flarum-nicknames.admin.settings.max_label")}))).permission((()=>({icon:"fas fa-user-tag",label:t().translator.trans("flarum-nicknames.admin.permissions.edit_own_nickname_label"),permission:"user.editOwnNickname"})),"start")];t().initializers.add("flarum-nicknames",(()=>{(0,l.extend)(s().prototype,"driverLocale",(function(e){e.display_name.nickname=o()(t().translator.trans("flarum-nicknames.admin.basics.display_name_driver_options.nickname"))}))}))})(),module.exports=n})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/nicknames/js/dist/admin.js.map b/extensions/nicknames/js/dist/admin.js.map index bcaff5a51..2526f0482 100644 --- a/extensions/nicknames/js/dist/admin.js.map +++ b/extensions/nicknames/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,IACzBH,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,2B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,0B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,+B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,4B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,iBCM5D,qBAAqB,oBAAoB,KACvC,sBAAsB,oBAAoBW,iBAAgB,WACxD,GAA8C,aAA1C,sCACJ,OAAOC,EAAE,MAAO,CACdC,UAAW,cACVD,EAAE,IAAO,CACVE,aAAa,GACZ,qBAAqB,sCAAuC,CAC7DtB,EAAGoB,EAAE,IAAM,CACTG,KAAM,UAAU,eAGtB,IAAGJ,gBAAgB,CACjBK,QAAS,uCACTC,KAAM,UACNC,MAAO,qBAAqB,+DAC3BP,gBAAgB,CACjBK,QAAS,mCACTC,KAAM,UACNC,MAAO,qBAAqB,yDAC5BC,KAAM,qBAAqB,0DAC1BR,gBAAgB,CACjBK,QAAS,0BACTC,KAAM,UACNC,MAAO,qBAAqB,kDAC3BP,gBAAgB,CACjBK,QAAS,yBACTC,KAAM,OACNC,MAAO,qBAAqB,iDAC3BP,gBAAgB,CACjBK,QAAS,uBACTC,KAAM,SACNC,MAAO,qBAAqB,+CAC3BP,gBAAgB,CACjBK,QAAS,uBACTC,KAAM,SACNC,MAAO,qBAAqB,+CAC3BE,mBAAmB,CACpBC,KAAM,kBACNH,MAAO,qBAAqB,8DAC5BI,WAAY,wBACX,UACH,IAAAC,QAAO,cAAsB,gBAAgB,SAAUC,GACrDA,EAAOC,aAAuB,SAAI,IAAY,qBAAqB,sEACrE,GAAE,G","sources":["webpack://@flarum/nicknames/webpack/bootstrap","webpack://@flarum/nicknames/webpack/runtime/compat get default export","webpack://@flarum/nicknames/webpack/runtime/define property getters","webpack://@flarum/nicknames/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/nicknames/webpack/runtime/make namespace object","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/components/Alert')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'admin/components/BasicsPage')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/nicknames/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Alert');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Link');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/BasicsPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","import app from 'flarum/admin/app';\nimport Alert from 'flarum/common/components/Alert';\nimport Link from 'flarum/common/components/Link';\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\nimport extractText from 'flarum/common/utils/extractText';\nimport { extend } from 'flarum/common/extend';\napp.initializers.add('flarum-nicknames', () => {\n app.extensionData.for('flarum-nicknames').registerSetting(function () {\n if (app.data.settings.display_name_driver === 'nickname') return;\n return m(\"div\", {\n className: \"Form-group\"\n }, m(Alert, {\n dismissible: false\n }, app.translator.trans('flarum-nicknames.admin.wrong_driver', {\n a: m(Link, {\n href: app.route('basics')\n })\n })));\n }).registerSetting({\n setting: 'flarum-nicknames.set_on_registration',\n type: 'boolean',\n label: app.translator.trans('flarum-nicknames.admin.settings.set_on_registration_label')\n }).registerSetting({\n setting: 'flarum-nicknames.random_username',\n type: 'boolean',\n label: app.translator.trans('flarum-nicknames.admin.settings.random_username_label'),\n help: app.translator.trans('flarum-nicknames.admin.settings.random_username_help')\n }).registerSetting({\n setting: 'flarum-nicknames.unique',\n type: 'boolean',\n label: app.translator.trans('flarum-nicknames.admin.settings.unique_label')\n }).registerSetting({\n setting: 'flarum-nicknames.regex',\n type: 'text',\n label: app.translator.trans('flarum-nicknames.admin.settings.regex_label')\n }).registerSetting({\n setting: 'flarum-nicknames.min',\n type: 'number',\n label: app.translator.trans('flarum-nicknames.admin.settings.min_label')\n }).registerSetting({\n setting: 'flarum-nicknames.max',\n type: 'number',\n label: app.translator.trans('flarum-nicknames.admin.settings.max_label')\n }).registerPermission({\n icon: 'fas fa-user-tag',\n label: app.translator.trans('flarum-nicknames.admin.permissions.edit_own_nickname_label'),\n permission: 'user.editOwnNickname'\n }, 'start');\n extend(BasicsPage.prototype, 'driverLocale', function (locale) {\n locale.display_name['nickname'] = extractText(app.translator.trans('flarum-nicknames.admin.basics.display_name_driver_options.nickname'));\n });\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","registerSetting","m","className","dismissible","href","setting","type","label","help","registerPermission","icon","permission","extend","locale","display_name"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,IACzBH,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,+B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,4B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,iBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,2B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,0B,aCI5D,UAAgB,IAAI,YAAeW,eAAc,WAC/C,GAA8C,aAA1C,sCACJ,OAAOC,EAAE,MAAO,CACdC,UAAW,cACVD,EAAE,IAAO,CACVE,aAAa,GACZ,qBAAqB,sCAAuC,CAC7DtB,EAAGoB,EAAE,IAAM,CACTG,KAAM,UAAU,eAGtB,IAAGC,SAAQ,KAAM,CACfA,QAAS,uCACTC,KAAM,UACNC,MAAO,qBAAqB,iEAC1BF,SAAQ,KAAM,CAChBA,QAAS,mCACTC,KAAM,UACNC,MAAO,qBAAqB,yDAC5BC,KAAM,qBAAqB,4DACzBH,SAAQ,KAAM,CAChBA,QAAS,0BACTC,KAAM,UACNC,MAAO,qBAAqB,oDAC1BF,SAAQ,KAAM,CAChBA,QAAS,yBACTC,KAAM,OACNC,MAAO,qBAAqB,mDAC1BF,SAAQ,KAAM,CAChBA,QAAS,uBACTC,KAAM,SACNC,MAAO,qBAAqB,iDAC1BF,SAAQ,KAAM,CAChBA,QAAS,uBACTC,KAAM,SACNC,MAAO,qBAAqB,iDAC1BE,YAAW,KAAM,CACnBC,KAAM,kBACNH,MAAO,qBAAqB,8DAC5BE,WAAY,0BACV,UCvCJ,qBAAqB,oBAAoB,MACvC,IAAAE,QAAO,cAAsB,gBAAgB,SAAUC,GACrDA,EAAOC,aAAuB,SAAI,IAAY,qBAAqB,sEACrE,GAAE,G","sources":["webpack://@flarum/nicknames/webpack/bootstrap","webpack://@flarum/nicknames/webpack/runtime/compat get default export","webpack://@flarum/nicknames/webpack/runtime/define property getters","webpack://@flarum/nicknames/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/nicknames/webpack/runtime/make namespace object","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'admin/components/BasicsPage')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/components/Alert')\"","webpack://@flarum/nicknames/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/nicknames/./src/admin/extend.tsx","webpack://@flarum/nicknames/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/BasicsPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Alert');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Link');","import Extend from 'flarum/common/extenders';\nimport app from 'flarum/admin/app';\nimport Alert from 'flarum/common/components/Alert';\nimport Link from 'flarum/common/components/Link';\nexport default [new Extend.Admin().customSetting(function () {\n if (app.data.settings.display_name_driver === 'nickname') return;\n return m(\"div\", {\n className: \"Form-group\"\n }, m(Alert, {\n dismissible: false\n }, app.translator.trans('flarum-nicknames.admin.wrong_driver', {\n a: m(Link, {\n href: app.route('basics')\n })\n })));\n}).setting(() => ({\n setting: 'flarum-nicknames.set_on_registration',\n type: 'boolean',\n label: app.translator.trans('flarum-nicknames.admin.settings.set_on_registration_label')\n})).setting(() => ({\n setting: 'flarum-nicknames.random_username',\n type: 'boolean',\n label: app.translator.trans('flarum-nicknames.admin.settings.random_username_label'),\n help: app.translator.trans('flarum-nicknames.admin.settings.random_username_help')\n})).setting(() => ({\n setting: 'flarum-nicknames.unique',\n type: 'boolean',\n label: app.translator.trans('flarum-nicknames.admin.settings.unique_label')\n})).setting(() => ({\n setting: 'flarum-nicknames.regex',\n type: 'text',\n label: app.translator.trans('flarum-nicknames.admin.settings.regex_label')\n})).setting(() => ({\n setting: 'flarum-nicknames.min',\n type: 'number',\n label: app.translator.trans('flarum-nicknames.admin.settings.min_label')\n})).setting(() => ({\n setting: 'flarum-nicknames.max',\n type: 'number',\n label: app.translator.trans('flarum-nicknames.admin.settings.max_label')\n})).permission(() => ({\n icon: 'fas fa-user-tag',\n label: app.translator.trans('flarum-nicknames.admin.permissions.edit_own_nickname_label'),\n permission: 'user.editOwnNickname'\n}), 'start')];","import app from 'flarum/admin/app';\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\nimport extractText from 'flarum/common/utils/extractText';\nimport { extend } from 'flarum/common/extend';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-nicknames', () => {\n extend(BasicsPage.prototype, 'driverLocale', function (locale) {\n locale.display_name['nickname'] = extractText(app.translator.trans('flarum-nicknames.admin.basics.display_name_driver_options.nickname'));\n });\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","customSetting","m","className","dismissible","href","setting","type","label","help","permission","icon","extend","locale","display_name"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/package-manager/js/dist-typings/extend.d.ts b/extensions/package-manager/js/dist-typings/extend.d.ts new file mode 100644 index 000000000..f83ce3204 --- /dev/null +++ b/extensions/package-manager/js/dist-typings/extend.d.ts @@ -0,0 +1,2 @@ +declare const _default: any[]; +export default _default; diff --git a/extensions/package-manager/js/dist-typings/index.d.ts b/extensions/package-manager/js/dist-typings/index.d.ts index cb0ff5c3b..6d2293da0 100644 --- a/extensions/package-manager/js/dist-typings/index.d.ts +++ b/extensions/package-manager/js/dist-typings/index.d.ts @@ -1 +1 @@ -export {}; +export { default as extend } from './extend'; diff --git a/extensions/package-manager/js/dist/admin.js b/extensions/package-manager/js/dist/admin.js index eda56557a..7d91104a4 100755 --- a/extensions/package-manager/js/dist/admin.js +++ b/extensions/package-manager/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var t={647:function(t){t.exports=function(){"use strict";var t,e,a=1e3,n=6e4,s=36e5,r=864e5,o=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,i=31536e6,l=2592e6,m=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,u={years:i,months:l,days:r,hours:s,minutes:n,seconds:a,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof b},d=function(t,e,a){return new b(t,a,e.$l)},g=function(t){return e.p(t)+"s"},p=function(t){return t<0},h=function(t){return p(t)?Math.ceil(t):Math.floor(t)},f=function(t){return Math.abs(t)},x=function(t,e){return t?p(t)?{negative:!0,format:""+f(t)+e}:{negative:!1,format:""+t+e}:{negative:!1,format:""}},b=function(){function p(t,e,a){var n=this;if(this.$d={},this.$l=a,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),e)return d(t*u[g(e)],this);if("number"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if("object"==typeof t)return Object.keys(t).forEach((function(e){n.$d[g(e)]=t[e]})),this.calMilliseconds(),this;if("string"==typeof t){var s=t.match(m);if(s){var r=s.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var f=p.prototype;return f.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(e,a){return e+(t.$d[a]||0)*u[a]}),0)},f.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=h(t/i),t%=i,this.$d.months=h(t/l),t%=l,this.$d.days=h(t/r),t%=r,this.$d.hours=h(t/s),t%=s,this.$d.minutes=h(t/n),t%=n,this.$d.seconds=h(t/a),t%=a,this.$d.milliseconds=t},f.toISOString=function(){var t=x(this.$d.years,"Y"),e=x(this.$d.months,"M"),a=+this.$d.days||0;this.$d.weeks&&(a+=7*this.$d.weeks);var n=x(a,"D"),s=x(this.$d.hours,"H"),r=x(this.$d.minutes,"M"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3);var i=x(o,"S"),l=t.negative||e.negative||n.negative||s.negative||r.negative||i.negative,m=s.format||r.format||i.format?"T":"",u=(l?"-":"")+"P"+t.format+e.format+n.format+m+s.format+r.format+i.format;return"P"===u||"-P"===u?"P0D":u},f.toJSON=function(){return this.toISOString()},f.format=function(t){var a=t||"YYYY-MM-DDTHH:mm:ss",n={Y:this.$d.years,YY:e.s(this.$d.years,2,"0"),YYYY:e.s(this.$d.years,4,"0"),M:this.$d.months,MM:e.s(this.$d.months,2,"0"),D:this.$d.days,DD:e.s(this.$d.days,2,"0"),H:this.$d.hours,HH:e.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:e.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:e.s(this.$d.seconds,2,"0"),SSS:e.s(this.$d.milliseconds,3,"0")};return a.replace(o,(function(t,e){return e||String(n[t])}))},f.as=function(t){return this.$ms/u[g(t)]},f.get=function(t){var e=this.$ms,a=g(t);return"milliseconds"===a?e%=1e3:e="weeks"===a?h(e/u[a]):this.$d[a],0===e?0:e},f.add=function(t,e,a){var n;return n=e?t*u[g(e)]:c(t)?t.$ms:d(t,this).$ms,d(this.$ms+n*(a?-1:1),this)},f.subtract=function(t,e){return this.add(t,e,!0)},f.locale=function(t){var e=this.clone();return e.$l=t,e},f.clone=function(){return d(this.$ms,this)},f.humanize=function(e){return t().add(this.$ms,"ms").locale(this.$l).fromNow(!e)},f.milliseconds=function(){return this.get("milliseconds")},f.asMilliseconds=function(){return this.as("milliseconds")},f.seconds=function(){return this.get("seconds")},f.asSeconds=function(){return this.as("seconds")},f.minutes=function(){return this.get("minutes")},f.asMinutes=function(){return this.as("minutes")},f.hours=function(){return this.get("hours")},f.asHours=function(){return this.as("hours")},f.days=function(){return this.get("days")},f.asDays=function(){return this.as("days")},f.weeks=function(){return this.get("weeks")},f.asWeeks=function(){return this.as("weeks")},f.months=function(){return this.get("months")},f.asMonths=function(){return this.as("months")},f.years=function(){return this.get("years")},f.asYears=function(){return this.as("years")},p}();return function(a,n,s){t=s,e=s().$utils(),s.duration=function(t,e){var a=s.locale();return d(t,{$l:a},e)},s.isDuration=c;var r=n.prototype.add,o=n.prototype.subtract;n.prototype.add=function(t,e){return c(t)&&(t=t.asMilliseconds()),r.bind(this)(t,e)},n.prototype.subtract=function(t,e){return c(t)&&(t=t.asMilliseconds()),o.bind(this)(t,e)}}}()}},e={};function a(n){var s=e[n];if(void 0!==s)return s.exports;var r=e[n]={exports:{}};return t[n].call(r.exports,r,r.exports,a),r.exports}a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";a.r(n);const t=flarum.reg.get("core","common/extend"),e=flarum.reg.get("core","admin/app");var s=a.n(e);const r=flarum.reg.get("core","admin/components/ExtensionPage");var o=a.n(r);const i=flarum.reg.get("core","common/components/Button");var l=a.n(i);const u=flarum.reg.get("core","admin/components/LoadingModal");var c=a.n(u);const d=flarum.reg.get("core","admin/utils/isExtensionEnabled");var g=a.n(d);const p=flarum.reg.get("core","common/Component");var h=a.n(p);const f=flarum.reg.get("core","common/components/LoadingIndicator");var x=a.n(f);const b=flarum.reg.get("core","common/components/Tooltip");var y=a.n(b);const v=flarum.reg.get("core","common/components/Icon");var _=a.n(v);const k=flarum.reg.get("core","common/utils/ItemList");var N=a.n(k);const M=flarum.reg.get("core","common/utils/extractText");var w=a.n(M);const E=flarum.reg.get("core","common/components/Link");var S=a.n(E);const U=flarum.reg.get("core","common/utils/classList");var B=a.n(U);class q extends(h()){view(t){const{className:e,type:a,...n}=this.attrs;return m("span",Object.assign({className:B()(["Label","Label--".concat(this.attrs.type),e])},n),t.children)}}flarum.reg.add("flarum-extension-manager","admin/components/Label",q);const j=flarum.reg.get("core","common/components/Modal");var T=a.n(j);class $ extends(T()){className(){return"Modal--large QuickModal"}title(){return s().translator.trans("flarum-extension-manager.admin.sections.queue.operations.".concat(this.attrs.task.operation()))}content(){return m("div",{className:"Modal-body"},m("div",{className:"TaskOutputModal-data"},"failure"===this.attrs.task.status()&&m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.guessed_cause")),m("div",{className:"FormControl TaskOutputModal-data-guessed-cause"},this.attrs.task.guessedCause()&&s().translator.trans("flarum-extension-manager.admin.exceptions.guessed_cause."+this.attrs.task.guessedCause())||s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.cause_unknown"))),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.command")),m("div",{className:"FormControl TaskOutputModal-data-command"},m("code",null,"$ composer ",this.attrs.task.command()))),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.output")),m("div",{className:"FormControl TaskOutputModal-data-output"},m("code",null,m("pre",null,this.attrs.task.output()))))))}}flarum.reg.add("flarum-extension-manager","admin/components/TaskOutputModal",$);var C=a(647),P=a.n(C);function F(t,e){dayjs.extend(P());const a=dayjs(e).diff(t);return dayjs.duration(a).humanize()}flarum.reg.add("flarum-extension-manager","admin/utils/humanDuration",F);class L extends(h()){view(){return m("nav",{className:"Pagination UserListPage-gridPagination"},m(l(),{disabled:!this.attrs.list.hasPrev()||s().extensionManager.control.isLoading(),title:s().translator.trans("core.admin.users.pagination.back_button"),onclick:()=>this.attrs.list.prev(),icon:"fas fa-chevron-left",className:"Button Button--icon UserListPage-backBtn"}),m("span",{className:"UserListPage-pageNumber"},s().translator.trans("core.admin.users.pagination.page_counter",{current:this.attrs.list.pageNumber()+1,total:this.attrs.list.getTotalPages()})),m(l(),{disabled:!this.attrs.list.hasNext()||s().extensionManager.control.isLoading(),title:s().translator.trans("core.admin.users.pagination.next_button"),onclick:()=>this.attrs.list.next(),icon:"fas fa-chevron-right",className:"Button Button--icon UserListPage-nextBtn"}))}}flarum.reg.add("flarum-extension-manager","admin/components/Pagination",L);class O extends(h()){oninit(t){super.oninit(t),s().extensionManager.queue.load()}view(){return m("section",{id:"ExtensionManager-queueSection",className:"ExtensionPage-permissions ExtensionManager-queueSection"},m("div",{className:"ExtensionPage-permissions-header ExtensionManager-queueSection-header"},m("div",{className:"container"},m("h2",{className:"ExtensionTitle"},s().translator.trans("flarum-extension-manager.admin.sections.queue.title")),m(l(),{className:"Button Button--icon",icon:"fas fa-sync-alt",onclick:()=>s().extensionManager.queue.load(),"aria-label":s().translator.trans("flarum-extension-manager.admin.sections.queue.refresh"),disabled:s().extensionManager.control.isLoading()}))),m("div",{className:"container"},this.queueTable()))}columns(){const t=new(N());return t.add("operation",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.operation")),content:t=>m("div",{className:"ExtensionManager-queueTable-operation"},m("span",{className:"ExtensionManager-queueTable-operation-icon"},this.operationIcon(t.operation())),m("span",{className:"ExtensionManager-queueTable-operation-name"},s().translator.trans("flarum-extension-manager.admin.sections.queue.operations.".concat(t.operation()))))},80),t.add("package",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.package")),content:t=>{var e;const a=s().data.extensions[null==(e=t.package())?void 0:e.replace(/(\/flarum-|\/flarum-ext-|\/)/g,"-")];return a?m(S(),{className:"ExtensionManager-queueTable-package",href:s().route("extension",{id:a.id})},m("div",{className:"ExtensionManager-queueTable-package-icon ExtensionIcon",style:a.icon},!!a.icon&&m(_(),{name:a.icon.name})),m("div",{className:"ExtensionManager-queueTable-package-details"},m("span",{className:"ExtensionManager-queueTable-package-title"},a.extra["flarum-extension"].title),m("span",{className:"ExtensionManager-queueTable-package-name"},t.package()))):t.package()}},75),t.add("status",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.status")),content:t=>m("[",null,m(q,{className:"ExtensionManager-queueTable-status",type:{running:"neutral",failure:"error",pending:"warning",success:"success"}[t.status()]},s().translator.trans("flarum-extension-manager.admin.sections.queue.statuses.".concat(t.status()))),["pending","running"].includes(t.status())&&m(x(),{size:"small",display:"inline"}))},70),t.add("elapsedTime",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.elapsed_time")),content:t=>t.startedAt()&&t.finishedAt()?m(y(),{text:"".concat(dayjs(t.startedAt()).format("LL LTS")," ").concat(dayjs(t.finishedAt()).format("LL LTS"))},m("span",null,F(t.startedAt(),t.finishedAt()))):s().translator.trans("flarum-extension-manager.admin.sections.queue.task_just_started")},65),t.add("memoryUsed",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.peak_memory_used")),content:t=>m("span",null,t.peakMemoryUsed())},60),t.add("details",{label:w()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.details")),content:t=>m(l(),{className:"Button Button--icon Table-controls-item",icon:"fas fa-file-alt","aria-label":s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.details"),onclick:()=>s().modal.show($,{task:t}),disabled:["pending","running"].includes(t.status())}),className:"Table-controls"},55),t}queueTable(){const t=s().extensionManager.queue.getItems();if(!t)return m(x(),null);if(t&&!t.length)return m("h3",{className:"ExtensionPage-subHeader"},s().translator.trans("flarum-extension-manager.admin.sections.queue.none"));const e=this.columns();return m("[",null,m("table",{className:"Table ExtensionManager-queueTable"},m("thead",null,m("tr",null,e.toArray().map(((t,e)=>m("th",{key:e},t.label))))),m("tbody",null,t.map(((t,a)=>m("tr",{key:a},e.toArray().map(((e,a)=>{const{label:n,content:s,...r}=e;return m("td",Object.assign({key:a},r),s(t))}))))))),m(L,{list:s().extensionManager.queue}))}operationIcon(t){return m(_(),{name:{update_check:"fas fa-sync-alt",update_major:"fas fa-play",update_minor:"fas fa-play",update_global:"fas fa-play",extension_install:"fas fa-download",extension_remove:"fas fa-times",extension_update:"fas fa-arrow-alt-circle-up",why_not:"fas fa-exclamation-circle"}[t]})}}flarum.reg.add("flarum-extension-manager","admin/components/QueueSection",O);const A=flarum.reg.get("core","common/components/Alert");var D=a.n(A);function I(t){return I="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},I(t)}function Y(t,e,a){return(e=function(t){var e=function(t,e){if("object"!==I(t)||null===t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var n=a.call(t,e);if("object"!==I(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===I(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}const R=flarum.reg.get("core","common/utils/Stream");var G=a.n(R);class W extends(h()){constructor(){super(...arguments),Y(this,"packageName",void 0)}oninit(t){super.oninit(t),this.packageName=G()("")}view(){return m("div",{className:"Form-group ExtensionManager-installer"},m("label",{htmlFor:"install-extension"},s().translator.trans("flarum-extension-manager.admin.extensions.install")),m("div",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.extensions.install_help",{extiverse:m("a",{href:"https://extiverse.com"},"extiverse.com"),semantic_link:m("a",{href:"https://devhints.io/semver"}),code:m("code",null)})),m("div",{className:"FormControl-container"},m("input",{className:"FormControl",id:"install-extension",placeholder:"vendor/package-name",bidi:this.packageName}),m(l(),{className:"Button",icon:"fas fa-download",onclick:this.onsubmit.bind(this),loading:s().extensionManager.control.isLoading("extension-install"),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.extensions.proceed"))))}data(){return{package:this.packageName()}}onsubmit(){s().extensionManager.control.requirePackage(this.data())}}flarum.reg.add("flarum-extension-manager","admin/components/Installer",W);const H=flarum.reg.get("core","common/helpers/humanTime");var Q=a.n(H);function J(t){s().extensionManager.control.setLoading(null);const e=t.response.errors[0];if(!["composer_command_failure","extension_already_installed","extension_not_installed"].includes(e.code))throw t;switch(s().alerts.clear(),e.code){case"composer_command_failure":e.guessed_cause?(s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.guessed_cause.".concat(e.guessed_cause))),s().modal.close()):s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.composer_command_failure"));break;case"extension_already_installed":s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.extension_already_installed")),s().modal.close();break;case"extension_not_installed":s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.extension_not_installed")),s().modal.close()}}class V extends(T()){constructor(){super(...arguments),Y(this,"loading",!0),Y(this,"whyNot",null)}className(){return"Modal--large WhyNotModal"}title(){return s().translator.trans("flarum-extension-manager.admin.why_not_modal.title")}oncreate(t){super.oncreate(t),this.requestWhyNot()}content(){return m("div",{className:"Modal-body"},this.loading?m(x(),null):m("pre",{className:"WhyNotModal-contents"},this.whyNot))}requestWhyNot(){s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/why-not"),body:{data:{package:this.attrs.package}}}).then((t=>{this.loading=!1,this.whyNot=t.data.reason,m.redraw()})).catch(J)}}flarum.reg.add("flarum-extension-manager","admin/components/WhyNotModal",V);const Z=flarum.reg.get("core","common/components/Dropdown");var z=a.n(Z);class K extends(h()){view(t){var e;const{extension:a,updates:n,onClickUpdate:r,whyNotWarning:o,isCore:i,isDanger:u}=this.attrs,c=null!=(e=n["latest-minor"])?e:n["latest-major"]&&!i?n["latest-major"]:null;return m("div",{className:B()({"ExtensionManager-extension":!0,"ExtensionManager-extension--core":i,"ExtensionManager-extension--danger":u})},m("div",{className:"ExtensionManager-extension-icon ExtensionIcon",style:a.icon},a.icon?m(_(),{name:a.icon.name}):""),m("div",{className:"ExtensionManager-extension-info"},m("div",{className:"ExtensionManager-extension-name"},a.extra["flarum-extension"].title),m("div",{className:"ExtensionManager-extension-version"},m("span",{className:"ExtensionManager-extension-version-current"},this.version(n.version)),c?m(q,{className:"ExtensionManager-extension-version-latest",type:n["latest-minor"]?"success":"warning"},this.version(c)):null)),m("div",{className:"ExtensionManager-extension-controls"},r&&"function"==typeof r?m(y(),{text:s().translator.trans("flarum-extension-manager.admin.extensions.update")},m(l(),{icon:"fas fa-arrow-alt-circle-up",className:"Button Button--icon Button--flat",onclick:r,"aria-label":s().translator.trans("flarum-extension-manager.admin.extensions.update")})):r?m(z(),{buttonClassName:"Button Button--icon Button--flat",icon:"fas fa-arrow-alt-circle-up",label:s().translator.trans("flarum-extension-manager.admin.extensions.update")},m(l(),{icon:"fas fa-arrow-alt-circle-up",className:"Button",onclick:r.soft},s().translator.trans("flarum-extension-manager.admin.extensions.update_soft_label")),m(l(),{icon:"fas fa-arrow-alt-circle-up",className:"Button",onclick:r.hard,disabled:!n["direct-dependency"]},s().translator.trans("flarum-extension-manager.admin.extensions.update_hard_label"))):null,o?m(y(),{text:s().translator.trans("flarum-extension-manager.admin.extensions.check_why_it_failed_updating")},m(l(),{icon:"fas fa-exclamation-circle",className:"Button Button--icon Button--flat Button--danger",onclick:()=>s().modal.show(V,{package:a.name}),"aria-label":s().translator.trans("flarum-extension-manager.admin.extensions.check_why_it_failed_updating")})):null))}version(t){return"v"===t.charAt(0)?t.substring(1):t}}flarum.reg.add("flarum-extension-manager","admin/components/ExtensionItem",K);class X extends(h()){constructor(){super(...arguments),Y(this,"updateState",void 0)}oninit(t){super.oninit(t),this.updateState=this.attrs.updateState}view(){return m("div",{className:B()("Form-group Form-group--danger ExtensionManager-majorUpdate",{"ExtensionManager-majorUpdate--failed":"failure"===this.updateState.status,"ExtensionManager-majorUpdate--incompatibleExtensions":this.updateState.incompatibleExtensions.length})},m("img",{alt:"flarum logo",src:s().forum.attribute("baseUrl")+"/assets/extensions/flarum-extension-manager/flarum.svg"}),m("label",null,s().translator.trans("flarum-extension-manager.admin.major_updater.title",{version:this.attrs.coreUpdate["latest-major"]})),m("p",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.major_updater.description")),m("div",{className:"ExtensionManager-updaterControls"},m(y(),{text:s().translator.trans("flarum-extension-manager.admin.major_updater.dry_run_help")},m(l(),{className:"Button",icon:"fas fa-vial",onclick:this.update.bind(this,!0),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.major_updater.dry_run"))),m(l(),{className:"Button Button--danger",icon:"fas fa-play",onclick:this.update.bind(this,!1),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.major_updater.update"))),this.updateState.incompatibleExtensions.length?m("div",{className:"ExtensionManager-majorUpdate-incompatibleExtensions ExtensionManager-extensions-grid"},this.updateState.incompatibleExtensions.map((t=>m(K,{extension:s().data.extensions[t.replace("flarum-","").replace("flarum-ext-","").replace("/","-")],updates:{},onClickUpdate:null,isDanger:!0})))):null,"failure"===this.updateState.status?m(D(),{type:"error",className:"ExtensionManager-majorUpdate-failure",dismissible:!1,controls:[m(l(),{className:"Button Button--text ExtensionManager-majorUpdate-failure-details",icon:"fas fa-question-circle",onclick:()=>s().modal.show(V,{package:"flarum/core"})},s().translator.trans("flarum-extension-manager.admin.major_updater.failure.why"))]},m("p",{className:"ExtensionManager-majorUpdate-failure-desc"},s().translator.trans("flarum-extension-manager.admin.major_updater.failure.desc"))):null)}update(t){s().extensionManager.control.majorUpdate({dryRun:t})}}flarum.reg.add("flarum-extension-manager","admin/components/MajorUpdater",X);class tt extends(h()){view(){const t=s().extensionManager.control.coreUpdate;return[m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.updater.updater_title")),m("div",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.updater.updater_help")),this.lastUpdateCheckView(),m("div",{className:"ExtensionManager-updaterControls"},this.controlItems().toArray()),this.availableUpdatesView()),t&&t.package["latest-major"]?m(X,{coreUpdate:t.package,updateState:s().extensionManager.control.lastUpdateRun.major}):null]}lastUpdateCheckView(){var t;return(null==(t=s().extensionManager.control.lastUpdateCheck)?void 0:t.checkedAt)&&m("p",{className:"ExtensionManager-lastUpdatedAt"},m("span",{className:"ExtensionManager-lastUpdatedAt-label"},s().translator.trans("flarum-extension-manager.admin.updater.last_update_checked_at")),m("span",{className:"ExtensionManager-lastUpdatedAt-value"},Q()(s().extensionManager.control.lastUpdateCheck.checkedAt)))||null}availableUpdatesView(){const t=s().extensionManager.control;if(s().extensionManager.control.isLoading("check")||s().extensionManager.control.isLoading("global-update"))return m("div",{className:"ExtensionManager-extensions"},m(x(),null));const e=t.coreUpdate&&t.coreUpdate.package["latest-minor"];return t.extensionUpdates.length||e?m("div",{className:"ExtensionManager-extensions"},m("div",{className:"ExtensionManager-extensions-grid"},e?m(K,{extension:t.coreUpdate.extension,updates:t.coreUpdate.package,isCore:!0,onClickUpdate:()=>t.updateCoreMinor(),whyNotWarning:t.lastUpdateRun.limitedPackages().includes("flarum/core")}):null,t.extensionUpdates.map((e=>m(K,{extension:e,updates:t.packageUpdates[e.id],onClickUpdate:{soft:()=>t.updateExtension(e,"soft"),hard:()=>t.updateExtension(e,"hard")},whyNotWarning:t.lastUpdateRun.limitedPackages().includes(e.name)}))))):m("div",{className:"ExtensionManager-extensions"},m("span",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.updater.up_to_date")))}controlItems(){const t=new(N());return t.add("updateCheck",m(l(),{className:"Button",icon:"fas fa-sync-alt",onclick:()=>s().extensionManager.control.checkForUpdates(),loading:s().extensionManager.control.isLoading("check"),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.updater.check_for_updates")),100),t.add("globalUpdate",m(l(),{className:"Button",icon:"fas fa-play",onclick:()=>s().extensionManager.control.updateGlobally(),loading:s().extensionManager.control.isLoading("global-update"),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.updater.run_global_update"))),t}}flarum.reg.add("flarum-extension-manager","admin/components/Updater",tt);const et=flarum.reg.get("core","common/components/Form");var at=a.n(et);class nt extends(h()){oninit(t){super.oninit(t)}view(){return m("div",{className:"ExtensionPage-permissions ExtensionManager-controlSection"},m("div",{className:"ExtensionPage-permissions-header"},m("div",{className:"container"},m("h2",{className:"ExtensionTitle"},s().translator.trans("flarum-extension-manager.admin.sections.control.title")))),m("div",{className:"container"},s().data["flarum-extension-manager.writable_dirs"]?m(at(),null,m(W,null),m(tt,null)):m("div",{className:"Form-group"},m(D(),{type:"warning",dismissible:!1},s().translator.trans("flarum-extension-manager.admin.file_permissions")))))}}flarum.reg.add("flarum-extension-manager","admin/components/ControlSection",nt);const st=flarum.reg.get("core","common/components/FormGroup");var rt=a.n(st);class ot extends(h()){constructor(){super(...arguments),Y(this,"settings",{}),Y(this,"initialSettings",null),Y(this,"loading",!1),Y(this,"type",void 0)}oninit(t){super.oninit(t),this.submit(!0)}className(){return""}view(){return m("div",{className:B()("FormSection",this.className())},m("label",null,this.title()),this.content(),m("div",{className:"Form-group Form-controls"},this.submitButton()))}submitButton(){return[m(l(),{className:"Button Button--primary",loading:this.loading,onclick:()=>this.submit(!1),disabled:!this.isDirty()},s().translator.trans("core.admin.settings.submit_button"))]}customSettingComponents(){return rt().prototype.customFieldComponents()}setting(t){var e;return null!=(e=this.settings[t])?e:this.settings[t]=G()()}submit(t){this.loading=!0;const e={};Object.keys(this.settings).forEach((t=>{e[t]=this.settings[t]()})),s().request({method:"POST",url:s().forum.attribute("apiUrl")+"/extension-manager/composer",body:{type:this.type,data:t?null:e}}).then((t=>{let{data:e}=t;Object.keys(e).forEach((t=>{this.settings[t]=G()(e[t])})),this.initialSettings=Array.isArray(e)?{}:e})).finally((()=>{this.loading=!1,m.redraw()}))}isDirty(){return JSON.stringify(this.initialSettings)!==JSON.stringify(this.settings)}}flarum.reg.add("flarum-extension-manager","admin/components/ConfigureJson",ot);const it=flarum.reg.get("core","common/components/Select");var lt=a.n(it);class mt extends(T()){constructor(){super(...arguments),Y(this,"name",void 0),Y(this,"repository",void 0)}oninit(t){super.oninit(t),this.name=G()(this.attrs.name||""),this.repository=G()(this.attrs.repository||{type:"composer",url:""})}className(){return"RepositoryModal Modal--small"}title(){const t=this.attrs.repository?"edit":"add";return s().translator.trans("flarum-extension-manager.admin.composer.".concat(t,"_repository_label"))}content(){const t={composer:s().translator.trans("flarum-extension-manager.admin.composer.repositories.types.composer"),vcs:s().translator.trans("flarum-extension-manager.admin.composer.repositories.types.vcs"),path:s().translator.trans("flarum-extension-manager.admin.composer.repositories.types.path")};return m("div",{className:"Modal-body"},m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.name_label")),m("input",{className:"FormControl",bidi:this.name})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.type_label")),m(lt(),{options:t,value:this.repository().type,onchange:t=>this.repository({...this.repository(),type:t})})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.url")),m("input",{className:"FormControl",onchange:t=>this.repository({...this.repository(),url:t.target.value}),value:this.repository().url})),m("div",{className:"Form-group"},m(l(),{className:"Button Button--primary",onclick:this.submit.bind(this)},s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.submit_button"))))}submit(){this.attrs.onsubmit(this.repository(),this.name()),this.hide()}}flarum.reg.add("flarum-extension-manager","admin/components/RepositoryModal",mt);class ut extends ot{constructor(){super(...arguments),Y(this,"type","composer")}title(){return s().translator.trans("flarum-extension-manager.admin.composer.title")}className(){return"ConfigureComposer"}content(){return m("div",{className:"Form ExtensionManager-SettingsGroups-content"},this.attrs.buildSettingComponent.call(this,{setting:"minimum-stability",label:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.label"),help:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.help"),type:"select",options:{stable:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.stable"),RC:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.rc"),beta:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.beta"),alpha:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.alpha"),dev:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.dev")}}),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.label")),m("div",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.composer.repositories.help")),m("div",{className:"ConfigureComposer-repositories"},Object.keys(this.setting("repositories")()||{}).map((t=>{const e=this.setting("repositories")()[t];return m("div",{className:"ButtonGroup ButtonGroup--full"},m(l(),{className:"Button",icon:{composer:"fas fa-cubes",vcs:"fas fa-code-branch",path:"fas fa-folder"}[e.type],onclick:()=>s().modal.show(mt,{name:t,repository:e,onsubmit:(e,a)=>{const n=this.setting("repositories")();delete n[t],this.setting("repositories")(n),this.onchange(e,a)}})},t," (",e.type,")"),m(l(),{className:"Button Button--icon",icon:"fas fa-trash","aria-label":s().translator.trans("flarum-extension-manager.admin.composer.delete_repository_label"),onclick:()=>{if(confirm(w()(s().translator.trans("flarum-extension-manager.admin.composer.delete_repository_confirmation")))){const e={...this.setting("repositories")()};delete e[t],this.setting("repositories")(e)}}}))})))))}submitButton(){const t=super.submitButton();return t.push(m(l(),{className:"Button",onclick:()=>s().modal.show(mt,{onsubmit:this.onchange.bind(this)})},s().translator.trans("flarum-extension-manager.admin.composer.add_repository_label"))),t}onchange(t,e){this.setting("repositories")({...this.setting("repositories")(),[e]:t})}}flarum.reg.add("flarum-extension-manager","admin/components/ConfigureComposer",ut);const ct=flarum.reg.get("core","common/helpers/listItems");var dt=a.n(ct);class gt extends(T()){constructor(){super(...arguments),Y(this,"type",void 0),Y(this,"host",void 0),Y(this,"token",void 0)}oninit(t){super.oninit(t),this.type=G()(this.attrs.type||"bearer"),this.host=G()(this.attrs.host||""),this.token=G()(this.attrs.token||"")}className(){return"AuthMethodModal Modal--small"}title(){const t=this.attrs.host?"edit":"add";return s().translator.trans("flarum-extension-manager.admin.auth_config.".concat(t,"_label"))}content(){const t={"github-oauth":s().translator.trans("flarum-extension-manager.admin.auth_config.types.github-oauth"),"gitlab-oauth":s().translator.trans("flarum-extension-manager.admin.auth_config.types.gitlab-oauth"),"gitlab-token":s().translator.trans("flarum-extension-manager.admin.auth_config.types.gitlab-token"),bearer:s().translator.trans("flarum-extension-manager.admin.auth_config.types.bearer")};return m("div",{className:"Modal-body"},m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.type_label")),m(lt(),{options:t,value:this.type(),onchange:this.type})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.host_label")),m("input",{className:"FormControl",bidi:this.host,placeholder:s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.host_placeholder")})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.token_label")),m("textarea",{className:"FormControl",oninput:t=>this.token(t.target.value),rows:"6",placeholder:this.token().startsWith("unchanged:")?w()(s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.unchanged_token_placeholder")):""},this.token().startsWith("unchanged:")?"":this.token())),m("div",{className:"Form-group"},m(l(),{className:"Button Button--primary",onclick:this.submit.bind(this)},s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.submit_button"))))}submit(){this.attrs.onsubmit(this.type(),this.host(),this.token()),this.hide()}}flarum.reg.add("flarum-extension-manager","admin/components/AuthMethodModal",gt);class pt extends ot{constructor(){super(...arguments),Y(this,"type","auth")}title(){return s().translator.trans("flarum-extension-manager.admin.auth_config.title")}className(){return"ConfigureAuth"}content(){const t=Object.keys(this.settings),e=t.length&&t.every((t=>{const e=this.settings[t]();return Array.isArray(e)?e.length:Object.keys(e).length}));return m("div",{className:"ExtensionManager-SettingsGroups-content"},e?t.map((t=>{const e=this.settings[t]();return m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.types.".concat(t))),m("div",{className:"ConfigureAuth-hosts"},Object.keys(e).map((a=>{const n=e[a];return m("div",{className:"ButtonGroup ButtonGroup--full"},m(l(),{className:"Button",icon:"fas fa-key",onclick:()=>s().modal.show(gt,{type:t,host:a,token:n,onsubmit:this.onchange.bind(this,a)})},a),m(l(),{className:"Button Button--icon",icon:"fas fa-trash","aria-label":s().translator.trans("flarum-extension-manager.admin.auth_config.delete_label"),onclick:()=>{if(confirm(w()(s().translator.trans("flarum-extension-manager.admin.auth_config.delete_confirmation")))){const e={...this.setting(t)()};delete e[a],Object.keys(e).length?this.setting(t)(e):delete this.settings[t]}}}))}))))})):m("span",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.auth_config.no_auth_methods_configured")))}submitButton(){const t=super.submitButton();return t.push(m(l(),{className:"Button",loading:this.loading,onclick:()=>s().modal.show(gt,{onsubmit:this.onchange.bind(this,null)})},s().translator.trans("flarum-extension-manager.admin.auth_config.add_label"))),t}onchange(t,e,a,n){const s={...this.setting(e)()};t&&delete s[t],s[a]=n,this.setting(e)(s)}}flarum.reg.add("flarum-extension-manager","admin/components/ConfigureAuth",pt);class ht extends(o()){content(){const t=s().extensionData.getSettings(this.extension.id),e=[s().translator.trans("flarum-extension-manager.admin.settings.access_warning")];return s().data.debugEnabled&&e.push(s().translator.trans("flarum-extension-manager.admin.settings.debug_mode_warning")),m("div",{className:"ExtensionPage-settings"},m("div",{className:"container"},m("div",{className:"ExtensionManager-warnings Form-group"},m(D(),{className:"ExtensionManager-primaryWarning",type:"warning",dismissible:!1},m("ul",null,dt()(e)))),t?m("div",{className:"FormSectionGroup ExtensionManager-SettingsGroups"},m("div",{className:"FormSection"},m("label",null,s().translator.trans("flarum-extension-manager.admin.settings.title")),m("div",{className:"Form"},t.map(this.buildSettingComponent.bind(this))),m("div",{className:"Form-group Form--controls"},this.submitButton())),m(ut,{buildSettingComponent:this.buildSettingComponent}),m(pt,{buildSettingComponent:this.buildSettingComponent})):m("h3",{className:"ExtensionPage-subHeader"},s().translator.trans("core.admin.extension.no_settings"))))}sections(t){const e=super.sections(t);return e.setPriority("content",10),e.add("control",m(nt,null),8),"0"!==s().data.settings["flarum-extension-manager.queue_jobs"]&&s().data.settings["flarum-extension-manager.queue_jobs"]&&e.add("queue",m(O,null),5),e.remove("permissions"),e}onsaved(){super.onsaved(),m.redraw()}}flarum.reg.add("flarum-extension-manager","admin/components/SettingsPage",ht);const ft=flarum.reg.get("core","common/Model");var xt=a.n(ft);const bt=["B","kB","MB","GB","TB","PB","EB","ZB","YB"],yt=["B","kiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],vt=["b","kbit","Mbit","Gbit","Tbit","Pbit","Ebit","Zbit","Ybit"],_t=["b","kibit","Mibit","Gibit","Tibit","Pibit","Eibit","Zibit","Yibit"],kt=(t,e,a)=>{let n=t;return"string"==typeof e||Array.isArray(e)?n=t.toLocaleString(e,a):!0!==e&&void 0===a||(n=t.toLocaleString(void 0,a)),n};class Nt extends(xt()){status(){return xt().attribute("status").call(this)}operation(){return xt().attribute("operation").call(this)}command(){return xt().attribute("command").call(this)}package(){return xt().attribute("package").call(this)}output(){return xt().attribute("output").call(this)}guessedCause(){return xt().attribute("guessedCause").call(this)}createdAt(){return xt().attribute("createdAt",xt().transformDate).call(this)}startedAt(){return xt().attribute("startedAt",xt().transformDate).call(this)}finishedAt(){return xt().attribute("finishedAt",xt().transformDate).call(this)}peakMemoryUsed(){return function(t,e){if(!Number.isFinite(t))throw new TypeError("Expected a finite number, got ".concat(typeof t,": ").concat(t));const a=(e={bits:!1,binary:!1,...e}).bits?e.binary?_t:vt:e.binary?yt:bt;if(e.signed&&0===t)return" 0 ".concat(a[0]);const n=t<0,s=n?"-":e.signed?"+":"";let r;if(n&&(t=-t),void 0!==e.minimumFractionDigits&&(r={minimumFractionDigits:e.minimumFractionDigits}),void 0!==e.maximumFractionDigits&&(r={maximumFractionDigits:e.maximumFractionDigits,...r}),t<1)return s+kt(t,e.locale,r)+" "+a[0];const o=Math.min(Math.floor(e.binary?Math.log(t)/Math.log(1024):Math.log10(t)/3),a.length-1);return t/=(e.binary?1024:1e3)**o,r||(t=t.toPrecision(3)),s+kt(Number(t),e.locale,r)+" "+a[o]}(1024*xt().attribute("peakMemoryUsed").call(this))}}function Mt(){s().modal.close(),m.route.set(s().route("extension",{id:"flarum-extension-manager"})),s().extensionManager.queue.load({},!0),setTimeout((()=>{var t;null==(t=document.getElementById("ExtensionManager-queueSection"))||t.scrollIntoView({block:"nearest"})}),200)}flarum.reg.add("flarum-extension-manager","admin/models/Task",Nt),window.jumpToQueue=Mt,flarum.reg.add("flarum-extension-manager","admin/utils/jumpToQueue",Mt);class wt{constructor(){Y(this,"polling",null),Y(this,"tasks",null),Y(this,"limit",20),Y(this,"offset",0),Y(this,"total",0)}load(t,e){var a;return void 0===e&&(e=!1),this.tasks=null,t={page:{limit:this.limit,offset:this.offset,...null==(a=t)?void 0:a.page},...t},s().store.find("extension-manager-tasks",t||{}).then((t=>{var a;return this.tasks=t,this.total=(null==(a=t.payload.meta)?void 0:a.total)||0,m.redraw(),(null==t?void 0:t.find((t=>"pending"===t.status()||"running"===t.status())))?this.pollQueue(e):e?(s().extensionManager.control.setLoading(null),window.location.reload()):s().extensionManager.control.isLoading()&&s().extensionManager.control.setLoading(null),t}))}getItems(){return this.tasks}getTotalPages(){return Math.ceil(this.total/this.limit)}pageNumber(){return Math.ceil(this.offset/this.limit)}hasPrev(){return 0!==this.pageNumber()}hasNext(){return this.offset+this.limit{this.load({},t)}),6e3)}hasPending(){var t;return!(null==(t=this.tasks)||!t.find((t=>"pending"===t.status()||"running"===t.status())))}}flarum.reg.add("flarum-extension-manager","admin/states/QueueState",wt);class Et{get lastUpdateRun(){const t=JSON.parse(s().data.settings["flarum-extension-manager.last_update_run"]);return t.limitedPackages=()=>[...t.major.limitedPackages,...t.minor.limitedPackages,...t.global.limitedPackages],t}constructor(){Y(this,"loading",null),Y(this,"packageUpdates",{}),Y(this,"lastUpdateCheck",void 0),Y(this,"extensionUpdates",void 0),Y(this,"coreUpdate",null),this.lastUpdateCheck=JSON.parse(s().data.settings["flarum-extension-manager.last_update_check"]),this.extensionUpdates=this.formatExtensionUpdates(this.lastUpdateCheck),this.coreUpdate=this.formatCoreUpdate(this.lastUpdateCheck)}isLoading(t){return void 0===t&&(t=null),t&&this.loading===t||!t&&null!==this.loading}hasOperationRunning(){return this.isLoading()||s().extensionManager.queue.hasPending()}setLoading(t){this.loading=t}requirePackage(t){s().extensionManager.control.setLoading("extension-install"),s().modal.show(c()),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/extensions"),body:{data:t}}).then((t=>{if(t.processing)Mt();else{const e=t.id;s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.extensions.successful_install",{extension:e})),window.location.href="".concat(s().forum.attribute("adminUrl"),"#/extension/").concat(e),window.location.reload()}})).catch(J).finally((()=>{s().modal.close(),m.redraw()}))}checkForUpdates(){this.setLoading("check"),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/check-for-updates")}).then((t=>{t.processing?Mt():(this.lastUpdateCheck=t,this.extensionUpdates=this.formatExtensionUpdates(t),this.coreUpdate=this.formatCoreUpdate(t),this.setLoading(null),m.redraw())})).catch(J).finally((()=>{m.redraw()}))}updateCoreMinor(){confirm(w()(s().translator.trans("flarum-extension-manager.admin.minor_update_confirmation.content")))&&(s().modal.show(c()),this.setLoading("minor-update"),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/minor-update")}).then((t=>{null!=t&&t.processing?Mt():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.update_successful")),window.location.reload())})).catch(J).finally((()=>{s().modal.close(),m.redraw()})))}updateExtension(t,e){s().modal.show(c()),this.setLoading("extension-update"),s().request({method:"PATCH",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/extensions/").concat(t.id),body:{data:{updateMode:e}}}).then((e=>{null!=e&&e.processing?Mt():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.extensions.successful_update",{extension:t.extra["flarum-extension"].title})),window.location.reload())})).catch(J).finally((()=>{s().modal.close(),m.redraw()}))}updateGlobally(){s().modal.show(c()),this.setLoading("global-update"),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/global-update")}).then((t=>{null!=t&&t.processing?Mt():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.updater.global_update_successful")),window.location.reload())})).catch(J).finally((()=>{s().modal.close(),m.redraw()}))}formatExtensionUpdates(t){var e,a;return this.packageUpdates={},null==t||null==(e=t.updates)||null==(a=e.installed)||a.filter((t=>{const e=t.name.replace("/","-").replace(/(flarum-ext-)|(flarum-)/,""),a=s().data.extensions[e],n=["semver-safe-update","update-possible"].includes(t["latest-status"]);return a&&n&&(this.packageUpdates[a.id]=t),a&&n})),Object.values(s().data.extensions).filter((t=>this.packageUpdates[t.id]))}formatCoreUpdate(t){var e,a;const n=null==t||null==(e=t.updates)||null==(a=e.installed)?void 0:a.filter((t=>"flarum/core"===t.name)).pop();return n?{package:n,extension:{id:"flarum-core",name:"flarum/core",version:s().data.settings.version,icon:{backgroundImage:"url(".concat(s().data.resources[0].attributes.baseUrl,"/assets/extensions/flarum-extension-manager/flarum.svg")},extra:{"flarum-extension":{title:w()(s().translator.trans("flarum-extension-manager.admin.updater.flarum"))}}}}:null}majorUpdate(t){let{dryRun:e}=t;s().extensionManager.control.setLoading(e?"major-update-dry-run":"major-update"),s().modal.show(c());const a=this.lastUpdateRun.major;s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/major-update"),body:{data:{dryRun:e}}}).then((t=>{null!=t&&t.processing?Mt():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.update_successful")),window.location.reload())})).catch(J).catch((t=>{var e,n,r;s().modal.close(),a.status="failure",a.incompatibleExtensions=null==(e=t.response)||null==(n=e.errors)||null==(r=n.pop())?void 0:r.incompatible_extensions})).finally((()=>{m.redraw()}))}}flarum.reg.add("flarum-extension-manager","admin/states/ControlSectionState",Et);class St{constructor(){Y(this,"queue",new wt),Y(this,"control",new Et)}}flarum.reg.add("flarum-extension-manager","admin/states/ExtensionManagerState",St),s().initializers.add("flarum-extension-manager",(e=>{e.store.models["extension-manager-tasks"]=Nt,e.extensionManager=new St,e.data["flarum-extension-manager.using_sync_queue"]&&(e.data.settings["flarum-extension-manager.queue_jobs"]="0"),e.extensionData.for("flarum-extension-manager").registerSetting({setting:"flarum-extension-manager.queue_jobs",label:e.translator.trans("flarum-extension-manager.admin.settings.queue_jobs"),help:m.trust(w()(e.translator.trans("flarum-extension-manager.admin.settings.queue_jobs_help",{basic_impl_link:"https://discuss.flarum.org/d/28151-database-queue-the-simplest-queue-even-for-shared-hosting",adv_impl_link:"https://discuss.flarum.org/d/21873-redis-sessions-cache-queues",php_version:"".concat(e.data.phpVersion,""),folder_perms_link:"https://docs.flarum.org/install#folder-ownership"}))),type:"boolean",disabled:e.data["flarum-extension-manager.using_sync_queue"]}).registerSetting({setting:"flarum-extension-manager.task_retention_days",label:e.translator.trans("flarum-extension-manager.admin.settings.task_retention_days"),help:e.translator.trans("flarum-extension-manager.admin.settings.task_retention_days_help"),type:"number"}).registerPage(ht),(0,t.extend)(o().prototype,"topItems",(function(t){"flarum-extension-manager"===this.extension.id||g()(this.extension.id)||t.add("remove",m(l(),{className:"Button Button--danger",icon:"fas fa-times",onclick:()=>{e.modal.show(c()),e.request({url:"".concat(e.forum.attribute("apiUrl"),"/extension-manager/extensions/").concat(this.extension.id),method:"DELETE"}).then((t=>{null!=t&&t.processing?Mt():(e.alerts.show({type:"success"},e.translator.trans("flarum-extension-manager.admin.extensions.successful_remove")),window.location=e.forum.attribute("adminUrl"))})).finally((()=>{e.modal.close()}))}},e.translator.trans("flarum-extension-manager.admin.extensions.remove")))}))}))})(),module.exports=n})(); +(()=>{var t={647:function(t){t.exports=function(){"use strict";var t,e,a=1e3,n=6e4,s=36e5,r=864e5,o=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,i=31536e6,l=2592e6,m=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,u={years:i,months:l,days:r,hours:s,minutes:n,seconds:a,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof b},d=function(t,e,a){return new b(t,a,e.$l)},g=function(t){return e.p(t)+"s"},p=function(t){return t<0},h=function(t){return p(t)?Math.ceil(t):Math.floor(t)},f=function(t){return Math.abs(t)},x=function(t,e){return t?p(t)?{negative:!0,format:""+f(t)+e}:{negative:!1,format:""+t+e}:{negative:!1,format:""}},b=function(){function p(t,e,a){var n=this;if(this.$d={},this.$l=a,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),e)return d(t*u[g(e)],this);if("number"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if("object"==typeof t)return Object.keys(t).forEach((function(e){n.$d[g(e)]=t[e]})),this.calMilliseconds(),this;if("string"==typeof t){var s=t.match(m);if(s){var r=s.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var f=p.prototype;return f.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(e,a){return e+(t.$d[a]||0)*u[a]}),0)},f.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=h(t/i),t%=i,this.$d.months=h(t/l),t%=l,this.$d.days=h(t/r),t%=r,this.$d.hours=h(t/s),t%=s,this.$d.minutes=h(t/n),t%=n,this.$d.seconds=h(t/a),t%=a,this.$d.milliseconds=t},f.toISOString=function(){var t=x(this.$d.years,"Y"),e=x(this.$d.months,"M"),a=+this.$d.days||0;this.$d.weeks&&(a+=7*this.$d.weeks);var n=x(a,"D"),s=x(this.$d.hours,"H"),r=x(this.$d.minutes,"M"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3);var i=x(o,"S"),l=t.negative||e.negative||n.negative||s.negative||r.negative||i.negative,m=s.format||r.format||i.format?"T":"",u=(l?"-":"")+"P"+t.format+e.format+n.format+m+s.format+r.format+i.format;return"P"===u||"-P"===u?"P0D":u},f.toJSON=function(){return this.toISOString()},f.format=function(t){var a=t||"YYYY-MM-DDTHH:mm:ss",n={Y:this.$d.years,YY:e.s(this.$d.years,2,"0"),YYYY:e.s(this.$d.years,4,"0"),M:this.$d.months,MM:e.s(this.$d.months,2,"0"),D:this.$d.days,DD:e.s(this.$d.days,2,"0"),H:this.$d.hours,HH:e.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:e.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:e.s(this.$d.seconds,2,"0"),SSS:e.s(this.$d.milliseconds,3,"0")};return a.replace(o,(function(t,e){return e||String(n[t])}))},f.as=function(t){return this.$ms/u[g(t)]},f.get=function(t){var e=this.$ms,a=g(t);return"milliseconds"===a?e%=1e3:e="weeks"===a?h(e/u[a]):this.$d[a],0===e?0:e},f.add=function(t,e,a){var n;return n=e?t*u[g(e)]:c(t)?t.$ms:d(t,this).$ms,d(this.$ms+n*(a?-1:1),this)},f.subtract=function(t,e){return this.add(t,e,!0)},f.locale=function(t){var e=this.clone();return e.$l=t,e},f.clone=function(){return d(this.$ms,this)},f.humanize=function(e){return t().add(this.$ms,"ms").locale(this.$l).fromNow(!e)},f.milliseconds=function(){return this.get("milliseconds")},f.asMilliseconds=function(){return this.as("milliseconds")},f.seconds=function(){return this.get("seconds")},f.asSeconds=function(){return this.as("seconds")},f.minutes=function(){return this.get("minutes")},f.asMinutes=function(){return this.as("minutes")},f.hours=function(){return this.get("hours")},f.asHours=function(){return this.as("hours")},f.days=function(){return this.get("days")},f.asDays=function(){return this.as("days")},f.weeks=function(){return this.get("weeks")},f.asWeeks=function(){return this.as("weeks")},f.months=function(){return this.get("months")},f.asMonths=function(){return this.as("months")},f.years=function(){return this.get("years")},f.asYears=function(){return this.as("years")},p}();return function(a,n,s){t=s,e=s().$utils(),s.duration=function(t,e){var a=s.locale();return d(t,{$l:a},e)},s.isDuration=c;var r=n.prototype.add,o=n.prototype.subtract;n.prototype.add=function(t,e){return c(t)&&(t=t.asMilliseconds()),r.bind(this)(t,e)},n.prototype.subtract=function(t,e){return c(t)&&(t=t.asMilliseconds()),o.bind(this)(t,e)}}}()}},e={};function a(n){var s=e[n];if(void 0!==s)return s.exports;var r=e[n]={exports:{}};return t[n].call(r.exports,r,r.exports,a),r.exports}a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";a.r(n),a.d(n,{extend:()=>qt});const t=flarum.reg.get("core","common/extend"),e=flarum.reg.get("core","admin/app");var s=a.n(e);const r=flarum.reg.get("core","admin/components/ExtensionPage");var o=a.n(r);const i=flarum.reg.get("core","common/components/Button");var l=a.n(i);const u=flarum.reg.get("core","admin/components/LoadingModal");var c=a.n(u);const d=flarum.reg.get("core","admin/utils/isExtensionEnabled");var g=a.n(d);const p=flarum.reg.get("core","common/Model");var h=a.n(p);const f=["B","kB","MB","GB","TB","PB","EB","ZB","YB"],x=["B","kiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],b=["b","kbit","Mbit","Gbit","Tbit","Pbit","Ebit","Zbit","Ybit"],y=["b","kibit","Mibit","Gibit","Tibit","Pibit","Eibit","Zibit","Yibit"],v=(t,e,a)=>{let n=t;return"string"==typeof e||Array.isArray(e)?n=t.toLocaleString(e,a):!0!==e&&void 0===a||(n=t.toLocaleString(void 0,a)),n};class _ extends(h()){status(){return h().attribute("status").call(this)}operation(){return h().attribute("operation").call(this)}command(){return h().attribute("command").call(this)}package(){return h().attribute("package").call(this)}output(){return h().attribute("output").call(this)}guessedCause(){return h().attribute("guessedCause").call(this)}createdAt(){return h().attribute("createdAt",h().transformDate).call(this)}startedAt(){return h().attribute("startedAt",h().transformDate).call(this)}finishedAt(){return h().attribute("finishedAt",h().transformDate).call(this)}peakMemoryUsed(){return function(t,e){if(!Number.isFinite(t))throw new TypeError("Expected a finite number, got ".concat(typeof t,": ").concat(t));const a=(e={bits:!1,binary:!1,...e}).bits?e.binary?y:b:e.binary?x:f;if(e.signed&&0===t)return" 0 ".concat(a[0]);const n=t<0,s=n?"-":e.signed?"+":"";let r;if(n&&(t=-t),void 0!==e.minimumFractionDigits&&(r={minimumFractionDigits:e.minimumFractionDigits}),void 0!==e.maximumFractionDigits&&(r={maximumFractionDigits:e.maximumFractionDigits,...r}),t<1)return s+v(t,e.locale,r)+" "+a[0];const o=Math.min(Math.floor(e.binary?Math.log(t)/Math.log(1024):Math.log10(t)/3),a.length-1);return t/=(e.binary?1024:1e3)**o,r||(t=t.toPrecision(3)),s+v(Number(t),e.locale,r)+" "+a[o]}(1024*h().attribute("peakMemoryUsed").call(this))}}function k(){s().modal.close(),m.route.set(s().route("extension",{id:"flarum-extension-manager"})),s().extensionManager.queue.load({},!0),setTimeout((()=>{var t;null==(t=document.getElementById("ExtensionManager-queueSection"))||t.scrollIntoView({block:"nearest"})}),200)}function N(t){return N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},N(t)}function M(t,e,a){return(e=function(t){var e=function(t,e){if("object"!==N(t)||null===t)return t;var a=t[Symbol.toPrimitive];if(void 0!==a){var n=a.call(t,e);if("object"!==N(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===N(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}flarum.reg.add("flarum-extension-manager","admin/models/Task",_),window.jumpToQueue=k,flarum.reg.add("flarum-extension-manager","admin/utils/jumpToQueue",k);class w{constructor(){M(this,"polling",null),M(this,"tasks",null),M(this,"limit",20),M(this,"offset",0),M(this,"total",0)}load(t,e){var a;return void 0===e&&(e=!1),this.tasks=null,t={page:{limit:this.limit,offset:this.offset,...null==(a=t)?void 0:a.page},...t},s().store.find("extension-manager-tasks",t||{}).then((t=>{var a;return this.tasks=t,this.total=(null==(a=t.payload.meta)?void 0:a.total)||0,m.redraw(),(null==t?void 0:t.find((t=>"pending"===t.status()||"running"===t.status())))?this.pollQueue(e):e?(s().extensionManager.control.setLoading(null),window.location.reload()):s().extensionManager.control.isLoading()&&s().extensionManager.control.setLoading(null),t}))}getItems(){return this.tasks}getTotalPages(){return Math.ceil(this.total/this.limit)}pageNumber(){return Math.ceil(this.offset/this.limit)}hasPrev(){return 0!==this.pageNumber()}hasNext(){return this.offset+this.limit{this.load({},t)}),6e3)}hasPending(){var t;return!(null==(t=this.tasks)||!t.find((t=>"pending"===t.status()||"running"===t.status())))}}function E(t){s().extensionManager.control.setLoading(null);const e=t.response.errors[0];if(!["composer_command_failure","extension_already_installed","extension_not_installed"].includes(e.code))throw t;switch(s().alerts.clear(),e.code){case"composer_command_failure":e.guessed_cause?(s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.guessed_cause.".concat(e.guessed_cause))),s().modal.close()):s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.composer_command_failure"));break;case"extension_already_installed":s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.extension_already_installed")),s().modal.close();break;case"extension_not_installed":s().alerts.show({type:"error"},s().translator.trans("flarum-extension-manager.admin.exceptions.extension_not_installed")),s().modal.close()}}flarum.reg.add("flarum-extension-manager","admin/states/QueueState",w);const U=flarum.reg.get("core","common/utils/extractText");var S=a.n(U);class B{get lastUpdateRun(){const t=JSON.parse(s().data.settings["flarum-extension-manager.last_update_run"]);return t.limitedPackages=()=>[...t.major.limitedPackages,...t.minor.limitedPackages,...t.global.limitedPackages],t}constructor(){M(this,"loading",null),M(this,"packageUpdates",{}),M(this,"lastUpdateCheck",void 0),M(this,"extensionUpdates",void 0),M(this,"coreUpdate",null),this.lastUpdateCheck=JSON.parse(s().data.settings["flarum-extension-manager.last_update_check"]),this.extensionUpdates=this.formatExtensionUpdates(this.lastUpdateCheck),this.coreUpdate=this.formatCoreUpdate(this.lastUpdateCheck)}isLoading(t){return void 0===t&&(t=null),t&&this.loading===t||!t&&null!==this.loading}hasOperationRunning(){return this.isLoading()||s().extensionManager.queue.hasPending()}setLoading(t){this.loading=t}requirePackage(t){s().extensionManager.control.setLoading("extension-install"),s().modal.show(c()),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/extensions"),body:{data:t}}).then((t=>{if(t.processing)k();else{const e=t.id;s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.extensions.successful_install",{extension:e})),window.location.href="".concat(s().forum.attribute("adminUrl"),"#/extension/").concat(e),window.location.reload()}})).catch(E).finally((()=>{s().modal.close(),m.redraw()}))}checkForUpdates(){this.setLoading("check"),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/check-for-updates")}).then((t=>{t.processing?k():(this.lastUpdateCheck=t,this.extensionUpdates=this.formatExtensionUpdates(t),this.coreUpdate=this.formatCoreUpdate(t),this.setLoading(null),m.redraw())})).catch(E).finally((()=>{m.redraw()}))}updateCoreMinor(){confirm(S()(s().translator.trans("flarum-extension-manager.admin.minor_update_confirmation.content")))&&(s().modal.show(c()),this.setLoading("minor-update"),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/minor-update")}).then((t=>{null!=t&&t.processing?k():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.update_successful")),window.location.reload())})).catch(E).finally((()=>{s().modal.close(),m.redraw()})))}updateExtension(t,e){s().modal.show(c()),this.setLoading("extension-update"),s().request({method:"PATCH",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/extensions/").concat(t.id),body:{data:{updateMode:e}}}).then((e=>{null!=e&&e.processing?k():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.extensions.successful_update",{extension:t.extra["flarum-extension"].title})),window.location.reload())})).catch(E).finally((()=>{s().modal.close(),m.redraw()}))}updateGlobally(){s().modal.show(c()),this.setLoading("global-update"),s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/global-update")}).then((t=>{null!=t&&t.processing?k():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.updater.global_update_successful")),window.location.reload())})).catch(E).finally((()=>{s().modal.close(),m.redraw()}))}formatExtensionUpdates(t){var e,a;return this.packageUpdates={},null==t||null==(e=t.updates)||null==(a=e.installed)||a.filter((t=>{const e=t.name.replace("/","-").replace(/(flarum-ext-)|(flarum-)/,""),a=s().data.extensions[e],n=["semver-safe-update","update-possible"].includes(t["latest-status"]);return a&&n&&(this.packageUpdates[a.id]=t),a&&n})),Object.values(s().data.extensions).filter((t=>this.packageUpdates[t.id]))}formatCoreUpdate(t){var e,a;const n=null==t||null==(e=t.updates)||null==(a=e.installed)?void 0:a.filter((t=>"flarum/core"===t.name)).pop();return n?{package:n,extension:{id:"flarum-core",name:"flarum/core",version:s().data.settings.version,icon:{backgroundImage:"url(".concat(s().data.resources[0].attributes.baseUrl,"/assets/extensions/flarum-extension-manager/flarum.svg")},extra:{"flarum-extension":{title:S()(s().translator.trans("flarum-extension-manager.admin.updater.flarum"))}}}}:null}majorUpdate(t){let{dryRun:e}=t;s().extensionManager.control.setLoading(e?"major-update-dry-run":"major-update"),s().modal.show(c());const a=this.lastUpdateRun.major;s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/major-update"),body:{data:{dryRun:e}}}).then((t=>{null!=t&&t.processing?k():(s().alerts.show({type:"success"},s().translator.trans("flarum-extension-manager.admin.update_successful")),window.location.reload())})).catch(E).catch((t=>{var e,n,r;s().modal.close(),a.status="failure",a.incompatibleExtensions=null==(e=t.response)||null==(n=e.errors)||null==(r=n.pop())?void 0:r.incompatible_extensions})).finally((()=>{m.redraw()}))}}flarum.reg.add("flarum-extension-manager","admin/states/ControlSectionState",B);class q{constructor(){M(this,"queue",new w),M(this,"control",new B)}}flarum.reg.add("flarum-extension-manager","admin/states/ExtensionManagerState",q);const j=flarum.reg.get("core","common/extenders");var T=a.n(j);const $=flarum.reg.get("core","common/Component");var C=a.n($);const P=flarum.reg.get("core","common/components/LoadingIndicator");var F=a.n(P);const L=flarum.reg.get("core","common/components/Tooltip");var O=a.n(L);const A=flarum.reg.get("core","common/components/Icon");var D=a.n(A);const I=flarum.reg.get("core","common/utils/ItemList");var Y=a.n(I);const R=flarum.reg.get("core","common/components/Link");var G=a.n(R);const W=flarum.reg.get("core","common/utils/classList");var H=a.n(W);class Q extends(C()){view(t){const{className:e,type:a,...n}=this.attrs;return m("span",Object.assign({className:H()(["Label","Label--".concat(this.attrs.type),e])},n),t.children)}}flarum.reg.add("flarum-extension-manager","admin/components/Label",Q);const J=flarum.reg.get("core","common/components/Modal");var V=a.n(J);class Z extends(V()){className(){return"Modal--large QuickModal"}title(){return s().translator.trans("flarum-extension-manager.admin.sections.queue.operations.".concat(this.attrs.task.operation()))}content(){return m("div",{className:"Modal-body"},m("div",{className:"TaskOutputModal-data"},"failure"===this.attrs.task.status()&&m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.guessed_cause")),m("div",{className:"FormControl TaskOutputModal-data-guessed-cause"},this.attrs.task.guessedCause()&&s().translator.trans("flarum-extension-manager.admin.exceptions.guessed_cause."+this.attrs.task.guessedCause())||s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.cause_unknown"))),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.command")),m("div",{className:"FormControl TaskOutputModal-data-command"},m("code",null,"$ composer ",this.attrs.task.command()))),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.sections.queue.output_modal.output")),m("div",{className:"FormControl TaskOutputModal-data-output"},m("code",null,m("pre",null,this.attrs.task.output()))))))}}flarum.reg.add("flarum-extension-manager","admin/components/TaskOutputModal",Z);var z=a(647),K=a.n(z);function X(t,e){dayjs.extend(K());const a=dayjs(e).diff(t);return dayjs.duration(a).humanize()}flarum.reg.add("flarum-extension-manager","admin/utils/humanDuration",X);class tt extends(C()){view(){return m("nav",{className:"Pagination UserListPage-gridPagination"},m(l(),{disabled:!this.attrs.list.hasPrev()||s().extensionManager.control.isLoading(),title:s().translator.trans("core.admin.users.pagination.back_button"),onclick:()=>this.attrs.list.prev(),icon:"fas fa-chevron-left",className:"Button Button--icon UserListPage-backBtn"}),m("span",{className:"UserListPage-pageNumber"},s().translator.trans("core.admin.users.pagination.page_counter",{current:this.attrs.list.pageNumber()+1,total:this.attrs.list.getTotalPages()})),m(l(),{disabled:!this.attrs.list.hasNext()||s().extensionManager.control.isLoading(),title:s().translator.trans("core.admin.users.pagination.next_button"),onclick:()=>this.attrs.list.next(),icon:"fas fa-chevron-right",className:"Button Button--icon UserListPage-nextBtn"}))}}flarum.reg.add("flarum-extension-manager","admin/components/Pagination",tt);class et extends(C()){oninit(t){super.oninit(t),s().extensionManager.queue.load()}view(){return m("section",{id:"ExtensionManager-queueSection",className:"ExtensionPage-permissions ExtensionManager-queueSection"},m("div",{className:"ExtensionPage-permissions-header ExtensionManager-queueSection-header"},m("div",{className:"container"},m("h2",{className:"ExtensionTitle"},s().translator.trans("flarum-extension-manager.admin.sections.queue.title")),m(l(),{className:"Button Button--icon",icon:"fas fa-sync-alt",onclick:()=>s().extensionManager.queue.load(),"aria-label":s().translator.trans("flarum-extension-manager.admin.sections.queue.refresh"),disabled:s().extensionManager.control.isLoading()}))),m("div",{className:"container"},this.queueTable()))}columns(){const t=new(Y());return t.add("operation",{label:S()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.operation")),content:t=>m("div",{className:"ExtensionManager-queueTable-operation"},m("span",{className:"ExtensionManager-queueTable-operation-icon"},this.operationIcon(t.operation())),m("span",{className:"ExtensionManager-queueTable-operation-name"},s().translator.trans("flarum-extension-manager.admin.sections.queue.operations.".concat(t.operation()))))},80),t.add("package",{label:S()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.package")),content:t=>{var e;const a=s().data.extensions[null==(e=t.package())?void 0:e.replace(/(\/flarum-|\/flarum-ext-|\/)/g,"-")];return a?m(G(),{className:"ExtensionManager-queueTable-package",href:s().route("extension",{id:a.id})},m("div",{className:"ExtensionManager-queueTable-package-icon ExtensionIcon",style:a.icon},!!a.icon&&m(D(),{name:a.icon.name})),m("div",{className:"ExtensionManager-queueTable-package-details"},m("span",{className:"ExtensionManager-queueTable-package-title"},a.extra["flarum-extension"].title),m("span",{className:"ExtensionManager-queueTable-package-name"},t.package()))):t.package()}},75),t.add("status",{label:S()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.status")),content:t=>m("[",null,m(Q,{className:"ExtensionManager-queueTable-status",type:{running:"neutral",failure:"error",pending:"warning",success:"success"}[t.status()]},s().translator.trans("flarum-extension-manager.admin.sections.queue.statuses.".concat(t.status()))),["pending","running"].includes(t.status())&&m(F(),{size:"small",display:"inline"}))},70),t.add("elapsedTime",{label:S()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.elapsed_time")),content:t=>t.startedAt()&&t.finishedAt()?m(O(),{text:"".concat(dayjs(t.startedAt()).format("LL LTS")," ").concat(dayjs(t.finishedAt()).format("LL LTS"))},m("span",null,X(t.startedAt(),t.finishedAt()))):s().translator.trans("flarum-extension-manager.admin.sections.queue.task_just_started")},65),t.add("memoryUsed",{label:S()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.peak_memory_used")),content:t=>m("span",null,t.peakMemoryUsed())},60),t.add("details",{label:S()(s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.details")),content:t=>m(l(),{className:"Button Button--icon Table-controls-item",icon:"fas fa-file-alt","aria-label":s().translator.trans("flarum-extension-manager.admin.sections.queue.columns.details"),onclick:()=>s().modal.show(Z,{task:t}),disabled:["pending","running"].includes(t.status())}),className:"Table-controls"},55),t}queueTable(){const t=s().extensionManager.queue.getItems();if(!t)return m(F(),null);if(t&&!t.length)return m("h3",{className:"ExtensionPage-subHeader"},s().translator.trans("flarum-extension-manager.admin.sections.queue.none"));const e=this.columns();return m("[",null,m("table",{className:"Table ExtensionManager-queueTable"},m("thead",null,m("tr",null,e.toArray().map(((t,e)=>m("th",{key:e},t.label))))),m("tbody",null,t.map(((t,a)=>m("tr",{key:a},e.toArray().map(((e,a)=>{const{label:n,content:s,...r}=e;return m("td",Object.assign({key:a},r),s(t))}))))))),m(tt,{list:s().extensionManager.queue}))}operationIcon(t){return m(D(),{name:{update_check:"fas fa-sync-alt",update_major:"fas fa-play",update_minor:"fas fa-play",update_global:"fas fa-play",extension_install:"fas fa-download",extension_remove:"fas fa-times",extension_update:"fas fa-arrow-alt-circle-up",why_not:"fas fa-exclamation-circle"}[t]})}}flarum.reg.add("flarum-extension-manager","admin/components/QueueSection",et);const at=flarum.reg.get("core","common/components/Alert");var nt=a.n(at);const st=flarum.reg.get("core","common/utils/Stream");var rt=a.n(st);class ot extends(C()){constructor(){super(...arguments),M(this,"packageName",void 0)}oninit(t){super.oninit(t),this.packageName=rt()("")}view(){return m("div",{className:"Form-group ExtensionManager-installer"},m("label",{htmlFor:"install-extension"},s().translator.trans("flarum-extension-manager.admin.extensions.install")),m("div",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.extensions.install_help",{extiverse:m("a",{href:"https://extiverse.com"},"extiverse.com"),semantic_link:m("a",{href:"https://devhints.io/semver"}),code:m("code",null)})),m("div",{className:"FormControl-container"},m("input",{className:"FormControl",id:"install-extension",placeholder:"vendor/package-name",bidi:this.packageName}),m(l(),{className:"Button",icon:"fas fa-download",onclick:this.onsubmit.bind(this),loading:s().extensionManager.control.isLoading("extension-install"),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.extensions.proceed"))))}data(){return{package:this.packageName()}}onsubmit(){s().extensionManager.control.requirePackage(this.data())}}flarum.reg.add("flarum-extension-manager","admin/components/Installer",ot);const it=flarum.reg.get("core","common/helpers/humanTime");var lt=a.n(it);class mt extends(V()){constructor(){super(...arguments),M(this,"loading",!0),M(this,"whyNot",null)}className(){return"Modal--large WhyNotModal"}title(){return s().translator.trans("flarum-extension-manager.admin.why_not_modal.title")}oncreate(t){super.oncreate(t),this.requestWhyNot()}content(){return m("div",{className:"Modal-body"},this.loading?m(F(),null):m("pre",{className:"WhyNotModal-contents"},this.whyNot))}requestWhyNot(){s().request({method:"POST",url:"".concat(s().forum.attribute("apiUrl"),"/extension-manager/why-not"),body:{data:{package:this.attrs.package}}}).then((t=>{this.loading=!1,this.whyNot=t.data.reason,m.redraw()})).catch(E)}}flarum.reg.add("flarum-extension-manager","admin/components/WhyNotModal",mt);const ut=flarum.reg.get("core","common/components/Dropdown");var ct=a.n(ut);class dt extends(C()){view(t){var e;const{extension:a,updates:n,onClickUpdate:r,whyNotWarning:o,isCore:i,isDanger:u}=this.attrs,c=null!=(e=n["latest-minor"])?e:n["latest-major"]&&!i?n["latest-major"]:null;return m("div",{className:H()({"ExtensionManager-extension":!0,"ExtensionManager-extension--core":i,"ExtensionManager-extension--danger":u})},m("div",{className:"ExtensionManager-extension-icon ExtensionIcon",style:a.icon},a.icon?m(D(),{name:a.icon.name}):""),m("div",{className:"ExtensionManager-extension-info"},m("div",{className:"ExtensionManager-extension-name"},a.extra["flarum-extension"].title),m("div",{className:"ExtensionManager-extension-version"},m("span",{className:"ExtensionManager-extension-version-current"},this.version(n.version)),c?m(Q,{className:"ExtensionManager-extension-version-latest",type:n["latest-minor"]?"success":"warning"},this.version(c)):null)),m("div",{className:"ExtensionManager-extension-controls"},r&&"function"==typeof r?m(O(),{text:s().translator.trans("flarum-extension-manager.admin.extensions.update")},m(l(),{icon:"fas fa-arrow-alt-circle-up",className:"Button Button--icon Button--flat",onclick:r,"aria-label":s().translator.trans("flarum-extension-manager.admin.extensions.update")})):r?m(ct(),{buttonClassName:"Button Button--icon Button--flat",icon:"fas fa-arrow-alt-circle-up",label:s().translator.trans("flarum-extension-manager.admin.extensions.update")},m(l(),{icon:"fas fa-arrow-alt-circle-up",className:"Button",onclick:r.soft},s().translator.trans("flarum-extension-manager.admin.extensions.update_soft_label")),m(l(),{icon:"fas fa-arrow-alt-circle-up",className:"Button",onclick:r.hard,disabled:!n["direct-dependency"]},s().translator.trans("flarum-extension-manager.admin.extensions.update_hard_label"))):null,o?m(O(),{text:s().translator.trans("flarum-extension-manager.admin.extensions.check_why_it_failed_updating")},m(l(),{icon:"fas fa-exclamation-circle",className:"Button Button--icon Button--flat Button--danger",onclick:()=>s().modal.show(mt,{package:a.name}),"aria-label":s().translator.trans("flarum-extension-manager.admin.extensions.check_why_it_failed_updating")})):null))}version(t){return"v"===t.charAt(0)?t.substring(1):t}}flarum.reg.add("flarum-extension-manager","admin/components/ExtensionItem",dt);class gt extends(C()){constructor(){super(...arguments),M(this,"updateState",void 0)}oninit(t){super.oninit(t),this.updateState=this.attrs.updateState}view(){return m("div",{className:H()("Form-group Form-group--danger ExtensionManager-majorUpdate",{"ExtensionManager-majorUpdate--failed":"failure"===this.updateState.status,"ExtensionManager-majorUpdate--incompatibleExtensions":this.updateState.incompatibleExtensions.length})},m("img",{alt:"flarum logo",src:s().forum.attribute("baseUrl")+"/assets/extensions/flarum-extension-manager/flarum.svg"}),m("label",null,s().translator.trans("flarum-extension-manager.admin.major_updater.title",{version:this.attrs.coreUpdate["latest-major"]})),m("p",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.major_updater.description")),m("div",{className:"ExtensionManager-updaterControls"},m(O(),{text:s().translator.trans("flarum-extension-manager.admin.major_updater.dry_run_help")},m(l(),{className:"Button",icon:"fas fa-vial",onclick:this.update.bind(this,!0),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.major_updater.dry_run"))),m(l(),{className:"Button Button--danger",icon:"fas fa-play",onclick:this.update.bind(this,!1),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.major_updater.update"))),this.updateState.incompatibleExtensions.length?m("div",{className:"ExtensionManager-majorUpdate-incompatibleExtensions ExtensionManager-extensions-grid"},this.updateState.incompatibleExtensions.map((t=>m(dt,{extension:s().data.extensions[t.replace("flarum-","").replace("flarum-ext-","").replace("/","-")],updates:{},onClickUpdate:null,isDanger:!0})))):null,"failure"===this.updateState.status?m(nt(),{type:"error",className:"ExtensionManager-majorUpdate-failure",dismissible:!1,controls:[m(l(),{className:"Button Button--text ExtensionManager-majorUpdate-failure-details",icon:"fas fa-question-circle",onclick:()=>s().modal.show(mt,{package:"flarum/core"})},s().translator.trans("flarum-extension-manager.admin.major_updater.failure.why"))]},m("p",{className:"ExtensionManager-majorUpdate-failure-desc"},s().translator.trans("flarum-extension-manager.admin.major_updater.failure.desc"))):null)}update(t){s().extensionManager.control.majorUpdate({dryRun:t})}}flarum.reg.add("flarum-extension-manager","admin/components/MajorUpdater",gt);class pt extends(C()){view(){const t=s().extensionManager.control.coreUpdate;return[m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.updater.updater_title")),m("div",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.updater.updater_help")),this.lastUpdateCheckView(),m("div",{className:"ExtensionManager-updaterControls"},this.controlItems().toArray()),this.availableUpdatesView()),t&&t.package["latest-major"]?m(gt,{coreUpdate:t.package,updateState:s().extensionManager.control.lastUpdateRun.major}):null]}lastUpdateCheckView(){var t;return(null==(t=s().extensionManager.control.lastUpdateCheck)?void 0:t.checkedAt)&&m("p",{className:"ExtensionManager-lastUpdatedAt"},m("span",{className:"ExtensionManager-lastUpdatedAt-label"},s().translator.trans("flarum-extension-manager.admin.updater.last_update_checked_at")),m("span",{className:"ExtensionManager-lastUpdatedAt-value"},lt()(s().extensionManager.control.lastUpdateCheck.checkedAt)))||null}availableUpdatesView(){const t=s().extensionManager.control;if(s().extensionManager.control.isLoading("check")||s().extensionManager.control.isLoading("global-update"))return m("div",{className:"ExtensionManager-extensions"},m(F(),null));const e=t.coreUpdate&&t.coreUpdate.package["latest-minor"];return t.extensionUpdates.length||e?m("div",{className:"ExtensionManager-extensions"},m("div",{className:"ExtensionManager-extensions-grid"},e?m(dt,{extension:t.coreUpdate.extension,updates:t.coreUpdate.package,isCore:!0,onClickUpdate:()=>t.updateCoreMinor(),whyNotWarning:t.lastUpdateRun.limitedPackages().includes("flarum/core")}):null,t.extensionUpdates.map((e=>m(dt,{extension:e,updates:t.packageUpdates[e.id],onClickUpdate:{soft:()=>t.updateExtension(e,"soft"),hard:()=>t.updateExtension(e,"hard")},whyNotWarning:t.lastUpdateRun.limitedPackages().includes(e.name)}))))):m("div",{className:"ExtensionManager-extensions"},m("span",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.updater.up_to_date")))}controlItems(){const t=new(Y());return t.add("updateCheck",m(l(),{className:"Button",icon:"fas fa-sync-alt",onclick:()=>s().extensionManager.control.checkForUpdates(),loading:s().extensionManager.control.isLoading("check"),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.updater.check_for_updates")),100),t.add("globalUpdate",m(l(),{className:"Button",icon:"fas fa-play",onclick:()=>s().extensionManager.control.updateGlobally(),loading:s().extensionManager.control.isLoading("global-update"),disabled:s().extensionManager.control.hasOperationRunning()},s().translator.trans("flarum-extension-manager.admin.updater.run_global_update"))),t}}flarum.reg.add("flarum-extension-manager","admin/components/Updater",pt);const ht=flarum.reg.get("core","common/components/Form");var ft=a.n(ht);class xt extends(C()){oninit(t){super.oninit(t)}view(){return m("div",{className:"ExtensionPage-permissions ExtensionManager-controlSection"},m("div",{className:"ExtensionPage-permissions-header"},m("div",{className:"container"},m("h2",{className:"ExtensionTitle"},s().translator.trans("flarum-extension-manager.admin.sections.control.title")))),m("div",{className:"container"},s().data["flarum-extension-manager.writable_dirs"]?m(ft(),null,m(ot,null),m(pt,null)):m("div",{className:"Form-group"},m(nt(),{type:"warning",dismissible:!1},s().translator.trans("flarum-extension-manager.admin.file_permissions")))))}}flarum.reg.add("flarum-extension-manager","admin/components/ControlSection",xt);const bt=flarum.reg.get("core","common/components/FormGroup");var yt=a.n(bt);class vt extends(C()){constructor(){super(...arguments),M(this,"settings",{}),M(this,"initialSettings",null),M(this,"loading",!1),M(this,"type",void 0)}oninit(t){super.oninit(t),this.submit(!0)}className(){return""}view(){return m("div",{className:H()("FormSection",this.className())},m("label",null,this.title()),this.content(),m("div",{className:"Form-group Form-controls"},this.submitButton()))}submitButton(){return[m(l(),{className:"Button Button--primary",loading:this.loading,onclick:()=>this.submit(!1),disabled:!this.isDirty()},s().translator.trans("core.admin.settings.submit_button"))]}customSettingComponents(){return yt().prototype.customFieldComponents()}setting(t){var e;return null!=(e=this.settings[t])?e:this.settings[t]=rt()()}submit(t){this.loading=!0;const e={};Object.keys(this.settings).forEach((t=>{e[t]=this.settings[t]()})),s().request({method:"POST",url:s().forum.attribute("apiUrl")+"/extension-manager/composer",body:{type:this.type,data:t?null:e}}).then((t=>{let{data:e}=t;Object.keys(e).forEach((t=>{this.settings[t]=rt()(e[t])})),this.initialSettings=Array.isArray(e)?{}:e})).finally((()=>{this.loading=!1,m.redraw()}))}isDirty(){return JSON.stringify(this.initialSettings)!==JSON.stringify(this.settings)}}flarum.reg.add("flarum-extension-manager","admin/components/ConfigureJson",vt);const _t=flarum.reg.get("core","common/components/Select");var kt=a.n(_t);class Nt extends(V()){constructor(){super(...arguments),M(this,"name",void 0),M(this,"repository",void 0)}oninit(t){super.oninit(t),this.name=rt()(this.attrs.name||""),this.repository=rt()(this.attrs.repository||{type:"composer",url:""})}className(){return"RepositoryModal Modal--small"}title(){const t=this.attrs.repository?"edit":"add";return s().translator.trans("flarum-extension-manager.admin.composer.".concat(t,"_repository_label"))}content(){const t={composer:s().translator.trans("flarum-extension-manager.admin.composer.repositories.types.composer"),vcs:s().translator.trans("flarum-extension-manager.admin.composer.repositories.types.vcs"),path:s().translator.trans("flarum-extension-manager.admin.composer.repositories.types.path")};return m("div",{className:"Modal-body"},m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.name_label")),m("input",{className:"FormControl",bidi:this.name})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.type_label")),m(kt(),{options:t,value:this.repository().type,onchange:t=>this.repository({...this.repository(),type:t})})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.url")),m("input",{className:"FormControl",onchange:t=>this.repository({...this.repository(),url:t.target.value}),value:this.repository().url})),m("div",{className:"Form-group"},m(l(),{className:"Button Button--primary",onclick:this.submit.bind(this)},s().translator.trans("flarum-extension-manager.admin.composer.repositories.add_modal.submit_button"))))}submit(){this.attrs.onsubmit(this.repository(),this.name()),this.hide()}}flarum.reg.add("flarum-extension-manager","admin/components/RepositoryModal",Nt);class Mt extends vt{constructor(){super(...arguments),M(this,"type","composer")}title(){return s().translator.trans("flarum-extension-manager.admin.composer.title")}className(){return"ConfigureComposer"}content(){return m("div",{className:"Form ExtensionManager-SettingsGroups-content"},this.attrs.buildSettingComponent.call(this,{setting:"minimum-stability",label:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.label"),help:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.help"),type:"select",options:{stable:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.stable"),RC:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.rc"),beta:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.beta"),alpha:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.alpha"),dev:s().translator.trans("flarum-extension-manager.admin.composer.minimum_stability.options.dev")}}),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.composer.repositories.label")),m("div",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.composer.repositories.help")),m("div",{className:"ConfigureComposer-repositories"},Object.keys(this.setting("repositories")()||{}).map((t=>{const e=this.setting("repositories")()[t];return m("div",{className:"ButtonGroup ButtonGroup--full"},m(l(),{className:"Button",icon:{composer:"fas fa-cubes",vcs:"fas fa-code-branch",path:"fas fa-folder"}[e.type],onclick:()=>s().modal.show(Nt,{name:t,repository:e,onsubmit:(e,a)=>{const n=this.setting("repositories")();delete n[t],this.setting("repositories")(n),this.onchange(e,a)}})},t," (",e.type,")"),m(l(),{className:"Button Button--icon",icon:"fas fa-trash","aria-label":s().translator.trans("flarum-extension-manager.admin.composer.delete_repository_label"),onclick:()=>{if(confirm(S()(s().translator.trans("flarum-extension-manager.admin.composer.delete_repository_confirmation")))){const e={...this.setting("repositories")()};delete e[t],this.setting("repositories")(e)}}}))})))))}submitButton(){const t=super.submitButton();return t.push(m(l(),{className:"Button",onclick:()=>s().modal.show(Nt,{onsubmit:this.onchange.bind(this)})},s().translator.trans("flarum-extension-manager.admin.composer.add_repository_label"))),t}onchange(t,e){this.setting("repositories")({...this.setting("repositories")(),[e]:t})}}flarum.reg.add("flarum-extension-manager","admin/components/ConfigureComposer",Mt);const wt=flarum.reg.get("core","common/helpers/listItems");var Et=a.n(wt);class Ut extends(V()){constructor(){super(...arguments),M(this,"type",void 0),M(this,"host",void 0),M(this,"token",void 0)}oninit(t){super.oninit(t),this.type=rt()(this.attrs.type||"bearer"),this.host=rt()(this.attrs.host||""),this.token=rt()(this.attrs.token||"")}className(){return"AuthMethodModal Modal--small"}title(){const t=this.attrs.host?"edit":"add";return s().translator.trans("flarum-extension-manager.admin.auth_config.".concat(t,"_label"))}content(){const t={"github-oauth":s().translator.trans("flarum-extension-manager.admin.auth_config.types.github-oauth"),"gitlab-oauth":s().translator.trans("flarum-extension-manager.admin.auth_config.types.gitlab-oauth"),"gitlab-token":s().translator.trans("flarum-extension-manager.admin.auth_config.types.gitlab-token"),bearer:s().translator.trans("flarum-extension-manager.admin.auth_config.types.bearer")};return m("div",{className:"Modal-body"},m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.type_label")),m(kt(),{options:t,value:this.type(),onchange:this.type})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.host_label")),m("input",{className:"FormControl",bidi:this.host,placeholder:s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.host_placeholder")})),m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.token_label")),m("textarea",{className:"FormControl",oninput:t=>this.token(t.target.value),rows:"6",placeholder:this.token().startsWith("unchanged:")?S()(s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.unchanged_token_placeholder")):""},this.token().startsWith("unchanged:")?"":this.token())),m("div",{className:"Form-group"},m(l(),{className:"Button Button--primary",onclick:this.submit.bind(this)},s().translator.trans("flarum-extension-manager.admin.auth_config.add_modal.submit_button"))))}submit(){this.attrs.onsubmit(this.type(),this.host(),this.token()),this.hide()}}flarum.reg.add("flarum-extension-manager","admin/components/AuthMethodModal",Ut);class St extends vt{constructor(){super(...arguments),M(this,"type","auth")}title(){return s().translator.trans("flarum-extension-manager.admin.auth_config.title")}className(){return"ConfigureAuth"}content(){const t=Object.keys(this.settings),e=t.length&&t.every((t=>{const e=this.settings[t]();return Array.isArray(e)?e.length:Object.keys(e).length}));return m("div",{className:"ExtensionManager-SettingsGroups-content"},e?t.map((t=>{const e=this.settings[t]();return m("div",{className:"Form-group"},m("label",null,s().translator.trans("flarum-extension-manager.admin.auth_config.types.".concat(t))),m("div",{className:"ConfigureAuth-hosts"},Object.keys(e).map((a=>{const n=e[a];return m("div",{className:"ButtonGroup ButtonGroup--full"},m(l(),{className:"Button",icon:"fas fa-key",onclick:()=>s().modal.show(Ut,{type:t,host:a,token:n,onsubmit:this.onchange.bind(this,a)})},a),m(l(),{className:"Button Button--icon",icon:"fas fa-trash","aria-label":s().translator.trans("flarum-extension-manager.admin.auth_config.delete_label"),onclick:()=>{if(confirm(S()(s().translator.trans("flarum-extension-manager.admin.auth_config.delete_confirmation")))){const e={...this.setting(t)()};delete e[a],Object.keys(e).length?this.setting(t)(e):delete this.settings[t]}}}))}))))})):m("span",{className:"helpText"},s().translator.trans("flarum-extension-manager.admin.auth_config.no_auth_methods_configured")))}submitButton(){const t=super.submitButton();return t.push(m(l(),{className:"Button",loading:this.loading,onclick:()=>s().modal.show(Ut,{onsubmit:this.onchange.bind(this,null)})},s().translator.trans("flarum-extension-manager.admin.auth_config.add_label"))),t}onchange(t,e,a,n){const s={...this.setting(e)()};t&&delete s[t],s[a]=n,this.setting(e)(s)}}flarum.reg.add("flarum-extension-manager","admin/components/ConfigureAuth",St);class Bt extends(o()){content(){const t=s().registry.getSettings(this.extension.id),e=[s().translator.trans("flarum-extension-manager.admin.settings.access_warning")];return s().data.debugEnabled&&e.push(s().translator.trans("flarum-extension-manager.admin.settings.debug_mode_warning")),m("div",{className:"ExtensionPage-settings"},m("div",{className:"container"},m("div",{className:"ExtensionManager-warnings Form-group"},m(nt(),{className:"ExtensionManager-primaryWarning",type:"warning",dismissible:!1},m("ul",null,Et()(e)))),t?m("div",{className:"FormSectionGroup ExtensionManager-SettingsGroups"},m("div",{className:"FormSection"},m("label",null,s().translator.trans("flarum-extension-manager.admin.settings.title")),m("div",{className:"Form"},t.map(this.buildSettingComponent.bind(this))),m("div",{className:"Form-group Form--controls"},this.submitButton())),m(Mt,{buildSettingComponent:this.buildSettingComponent}),m(St,{buildSettingComponent:this.buildSettingComponent})):m("h3",{className:"ExtensionPage-subHeader"},s().translator.trans("core.admin.extension.no_settings"))))}sections(t){const e=super.sections(t);return e.setPriority("content",10),e.add("control",m(xt,null),8),"0"!==s().data.settings["flarum-extension-manager.queue_jobs"]&&s().data.settings["flarum-extension-manager.queue_jobs"]&&e.add("queue",m(et,null),5),e.remove("permissions"),e}onsaved(){super.onsaved(),m.redraw()}}flarum.reg.add("flarum-extension-manager","admin/components/SettingsPage",Bt);const qt=[(new(T().Admin)).setting((()=>({setting:"flarum-extension-manager.queue_jobs",label:s().translator.trans("flarum-extension-manager.admin.settings.queue_jobs"),help:m.trust(S()(s().translator.trans("flarum-extension-manager.admin.settings.queue_jobs_help",{basic_impl_link:"https://discuss.flarum.org/d/28151-database-queue-the-simplest-queue-even-for-shared-hosting",adv_impl_link:"https://discuss.flarum.org/d/21873-redis-sessions-cache-queues",php_version:"".concat(s().data.phpVersion,""),folder_perms_link:"https://docs.flarum.org/install#folder-ownership"}))),type:"boolean",disabled:s().data["flarum-extension-manager.using_sync_queue"]}))).setting((()=>({setting:"flarum-extension-manager.task_retention_days",label:s().translator.trans("flarum-extension-manager.admin.settings.task_retention_days"),help:s().translator.trans("flarum-extension-manager.admin.settings.task_retention_days_help"),type:"number"}))).page(Bt)];s().initializers.add("flarum-extension-manager",(e=>{e.store.models["extension-manager-tasks"]=_,e.extensionManager=new q,e.data["flarum-extension-manager.using_sync_queue"]&&(e.data.settings["flarum-extension-manager.queue_jobs"]="0"),(0,t.extend)(o().prototype,"topItems",(function(t){"flarum-extension-manager"===this.extension.id||g()(this.extension.id)||t.add("remove",m(l(),{className:"Button Button--danger",icon:"fas fa-times",onclick:()=>{e.modal.show(c()),e.request({url:"".concat(e.forum.attribute("apiUrl"),"/extension-manager/extensions/").concat(this.extension.id),method:"DELETE"}).then((t=>{null!=t&&t.processing?k():(e.alerts.show({type:"success"},e.translator.trans("flarum-extension-manager.admin.extensions.successful_remove")),window.location=e.forum.attribute("adminUrl"))})).finally((()=>{e.modal.close()}))}},e.translator.trans("flarum-extension-manager.admin.extensions.remove")))}))}))})(),module.exports=n})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/package-manager/js/dist/admin.js.map b/extensions/package-manager/js/dist/admin.js.map index 49c419769..2921027da 100755 --- a/extensions/package-manager/js/dist/admin.js.map +++ b/extensions/package-manager/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"6BAAoEA,EAAOC,QAAmJ,WAAW,aAAa,IAAIC,EAAEC,EAAEC,EAAE,IAAIC,EAAE,IAAIC,EAAE,KAAKC,EAAE,MAAMC,EAAE,sFAAsFC,EAAE,QAAQC,EAAE,OAAOC,EAAE,sKAAsKC,EAAE,CAACC,MAAMJ,EAAEK,OAAOJ,EAAEK,KAAKR,EAAES,MAAMV,EAAEW,QAAQZ,EAAEa,QAAQd,EAAEe,aAAa,EAAEC,MAAM,QAAQC,EAAE,SAASnB,GAAG,OAAOA,aAAaoB,CAAC,EAAEC,EAAE,SAASrB,EAAEC,EAAEC,GAAG,OAAO,IAAIkB,EAAEpB,EAAEE,EAAED,EAAEqB,GAAG,EAAEC,EAAE,SAASvB,GAAG,OAAOC,EAAEmB,EAAEpB,GAAG,GAAG,EAAEwB,EAAE,SAASxB,GAAG,OAAOA,EAAE,CAAC,EAAEyB,EAAE,SAASzB,GAAG,OAAOwB,EAAExB,GAAG0B,KAAKC,KAAK3B,GAAG0B,KAAKE,MAAM5B,EAAE,EAAE6B,EAAE,SAAS7B,GAAG,OAAO0B,KAAKI,IAAI9B,EAAE,EAAE+B,EAAE,SAAS/B,EAAEC,GAAG,OAAOD,EAAEwB,EAAExB,GAAG,CAACgC,UAAS,EAAGC,OAAO,GAAGJ,EAAE7B,GAAGC,GAAG,CAAC+B,UAAS,EAAGC,OAAO,GAAGjC,EAAEC,GAAG,CAAC+B,UAAS,EAAGC,OAAO,GAAG,EAAEb,EAAE,WAAW,SAASI,EAAExB,EAAEC,EAAEC,GAAG,IAAIC,EAAE+B,KAAK,GAAGA,KAAKC,GAAG,CAAC,EAAED,KAAKZ,GAAGpB,OAAE,IAASF,IAAIkC,KAAKE,IAAI,EAAEF,KAAKG,yBAAyBpC,EAAE,OAAOoB,EAAErB,EAAEU,EAAEa,EAAEtB,IAAIiC,MAAM,GAAG,iBAAiBlC,EAAE,OAAOkC,KAAKE,IAAIpC,EAAEkC,KAAKG,wBAAwBH,KAAK,GAAG,iBAAiBlC,EAAE,OAAOsC,OAAOC,KAAKvC,GAAGwC,SAAS,SAASvC,GAAGE,EAAEgC,GAAGZ,EAAEtB,IAAID,EAAEC,EAAE,IAAIiC,KAAKO,kBAAkBP,KAAK,GAAG,iBAAiBlC,EAAE,CAAC,IAAII,EAAEJ,EAAE0C,MAAMjC,GAAG,GAAGL,EAAE,CAAC,IAAIC,EAAED,EAAEuC,MAAM,GAAGC,KAAK,SAAS5C,GAAG,OAAO,MAAMA,EAAE6C,OAAO7C,GAAG,CAAC,IAAI,OAAOkC,KAAKC,GAAGxB,MAAMN,EAAE,GAAG6B,KAAKC,GAAGvB,OAAOP,EAAE,GAAG6B,KAAKC,GAAGjB,MAAMb,EAAE,GAAG6B,KAAKC,GAAGtB,KAAKR,EAAE,GAAG6B,KAAKC,GAAGrB,MAAMT,EAAE,GAAG6B,KAAKC,GAAGpB,QAAQV,EAAE,GAAG6B,KAAKC,GAAGnB,QAAQX,EAAE,GAAG6B,KAAKO,kBAAkBP,IAAI,CAAC,CAAC,OAAOA,IAAI,CAAC,IAAIL,EAAEL,EAAEsB,UAAU,OAAOjB,EAAEY,gBAAgB,WAAW,IAAIzC,EAAEkC,KAAKA,KAAKE,IAAIE,OAAOC,KAAKL,KAAKC,IAAIY,QAAQ,SAAS9C,EAAEC,GAAG,OAAOD,GAAGD,EAAEmC,GAAGjC,IAAI,GAAGQ,EAAER,EAAE,GAAG,EAAE,EAAE2B,EAAEQ,sBAAsB,WAAW,IAAIrC,EAAEkC,KAAKE,IAAIF,KAAKC,GAAGxB,MAAMc,EAAEzB,EAAEO,GAAGP,GAAGO,EAAE2B,KAAKC,GAAGvB,OAAOa,EAAEzB,EAAEQ,GAAGR,GAAGQ,EAAE0B,KAAKC,GAAGtB,KAAKY,EAAEzB,EAAEK,GAAGL,GAAGK,EAAE6B,KAAKC,GAAGrB,MAAMW,EAAEzB,EAAEI,GAAGJ,GAAGI,EAAE8B,KAAKC,GAAGpB,QAAQU,EAAEzB,EAAEG,GAAGH,GAAGG,EAAE+B,KAAKC,GAAGnB,QAAQS,EAAEzB,EAAEE,GAAGF,GAAGE,EAAEgC,KAAKC,GAAGlB,aAAajB,CAAC,EAAE6B,EAAEmB,YAAY,WAAW,IAAIhD,EAAE+B,EAAEG,KAAKC,GAAGxB,MAAM,KAAKV,EAAE8B,EAAEG,KAAKC,GAAGvB,OAAO,KAAKV,GAAGgC,KAAKC,GAAGtB,MAAM,EAAEqB,KAAKC,GAAGjB,QAAQhB,GAAG,EAAEgC,KAAKC,GAAGjB,OAAO,IAAIf,EAAE4B,EAAE7B,EAAE,KAAKE,EAAE2B,EAAEG,KAAKC,GAAGrB,MAAM,KAAKT,EAAE0B,EAAEG,KAAKC,GAAGpB,QAAQ,KAAKT,EAAE4B,KAAKC,GAAGnB,SAAS,EAAEkB,KAAKC,GAAGlB,eAAeX,GAAG4B,KAAKC,GAAGlB,aAAa,KAAK,IAAIV,EAAEwB,EAAEzB,EAAE,KAAKE,EAAER,EAAEgC,UAAU/B,EAAE+B,UAAU7B,EAAE6B,UAAU5B,EAAE4B,UAAU3B,EAAE2B,UAAUzB,EAAEyB,SAASvB,EAAEL,EAAE6B,QAAQ5B,EAAE4B,QAAQ1B,EAAE0B,OAAO,IAAI,GAAGvB,GAAGF,EAAE,IAAI,IAAI,IAAIR,EAAEiC,OAAOhC,EAAEgC,OAAO9B,EAAE8B,OAAOxB,EAAEL,EAAE6B,OAAO5B,EAAE4B,OAAO1B,EAAE0B,OAAO,MAAM,MAAMvB,GAAG,OAAOA,EAAE,MAAMA,CAAC,EAAEmB,EAAEoB,OAAO,WAAW,OAAOf,KAAKc,aAAa,EAAEnB,EAAEI,OAAO,SAASjC,GAAG,IAAIE,EAAEF,GAAG,sBAAsBG,EAAE,CAAC+C,EAAEhB,KAAKC,GAAGxB,MAAMwC,GAAGlD,EAAEA,EAAEiC,KAAKC,GAAGxB,MAAM,EAAE,KAAKyC,KAAKnD,EAAEA,EAAEiC,KAAKC,GAAGxB,MAAM,EAAE,KAAK0C,EAAEnB,KAAKC,GAAGvB,OAAO0C,GAAGrD,EAAEA,EAAEiC,KAAKC,GAAGvB,OAAO,EAAE,KAAK2C,EAAErB,KAAKC,GAAGtB,KAAK2C,GAAGvD,EAAEA,EAAEiC,KAAKC,GAAGtB,KAAK,EAAE,KAAK4C,EAAEvB,KAAKC,GAAGrB,MAAM4C,GAAGzD,EAAEA,EAAEiC,KAAKC,GAAGrB,MAAM,EAAE,KAAKS,EAAEW,KAAKC,GAAGpB,QAAQ4C,GAAG1D,EAAEA,EAAEiC,KAAKC,GAAGpB,QAAQ,EAAE,KAAKd,EAAEiC,KAAKC,GAAGnB,QAAQ4C,GAAG3D,EAAEA,EAAEiC,KAAKC,GAAGnB,QAAQ,EAAE,KAAK6C,IAAI5D,EAAEA,EAAEiC,KAAKC,GAAGlB,aAAa,EAAE,MAAM,OAAOf,EAAE4D,QAAQxD,GAAG,SAASN,EAAEC,GAAG,OAAOA,GAAG8D,OAAO5D,EAAEH,GAAG,GAAG,EAAE6B,EAAEmC,GAAG,SAAShE,GAAG,OAAOkC,KAAKE,IAAI1B,EAAEa,EAAEvB,GAAG,EAAE6B,EAAEoC,IAAI,SAASjE,GAAG,IAAIC,EAAEiC,KAAKE,IAAIlC,EAAEqB,EAAEvB,GAAG,MAAM,iBAAiBE,EAAED,GAAG,IAAIA,EAAE,UAAUC,EAAEuB,EAAExB,EAAES,EAAER,IAAIgC,KAAKC,GAAGjC,GAAG,IAAID,EAAE,EAAEA,CAAC,EAAE4B,EAAEqC,IAAI,SAASlE,EAAEC,EAAEC,GAAG,IAAIC,EAAE,OAAOA,EAAEF,EAAED,EAAEU,EAAEa,EAAEtB,IAAIkB,EAAEnB,GAAGA,EAAEoC,IAAIf,EAAErB,EAAEkC,MAAME,IAAIf,EAAEa,KAAKE,IAAIjC,GAAGD,GAAG,EAAE,GAAGgC,KAAK,EAAEL,EAAEsC,SAAS,SAASnE,EAAEC,GAAG,OAAOiC,KAAKgC,IAAIlE,EAAEC,GAAE,EAAG,EAAE4B,EAAEuC,OAAO,SAASpE,GAAG,IAAIC,EAAEiC,KAAKmC,QAAQ,OAAOpE,EAAEqB,GAAGtB,EAAEC,CAAC,EAAE4B,EAAEwC,MAAM,WAAW,OAAOhD,EAAEa,KAAKE,IAAIF,KAAK,EAAEL,EAAEyC,SAAS,SAASrE,GAAG,OAAOD,IAAIkE,IAAIhC,KAAKE,IAAI,MAAMgC,OAAOlC,KAAKZ,IAAIiD,SAAStE,EAAE,EAAE4B,EAAEZ,aAAa,WAAW,OAAOiB,KAAK+B,IAAI,eAAe,EAAEpC,EAAE2C,eAAe,WAAW,OAAOtC,KAAK8B,GAAG,eAAe,EAAEnC,EAAEb,QAAQ,WAAW,OAAOkB,KAAK+B,IAAI,UAAU,EAAEpC,EAAE4C,UAAU,WAAW,OAAOvC,KAAK8B,GAAG,UAAU,EAAEnC,EAAEd,QAAQ,WAAW,OAAOmB,KAAK+B,IAAI,UAAU,EAAEpC,EAAE6C,UAAU,WAAW,OAAOxC,KAAK8B,GAAG,UAAU,EAAEnC,EAAEf,MAAM,WAAW,OAAOoB,KAAK+B,IAAI,QAAQ,EAAEpC,EAAE8C,QAAQ,WAAW,OAAOzC,KAAK8B,GAAG,QAAQ,EAAEnC,EAAEhB,KAAK,WAAW,OAAOqB,KAAK+B,IAAI,OAAO,EAAEpC,EAAE+C,OAAO,WAAW,OAAO1C,KAAK8B,GAAG,OAAO,EAAEnC,EAAEX,MAAM,WAAW,OAAOgB,KAAK+B,IAAI,QAAQ,EAAEpC,EAAEgD,QAAQ,WAAW,OAAO3C,KAAK8B,GAAG,QAAQ,EAAEnC,EAAEjB,OAAO,WAAW,OAAOsB,KAAK+B,IAAI,SAAS,EAAEpC,EAAEiD,SAAS,WAAW,OAAO5C,KAAK8B,GAAG,SAAS,EAAEnC,EAAElB,MAAM,WAAW,OAAOuB,KAAK+B,IAAI,QAAQ,EAAEpC,EAAEkD,QAAQ,WAAW,OAAO7C,KAAK8B,GAAG,QAAQ,EAAExC,CAAC,CAAhtG,GAAotG,OAAO,SAAStB,EAAEC,EAAEC,GAAGJ,EAAEI,EAAEH,EAAEG,IAAI4E,SAAS5E,EAAE6E,SAAS,SAASjF,EAAEC,GAAG,IAAIC,EAAEE,EAAEgE,SAAS,OAAO/C,EAAErB,EAAE,CAACsB,GAAGpB,GAAGD,EAAE,EAAEG,EAAE8E,WAAW/D,EAAE,IAAId,EAAEF,EAAE2C,UAAUoB,IAAI5D,EAAEH,EAAE2C,UAAUqB,SAAShE,EAAE2C,UAAUoB,IAAI,SAASlE,EAAEC,GAAG,OAAOkB,EAAEnB,KAAKA,EAAEA,EAAEwE,kBAAkBnE,EAAE8E,KAAKjD,KAAP7B,CAAaL,EAAEC,EAAE,EAAEE,EAAE2C,UAAUqB,SAAS,SAASnE,EAAEC,GAAG,OAAOkB,EAAEnB,KAAKA,EAAEA,EAAEwE,kBAAkBlE,EAAE6E,KAAKjD,KAAP5B,CAAaN,EAAEC,EAAE,CAAC,CAAC,CAA56IA,E,GCC/EmF,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaxF,QAGrB,IAAID,EAASsF,EAAyBE,GAAY,CAGjDvF,QAAS,CAAC,GAOX,OAHA0F,EAAoBH,GAAUI,KAAK5F,EAAOC,QAASD,EAAQA,EAAOC,QAASsF,GAGpEvF,EAAOC,OACf,CCrBAsF,EAAoBnF,EAAKJ,IACxB,IAAI6F,EAAS7F,GAAUA,EAAO8F,WAC7B,IAAO9F,EAAiB,QACxB,IAAM,EAEP,OADAuF,EAAoB3E,EAAEiF,EAAQ,CAAElF,EAAGkF,IAC5BA,CAAM,ECLdN,EAAoB3E,EAAI,CAACX,EAAS8F,KACjC,IAAI,IAAIC,KAAOD,EACXR,EAAoB/E,EAAEuF,EAAYC,KAAST,EAAoB/E,EAAEP,EAAS+F,IAC5ExD,OAAOyD,eAAehG,EAAS+F,EAAK,CAAEE,YAAY,EAAM/B,IAAK4B,EAAWC,IAE1E,ECNDT,EAAoB/E,EAAI,CAAC2F,EAAKC,IAAU5D,OAAOQ,UAAUqD,eAAeT,KAAKO,EAAKC,GCClFb,EAAoBhF,EAAKN,IACH,oBAAXqG,QAA0BA,OAAOC,aAC1C/D,OAAOyD,eAAehG,EAASqG,OAAOC,YAAa,CAAEC,MAAO,WAE7DhE,OAAOyD,eAAehG,EAAS,aAAc,CAAEuG,OAAO,GAAO,E,mCCL9D,MAAM,EAA+BC,OAAOC,IAAIvC,IAAI,OAAQ,iBCAtD,EAA+BsC,OAAOC,IAAIvC,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BsC,OAAOC,IAAIvC,IAAI,OAAQ,kC,aCA5D,MAAM,EAA+BsC,OAAOC,IAAIvC,IAAI,OAAQ,4B,aCA5D,MAAM,EAA+BsC,OAAOC,IAAIvC,IAAI,OAAQ,iC,aCA5D,MAAM,EAA+BsC,OAAOC,IAAIvC,IAAI,OAAQ,kC,aCA5D,MAAM,EAA+BsC,OAAOC,IAAIvC,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BsC,OAAOC,IAAIvC,IAAI,OAAQ,sC,aCA5D,MAAM,EAA+BsC,OAAOC,IAAIvC,IAAI,OAAQ,6B,aCA5D,MAAM,EAA+BsC,OAAOC,IAAIvC,IAAI,OAAQ,0B,aCA5D,MAAM,EAA+BsC,OAAOC,IAAIvC,IAAI,OAAQ,yB,aCA5D,MAAM,EAA+BsC,OAAOC,IAAIvC,IAAI,OAAQ,4B,aCA5D,MAAM,EAA+BsC,OAAOC,IAAIvC,IAAI,OAAQ,0B,aCA5D,MAAM,EAA+BsC,OAAOC,IAAIvC,IAAI,OAAQ,0B,aCE7C,MAAMwC,UAAc,KACjCC,KAAKC,GACH,MAAM,UACJC,EAAS,KACTC,KACGC,GACD5E,KAAK4E,MACT,OAAOvF,EAAE,OAAQe,OAAOyE,OAAO,CAC7BH,UAAW,IAAU,CAAC,QAAS,UAAUI,OAAO9E,KAAK4E,MAAMD,MAAOD,KACjEE,GAAQH,EAAMM,SACnB,EAEFV,OAAOC,IAAItC,IAAI,2BAA4B,yBAA0BuC,GCdrE,MAAM,EAA+BF,OAAOC,IAAIvC,IAAI,OAAQ,2B,aCE7C,MAAMiD,UAAwB,KAC3CN,YACE,MAAO,yBACT,CACAO,QACE,OAAO,qBAAqB,4DAA4DH,OAAO9E,KAAK4E,MAAMM,KAAKC,aACjH,CACAC,UACE,OAAO/F,EAAE,MAAO,CACdqF,UAAW,cACVrF,EAAE,MAAO,CACVqF,UAAW,wBACmB,YAA7B1E,KAAK4E,MAAMM,KAAKG,UAA0BhG,EAAE,MAAO,CACpDqF,UAAW,cACVrF,EAAE,QAAS,KAAM,qBAAqB,6EAA8EA,EAAE,MAAO,CAC9HqF,UAAW,kDACV1E,KAAK4E,MAAMM,KAAKI,gBAAkB,qBAAqB,2DAA6DtF,KAAK4E,MAAMM,KAAKI,iBAAmB,qBAAqB,8EAA+EjG,EAAE,MAAO,CACrQqF,UAAW,cACVrF,EAAE,QAAS,KAAM,qBAAqB,uEAAwEA,EAAE,MAAO,CACxHqF,UAAW,4CACVrF,EAAE,OAAQ,KAAM,cAAeW,KAAK4E,MAAMM,KAAKK,aAAclG,EAAE,MAAO,CACvEqF,UAAW,cACVrF,EAAE,QAAS,KAAM,qBAAqB,sEAAuEA,EAAE,MAAO,CACvHqF,UAAW,2CACVrF,EAAE,OAAQ,KAAMA,EAAE,MAAO,KAAMW,KAAK4E,MAAMM,KAAKM,cACpD,EAEFnB,OAAOC,IAAItC,IAAI,2BAA4B,mCAAoCgD,G,sBC5BhE,SAASS,EAAcC,EAAOC,GAC3CC,MAAMC,OAAO,KACb,MAAMC,EAAeF,MAAMD,GAAKI,KAAKL,GACrC,OAAOE,MAAM7C,SAAS+C,GAAc1D,UACtC,CACAiC,OAAOC,IAAItC,IAAI,2BAA4B,4BAA6ByD,GCAzD,MAAMO,UAAmB,KACtCxB,OACE,OAAOnF,EAAE,MAAO,CACdqF,UAAW,0CACVrF,EAAE,IAAQ,CACX4G,UAAWjG,KAAK4E,MAAMsB,KAAKC,WAAa,yCACxClB,MAAO,qBAAqB,2CAC5BmB,QAAS,IAAMpG,KAAK4E,MAAMsB,KAAKG,OAC/BC,KAAM,sBACN5B,UAAW,6CACTrF,EAAE,OAAQ,CACZqF,UAAW,2BACV,qBAAqB,2CAA4C,CAClE6B,QAASvG,KAAK4E,MAAMsB,KAAKM,aAAe,EACxCC,MAAOzG,KAAK4E,MAAMsB,KAAKQ,mBACpBrH,EAAE,IAAQ,CACb4G,UAAWjG,KAAK4E,MAAMsB,KAAKS,WAAa,yCACxC1B,MAAO,qBAAqB,2CAC5BmB,QAAS,IAAMpG,KAAK4E,MAAMsB,KAAKU,OAC/BN,KAAM,uBACN5B,UAAW,6CAEf,EAEFL,OAAOC,IAAItC,IAAI,2BAA4B,8BAA+BgE,GCjB3D,MAAMa,UAAqB,KACxCC,OAAOrC,GACLsC,MAAMD,OAAOrC,GACb,iCACF,CACAD,OACE,OAAOnF,EAAE,UAAW,CAClB2H,GAAI,gCACJtC,UAAW,2DACVrF,EAAE,MAAO,CACVqF,UAAW,yEACVrF,EAAE,MAAO,CACVqF,UAAW,aACVrF,EAAE,KAAM,CACTqF,UAAW,kBACV,qBAAqB,wDAAyDrF,EAAE,IAAQ,CACzFqF,UAAW,sBACX4B,KAAM,kBACNF,QAAS,IAAM,kCACf,aAAc,qBAAqB,yDACnCH,SAAU,6CACN5G,EAAE,MAAO,CACbqF,UAAW,aACV1E,KAAKiH,cACV,CACAC,UACE,MAAMC,EAAQ,IAAI,KA4ElB,OA3EAA,EAAMnF,IAAI,YAAa,CACrBoF,MAAO,IAAY,qBAAqB,oEACxChC,QAASF,GAAQ7F,EAAE,MAAO,CACxBqF,UAAW,yCACVrF,EAAE,OAAQ,CACXqF,UAAW,8CACV1E,KAAKqH,cAAcnC,EAAKC,cAAe9F,EAAE,OAAQ,CAClDqF,UAAW,8CACV,qBAAqB,4DAA4DI,OAAOI,EAAKC,iBAC/F,IACHgC,EAAMnF,IAAI,UAAW,CACnBoF,MAAO,IAAY,qBAAqB,kEACxChC,QAASF,IACP,IAAIoC,EACJ,MAAMC,EAAY,oBAAwD,OAAnCD,EAAgBpC,EAAKsC,gBAAqB,EAASF,EAAc1F,QAAQ,gCAAiC,MACjJ,OAAO2F,EAAYlI,EAAE,IAAM,CACzBqF,UAAW,sCACX+C,KAAM,UAAU,YAAa,CAC3BT,GAAIO,EAAUP,MAEf3H,EAAE,MAAO,CACVqF,UAAW,yDACXgD,MAAOH,EAAUjB,QACdiB,EAAUjB,MAAQjH,EAAE,IAAM,CAC7BsI,KAAMJ,EAAUjB,KAAKqB,QAClBtI,EAAE,MAAO,CACZqF,UAAW,+CACVrF,EAAE,OAAQ,CACXqF,UAAW,6CACV6C,EAAUK,MAAM,oBAAoB3C,OAAQ5F,EAAE,OAAQ,CACvDqF,UAAW,4CACVQ,EAAKsC,aAAetC,EAAKsC,SAAS,GAEtC,IACHL,EAAMnF,IAAI,SAAU,CAClBoF,MAAO,IAAY,qBAAqB,iEACxChC,QAASF,GAAQ7F,EAAE,IAAK,KAAMA,EAAEkF,EAAO,CACrCG,UAAW,qCACXC,KAAM,CACJkD,QAAS,UACTC,QAAS,QACTC,QAAS,UACTC,QAAS,WACT9C,EAAKG,WACN,qBAAqB,0DAA0DP,OAAOI,EAAKG,YAAa,CAAC,UAAW,WAAW4C,SAAS/C,EAAKG,WAAahG,EAAE,IAAkB,CAC/K6I,KAAM,QACNC,QAAS,aAEV,IACHhB,EAAMnF,IAAI,cAAe,CACvBoF,MAAO,IAAY,qBAAqB,uEACxChC,QAASF,GAASA,EAAKkD,aAAgBlD,EAAKmD,aAAyGhJ,EAAE,IAAS,CAC9JiJ,KAAM,GAAGxD,OAAOc,MAAMV,EAAKkD,aAAarI,OAAO,UAAW,MAAM+E,OAAOc,MAAMV,EAAKmD,cAActI,OAAO,YACtGV,EAAE,OAAQ,KAAMoG,EAAcP,EAAKkD,YAAalD,EAAKmD,gBAFG,qBAAqB,oEAG/E,IACHlB,EAAMnF,IAAI,aAAc,CACtBoF,MAAO,IAAY,qBAAqB,2EACxChC,QAASF,GAAQ7F,EAAE,OAAQ,KAAM6F,EAAKqD,mBACrC,IACHpB,EAAMnF,IAAI,UAAW,CACnBoF,MAAO,IAAY,qBAAqB,kEACxChC,QAASF,GAAQ7F,EAAE,IAAQ,CACzBqF,UAAW,0CACX4B,KAAM,kBACN,aAAc,qBAAqB,iEAInCF,QAAS,IAAM,eAAepB,EAAiB,CAC7CE,SAEFe,SAAU,CAAC,UAAW,WAAWgC,SAAS/C,EAAKG,YAEjDX,UAAW,kBACV,IACIyC,CACT,CACAF,aACE,MAAMuB,EAAQ,sCACd,IAAKA,EACH,OAAOnJ,EAAE,IAAkB,MAE7B,GAAImJ,IAAUA,EAAMC,OAClB,OAAOpJ,EAAE,KAAM,CACbqF,UAAW,2BACV,qBAAqB,uDAE1B,MAAMwC,EAAUlH,KAAKkH,UACrB,OAAO7H,EAAE,IAAK,KAAMA,EAAE,QAAS,CAC7BqF,UAAW,qCACVrF,EAAE,QAAS,KAAMA,EAAE,KAAM,KAAM6H,EAAQwB,UAAUhI,KAAI,CAACiI,EAAMC,IAAUvJ,EAAE,KAAM,CAC/EuE,IAAKgF,GACJD,EAAKvB,WAAW/H,EAAE,QAAS,KAAMmJ,EAAM9H,KAAI,CAACwE,EAAM0D,IAAUvJ,EAAE,KAAM,CACrEuE,IAAKgF,GACJ1B,EAAQwB,UAAUhI,KAAI,CAACiI,EAAMC,KAC9B,MAAM,MACJxB,EAAK,QACLhC,KACGR,GACD+D,EACJ,OAAOtJ,EAAE,KAAMe,OAAOyE,OAAO,CAC3BjB,IAAKgF,GACJhE,GAAQQ,EAAQF,GAAM,SACnB7F,EAAE2G,EAAY,CACpBE,KAAM,6BAEV,CACAmB,cAAclC,GACZ,OAAO9F,EAAE,IAAM,CACbsI,KAAM,CACJkB,aAAc,kBACdC,aAAc,cACdC,aAAc,cACdC,cAAe,cACfC,kBAAmB,kBACnBC,iBAAkB,eAClBC,iBAAkB,6BAClBC,QAAS,6BACTjE,IAEN,EAEFd,OAAOC,IAAItC,IAAI,2BAA4B,gCAAiC6E,GClK5E,MAAM,EAA+BxC,OAAOC,IAAIvC,IAAI,OAAQ,2B,aCA7C,SAASsH,EAAQtF,GAG9B,OAAOsF,EAAU,mBAAqBnF,QAAU,iBAAmBA,OAAOoF,SAAW,SAAUvF,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAO,mBAAqBG,QAAUH,EAAIwF,cAAgBrF,QAAUH,IAAQG,OAAOtD,UAAY,gBAAkBmD,CAC1H,EAAGsF,EAAQtF,EACb,CCPe,SAASyF,EAAgBzF,EAAKH,EAAKQ,GAYhD,OAXAR,ECAa,SAAwB6F,GACrC,IAAI7F,ECFS,SAAsB8F,EAAOC,GAC1C,GAAuB,WAAnBN,EAAQK,IAAiC,OAAVA,EAAgB,OAAOA,EAC1D,IAAIE,EAAOF,EAAMxF,OAAO2F,aACxB,QAAavG,IAATsG,EAAoB,CACtB,IAAIE,EAAMF,EAAKpG,KAAKkG,EAAOC,GAC3B,GAAqB,WAAjBN,EAAQS,GAAmB,OAAOA,EACtC,MAAM,IAAIC,UAAU,+CACtB,CACA,OAA4BlI,OAAiB6H,EAC/C,CDPYG,CAAYJ,EAAK,UAC3B,MAAwB,WAAjBJ,EAAQzF,GAAoBA,EAAM/B,OAAO+B,EAClD,CDHQoG,CAAcpG,MACTG,EACT3D,OAAOyD,eAAeE,EAAKH,EAAK,CAC9BQ,MAAOA,EACPN,YAAY,EACZmG,cAAc,EACdC,UAAU,IAGZnG,EAAIH,GAAOQ,EAENL,CACT,CGdA,MAAM,EAA+BM,OAAOC,IAAIvC,IAAI,OAAQ,uB,aCK7C,MAAMoI,UAAkB,KACrCZ,cACExC,SAASqD,WACTZ,EAAgBxJ,KAAM,mBAAe,EACvC,CACA8G,OAAOrC,GACLsC,MAAMD,OAAOrC,GACbzE,KAAKqK,YAAc,IAAO,GAC5B,CACA7F,OACE,OAAOnF,EAAE,MAAO,CACdqF,UAAW,yCACVrF,EAAE,QAAS,CACZiL,QAAS,qBACR,qBAAqB,sDAAuDjL,EAAE,MAAO,CACtFqF,UAAW,YACV,qBAAqB,yDAA0D,CAChF6F,UAAWlL,EAAE,IAAK,CAChBoI,KAAM,yBACL,iBACH+C,cAAenL,EAAE,IAAK,CACpBoI,KAAM,+BAERgD,KAAMpL,EAAE,OAAQ,SACbA,EAAE,MAAO,CACZqF,UAAW,yBACVrF,EAAE,QAAS,CACZqF,UAAW,cACXsC,GAAI,oBACJ0D,YAAa,sBACbC,KAAM3K,KAAKqK,cACThL,EAAE,IAAQ,CACZqF,UAAW,SACX4B,KAAM,kBACNF,QAASpG,KAAK4K,SAAS3H,KAAKjD,MAC5B6K,QAAS,uCAAuC,qBAChD5E,SAAU,oDACT,qBAAqB,uDAC1B,CACA6E,OACE,MAAO,CACLtD,QAASxH,KAAKqK,cAElB,CACAO,WACE,4CAA4C5K,KAAK8K,OACnD,EAEFzG,OAAOC,IAAItC,IAAI,2BAA4B,6BAA8BmI,GCrDzE,MAAM,EAA+B9F,OAAOC,IAAIvC,IAAI,OAAQ,4B,aCC7C,SAAS,EAAC7D,GACvB,wCAAwC,MACxC,MAAM6M,EAAQ7M,EAAE8M,SAASC,OAAO,GAChC,IAAK,CAAC,2BAA4B,8BAA+B,2BAA2BhD,SAAS8C,EAAMN,MACzG,MAAMvM,EAGR,OADA,mBACQ6M,EAAMN,MACZ,IAAK,2BACCM,EAAMG,eACR,gBAAgB,CACdvG,KAAM,SACL,qBAAqB,2DAA2DG,OAAOiG,EAAMG,iBAChG,mBAEA,gBAAgB,CACdvG,KAAM,SACL,qBAAqB,uEAE1B,MACF,IAAK,8BACH,gBAAgB,CACdA,KAAM,SACL,qBAAqB,0EACxB,kBACA,MACF,IAAK,0BACH,gBAAgB,CACdA,KAAM,SACL,qBAAqB,sEACxB,kBAEN,CC5Be,MAAMwG,UAAoB,KACvC5B,cACExC,SAASqD,WACTZ,EAAgBxJ,KAAM,WAAW,GACjCwJ,EAAgBxJ,KAAM,SAAU,KAClC,CACA0E,YACE,MAAO,0BACT,CACAO,QACE,OAAO,qBAAqB,qDAC9B,CACAmG,SAAS3G,GACPsC,MAAMqE,SAAS3G,GACfzE,KAAKqL,eACP,CACAjG,UACE,OAAO/F,EAAE,MAAO,CACdqF,UAAW,cACV1E,KAAK6K,QAAUxL,EAAE,IAAkB,MAAQA,EAAE,MAAO,CACrDqF,UAAW,wBACV1E,KAAKsL,QACV,CACAD,gBACE,YAAY,CACVE,OAAQ,OACRC,IAAK,GAAG1G,OAAO,oBAAoB,UAAW,8BAC9C2G,KAAM,CACJX,KAAM,CACJtD,QAASxH,KAAK4E,MAAM4C,YAGvBkE,MAAKV,IACNhL,KAAK6K,SAAU,EACf7K,KAAKsL,OAASN,EAASF,KAAKa,OAC5BtM,EAAEuM,QAAQ,IACTC,MAAMC,EACX,EAEFzH,OAAOC,IAAItC,IAAI,2BAA4B,+BAAgCmJ,GC5C3E,MAAM,EAA+B9G,OAAOC,IAAIvC,IAAI,OAAQ,8B,aCS7C,MAAMgK,UAAsB,KACzCvH,KAAKC,GACH,IAAIuH,EACJ,MAAM,UACJzE,EAAS,QACT0E,EAAO,cACPC,EAAa,cACbC,EAAa,OACbC,EAAM,SACNC,GACErM,KAAK4E,MACH0H,EAAoE,OAAnDN,EAAuBC,EAAQ,iBAA2BD,EAAuBC,EAAQ,kBAAoBG,EAASH,EAAQ,gBAAkB,KACvK,OAAO5M,EAAE,MAAO,CACdqF,UAAW,IAAU,CACnB,8BAA8B,EAC9B,mCAAoC0H,EACpC,qCAAsCC,KAEvChN,EAAE,MAAO,CACVqF,UAAW,gDACXgD,MAAOH,EAAUjB,MAChBiB,EAAUjB,KAAOjH,EAAE,IAAM,CAC1BsI,KAAMJ,EAAUjB,KAAKqB,OAClB,IAAKtI,EAAE,MAAO,CACjBqF,UAAW,mCACVrF,EAAE,MAAO,CACVqF,UAAW,mCACV6C,EAAUK,MAAM,oBAAoB3C,OAAQ5F,EAAE,MAAO,CACtDqF,UAAW,sCACVrF,EAAE,OAAQ,CACXqF,UAAW,8CACV1E,KAAKuM,QAAQN,EAAiB,UAAKK,EAAgBjN,EAAEkF,EAAO,CAC7DG,UAAW,4CACXC,KAAMsH,EAAQ,gBAAkB,UAAY,WAC3CjM,KAAKuM,QAAQD,IAAkB,OAAQjN,EAAE,MAAO,CACjDqF,UAAW,uCACVwH,GAA0C,mBAAlBA,EAA+B7M,EAAE,IAAS,CACnEiJ,KAAM,qBAAqB,qDAC1BjJ,EAAE,IAAQ,CACXiH,KAAM,6BACN5B,UAAW,mCACX0B,QAAS8F,EACT,aAAc,qBAAqB,uDAC/BA,EAAgB7M,EAAE,IAAU,CAChCmN,gBAAiB,mCACjBlG,KAAM,6BACNc,MAAO,qBAAqB,qDAC3B/H,EAAE,IAAQ,CACXiH,KAAM,6BACN5B,UAAW,SACX0B,QAAS8F,EAAcO,MACtB,qBAAqB,gEAAiEpN,EAAE,IAAQ,CACjGiH,KAAM,6BACN5B,UAAW,SACX0B,QAAS8F,EAAcQ,KACvBzG,UAAWgG,EAAQ,sBAClB,qBAAqB,iEAAmE,KAAME,EAAgB9M,EAAE,IAAS,CAC1HiJ,KAAM,qBAAqB,2EAC1BjJ,EAAE,IAAQ,CACXiH,KAAM,4BACN5B,UAAW,kDACX0B,QAAS,IAAM,eAAe+E,EAAa,CACzC3D,QAASD,EAAUI,OAErB,aAAc,qBAAqB,6EAC/B,MACR,CACA4E,QAAQI,GACN,MAAuB,MAAhBA,EAAEC,OAAO,GAAaD,EAAEE,UAAU,GAAKF,CAChD,EAEFtI,OAAOC,IAAItC,IAAI,2BAA4B,iCAAkC+J,GCvE9D,MAAMe,UAAqB,KACxCvD,cACExC,SAASqD,WACTZ,EAAgBxJ,KAAM,mBAAe,EACvC,CACA8G,OAAOrC,GACLsC,MAAMD,OAAOrC,GACbzE,KAAK+M,YAAc/M,KAAK4E,MAAMmI,WAChC,CACAvI,OAEE,OAAOnF,EAAE,MAAO,CACdqF,UAAW,IAAU,6DAA8D,CACjF,uCAAoE,YAA5B1E,KAAK+M,YAAY1H,OACzD,uDAAwDrF,KAAK+M,YAAYC,uBAAuBvE,UAEjGpJ,EAAE,MAAO,CACV4N,IAAK,cACLC,IAAK,oBAAoB,WAAa,2DACpC7N,EAAE,QAAS,KAAM,qBAAqB,qDAAsD,CAC9FkN,QAASvM,KAAK4E,MAAMuI,WAAW,mBAC5B9N,EAAE,IAAK,CACVqF,UAAW,YACV,qBAAqB,6DAA8DrF,EAAE,MAAO,CAC7FqF,UAAW,oCACVrF,EAAE,IAAS,CACZiJ,KAAM,qBAAqB,8DAC1BjJ,EAAE,IAAQ,CACXqF,UAAW,SACX4B,KAAM,cACNF,QAASpG,KAAKoN,OAAOnK,KAAKjD,MAAM,GAChCiG,SAAU,oDACT,qBAAqB,0DAA2D5G,EAAE,IAAQ,CAC3FqF,UAAW,wBACX4B,KAAM,cACNF,QAASpG,KAAKoN,OAAOnK,KAAKjD,MAAM,GAChCiG,SAAU,oDACT,qBAAqB,yDAA0DjG,KAAK+M,YAAYC,uBAAuBvE,OAASpJ,EAAE,MAAO,CAC1IqF,UAAW,wFACV1E,KAAK+M,YAAYC,uBAAuBtM,KAAI6G,GAAalI,EAAE0M,EAAe,CAC3ExE,UAAW,oBAAoBA,EAAU3F,QAAQ,UAAW,IAAIA,QAAQ,cAAe,IAAIA,QAAQ,IAAK,MACxGqK,QAAS,CAAC,EACVC,cAAe,KACfG,UAAU,OACL,KAAkC,YAA5BrM,KAAK+M,YAAY1H,OAAuBhG,EAAE,IAAO,CAC5DsF,KAAM,QACND,UAAW,uCACX2I,aAAa,EACbC,SAAU,CAACjO,EAAE,IAAQ,CACnBqF,UAAW,mEACX4B,KAAM,yBACNF,QAAS,IAAM,eAAe+E,EAAa,CACzC3D,QAAS,iBAEV,qBAAqB,+DACvBnI,EAAE,IAAK,CACRqF,UAAW,6CACV,qBAAqB,+DAAiE,KAC3F,CACA0I,OAAOG,GACL,yCAAyC,CACvCA,UAEJ,EAEFlJ,OAAOC,IAAItC,IAAI,2BAA4B,gCAAiC8K,GClE7D,MAAMU,WAAgB,KACnChJ,OACE,MAAMiJ,EAAO,wCACb,MAAO,CAACpO,EAAE,MAAO,CACfqF,UAAW,cACVrF,EAAE,QAAS,KAAM,qBAAqB,yDAA0DA,EAAE,MAAO,CAC1GqF,UAAW,YACV,qBAAqB,wDAAyD1E,KAAK0N,sBAAuBrO,EAAE,MAAO,CACpHqF,UAAW,oCACV1E,KAAK2N,eAAejF,WAAY1I,KAAK4N,wBAAyBH,GAAQA,EAAKjG,QAAQ,gBAAkBnI,EAAEyN,EAAc,CACtHK,WAAYM,EAAKjG,QACjBuF,YAAa,mDACV,KACP,CACAW,sBACE,IAAIG,EACJ,OAAkF,OAAzEA,EAAwB,mDAAwD,EAASA,EAAsBC,YAAczO,EAAE,IAAK,CAC3IqF,UAAW,kCACVrF,EAAE,OAAQ,CACXqF,UAAW,wCACV,qBAAqB,kEAAmErF,EAAE,OAAQ,CACnGqF,UAAW,wCACV,IAAU,2DAA6D,IAC5E,CACAkJ,uBACE,MAAMG,EAAQ,6BACd,GAAI,uCAAuC,UAAY,uCAAuC,iBAC5F,OAAO1O,EAAE,MAAO,CACdqF,UAAW,+BACVrF,EAAE,IAAkB,OAEzB,MAAM2O,EAAqBD,EAAMZ,YAAcY,EAAMZ,WAAW3F,QAAQ,gBACxE,OAAMuG,EAAME,iBAAiBxF,QAAUuF,EAOhC3O,EAAE,MAAO,CACdqF,UAAW,+BACVrF,EAAE,MAAO,CACVqF,UAAW,oCACVsJ,EAAqB3O,EAAE0M,EAAe,CACvCxE,UAAWwG,EAAMZ,WAAW5F,UAC5B0E,QAAS8B,EAAMZ,WAAW3F,QAC1B4E,QAAQ,EACRF,cAAe,IAAM6B,EAAMG,kBAC3B/B,cAAe4B,EAAMI,cAAcC,kBAAkBnG,SAAS,iBAC3D,KAAM8F,EAAME,iBAAiBvN,KAAI6G,GAAalI,EAAE0M,EAAe,CAClExE,UAAWA,EACX0E,QAAS8B,EAAMM,eAAe9G,EAAUP,IACxCkF,cAAe,CACbO,KAAM,IAAMsB,EAAMO,gBAAgB/G,EAAW,QAC7CmF,KAAM,IAAMqB,EAAMO,gBAAgB/G,EAAW,SAE/C4E,cAAe4B,EAAMI,cAAcC,kBAAkBnG,SAASV,EAAUI,YAvBjEtI,EAAE,MAAO,CACdqF,UAAW,+BACVrF,EAAE,OAAQ,CACXqF,UAAW,YACV,qBAAqB,sDAqB5B,CACAiJ,eACE,MAAMxG,EAAQ,IAAI,KAelB,OAdAA,EAAMnF,IAAI,cAAe3C,EAAE,IAAQ,CACjCqF,UAAW,SACX4B,KAAM,kBACNF,QAAS,IAAM,+CACfyE,QAAS,uCAAuC,SAChD5E,SAAU,oDACT,qBAAqB,6DAA8D,KACtFkB,EAAMnF,IAAI,eAAgB3C,EAAE,IAAQ,CAClCqF,UAAW,SACX4B,KAAM,cACNF,QAAS,IAAM,8CACfyE,QAAS,uCAAuC,iBAChD5E,SAAU,oDACT,qBAAqB,8DACjBkB,CACT,EAEF9C,OAAOC,IAAItC,IAAI,2BAA4B,2BAA4BwL,ICtFvE,MAAM,GAA+BnJ,OAAOC,IAAIvC,IAAI,OAAQ,0B,eCM7C,MAAMwM,WAAuB,KAC1CzH,OAAOrC,GACLsC,MAAMD,OAAOrC,EACf,CACAD,OACE,OAAOnF,EAAE,MAAO,CACdqF,UAAW,6DACVrF,EAAE,MAAO,CACVqF,UAAW,oCACVrF,EAAE,MAAO,CACVqF,UAAW,aACVrF,EAAE,KAAM,CACTqF,UAAW,kBACV,qBAAqB,4DAA6DrF,EAAE,MAAO,CAC5FqF,UAAW,aACV,mDAAqDrF,EAAE,KAAM,KAAMA,EAAE8K,EAAW,MAAO9K,EAAEmO,GAAS,OAASnO,EAAE,MAAO,CACrHqF,UAAW,cACVrF,EAAE,IAAO,CACVsF,KAAM,UACN0I,aAAa,GACZ,qBAAqB,sDAC1B,EAEFhJ,OAAOC,IAAItC,IAAI,2BAA4B,kCAAmCuM,IC7B9E,MAAM,GAA+BlK,OAAOC,IAAIvC,IAAI,OAAQ,+B,eCO7C,MAAMyM,WAAsB,KACzCjF,cACExC,SAASqD,WACTZ,EAAgBxJ,KAAM,WAAY,CAAC,GACnCwJ,EAAgBxJ,KAAM,kBAAmB,MACzCwJ,EAAgBxJ,KAAM,WAAW,GACjCwJ,EAAgBxJ,KAAM,YAAQ,EAChC,CACA8G,OAAOrC,GACLsC,MAAMD,OAAOrC,GACbzE,KAAKyO,QAAO,EACd,CACA/J,YACE,MAAO,EACT,CACAF,OACE,OAAOnF,EAAE,MAAO,CACdqF,UAAW,IAAU,cAAe1E,KAAK0E,cACxCrF,EAAE,QAAS,KAAMW,KAAKiF,SAAUjF,KAAKoF,UAAW/F,EAAE,MAAO,CAC1DqF,UAAW,4BACV1E,KAAK0O,gBACV,CACAA,eACE,MAAO,CAACrP,EAAE,IAAQ,CAChBqF,UAAW,yBACXmG,QAAS7K,KAAK6K,QACdzE,QAAS,IAAMpG,KAAKyO,QAAO,GAC3BxI,UAAWjG,KAAK2O,WACf,qBAAqB,sCAC1B,CACAC,0BACE,OAAO,sCACT,CACAC,QAAQjL,GACN,IAAIkL,EACJ,OAAoD,OAA5CA,EAAqB9O,KAAK+O,SAASnL,IAAgBkL,EAAqB9O,KAAK+O,SAASnL,GAAO,KACvG,CACA6K,OAAOO,GACLhP,KAAK6K,SAAU,EACf,MAAMoE,EAAgB,CAAC,EACvB7O,OAAOC,KAAKL,KAAK+O,UAAUzO,SAAQsD,IACjCqL,EAAcrL,GAAO5D,KAAK+O,SAASnL,IAAM,IAE3C,YAAY,CACV2H,OAAQ,OACRC,IAAK,oBAAoB,UAAY,8BACrCC,KAAM,CACJ9G,KAAM3E,KAAK2E,KACXmG,KAAMkE,EAAW,KAAOC,KAEzBvD,MAAKwD,IACN,IAAI,KACFpE,GACEoE,EACJ9O,OAAOC,KAAKyK,GAAMxK,SAAQsD,IACxB5D,KAAK+O,SAASnL,GAAO,IAAOkH,EAAKlH,GAAK,IAExC5D,KAAKmP,gBAAkBC,MAAMC,QAAQvE,GAAQ,CAAC,EAAIA,CAAI,IACrDwE,SAAQ,KACTtP,KAAK6K,SAAU,EACfxL,EAAEuM,QAAQ,GAEd,CACA+C,UACE,OAAOY,KAAKC,UAAUxP,KAAKmP,mBAAqBI,KAAKC,UAAUxP,KAAK+O,SACtE,EAEF1K,OAAOC,IAAItC,IAAI,2BAA4B,iCAAkCwM,IC1E7E,MAAM,GAA+BnK,OAAOC,IAAIvC,IAAI,OAAQ,4B,eCM7C,MAAM0N,WAAwB,KAC3ClG,cACExC,SAASqD,WACTZ,EAAgBxJ,KAAM,YAAQ,GAC9BwJ,EAAgBxJ,KAAM,kBAAc,EACtC,CACA8G,OAAOrC,GACLsC,MAAMD,OAAOrC,GACbzE,KAAK2H,KAAO,IAAO3H,KAAK4E,MAAM+C,MAAQ,IACtC3H,KAAK0P,WAAa,IAAO1P,KAAK4E,MAAM8K,YAAc,CAChD/K,KAAM,WACN6G,IAAK,IAET,CACA9G,YACE,MAAO,8BACT,CACAO,QACE,MAAM0K,EAAU3P,KAAK4E,MAAM8K,WAAa,OAAS,MACjD,OAAO,qBAAqB,2CAA2C5K,OAAO6K,EAAS,qBACzF,CACAvK,UACE,MAAMwK,EAAQ,CACZC,SAAU,qBAAqB,uEAC/BC,IAAK,qBAAqB,kEAC1BC,KAAM,qBAAqB,oEAE7B,OAAO1Q,EAAE,MAAO,CACdqF,UAAW,cACVrF,EAAE,MAAO,CACVqF,UAAW,cACVrF,EAAE,QAAS,KAAM,qBAAqB,8EAA+EA,EAAE,QAAS,CACjIqF,UAAW,cACXiG,KAAM3K,KAAK2H,QACRtI,EAAE,MAAO,CACZqF,UAAW,cACVrF,EAAE,QAAS,KAAM,qBAAqB,8EAA+EA,EAAE,KAAQ,CAChI2Q,QAASJ,EACTxL,MAAOpE,KAAK0P,aAAa/K,KACzBsL,SAAU7L,GAASpE,KAAK0P,WAAW,IAC9B1P,KAAK0P,aACR/K,KAAMP,OAEL/E,EAAE,MAAO,CACZqF,UAAW,cACVrF,EAAE,QAAS,KAAM,qBAAqB,uEAAwEA,EAAE,QAAS,CAC1HqF,UAAW,cACXuL,SAAU/R,GAAK8B,KAAK0P,WAAW,IAC1B1P,KAAK0P,aACRlE,IAAKtN,EAAEgS,OAAO9L,QAEhBA,MAAOpE,KAAK0P,aAAalE,OACtBnM,EAAE,MAAO,CACZqF,UAAW,cACVrF,EAAE,IAAQ,CACXqF,UAAW,yBACX0B,QAASpG,KAAKyO,OAAOxL,KAAKjD,OACzB,qBAAqB,kFAC1B,CACAyO,SACEzO,KAAK4E,MAAMgG,SAAS5K,KAAK0P,aAAc1P,KAAK2H,QAC5C3H,KAAKmQ,MACP,EAEF9L,OAAOC,IAAItC,IAAI,2BAA4B,mCAAoCyN,IChEhE,MAAMW,WAA0B5B,GAC7CjF,cACExC,SAASqD,WACTZ,EAAgBxJ,KAAM,OAAQ,WAChC,CACAiF,QACE,OAAO,qBAAqB,gDAC9B,CACAP,YACE,MAAO,mBACT,CACAU,UACE,OAAO/F,EAAE,MAAO,CACdqF,UAAW,gDACV1E,KAAK4E,MAAMyL,sBAAsB7M,KAAKxD,KAAM,CAC7C6O,QAAS,oBACTzH,MAAO,qBAAqB,mEAC5BkJ,KAAM,qBAAqB,kEAC3B3L,KAAM,SACNqL,QAAS,CACPO,OAAQ,qBAAqB,4EAC7BC,GAAI,qBAAqB,wEACzBC,KAAM,qBAAqB,0EAC3BC,MAAO,qBAAqB,2EAC5BC,IAAK,qBAAqB,4EAE1BtR,EAAE,MAAO,CACXqF,UAAW,cACVrF,EAAE,QAAS,KAAM,qBAAqB,+DAAgEA,EAAE,MAAO,CAChHqF,UAAW,YACV,qBAAqB,8DAA+DrF,EAAE,MAAO,CAC9FqF,UAAW,kCACVtE,OAAOC,KAAKL,KAAK6O,QAAQ,eAAb7O,IAAkC,CAAC,GAAGU,KAAIiH,IACvD,MAAM+H,EAAa1P,KAAK6O,QAAQ,eAAb7O,GAA+B2H,GAClD,OAAOtI,EAAE,MAAO,CACdqF,UAAW,iCACVrF,EAAE,IAAQ,CACXqF,UAAW,SACX4B,KAAM,CACJuJ,SAAU,eACVC,IAAK,qBACLC,KAAM,iBACNL,EAAW/K,MACbyB,QAAS,IAAM,eAAeqJ,GAAiB,CAC7C9H,OACA+H,aACA9E,SAAU,CAAC8E,EAAYkB,KACrB,MAAMC,EAAe7Q,KAAK6O,QAAQ,eAAb7O,UACd6Q,EAAalJ,GACpB3H,KAAK6O,QAAQ,eAAb7O,CAA6B6Q,GAC7B7Q,KAAKiQ,SAASP,EAAYkB,EAAQ,KAGrCjJ,EAAM,KAAM+H,EAAW/K,KAAM,KAAMtF,EAAE,IAAQ,CAC9CqF,UAAW,sBACX4B,KAAM,eACN,aAAc,qBAAqB,mEACnCF,QAAS,KACP,GAAI0K,QAAQ,IAAY,qBAAqB,4EAA6E,CACxH,MAAMD,EAAe,IAChB7Q,KAAK6O,QAAQ,eAAb7O,WAEE6Q,EAAalJ,GACpB3H,KAAK6O,QAAQ,eAAb7O,CAA6B6Q,EAC/B,KAED,MAEP,CACAnC,eACE,MAAMvH,EAAQJ,MAAM2H,eAOpB,OANAvH,EAAM4J,KAAK1R,EAAE,IAAQ,CACnBqF,UAAW,SACX0B,QAAS,IAAM,eAAeqJ,GAAiB,CAC7C7E,SAAU5K,KAAKiQ,SAAShN,KAAKjD,SAE9B,qBAAqB,kEACjBmH,CACT,CACA8I,SAASP,EAAY/H,GACnB3H,KAAK6O,QAAQ,eAAb7O,CAA6B,IACxBA,KAAK6O,QAAQ,eAAb7O,GACH,CAAC2H,GAAO+H,GAEZ,EAEFrL,OAAOC,IAAItC,IAAI,2BAA4B,qCAAsCoO,IC5FjF,MAAM,GAA+B/L,OAAOC,IAAIvC,IAAI,OAAQ,4B,eCO7C,MAAMiP,WAAwB,KAC3CzH,cACExC,SAASqD,WACTZ,EAAgBxJ,KAAM,YAAQ,GAC9BwJ,EAAgBxJ,KAAM,YAAQ,GAC9BwJ,EAAgBxJ,KAAM,aAAS,EACjC,CACA8G,OAAOrC,GACLsC,MAAMD,OAAOrC,GACbzE,KAAK2E,KAAO,IAAO3E,KAAK4E,MAAMD,MAAQ,UACtC3E,KAAKiR,KAAO,IAAOjR,KAAK4E,MAAMqM,MAAQ,IACtCjR,KAAKkR,MAAQ,IAAOlR,KAAK4E,MAAMsM,OAAS,GAC1C,CACAxM,YACE,MAAO,8BACT,CACAO,QACE,MAAM0K,EAAU3P,KAAK4E,MAAMqM,KAAO,OAAS,MAC3C,OAAO,qBAAqB,8CAA8CnM,OAAO6K,EAAS,UAC5F,CACAvK,UACE,MAAMwK,EAAQ,CACZ,eAAgB,qBAAqB,iEACrC,eAAgB,qBAAqB,iEACrC,eAAgB,qBAAqB,iEACrCuB,OAAQ,qBAAqB,4DAE/B,OAAO9R,EAAE,MAAO,CACdqF,UAAW,cACVrF,EAAE,MAAO,CACVqF,UAAW,cACVrF,EAAE,QAAS,KAAM,qBAAqB,oEAAqEA,EAAE,KAAQ,CACtH2Q,QAASJ,EACTxL,MAAOpE,KAAK2E,OACZsL,SAAUjQ,KAAK2E,QACZtF,EAAE,MAAO,CACZqF,UAAW,cACVrF,EAAE,QAAS,KAAM,qBAAqB,oEAAqEA,EAAE,QAAS,CACvHqF,UAAW,cACXiG,KAAM3K,KAAKiR,KACXvG,YAAa,qBAAqB,4EAC/BrL,EAAE,MAAO,CACZqF,UAAW,cACVrF,EAAE,QAAS,KAAM,qBAAqB,qEAAsEA,EAAE,WAAY,CAC3HqF,UAAW,cACX0M,QAASlT,GAAK8B,KAAKkR,MAAMhT,EAAEgS,OAAO9L,OAClCiN,KAAM,IACN3G,YAAa1K,KAAKkR,QAAQI,WAAW,cAAgB,IAAY,qBAAqB,qFAAuF,IAC5KtR,KAAKkR,QAAQI,WAAW,cAAgB,GAAKtR,KAAKkR,UAAW7R,EAAE,MAAO,CACvEqF,UAAW,cACVrF,EAAE,IAAQ,CACXqF,UAAW,yBACX0B,QAASpG,KAAKyO,OAAOxL,KAAKjD,OACzB,qBAAqB,wEAC1B,CACAyO,SACEzO,KAAK4E,MAAMgG,SAAS5K,KAAK2E,OAAQ3E,KAAKiR,OAAQjR,KAAKkR,SACnDlR,KAAKmQ,MACP,EAEF9L,OAAOC,IAAItC,IAAI,2BAA4B,mCAAoCgP,IC7DhE,MAAMO,WAAsB/C,GACzCjF,cACExC,SAASqD,WACTZ,EAAgBxJ,KAAM,OAAQ,OAChC,CACAiF,QACE,OAAO,qBAAqB,mDAC9B,CACAP,YACE,MAAO,eACT,CACAU,UACE,MAAMoM,EAAepR,OAAOC,KAAKL,KAAK+O,UAChC0C,EAAkBD,EAAa/I,QAAU+I,EAAaE,OAAM/M,IAChE,MAAMmG,EAAO9K,KAAK+O,SAASpK,KAC3B,OAAOyK,MAAMC,QAAQvE,GAAQA,EAAKrC,OAASrI,OAAOC,KAAKyK,GAAMrC,MAAM,IAErE,OAAOpJ,EAAE,MAAO,CACdqF,UAAW,2CACV+M,EAAkBD,EAAa9Q,KAAIiE,IACpC,MAAMgN,EAAQ3R,KAAK+O,SAASpK,KAC5B,OAAOtF,EAAE,MAAO,CACdqF,UAAW,cACVrF,EAAE,QAAS,KAAM,qBAAqB,oDAAoDyF,OAAOH,KAAStF,EAAE,MAAO,CACpHqF,UAAW,uBACVtE,OAAOC,KAAKsR,GAAOjR,KAAIuQ,IACxB,MAAMnG,EAAO6G,EAAMV,GACnB,OAAO5R,EAAE,MAAO,CACdqF,UAAW,iCACVrF,EAAE,IAAQ,CACXqF,UAAW,SACX4B,KAAM,aACNF,QAAS,IAAM,eAAe4K,GAAiB,CAC7CrM,OACAsM,OACAC,MAAOpG,EACPF,SAAU5K,KAAKiQ,SAAShN,KAAKjD,KAAMiR,MAEpCA,GAAO5R,EAAE,IAAQ,CAClBqF,UAAW,sBACX4B,KAAM,eACN,aAAc,qBAAqB,2DACnCF,QAAS,KACP,GAAI0K,QAAQ,IAAY,qBAAqB,oEAAqE,CAChH,MAAMc,EAAU,IACX5R,KAAK6O,QAAQlK,EAAb3E,WAEE4R,EAAQX,GACX7Q,OAAOC,KAAKuR,GAASnJ,OACvBzI,KAAK6O,QAAQlK,EAAb3E,CAAmB4R,UAEZ5R,KAAK+O,SAASpK,EAEzB,KAED,KACD,IACDtF,EAAE,OAAQ,CACbqF,UAAW,YACV,qBAAqB,0EAC1B,CACAgK,eACE,MAAMvH,EAAQJ,MAAM2H,eAQpB,OAPAvH,EAAM4J,KAAK1R,EAAE,IAAQ,CACnBqF,UAAW,SACXmG,QAAS7K,KAAK6K,QACdzE,QAAS,IAAM,eAAe4K,GAAiB,CAC7CpG,SAAU5K,KAAKiQ,SAAShN,KAAKjD,KAAM,SAEpC,qBAAqB,0DACjBmH,CACT,CACA8I,SAAS4B,EAASlN,EAAMsM,EAAMC,GAC5B,MAAMpG,EAAO,IACR9K,KAAK6O,QAAQlK,EAAb3E,IAED6R,UACK/G,EAAK+G,GAEd/G,EAAKmG,GAAQC,EACblR,KAAK6O,QAAQlK,EAAb3E,CAAmB8K,EACrB,EAEFzG,OAAOC,IAAItC,IAAI,2BAA4B,iCAAkCuP,ICjF9D,MAAMO,WAAqB,KACxC1M,UACE,MAAM2J,EAAW,8BAA8B/O,KAAKuH,UAAUP,IACxD+K,EAAW,CAAC,qBAAqB,2DAEvC,OADI,uBAAuBA,EAAShB,KAAK,qBAAqB,+DACvD1R,EAAE,MAAO,CACdqF,UAAW,0BACVrF,EAAE,MAAO,CACVqF,UAAW,aACVrF,EAAE,MAAO,CACVqF,UAAW,wCACVrF,EAAE,IAAO,CACVqF,UAAW,kCACXC,KAAM,UACN0I,aAAa,GACZhO,EAAE,KAAM,KAAM,KAAU0S,MAAchD,EAAW1P,EAAE,MAAO,CAC3DqF,UAAW,oDACVrF,EAAE,MAAO,CACVqF,UAAW,eACVrF,EAAE,QAAS,KAAM,qBAAqB,kDAAmDA,EAAE,MAAO,CACnGqF,UAAW,QACVqK,EAASrO,IAAIV,KAAKqQ,sBAAsBpN,KAAKjD,QAASX,EAAE,MAAO,CAChEqF,UAAW,6BACV1E,KAAK0O,iBAAkBrP,EAAE+Q,GAAmB,CAC7CC,sBAAuBrQ,KAAKqQ,wBAC1BhR,EAAEkS,GAAe,CACnBlB,sBAAuBrQ,KAAKqQ,yBACxBhR,EAAE,KAAM,CACZqF,UAAW,2BACV,qBAAqB,sCAC1B,CACAsN,SAASvN,GACP,MAAM0C,EAAQJ,MAAMiL,SAASvN,GAO7B,OANA0C,EAAM8K,YAAY,UAAW,IAC7B9K,EAAMnF,IAAI,UAAW3C,EAAEkP,GAAgB,MAAO,GACmB,MAA7D,0DAAoE,0DACtEpH,EAAMnF,IAAI,QAAS3C,EAAEwH,EAAc,MAAO,GAE5CM,EAAM+K,OAAO,eACN/K,CACT,CACAgL,UACEpL,MAAMoL,UACN9S,EAAEuM,QACJ,EAEFvH,OAAOC,IAAItC,IAAI,2BAA4B,gCAAiC8P,ICtD5E,MAAM,GAA+BzN,OAAOC,IAAIvC,IAAI,OAAQ,gB,eCA5D,MAAMqQ,GAAa,CAClB,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAGKC,GAAe,CACpB,IACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAGKC,GAAY,CACjB,IACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QAGKC,GAAc,CACnB,IACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SASKC,GAAiBA,CAACC,EAAQvQ,EAAQ8N,KACvC,IAAI0C,EAASD,EAOb,MANsB,iBAAXvQ,GAAuBkN,MAAMC,QAAQnN,GAC/CwQ,EAASD,EAAOD,eAAetQ,EAAQ8N,IAClB,IAAX9N,QAA+BoB,IAAZ0M,IAC7B0C,EAASD,EAAOD,oBAAelP,EAAW0M,IAGpC0C,CAAM,EC5DC,MAAMC,WAAa,MAChCtN,SACE,OAAO,eAAgB,UAAU7B,KAAKxD,KACxC,CACAmF,YACE,OAAO,eAAgB,aAAa3B,KAAKxD,KAC3C,CACAuF,UACE,OAAO,eAAgB,WAAW/B,KAAKxD,KACzC,CACAwH,UACE,OAAO,eAAgB,WAAWhE,KAAKxD,KACzC,CACAwF,SACE,OAAO,eAAgB,UAAUhC,KAAKxD,KACxC,CACAsF,eACE,OAAO,eAAgB,gBAAgB9B,KAAKxD,KAC9C,CACA4S,YACE,OAAO,eAAgB,YAAa,oBAAqBpP,KAAKxD,KAChE,CACAoI,YACE,OAAO,eAAgB,YAAa,oBAAqB5E,KAAKxD,KAChE,CACAqI,aACE,OAAO,eAAgB,aAAc,oBAAqB7E,KAAKxD,KACjE,CACAuI,iBACE,ODkCW,SAAqBkK,EAAQzC,GAC3C,IAAKrP,OAAOkS,SAASJ,GACpB,MAAM,IAAI1I,UAAU,iCAADjF,cAAyC2N,EAAM,MAAA3N,OAAK2N,IASxE,MAAMK,GANN9C,EAAU,CACT+C,MAAM,EACNC,QAAQ,KACLhD,IAGkB+C,KAClB/C,EAAQgD,OAAST,GAAcD,GAC/BtC,EAAQgD,OAASX,GAAeD,GAEpC,GAAIpC,EAAQiD,QAAqB,IAAXR,EACrB,MAAO,MAAP3N,OAAagO,EAAM,IAGpB,MAAMI,EAAaT,EAAS,EACtBU,EAASD,EAAa,IAAOlD,EAAQiD,OAAS,IAAM,GAM1D,IAAIG,EAUJ,GAdIF,IACHT,GAAUA,QAK2BnP,IAAlC0M,EAAQqD,wBACXD,EAAgB,CAACC,sBAAuBrD,EAAQqD,6BAGX/P,IAAlC0M,EAAQsD,wBACXF,EAAgB,CAACE,sBAAuBtD,EAAQsD,yBAA0BF,IAGvEX,EAAS,EAEZ,OAAOU,EADcX,GAAeC,EAAQzC,EAAQ9N,OAAQkR,GAC7B,IAAMN,EAAM,GAG5C,MAAMS,EAAW/T,KAAKgU,IAAIhU,KAAKE,MAAMsQ,EAAQgD,OAASxT,KAAKiU,IAAIhB,GAAUjT,KAAKiU,IAAI,MAAQjU,KAAKkU,MAAMjB,GAAU,GAAIK,EAAMrK,OAAS,GAWlI,OAVAgK,IAAWzC,EAAQgD,OAAS,KAAO,MAASO,EAEvCH,IACJX,EAASA,EAAOkB,YAAY,IAOtBR,EAJcX,GAAe7R,OAAO8R,GAASzC,EAAQ9N,OAAQkR,GAIrC,IAFlBN,EAAMS,EAGpB,CCvFWK,CAA2D,KAA/C,eAAgB,kBAAkBpQ,KAAKxD,MAC5D,EC5Ba,SAAS6T,KACtB,kBACAxU,EAAEyU,MAAMC,IAAI,UAAU,YAAa,CACjC/M,GAAI,8BAEN,gCAAgC,CAAC,GAAG,GACpCgN,YAAW,KACT,IAAIC,EACkF,OAArFA,EAAwBC,SAASC,eAAe,mCAAqDF,EAAsBG,eAAe,CACzIC,MAAO,WACP,GACD,IACL,CDkBAhQ,OAAOC,IAAItC,IAAI,2BAA4B,oBAAqB2Q,IC/BhE2B,OAAOT,YAAcA,GAcrBxP,OAAOC,IAAItC,IAAI,2BAA4B,0BAA2B6R,ICfvD,MAAMU,GACnBhL,cACEC,EAAgBxJ,KAAM,UAAW,MACjCwJ,EAAgBxJ,KAAM,QAAS,MAC/BwJ,EAAgBxJ,KAAM,QAAS,IAC/BwJ,EAAgBxJ,KAAM,SAAU,GAChCwJ,EAAgBxJ,KAAM,QAAS,EACjC,CACAwU,KAAKC,EAAQC,GACX,IAAIC,EAaJ,YAZoB,IAAhBD,IACFA,GAAc,GAEhB1U,KAAKwI,MAAQ,KACbiM,EAAS,CACPG,KAAM,CACJC,MAAO7U,KAAK6U,MACZC,OAAQ9U,KAAK8U,UACa,OAArBH,EAAUF,QAAkB,EAASE,EAAQC,SAEjDH,GAEE,eAAe,0BAA2BA,GAAU,CAAC,GAAG/I,MAAKZ,IAClE,IAAIiK,EAiBJ,OAhBA/U,KAAKwI,MAAQsC,EACb9K,KAAKyG,OAAqD,OAA3CsO,EAAqBjK,EAAKkK,QAAQC,WAAgB,EAASF,EAAmBtO,QAAU,EACvGpH,EAAEuM,UAG0B,MAARd,OAAe,EAASA,EAAKoK,MAAKhQ,GAA0B,YAAlBA,EAAKG,UAA4C,YAAlBH,EAAKG,YAEhGrF,KAAKmV,UAAUT,GACNA,GACT,wCAAwC,MAGxCJ,OAAOc,SAASC,UACP,0CACT,wCAAwC,MAEnCvK,CAAI,GAEf,CACAwK,WACE,OAAOtV,KAAKwI,KACd,CACA9B,gBACE,OAAOlH,KAAKC,KAAKO,KAAKyG,MAAQzG,KAAK6U,MACrC,CACArO,aACE,OAAOhH,KAAKC,KAAKO,KAAK8U,OAAS9U,KAAK6U,MACtC,CACA1O,UACE,OAA6B,IAAtBnG,KAAKwG,YACd,CACAG,UACE,OAAO3G,KAAK8U,OAAS9U,KAAK6U,MAAQ7U,KAAKyG,KACzC,CACAJ,OACMrG,KAAKmG,YACPnG,KAAK8U,QAAU9U,KAAK6U,MACpB7U,KAAKwU,OAET,CACA5N,OACM5G,KAAK2G,YACP3G,KAAK8U,QAAU9U,KAAK6U,MACpB7U,KAAKwU,OAET,CACAW,UAAUT,QACY,IAAhBA,IACFA,GAAc,GAEZ1U,KAAKuV,SACPC,aAAaxV,KAAKuV,SAEpBvV,KAAKuV,QAAUvB,YAAW,KACxBhU,KAAKwU,KAAK,CAAC,EAAGE,EAAY,GACzB,IACL,CACAe,aACE,IAAIC,EACJ,QAAwC,OAA7BA,EAAc1V,KAAKwI,SAAkBkN,EAAYR,MAAKhQ,GAA0B,YAAlBA,EAAKG,UAA4C,YAAlBH,EAAKG,WAC/G,EAEFhB,OAAOC,IAAItC,IAAI,2BAA4B,0BAA2BuS,IClFvD,MAAMoB,GACfxH,oBACF,MAAMA,EAAgBoB,KAAKqG,MAAM,+DAEjC,OADAzH,EAAcC,gBAAkB,IAAM,IAAID,EAAc0H,MAAMzH,mBAAoBD,EAAc2H,MAAM1H,mBAAoBD,EAAc4H,OAAO3H,iBACxID,CACT,CACA5E,cACEC,EAAgBxJ,KAAM,UAAW,MACjCwJ,EAAgBxJ,KAAM,iBAAkB,CAAC,GACzCwJ,EAAgBxJ,KAAM,uBAAmB,GACzCwJ,EAAgBxJ,KAAM,wBAAoB,GAC1CwJ,EAAgBxJ,KAAM,aAAc,MACpCA,KAAKgW,gBAAkBzG,KAAKqG,MAAM,iEAClC5V,KAAKiO,iBAAmBjO,KAAKiW,uBAAuBjW,KAAKgW,iBACzDhW,KAAKmN,WAAanN,KAAKkW,iBAAiBlW,KAAKgW,gBAC/C,CACAG,UAAUxO,GAIR,YAHa,IAATA,IACFA,EAAO,MAEFA,GAAQ3H,KAAK6K,UAAYlD,IAASA,GAAyB,OAAjB3H,KAAK6K,OACxD,CACAuL,sBACE,OAAOpW,KAAKmW,aAAe,uCAC7B,CACAE,WAAW1O,GACT3H,KAAK6K,QAAUlD,CACjB,CACA2O,eAAexL,GACb,wCAAwC,qBACxC,eAAe,KACf,YAAY,CACVS,OAAQ,OACRC,IAAK,GAAG1G,OAAO,oBAAoB,UAAW,iCAC9C2G,KAAM,CACJX,UAEDY,MAAKV,IACN,GAAIA,EAASuL,WACX1C,SACK,CACL,MAAM2C,EAAcxL,EAAShE,GAC7B,gBAAgB,CACdrC,KAAM,WACL,qBAAqB,+DAAgE,CACtF4C,UAAWiP,KAEblC,OAAOc,SAAS3N,KAAO,GAAG3C,OAAO,oBAAoB,YAAa,gBAAgBA,OAAO0R,GACzFlC,OAAOc,SAASC,QAClB,KACCxJ,MAAMC,GAAcwD,SAAQ,KAC7B,kBACAjQ,EAAEuM,QAAQ,GAEd,CACA6K,kBACEzW,KAAKqW,WAAW,SAChB,YAAY,CACV9K,OAAQ,OACRC,IAAK,GAAG1G,OAAO,oBAAoB,UAAW,0CAC7C4G,MAAKV,IACFA,EAASuL,WACX1C,MAEA7T,KAAKgW,gBAAkBhL,EACvBhL,KAAKiO,iBAAmBjO,KAAKiW,uBAAuBjL,GACpDhL,KAAKmN,WAAanN,KAAKkW,iBAAiBlL,GACxChL,KAAKqW,WAAW,MAChBhX,EAAEuM,SACJ,IACCC,MAAMC,GAAcwD,SAAQ,KAC7BjQ,EAAEuM,QAAQ,GAEd,CACAsC,kBACM4C,QAAQ,IAAY,qBAAqB,wEAC3C,eAAe,KACf9Q,KAAKqW,WAAW,gBAChB,YAAY,CACV9K,OAAQ,OACRC,IAAK,GAAG1G,OAAO,oBAAoB,UAAW,qCAC7C4G,MAAKV,IACU,MAAZA,GAAoBA,EAASuL,WAC/B1C,MAEA,gBAAgB,CACdlP,KAAM,WACL,qBAAqB,qDACxB2P,OAAOc,SAASC,SAClB,IACCxJ,MAAMC,GAAcwD,SAAQ,KAC7B,kBACAjQ,EAAEuM,QAAQ,IAGhB,CACA0C,gBAAgB/G,EAAWmP,GACzB,eAAe,KACf1W,KAAKqW,WAAW,oBAChB,YAAY,CACV9K,OAAQ,QACRC,IAAK,GAAG1G,OAAO,oBAAoB,UAAW,kCAAkCA,OAAOyC,EAAUP,IACjGyE,KAAM,CACJX,KAAM,CACJ4L,iBAGHhL,MAAKV,IACU,MAAZA,GAAoBA,EAASuL,WAC/B1C,MAEA,gBAAgB,CACdlP,KAAM,WACL,qBAAqB,8DAA+D,CACrF4C,UAAWA,EAAUK,MAAM,oBAAoB3C,SAEjDqP,OAAOc,SAASC,SAClB,IACCxJ,MAAMC,GAAcwD,SAAQ,KAC7B,kBACAjQ,EAAEuM,QAAQ,GAEd,CACA+K,iBACE,eAAe,KACf3W,KAAKqW,WAAW,iBAChB,YAAY,CACV9K,OAAQ,OACRC,IAAK,GAAG1G,OAAO,oBAAoB,UAAW,sCAC7C4G,MAAKV,IACU,MAAZA,GAAoBA,EAASuL,WAC/B1C,MAEA,gBAAgB,CACdlP,KAAM,WACL,qBAAqB,oEACxB2P,OAAOc,SAASC,SAClB,IACCxJ,MAAMC,GAAcwD,SAAQ,KAC7B,kBACAjQ,EAAEuM,QAAQ,GAEd,CACAqK,uBAAuBD,GACrB,IAAIY,EAAuBC,EAW3B,OAVA7W,KAAKqO,eAAiB,CAAC,EACJ,MAAnB2H,GAAwF,OAApDY,EAAwBZ,EAAgB/J,UAA0F,OAA7D4K,EAAyBD,EAAsBE,YAA8BD,EAAuBE,QAAOC,IAClN,MAAMhQ,EAAKgQ,EAAgBrP,KAAK/F,QAAQ,IAAK,KAAKA,QAAQ,0BAA2B,IAC/E2F,EAAY,oBAAoBP,GAChCiQ,EAAe,CAAC,qBAAsB,mBAAmBhP,SAAS+O,EAAgB,kBAIxF,OAHIzP,GAAa0P,IACfjX,KAAKqO,eAAe9G,EAAUP,IAAMgQ,GAE/BzP,GAAa0P,CAAY,IAE3B7W,OAAO8W,OAAO,qBAAqBH,QAAOxP,GAAavH,KAAKqO,eAAe9G,EAAUP,KAC9F,CACAkP,iBAAiBF,GACf,IAAImB,EAAwBC,EAC5B,MAAM3J,EAA0B,MAAnBuI,GAAyF,OAArDmB,EAAyBnB,EAAgB/J,UAA2F,OAA9DmL,EAAyBD,EAAuBL,gBAAhI,EAA8JM,EAAuBL,QAAOC,GAA4C,gBAAzBA,EAAgBrP,OAAwB0P,MAC9R,OAAK5J,EACE,CACLjG,QAASiG,EACTlG,UAAW,CACTP,GAAI,cACJW,KAAM,cACN4E,QAAS,0BACTjG,KAAM,CAEJgR,gBAAiB,OAAOxS,OAAO,yCAAgD,2DAEjF8C,MAAO,CACL,mBAAoB,CAClB3C,MAAO,IAAY,qBAAqB,sDAb9B,IAkBpB,CACAsS,YAAYrI,GACV,IAAI,OACF3B,GACE2B,EACJ,wCAAwC3B,EAAS,uBAAyB,gBAC1E,eAAe,KACf,MAAMR,EAAc/M,KAAKmO,cAAc0H,MACvC,YAAY,CACVtK,OAAQ,OACRC,IAAK,GAAG1G,OAAO,oBAAoB,UAAW,mCAC9C2G,KAAM,CACJX,KAAM,CACJyC,aAGH7B,MAAKV,IACU,MAAZA,GAAoBA,EAASuL,WAC/B1C,MAEA,gBAAgB,CACdlP,KAAM,WACL,qBAAqB,qDACxB2P,OAAOc,SAASC,SAClB,IACCxJ,MAAMC,GAAcD,OAAM3N,IAC3B,IAAIsZ,EAAaC,EAAoBC,EACrC,kBACA3K,EAAY1H,OAAS,UACrB0H,EAAYC,uBAAuD,OAA7BwK,EAActZ,EAAE8M,WAA0E,OAA5CyM,EAAqBD,EAAYvM,SAAiF,OAArDyM,EAAwBD,EAAmBJ,YAAlH,EAA4IK,EAAsBC,uBAAuB,IAClQrI,SAAQ,KACTjQ,EAAEuM,QAAQ,GAEd,EAEFvH,OAAOC,IAAItC,IAAI,2BAA4B,mCAAoC2T,ICxNhE,MAAMiC,GACnBrO,cACEC,EAAgBxJ,KAAM,QAAS,IAAIuU,IACnC/K,EAAgBxJ,KAAM,UAAW,IAAI2V,GACvC,EAEFtR,OAAOC,IAAItC,IAAI,2BAA4B,qCAAsC4V,ICEjF,qBAAqB,4BAA4BC,IAC/CA,EAAIC,MAAMC,OAAO,2BAA6BpF,GAC9CkF,EAAIG,iBAAmB,IAAIJ,GACvBC,EAAI/M,KAAK,+CACX+M,EAAI/M,KAAKiE,SAAS,uCAAyC,KAE7D8I,EAAII,cAAcC,IAAI,4BAA4BC,gBAAgB,CAChEtJ,QAAS,sCACTzH,MAAOyQ,EAAIO,WAAWC,MAAM,sDAC5B/H,KAAMjR,EAAEiZ,MAAM,IAAYT,EAAIO,WAAWC,MAAM,0DAA2D,CACxGE,gBAAiB,+FACjBC,cAAe,iEACfC,YAAa,WAAW3T,OAAO+S,EAAI/M,KAAK4N,WAAY,aACpDC,kBAAmB,uDAErBhU,KAAM,UACNsB,SAAU4R,EAAI/M,KAAK,+CAClBqN,gBAAgB,CACjBtJ,QAAS,+CACTzH,MAAOyQ,EAAIO,WAAWC,MAAM,+DAC5B/H,KAAMuH,EAAIO,WAAWC,MAAM,oEAC3B1T,KAAM,WACLiU,aAAa9G,KAChB,IAAAjM,QAAO,cAAyB,YAAY,SAAUsB,GAC1B,6BAAtBnH,KAAKuH,UAAUP,IAAqC,IAAmBhH,KAAKuH,UAAUP,KAG1FG,EAAMnF,IAAI,SAAU3C,EAAE,IAAQ,CAC5BqF,UAAW,wBACX4B,KAAM,eACNF,QAAS,KACPyR,EAAIgB,MAAMC,KAAK,KACfjB,EAAIkB,QAAQ,CACVvN,IAAK,GAAG1G,OAAO+S,EAAImB,MAAMC,UAAU,UAAW,kCAAkCnU,OAAO9E,KAAKuH,UAAUP,IACtGuE,OAAQ,WACPG,MAAKV,IACU,MAAZA,GAAoBA,EAASuL,WAC/B1C,MAEAgE,EAAIqB,OAAOJ,KAAK,CACdnU,KAAM,WACLkT,EAAIO,WAAWC,MAAM,gEACxB/D,OAAOc,SAAWyC,EAAImB,MAAMC,UAAU,YACxC,IACC3J,SAAQ,KACTuI,EAAIgB,MAAMM,OAAO,GACjB,GAEHtB,EAAIO,WAAWC,MAAM,qDAC1B,GAAE,G","sources":["webpack://@flarum/extension-manager/../../../node_modules/dayjs/plugin/duration.js","webpack://@flarum/extension-manager/webpack/bootstrap","webpack://@flarum/extension-manager/webpack/runtime/compat get default export","webpack://@flarum/extension-manager/webpack/runtime/define property getters","webpack://@flarum/extension-manager/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/extension-manager/webpack/runtime/make namespace object","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/components/LoadingModal')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/utils/isExtensionEnabled')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Tooltip')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Icon')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/extension-manager/./src/admin/components/Label.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Modal')\"","webpack://@flarum/extension-manager/./src/admin/components/TaskOutputModal.tsx","webpack://@flarum/extension-manager/./src/admin/utils/humanDuration.ts","webpack://@flarum/extension-manager/./src/admin/components/Pagination.tsx","webpack://@flarum/extension-manager/./src/admin/components/QueueSection.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Alert')\"","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/extension-manager/./src/admin/components/Installer.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/helpers/humanTime')\"","webpack://@flarum/extension-manager/./src/admin/utils/errorHandler.ts","webpack://@flarum/extension-manager/./src/admin/components/WhyNotModal.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Dropdown')\"","webpack://@flarum/extension-manager/./src/admin/components/ExtensionItem.tsx","webpack://@flarum/extension-manager/./src/admin/components/MajorUpdater.tsx","webpack://@flarum/extension-manager/./src/admin/components/Updater.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/extension-manager/./src/admin/components/ControlSection.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/FormGroup')\"","webpack://@flarum/extension-manager/./src/admin/components/ConfigureJson.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Select')\"","webpack://@flarum/extension-manager/./src/admin/components/RepositoryModal.tsx","webpack://@flarum/extension-manager/./src/admin/components/ConfigureComposer.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/helpers/listItems')\"","webpack://@flarum/extension-manager/./src/admin/components/AuthMethodModal.tsx","webpack://@flarum/extension-manager/./src/admin/components/ConfigureAuth.tsx","webpack://@flarum/extension-manager/./src/admin/components/SettingsPage.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/extension-manager/../../../node_modules/pretty-bytes/index.js","webpack://@flarum/extension-manager/./src/admin/models/Task.ts","webpack://@flarum/extension-manager/./src/admin/utils/jumpToQueue.ts","webpack://@flarum/extension-manager/./src/admin/states/QueueState.ts","webpack://@flarum/extension-manager/./src/admin/states/ControlSectionState.ts","webpack://@flarum/extension-manager/./src/admin/states/ExtensionManagerState.ts","webpack://@flarum/extension-manager/./src/admin/index.tsx"],"sourcesContent":["!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,h=2592e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,d={years:u,months:h,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof p},f=function(t,s,n){return new p(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},g=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},p=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*d[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*d[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/h),t%=h,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=g(this.$d.years,\"Y\"),s=g(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=g(n,\"D\"),e=g(this.$d.hours,\"H\"),r=g(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3);var u=g(o,\"S\"),h=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",d=(h?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===d||\"-P\"===d?\"P0D\":d},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/d[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/d[n]):this.$d[n],0===s?0:s},y.add=function(t,s,n){var i;return i=s?t*d[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}();return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)&&(t=t.asMilliseconds()),r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)&&(t=t.asMilliseconds()),o.bind(this)(t,s)}}}));","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/LoadingModal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/utils/isExtensionEnabled');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Component');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LoadingIndicator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Tooltip');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Icon');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Link');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/classList');","import Component from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nexport default class Label extends Component {\n view(vnode) {\n const {\n className,\n type,\n ...attrs\n } = this.attrs;\n return m(\"span\", Object.assign({\n className: classList(['Label', \"Label--\".concat(this.attrs.type), className])\n }, attrs), vnode.children);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Label', Label);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Modal');","import app from 'flarum/admin/app';\nimport Modal from 'flarum/common/components/Modal';\nexport default class TaskOutputModal extends Modal {\n className() {\n return 'Modal--large QuickModal';\n }\n title() {\n return app.translator.trans(\"flarum-extension-manager.admin.sections.queue.operations.\".concat(this.attrs.task.operation()));\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TaskOutputModal-data\"\n }, this.attrs.task.status() === 'failure' && m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.guessed_cause')), m(\"div\", {\n className: \"FormControl TaskOutputModal-data-guessed-cause\"\n }, this.attrs.task.guessedCause() && app.translator.trans('flarum-extension-manager.admin.exceptions.guessed_cause.' + this.attrs.task.guessedCause()) || app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.cause_unknown'))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.command')), m(\"div\", {\n className: \"FormControl TaskOutputModal-data-command\"\n }, m(\"code\", null, \"$ composer \", this.attrs.task.command()))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.output')), m(\"div\", {\n className: \"FormControl TaskOutputModal-data-output\"\n }, m(\"code\", null, m(\"pre\", null, this.attrs.task.output()))))));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/TaskOutputModal', TaskOutputModal);","import duration from 'dayjs/plugin/duration';\nexport default function humanDuration(start, end) {\n dayjs.extend(duration);\n const durationTime = dayjs(end).diff(start);\n return dayjs.duration(durationTime).humanize();\n}\nflarum.reg.add('flarum-extension-manager', 'admin/utils/humanDuration', humanDuration);","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\n/**\n * @todo make it abstract in core for reusability.\n */\nexport default class Pagination extends Component {\n view() {\n return m(\"nav\", {\n className: \"Pagination UserListPage-gridPagination\"\n }, m(Button, {\n disabled: !this.attrs.list.hasPrev() || app.extensionManager.control.isLoading(),\n title: app.translator.trans('core.admin.users.pagination.back_button'),\n onclick: () => this.attrs.list.prev(),\n icon: \"fas fa-chevron-left\",\n className: \"Button Button--icon UserListPage-backBtn\"\n }), m(\"span\", {\n className: \"UserListPage-pageNumber\"\n }, app.translator.trans('core.admin.users.pagination.page_counter', {\n current: this.attrs.list.pageNumber() + 1,\n total: this.attrs.list.getTotalPages()\n })), m(Button, {\n disabled: !this.attrs.list.hasNext() || app.extensionManager.control.isLoading(),\n title: app.translator.trans('core.admin.users.pagination.next_button'),\n onclick: () => this.attrs.list.next(),\n icon: \"fas fa-chevron-right\",\n className: \"Button Button--icon UserListPage-nextBtn\"\n }));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Pagination', Pagination);","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Icon from 'flarum/common/components/Icon';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport extractText from 'flarum/common/utils/extractText';\nimport Link from 'flarum/common/components/Link';\nimport Label from './Label';\nimport TaskOutputModal from './TaskOutputModal';\nimport humanDuration from '../utils/humanDuration';\nimport Pagination from './Pagination';\nexport default class QueueSection extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n app.extensionManager.queue.load();\n }\n view() {\n return m(\"section\", {\n id: \"ExtensionManager-queueSection\",\n className: \"ExtensionPage-permissions ExtensionManager-queueSection\"\n }, m(\"div\", {\n className: \"ExtensionPage-permissions-header ExtensionManager-queueSection-header\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"h2\", {\n className: \"ExtensionTitle\"\n }, app.translator.trans('flarum-extension-manager.admin.sections.queue.title')), m(Button, {\n className: \"Button Button--icon\",\n icon: \"fas fa-sync-alt\",\n onclick: () => app.extensionManager.queue.load(),\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.sections.queue.refresh'),\n disabled: app.extensionManager.control.isLoading()\n }))), m(\"div\", {\n className: \"container\"\n }, this.queueTable()));\n }\n columns() {\n const items = new ItemList();\n items.add('operation', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.operation')),\n content: task => m(\"div\", {\n className: \"ExtensionManager-queueTable-operation\"\n }, m(\"span\", {\n className: \"ExtensionManager-queueTable-operation-icon\"\n }, this.operationIcon(task.operation())), m(\"span\", {\n className: \"ExtensionManager-queueTable-operation-name\"\n }, app.translator.trans(\"flarum-extension-manager.admin.sections.queue.operations.\".concat(task.operation()))))\n }, 80);\n items.add('package', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.package')),\n content: task => {\n var _task$package;\n const extension = app.data.extensions[(_task$package = task.package()) == null ? void 0 : _task$package.replace(/(\\/flarum-|\\/flarum-ext-|\\/)/g, '-')];\n return extension ? m(Link, {\n className: \"ExtensionManager-queueTable-package\",\n href: app.route('extension', {\n id: extension.id\n })\n }, m(\"div\", {\n className: \"ExtensionManager-queueTable-package-icon ExtensionIcon\",\n style: extension.icon\n }, !!extension.icon && m(Icon, {\n name: extension.icon.name\n })), m(\"div\", {\n className: \"ExtensionManager-queueTable-package-details\"\n }, m(\"span\", {\n className: \"ExtensionManager-queueTable-package-title\"\n }, extension.extra['flarum-extension'].title), m(\"span\", {\n className: \"ExtensionManager-queueTable-package-name\"\n }, task.package()))) : task.package();\n }\n }, 75);\n items.add('status', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.status')),\n content: task => m('[', null, m(Label, {\n className: \"ExtensionManager-queueTable-status\",\n type: {\n running: 'neutral',\n failure: 'error',\n pending: 'warning',\n success: 'success'\n }[task.status()]\n }, app.translator.trans(\"flarum-extension-manager.admin.sections.queue.statuses.\".concat(task.status()))), ['pending', 'running'].includes(task.status()) && m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }))\n }, 70);\n items.add('elapsedTime', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.elapsed_time')),\n content: task => !task.startedAt() || !task.finishedAt() ? app.translator.trans('flarum-extension-manager.admin.sections.queue.task_just_started') : m(Tooltip, {\n text: \"\".concat(dayjs(task.startedAt()).format('LL LTS'), \" \").concat(dayjs(task.finishedAt()).format('LL LTS'))\n }, m(\"span\", null, humanDuration(task.startedAt(), task.finishedAt())))\n }, 65);\n items.add('memoryUsed', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.peak_memory_used')),\n content: task => m(\"span\", null, task.peakMemoryUsed())\n }, 60);\n items.add('details', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.details')),\n content: task => m(Button, {\n className: \"Button Button--icon Table-controls-item\",\n icon: \"fas fa-file-alt\",\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.details')\n // @todo fix in core\n // @ts-ignore\n ,\n onclick: () => app.modal.show(TaskOutputModal, {\n task\n }),\n disabled: ['pending', 'running'].includes(task.status())\n }),\n className: 'Table-controls'\n }, 55);\n return items;\n }\n queueTable() {\n const tasks = app.extensionManager.queue.getItems();\n if (!tasks) {\n return m(LoadingIndicator, null);\n }\n if (tasks && !tasks.length) {\n return m(\"h3\", {\n className: \"ExtensionPage-subHeader\"\n }, app.translator.trans('flarum-extension-manager.admin.sections.queue.none'));\n }\n const columns = this.columns();\n return m('[', null, m(\"table\", {\n className: \"Table ExtensionManager-queueTable\"\n }, m(\"thead\", null, m(\"tr\", null, columns.toArray().map((item, index) => m(\"th\", {\n key: index\n }, item.label)))), m(\"tbody\", null, tasks.map((task, index) => m(\"tr\", {\n key: index\n }, columns.toArray().map((item, index) => {\n const {\n label,\n content,\n ...attrs\n } = item;\n return m(\"td\", Object.assign({\n key: index\n }, attrs), content(task));\n }))))), m(Pagination, {\n list: app.extensionManager.queue\n }));\n }\n operationIcon(operation) {\n return m(Icon, {\n name: {\n update_check: 'fas fa-sync-alt',\n update_major: 'fas fa-play',\n update_minor: 'fas fa-play',\n update_global: 'fas fa-play',\n extension_install: 'fas fa-download',\n extension_remove: 'fas fa-times',\n extension_update: 'fas fa-arrow-alt-circle-up',\n why_not: 'fas fa-exclamation-circle'\n }[operation]\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/QueueSection', QueueSection);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Alert');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/Stream');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport Stream from 'flarum/common/utils/Stream';\nexport default class Installer extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"packageName\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.packageName = Stream('');\n }\n view() {\n return m(\"div\", {\n className: \"Form-group ExtensionManager-installer\"\n }, m(\"label\", {\n htmlFor: \"install-extension\"\n }, app.translator.trans('flarum-extension-manager.admin.extensions.install')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.extensions.install_help', {\n extiverse: m(\"a\", {\n href: \"https://extiverse.com\"\n }, \"extiverse.com\"),\n semantic_link: m(\"a\", {\n href: \"https://devhints.io/semver\"\n }),\n code: m(\"code\", null)\n })), m(\"div\", {\n className: \"FormControl-container\"\n }, m(\"input\", {\n className: \"FormControl\",\n id: \"install-extension\",\n placeholder: \"vendor/package-name\",\n bidi: this.packageName\n }), m(Button, {\n className: \"Button\",\n icon: \"fas fa-download\",\n onclick: this.onsubmit.bind(this),\n loading: app.extensionManager.control.isLoading('extension-install'),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.extensions.proceed'))));\n }\n data() {\n return {\n package: this.packageName()\n };\n }\n onsubmit() {\n app.extensionManager.control.requirePackage(this.data());\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Installer', Installer);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/humanTime');","import app from 'flarum/admin/app';\nexport default function (e) {\n app.extensionManager.control.setLoading(null);\n const error = e.response.errors[0];\n if (!['composer_command_failure', 'extension_already_installed', 'extension_not_installed'].includes(error.code)) {\n throw e;\n }\n app.alerts.clear();\n switch (error.code) {\n case 'composer_command_failure':\n if (error.guessed_cause) {\n app.alerts.show({\n type: 'error'\n }, app.translator.trans(\"flarum-extension-manager.admin.exceptions.guessed_cause.\".concat(error.guessed_cause)));\n app.modal.close();\n } else {\n app.alerts.show({\n type: 'error'\n }, app.translator.trans('flarum-extension-manager.admin.exceptions.composer_command_failure'));\n }\n break;\n case 'extension_already_installed':\n app.alerts.show({\n type: 'error'\n }, app.translator.trans('flarum-extension-manager.admin.exceptions.extension_already_installed'));\n app.modal.close();\n break;\n case 'extension_not_installed':\n app.alerts.show({\n type: 'error'\n }, app.translator.trans('flarum-extension-manager.admin.exceptions.extension_not_installed'));\n app.modal.close();\n }\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Modal from 'flarum/common/components/Modal';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport errorHandler from '../utils/errorHandler';\nexport default class WhyNotModal extends Modal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"whyNot\", null);\n }\n className() {\n return 'Modal--large WhyNotModal';\n }\n title() {\n return app.translator.trans('flarum-extension-manager.admin.why_not_modal.title');\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.requestWhyNot();\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, this.loading ? m(LoadingIndicator, null) : m(\"pre\", {\n className: \"WhyNotModal-contents\"\n }, this.whyNot));\n }\n requestWhyNot() {\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/why-not\"),\n body: {\n data: {\n package: this.attrs.package\n }\n }\n }).then(response => {\n this.loading = false;\n this.whyNot = response.data.reason;\n m.redraw();\n }).catch(errorHandler);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/WhyNotModal', WhyNotModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Dropdown');","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nimport Icon from 'flarum/common/components/Icon';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Button from 'flarum/common/components/Button';\nimport WhyNotModal from './WhyNotModal';\nimport Label from './Label';\nimport Dropdown from 'flarum/common/components/Dropdown';\nexport default class ExtensionItem extends Component {\n view(vnode) {\n var _updates$latestMinor;\n const {\n extension,\n updates,\n onClickUpdate,\n whyNotWarning,\n isCore,\n isDanger\n } = this.attrs;\n const latestVersion = (_updates$latestMinor = updates['latest-minor']) != null ? _updates$latestMinor : updates['latest-major'] && !isCore ? updates['latest-major'] : null;\n return m(\"div\", {\n className: classList({\n 'ExtensionManager-extension': true,\n 'ExtensionManager-extension--core': isCore,\n 'ExtensionManager-extension--danger': isDanger\n })\n }, m(\"div\", {\n className: \"ExtensionManager-extension-icon ExtensionIcon\",\n style: extension.icon\n }, extension.icon ? m(Icon, {\n name: extension.icon.name\n }) : ''), m(\"div\", {\n className: \"ExtensionManager-extension-info\"\n }, m(\"div\", {\n className: \"ExtensionManager-extension-name\"\n }, extension.extra['flarum-extension'].title), m(\"div\", {\n className: \"ExtensionManager-extension-version\"\n }, m(\"span\", {\n className: \"ExtensionManager-extension-version-current\"\n }, this.version(updates['version'])), latestVersion ? m(Label, {\n className: \"ExtensionManager-extension-version-latest\",\n type: updates['latest-minor'] ? 'success' : 'warning'\n }, this.version(latestVersion)) : null)), m(\"div\", {\n className: \"ExtensionManager-extension-controls\"\n }, onClickUpdate && typeof onClickUpdate === 'function' ? m(Tooltip, {\n text: app.translator.trans('flarum-extension-manager.admin.extensions.update')\n }, m(Button, {\n icon: \"fas fa-arrow-alt-circle-up\",\n className: \"Button Button--icon Button--flat\",\n onclick: onClickUpdate,\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.extensions.update')\n })) : onClickUpdate ? m(Dropdown, {\n buttonClassName: \"Button Button--icon Button--flat\",\n icon: \"fas fa-arrow-alt-circle-up\",\n label: app.translator.trans('flarum-extension-manager.admin.extensions.update')\n }, m(Button, {\n icon: \"fas fa-arrow-alt-circle-up\",\n className: \"Button\",\n onclick: onClickUpdate.soft\n }, app.translator.trans('flarum-extension-manager.admin.extensions.update_soft_label')), m(Button, {\n icon: \"fas fa-arrow-alt-circle-up\",\n className: \"Button\",\n onclick: onClickUpdate.hard,\n disabled: !updates['direct-dependency']\n }, app.translator.trans('flarum-extension-manager.admin.extensions.update_hard_label'))) : null, whyNotWarning ? m(Tooltip, {\n text: app.translator.trans('flarum-extension-manager.admin.extensions.check_why_it_failed_updating')\n }, m(Button, {\n icon: \"fas fa-exclamation-circle\",\n className: \"Button Button--icon Button--flat Button--danger\",\n onclick: () => app.modal.show(WhyNotModal, {\n package: extension.name\n }),\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.extensions.check_why_it_failed_updating')\n })) : null));\n }\n version(v) {\n return v.charAt(0) === 'v' ? v.substring(1) : v;\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ExtensionItem', ExtensionItem);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Alert from 'flarum/common/components/Alert';\nimport WhyNotModal from './WhyNotModal';\nimport ExtensionItem from './ExtensionItem';\nimport classList from 'flarum/common/utils/classList';\nexport default class MajorUpdater extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"updateState\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.updateState = this.attrs.updateState;\n }\n view() {\n // @todo move Form-group--danger class to core for reuse\n return m(\"div\", {\n className: classList('Form-group Form-group--danger ExtensionManager-majorUpdate', {\n 'ExtensionManager-majorUpdate--failed': this.updateState.status === 'failure',\n 'ExtensionManager-majorUpdate--incompatibleExtensions': this.updateState.incompatibleExtensions.length\n })\n }, m(\"img\", {\n alt: \"flarum logo\",\n src: app.forum.attribute('baseUrl') + '/assets/extensions/flarum-extension-manager/flarum.svg'\n }), m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.major_updater.title', {\n version: this.attrs.coreUpdate['latest-major']\n })), m(\"p\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.description')), m(\"div\", {\n className: \"ExtensionManager-updaterControls\"\n }, m(Tooltip, {\n text: app.translator.trans('flarum-extension-manager.admin.major_updater.dry_run_help')\n }, m(Button, {\n className: \"Button\",\n icon: \"fas fa-vial\",\n onclick: this.update.bind(this, true),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.dry_run'))), m(Button, {\n className: \"Button Button--danger\",\n icon: \"fas fa-play\",\n onclick: this.update.bind(this, false),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.update'))), this.updateState.incompatibleExtensions.length ? m(\"div\", {\n className: \"ExtensionManager-majorUpdate-incompatibleExtensions ExtensionManager-extensions-grid\"\n }, this.updateState.incompatibleExtensions.map(extension => m(ExtensionItem, {\n extension: app.data.extensions[extension.replace('flarum-', '').replace('flarum-ext-', '').replace('/', '-')],\n updates: {},\n onClickUpdate: null,\n isDanger: true\n }))) : null, this.updateState.status === 'failure' ? m(Alert, {\n type: \"error\",\n className: \"ExtensionManager-majorUpdate-failure\",\n dismissible: false,\n controls: [m(Button, {\n className: \"Button Button--text ExtensionManager-majorUpdate-failure-details\",\n icon: \"fas fa-question-circle\",\n onclick: () => app.modal.show(WhyNotModal, {\n package: 'flarum/core'\n })\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.failure.why'))]\n }, m(\"p\", {\n className: \"ExtensionManager-majorUpdate-failure-desc\"\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.failure.desc'))) : null);\n }\n update(dryRun) {\n app.extensionManager.control.majorUpdate({\n dryRun\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/MajorUpdater', MajorUpdater);","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport MajorUpdater from './MajorUpdater';\nimport ExtensionItem from './ExtensionItem';\nimport ItemList from 'flarum/common/utils/ItemList';\nexport default class Updater extends Component {\n view() {\n const core = app.extensionManager.control.coreUpdate;\n return [m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.updater.updater_title')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.updater.updater_help')), this.lastUpdateCheckView(), m(\"div\", {\n className: \"ExtensionManager-updaterControls\"\n }, this.controlItems().toArray()), this.availableUpdatesView()), core && core.package['latest-major'] ? m(MajorUpdater, {\n coreUpdate: core.package,\n updateState: app.extensionManager.control.lastUpdateRun.major\n }) : null];\n }\n lastUpdateCheckView() {\n var _app$extensionManager;\n return ((_app$extensionManager = app.extensionManager.control.lastUpdateCheck) == null ? void 0 : _app$extensionManager.checkedAt) && m(\"p\", {\n className: \"ExtensionManager-lastUpdatedAt\"\n }, m(\"span\", {\n className: \"ExtensionManager-lastUpdatedAt-label\"\n }, app.translator.trans('flarum-extension-manager.admin.updater.last_update_checked_at')), m(\"span\", {\n className: \"ExtensionManager-lastUpdatedAt-value\"\n }, humanTime(app.extensionManager.control.lastUpdateCheck.checkedAt))) || null;\n }\n availableUpdatesView() {\n const state = app.extensionManager.control;\n if (app.extensionManager.control.isLoading('check') || app.extensionManager.control.isLoading('global-update')) {\n return m(\"div\", {\n className: \"ExtensionManager-extensions\"\n }, m(LoadingIndicator, null));\n }\n const hasMinorCoreUpdate = state.coreUpdate && state.coreUpdate.package['latest-minor'];\n if (!(state.extensionUpdates.length || hasMinorCoreUpdate)) {\n return m(\"div\", {\n className: \"ExtensionManager-extensions\"\n }, m(\"span\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.updater.up_to_date')));\n }\n return m(\"div\", {\n className: \"ExtensionManager-extensions\"\n }, m(\"div\", {\n className: \"ExtensionManager-extensions-grid\"\n }, hasMinorCoreUpdate ? m(ExtensionItem, {\n extension: state.coreUpdate.extension,\n updates: state.coreUpdate.package,\n isCore: true,\n onClickUpdate: () => state.updateCoreMinor(),\n whyNotWarning: state.lastUpdateRun.limitedPackages().includes('flarum/core')\n }) : null, state.extensionUpdates.map(extension => m(ExtensionItem, {\n extension: extension,\n updates: state.packageUpdates[extension.id],\n onClickUpdate: {\n soft: () => state.updateExtension(extension, 'soft'),\n hard: () => state.updateExtension(extension, 'hard')\n },\n whyNotWarning: state.lastUpdateRun.limitedPackages().includes(extension.name)\n }))));\n }\n controlItems() {\n const items = new ItemList();\n items.add('updateCheck', m(Button, {\n className: \"Button\",\n icon: \"fas fa-sync-alt\",\n onclick: () => app.extensionManager.control.checkForUpdates(),\n loading: app.extensionManager.control.isLoading('check'),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.updater.check_for_updates')), 100);\n items.add('globalUpdate', m(Button, {\n className: \"Button\",\n icon: \"fas fa-play\",\n onclick: () => app.extensionManager.control.updateGlobally(),\n loading: app.extensionManager.control.isLoading('global-update'),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.updater.run_global_update')));\n return items;\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Updater', Updater);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Alert from 'flarum/common/components/Alert';\nimport Installer from './Installer';\nimport Updater from './Updater';\nimport Form from 'flarum/common/components/Form';\nexport default class ControlSection extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view() {\n return m(\"div\", {\n className: \"ExtensionPage-permissions ExtensionManager-controlSection\"\n }, m(\"div\", {\n className: \"ExtensionPage-permissions-header\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"h2\", {\n className: \"ExtensionTitle\"\n }, app.translator.trans('flarum-extension-manager.admin.sections.control.title')))), m(\"div\", {\n className: \"container\"\n }, app.data['flarum-extension-manager.writable_dirs'] ? m(Form, null, m(Installer, null), m(Updater, null)) : m(\"div\", {\n className: \"Form-group\"\n }, m(Alert, {\n type: \"warning\",\n dismissible: false\n }, app.translator.trans('flarum-extension-manager.admin.file_permissions')))));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ControlSection', ControlSection);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormGroup');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport FormGroup from 'flarum/common/components/FormGroup';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nexport default class ConfigureJson extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"settings\", {});\n _defineProperty(this, \"initialSettings\", null);\n _defineProperty(this, \"loading\", false);\n _defineProperty(this, \"type\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.submit(true);\n }\n className() {\n return '';\n }\n view() {\n return m(\"div\", {\n className: classList('FormSection', this.className())\n }, m(\"label\", null, this.title()), this.content(), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, this.submitButton()));\n }\n submitButton() {\n return [m(Button, {\n className: \"Button Button--primary\",\n loading: this.loading,\n onclick: () => this.submit(false),\n disabled: !this.isDirty()\n }, app.translator.trans('core.admin.settings.submit_button'))];\n }\n customSettingComponents() {\n return FormGroup.prototype.customFieldComponents();\n }\n setting(key) {\n var _this$settings$key;\n return (_this$settings$key = this.settings[key]) != null ? _this$settings$key : this.settings[key] = Stream();\n }\n submit(readOnly) {\n this.loading = true;\n const configuration = {};\n Object.keys(this.settings).forEach(key => {\n configuration[key] = this.settings[key]();\n });\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/extension-manager/composer',\n body: {\n type: this.type,\n data: readOnly ? null : configuration\n }\n }).then(_ref => {\n let {\n data\n } = _ref;\n Object.keys(data).forEach(key => {\n this.settings[key] = Stream(data[key]);\n });\n this.initialSettings = Array.isArray(data) ? {} : data;\n }).finally(() => {\n this.loading = false;\n m.redraw();\n });\n }\n isDirty() {\n return JSON.stringify(this.initialSettings) !== JSON.stringify(this.settings);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ConfigureJson', ConfigureJson);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Select');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Modal from 'flarum/common/components/Modal';\nimport app from 'flarum/admin/app';\nimport Select from 'flarum/common/components/Select';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nexport default class RepositoryModal extends Modal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"repository\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.name = Stream(this.attrs.name || '');\n this.repository = Stream(this.attrs.repository || {\n type: 'composer',\n url: ''\n });\n }\n className() {\n return 'RepositoryModal Modal--small';\n }\n title() {\n const context = this.attrs.repository ? 'edit' : 'add';\n return app.translator.trans(\"flarum-extension-manager.admin.composer.\".concat(context, \"_repository_label\"));\n }\n content() {\n const types = {\n composer: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.composer'),\n vcs: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.vcs'),\n path: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.path')\n };\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.name_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.name\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.type_label')), m(Select, {\n options: types,\n value: this.repository().type,\n onchange: value => this.repository({\n ...this.repository(),\n type: value\n })\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.url')), m(\"input\", {\n className: \"FormControl\",\n onchange: e => this.repository({\n ...this.repository(),\n url: e.target.value\n }),\n value: this.repository().url\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(Button, {\n className: \"Button Button--primary\",\n onclick: this.submit.bind(this)\n }, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.submit_button'))));\n }\n submit() {\n this.attrs.onsubmit(this.repository(), this.name());\n this.hide();\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/RepositoryModal', RepositoryModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport ConfigureJson from './ConfigureJson';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\nimport RepositoryModal from './RepositoryModal';\nexport default class ConfigureComposer extends ConfigureJson {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"type\", 'composer');\n }\n title() {\n return app.translator.trans('flarum-extension-manager.admin.composer.title');\n }\n className() {\n return 'ConfigureComposer';\n }\n content() {\n return m(\"div\", {\n className: \"Form ExtensionManager-SettingsGroups-content\"\n }, this.attrs.buildSettingComponent.call(this, {\n setting: 'minimum-stability',\n label: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.label'),\n help: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.help'),\n type: 'select',\n options: {\n stable: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.stable'),\n RC: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.rc'),\n beta: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.beta'),\n alpha: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.alpha'),\n dev: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.dev')\n }\n }), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.label')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.composer.repositories.help')), m(\"div\", {\n className: \"ConfigureComposer-repositories\"\n }, Object.keys(this.setting('repositories')() || {}).map(name => {\n const repository = this.setting('repositories')()[name];\n return m(\"div\", {\n className: \"ButtonGroup ButtonGroup--full\"\n }, m(Button, {\n className: \"Button\",\n icon: {\n composer: 'fas fa-cubes',\n vcs: 'fas fa-code-branch',\n path: 'fas fa-folder'\n }[repository.type],\n onclick: () => app.modal.show(RepositoryModal, {\n name,\n repository,\n onsubmit: (repository, newName) => {\n const repositories = this.setting('repositories')();\n delete repositories[name];\n this.setting('repositories')(repositories);\n this.onchange(repository, newName);\n }\n })\n }, name, \" (\", repository.type, \")\"), m(Button, {\n className: \"Button Button--icon\",\n icon: \"fas fa-trash\",\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.composer.delete_repository_label'),\n onclick: () => {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.composer.delete_repository_confirmation')))) {\n const repositories = {\n ...this.setting('repositories')()\n };\n delete repositories[name];\n this.setting('repositories')(repositories);\n }\n }\n }));\n }))));\n }\n submitButton() {\n const items = super.submitButton();\n items.push(m(Button, {\n className: \"Button\",\n onclick: () => app.modal.show(RepositoryModal, {\n onsubmit: this.onchange.bind(this)\n })\n }, app.translator.trans('flarum-extension-manager.admin.composer.add_repository_label')));\n return items;\n }\n onchange(repository, name) {\n this.setting('repositories')({\n ...this.setting('repositories')(),\n [name]: repository\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ConfigureComposer', ConfigureComposer);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/listItems');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Modal from 'flarum/common/components/Modal';\nimport app from 'flarum/admin/app';\nimport Select from 'flarum/common/components/Select';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\nexport default class AuthMethodModal extends Modal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"type\", void 0);\n _defineProperty(this, \"host\", void 0);\n _defineProperty(this, \"token\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.type = Stream(this.attrs.type || 'bearer');\n this.host = Stream(this.attrs.host || '');\n this.token = Stream(this.attrs.token || '');\n }\n className() {\n return 'AuthMethodModal Modal--small';\n }\n title() {\n const context = this.attrs.host ? 'edit' : 'add';\n return app.translator.trans(\"flarum-extension-manager.admin.auth_config.\".concat(context, \"_label\"));\n }\n content() {\n const types = {\n 'github-oauth': app.translator.trans('flarum-extension-manager.admin.auth_config.types.github-oauth'),\n 'gitlab-oauth': app.translator.trans('flarum-extension-manager.admin.auth_config.types.gitlab-oauth'),\n 'gitlab-token': app.translator.trans('flarum-extension-manager.admin.auth_config.types.gitlab-token'),\n bearer: app.translator.trans('flarum-extension-manager.admin.auth_config.types.bearer')\n };\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.type_label')), m(Select, {\n options: types,\n value: this.type(),\n onchange: this.type\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.host_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.host,\n placeholder: app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.host_placeholder')\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.token_label')), m(\"textarea\", {\n className: \"FormControl\",\n oninput: e => this.token(e.target.value),\n rows: \"6\",\n placeholder: this.token().startsWith('unchanged:') ? extractText(app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.unchanged_token_placeholder')) : ''\n }, this.token().startsWith('unchanged:') ? '' : this.token())), m(\"div\", {\n className: \"Form-group\"\n }, m(Button, {\n className: \"Button Button--primary\",\n onclick: this.submit.bind(this)\n }, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.submit_button'))));\n }\n submit() {\n this.attrs.onsubmit(this.type(), this.host(), this.token());\n this.hide();\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/AuthMethodModal', AuthMethodModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport ConfigureJson from './ConfigureJson';\nimport Button from 'flarum/common/components/Button';\nimport AuthMethodModal from './AuthMethodModal';\nimport extractText from 'flarum/common/utils/extractText';\nexport default class ConfigureAuth extends ConfigureJson {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"type\", 'auth');\n }\n title() {\n return app.translator.trans('flarum-extension-manager.admin.auth_config.title');\n }\n className() {\n return 'ConfigureAuth';\n }\n content() {\n const authSettings = Object.keys(this.settings);\n const hasAuthSettings = authSettings.length && authSettings.every(type => {\n const data = this.settings[type]();\n return Array.isArray(data) ? data.length : Object.keys(data).length;\n });\n return m(\"div\", {\n className: \"ExtensionManager-SettingsGroups-content\"\n }, hasAuthSettings ? authSettings.map(type => {\n const hosts = this.settings[type]();\n return m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans(\"flarum-extension-manager.admin.auth_config.types.\".concat(type))), m(\"div\", {\n className: \"ConfigureAuth-hosts\"\n }, Object.keys(hosts).map(host => {\n const data = hosts[host];\n return m(\"div\", {\n className: \"ButtonGroup ButtonGroup--full\"\n }, m(Button, {\n className: \"Button\",\n icon: \"fas fa-key\",\n onclick: () => app.modal.show(AuthMethodModal, {\n type,\n host,\n token: data,\n onsubmit: this.onchange.bind(this, host)\n })\n }, host), m(Button, {\n className: \"Button Button--icon\",\n icon: \"fas fa-trash\",\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.auth_config.delete_label'),\n onclick: () => {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.auth_config.delete_confirmation')))) {\n const newType = {\n ...this.setting(type)()\n };\n delete newType[host];\n if (Object.keys(newType).length) {\n this.setting(type)(newType);\n } else {\n delete this.settings[type];\n }\n }\n }\n }));\n })));\n }) : m(\"span\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.auth_config.no_auth_methods_configured')));\n }\n submitButton() {\n const items = super.submitButton();\n items.push(m(Button, {\n className: \"Button\",\n loading: this.loading,\n onclick: () => app.modal.show(AuthMethodModal, {\n onsubmit: this.onchange.bind(this, null)\n })\n }, app.translator.trans('flarum-extension-manager.admin.auth_config.add_label')));\n return items;\n }\n onchange(oldHost, type, host, token) {\n const data = {\n ...this.setting(type)()\n };\n if (oldHost) {\n delete data[oldHost];\n }\n data[host] = token;\n this.setting(type)(data);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ConfigureAuth', ConfigureAuth);","import app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport QueueSection from './QueueSection';\nimport ControlSection from './ControlSection';\nimport ConfigureComposer from './ConfigureComposer';\nimport Alert from 'flarum/common/components/Alert';\nimport listItems from 'flarum/common/helpers/listItems';\nimport ConfigureAuth from './ConfigureAuth';\nexport default class SettingsPage extends ExtensionPage {\n content() {\n const settings = app.extensionData.getSettings(this.extension.id);\n const warnings = [app.translator.trans('flarum-extension-manager.admin.settings.access_warning')];\n if (app.data.debugEnabled) warnings.push(app.translator.trans('flarum-extension-manager.admin.settings.debug_mode_warning'));\n return m(\"div\", {\n className: \"ExtensionPage-settings\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"ExtensionManager-warnings Form-group\"\n }, m(Alert, {\n className: \"ExtensionManager-primaryWarning\",\n type: \"warning\",\n dismissible: false\n }, m(\"ul\", null, listItems(warnings)))), settings ? m(\"div\", {\n className: \"FormSectionGroup ExtensionManager-SettingsGroups\"\n }, m(\"div\", {\n className: \"FormSection\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.settings.title')), m(\"div\", {\n className: \"Form\"\n }, settings.map(this.buildSettingComponent.bind(this))), m(\"div\", {\n className: \"Form-group Form--controls\"\n }, this.submitButton())), m(ConfigureComposer, {\n buildSettingComponent: this.buildSettingComponent\n }), m(ConfigureAuth, {\n buildSettingComponent: this.buildSettingComponent\n })) : m(\"h3\", {\n className: \"ExtensionPage-subHeader\"\n }, app.translator.trans('core.admin.extension.no_settings'))));\n }\n sections(vnode) {\n const items = super.sections(vnode);\n items.setPriority('content', 10);\n items.add('control', m(ControlSection, null), 8);\n if (app.data.settings['flarum-extension-manager.queue_jobs'] !== '0' && app.data.settings['flarum-extension-manager.queue_jobs']) {\n items.add('queue', m(QueueSection, null), 5);\n }\n items.remove('permissions');\n return items;\n }\n onsaved() {\n super.onsaved();\n m.redraw();\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/SettingsPage', SettingsPage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","const BYTE_UNITS = [\n\t'B',\n\t'kB',\n\t'MB',\n\t'GB',\n\t'TB',\n\t'PB',\n\t'EB',\n\t'ZB',\n\t'YB',\n];\n\nconst BIBYTE_UNITS = [\n\t'B',\n\t'kiB',\n\t'MiB',\n\t'GiB',\n\t'TiB',\n\t'PiB',\n\t'EiB',\n\t'ZiB',\n\t'YiB',\n];\n\nconst BIT_UNITS = [\n\t'b',\n\t'kbit',\n\t'Mbit',\n\t'Gbit',\n\t'Tbit',\n\t'Pbit',\n\t'Ebit',\n\t'Zbit',\n\t'Ybit',\n];\n\nconst BIBIT_UNITS = [\n\t'b',\n\t'kibit',\n\t'Mibit',\n\t'Gibit',\n\t'Tibit',\n\t'Pibit',\n\t'Eibit',\n\t'Zibit',\n\t'Yibit',\n];\n\n/*\nFormats the given number using `Number#toLocaleString`.\n- If locale is a string, the value is expected to be a locale-key (for example: `de`).\n- If locale is true, the system default locale is used for translation.\n- If no value for locale is specified, the number is returned unmodified.\n*/\nconst toLocaleString = (number, locale, options) => {\n\tlet result = number;\n\tif (typeof locale === 'string' || Array.isArray(locale)) {\n\t\tresult = number.toLocaleString(locale, options);\n\t} else if (locale === true || options !== undefined) {\n\t\tresult = number.toLocaleString(undefined, options);\n\t}\n\n\treturn result;\n};\n\nexport default function prettyBytes(number, options) {\n\tif (!Number.isFinite(number)) {\n\t\tthrow new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);\n\t}\n\n\toptions = {\n\t\tbits: false,\n\t\tbinary: false,\n\t\t...options,\n\t};\n\n\tconst UNITS = options.bits\n\t\t? (options.binary ? BIBIT_UNITS : BIT_UNITS)\n\t\t: (options.binary ? BIBYTE_UNITS : BYTE_UNITS);\n\n\tif (options.signed && number === 0) {\n\t\treturn ` 0 ${UNITS[0]}`;\n\t}\n\n\tconst isNegative = number < 0;\n\tconst prefix = isNegative ? '-' : (options.signed ? '+' : '');\n\n\tif (isNegative) {\n\t\tnumber = -number;\n\t}\n\n\tlet localeOptions;\n\n\tif (options.minimumFractionDigits !== undefined) {\n\t\tlocaleOptions = {minimumFractionDigits: options.minimumFractionDigits};\n\t}\n\n\tif (options.maximumFractionDigits !== undefined) {\n\t\tlocaleOptions = {maximumFractionDigits: options.maximumFractionDigits, ...localeOptions};\n\t}\n\n\tif (number < 1) {\n\t\tconst numberString = toLocaleString(number, options.locale, localeOptions);\n\t\treturn prefix + numberString + ' ' + UNITS[0];\n\t}\n\n\tconst exponent = Math.min(Math.floor(options.binary ? Math.log(number) / Math.log(1024) : Math.log10(number) / 3), UNITS.length - 1);\n\tnumber /= (options.binary ? 1024 : 1000) ** exponent;\n\n\tif (!localeOptions) {\n\t\tnumber = number.toPrecision(3);\n\t}\n\n\tconst numberString = toLocaleString(Number(number), options.locale, localeOptions);\n\n\tconst unit = UNITS[exponent];\n\n\treturn prefix + numberString + ' ' + unit;\n}\n","import Model from 'flarum/common/Model';\nimport prettyBytes from 'pretty-bytes';\nexport default class Task extends Model {\n status() {\n return Model.attribute('status').call(this);\n }\n operation() {\n return Model.attribute('operation').call(this);\n }\n command() {\n return Model.attribute('command').call(this);\n }\n package() {\n return Model.attribute('package').call(this);\n }\n output() {\n return Model.attribute('output').call(this);\n }\n guessedCause() {\n return Model.attribute('guessedCause').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n startedAt() {\n return Model.attribute('startedAt', Model.transformDate).call(this);\n }\n finishedAt() {\n return Model.attribute('finishedAt', Model.transformDate).call(this);\n }\n peakMemoryUsed() {\n return prettyBytes(Model.attribute('peakMemoryUsed').call(this) * 1024);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/models/Task', Task);","import app from 'flarum/admin/app';\n\n// @ts-ignore\nwindow.jumpToQueue = jumpToQueue;\nexport default function jumpToQueue() {\n app.modal.close();\n m.route.set(app.route('extension', {\n id: 'flarum-extension-manager'\n }));\n app.extensionManager.queue.load({}, true);\n setTimeout(() => {\n var _document$getElementB;\n (_document$getElementB = document.getElementById('ExtensionManager-queueSection')) == null ? void 0 : _document$getElementB.scrollIntoView({\n block: 'nearest'\n });\n }, 200);\n}\nflarum.reg.add('flarum-extension-manager', 'admin/utils/jumpToQueue', jumpToQueue);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nexport default class QueueState {\n constructor() {\n _defineProperty(this, \"polling\", null);\n _defineProperty(this, \"tasks\", null);\n _defineProperty(this, \"limit\", 20);\n _defineProperty(this, \"offset\", 0);\n _defineProperty(this, \"total\", 0);\n }\n load(params, actionTaken) {\n var _params;\n if (actionTaken === void 0) {\n actionTaken = false;\n }\n this.tasks = null;\n params = {\n page: {\n limit: this.limit,\n offset: this.offset,\n ...((_params = params) == null ? void 0 : _params.page)\n },\n ...params\n };\n return app.store.find('extension-manager-tasks', params || {}).then(data => {\n var _data$payload$meta;\n this.tasks = data;\n this.total = ((_data$payload$meta = data.payload.meta) == null ? void 0 : _data$payload$meta.total) || 0;\n m.redraw();\n\n // Check if there is a pending or running task\n const pendingTask = data == null ? void 0 : data.find(task => task.status() === 'pending' || task.status() === 'running');\n if (pendingTask) {\n this.pollQueue(actionTaken);\n } else if (actionTaken) {\n app.extensionManager.control.setLoading(null);\n\n // Refresh the page\n window.location.reload();\n } else if (app.extensionManager.control.isLoading()) {\n app.extensionManager.control.setLoading(null);\n }\n return data;\n });\n }\n getItems() {\n return this.tasks;\n }\n getTotalPages() {\n return Math.ceil(this.total / this.limit);\n }\n pageNumber() {\n return Math.ceil(this.offset / this.limit);\n }\n hasPrev() {\n return this.pageNumber() !== 0;\n }\n hasNext() {\n return this.offset + this.limit < this.total;\n }\n prev() {\n if (this.hasPrev()) {\n this.offset -= this.limit;\n this.load();\n }\n }\n next() {\n if (this.hasNext()) {\n this.offset += this.limit;\n this.load();\n }\n }\n pollQueue(actionTaken) {\n if (actionTaken === void 0) {\n actionTaken = false;\n }\n if (this.polling) {\n clearTimeout(this.polling);\n }\n this.polling = setTimeout(() => {\n this.load({}, actionTaken);\n }, 6000);\n }\n hasPending() {\n var _this$tasks;\n return !!((_this$tasks = this.tasks) != null && _this$tasks.find(task => task.status() === 'pending' || task.status() === 'running'));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/states/QueueState', QueueState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport errorHandler from '../utils/errorHandler';\nimport jumpToQueue from '../utils/jumpToQueue';\nimport extractText from 'flarum/common/utils/extractText';\nexport default class ControlSectionState {\n get lastUpdateRun() {\n const lastUpdateRun = JSON.parse(app.data.settings['flarum-extension-manager.last_update_run']);\n lastUpdateRun.limitedPackages = () => [...lastUpdateRun.major.limitedPackages, ...lastUpdateRun.minor.limitedPackages, ...lastUpdateRun.global.limitedPackages];\n return lastUpdateRun;\n }\n constructor() {\n _defineProperty(this, \"loading\", null);\n _defineProperty(this, \"packageUpdates\", {});\n _defineProperty(this, \"lastUpdateCheck\", void 0);\n _defineProperty(this, \"extensionUpdates\", void 0);\n _defineProperty(this, \"coreUpdate\", null);\n this.lastUpdateCheck = JSON.parse(app.data.settings['flarum-extension-manager.last_update_check']);\n this.extensionUpdates = this.formatExtensionUpdates(this.lastUpdateCheck);\n this.coreUpdate = this.formatCoreUpdate(this.lastUpdateCheck);\n }\n isLoading(name) {\n if (name === void 0) {\n name = null;\n }\n return name && this.loading === name || !name && this.loading !== null;\n }\n hasOperationRunning() {\n return this.isLoading() || app.extensionManager.queue.hasPending();\n }\n setLoading(name) {\n this.loading = name;\n }\n requirePackage(data) {\n app.extensionManager.control.setLoading('extension-install');\n app.modal.show(LoadingModal);\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/extensions\"),\n body: {\n data\n }\n }).then(response => {\n if (response.processing) {\n jumpToQueue();\n } else {\n const extensionId = response.id;\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_install', {\n extension: extensionId\n }));\n window.location.href = \"\".concat(app.forum.attribute('adminUrl'), \"#/extension/\").concat(extensionId);\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n checkForUpdates() {\n this.setLoading('check');\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/check-for-updates\")\n }).then(response => {\n if (response.processing) {\n jumpToQueue();\n } else {\n this.lastUpdateCheck = response;\n this.extensionUpdates = this.formatExtensionUpdates(response);\n this.coreUpdate = this.formatCoreUpdate(response);\n this.setLoading(null);\n m.redraw();\n }\n }).catch(errorHandler).finally(() => {\n m.redraw();\n });\n }\n updateCoreMinor() {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.minor_update_confirmation.content')))) {\n app.modal.show(LoadingModal);\n this.setLoading('minor-update');\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/minor-update\")\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.update_successful'));\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n }\n updateExtension(extension, updateMode) {\n app.modal.show(LoadingModal);\n this.setLoading('extension-update');\n app.request({\n method: 'PATCH',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/extensions/\").concat(extension.id),\n body: {\n data: {\n updateMode\n }\n }\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_update', {\n extension: extension.extra['flarum-extension'].title\n }));\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n updateGlobally() {\n app.modal.show(LoadingModal);\n this.setLoading('global-update');\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/global-update\")\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.updater.global_update_successful'));\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n formatExtensionUpdates(lastUpdateCheck) {\n var _lastUpdateCheck$upda, _lastUpdateCheck$upda2;\n this.packageUpdates = {};\n lastUpdateCheck == null ? void 0 : (_lastUpdateCheck$upda = lastUpdateCheck.updates) == null ? void 0 : (_lastUpdateCheck$upda2 = _lastUpdateCheck$upda.installed) == null ? void 0 : _lastUpdateCheck$upda2.filter(composerPackage => {\n const id = composerPackage.name.replace('/', '-').replace(/(flarum-ext-)|(flarum-)/, '');\n const extension = app.data.extensions[id];\n const safeToUpdate = ['semver-safe-update', 'update-possible'].includes(composerPackage['latest-status']);\n if (extension && safeToUpdate) {\n this.packageUpdates[extension.id] = composerPackage;\n }\n return extension && safeToUpdate;\n });\n return Object.values(app.data.extensions).filter(extension => this.packageUpdates[extension.id]);\n }\n formatCoreUpdate(lastUpdateCheck) {\n var _lastUpdateCheck$upda3, _lastUpdateCheck$upda4;\n const core = lastUpdateCheck == null ? void 0 : (_lastUpdateCheck$upda3 = lastUpdateCheck.updates) == null ? void 0 : (_lastUpdateCheck$upda4 = _lastUpdateCheck$upda3.installed) == null ? void 0 : _lastUpdateCheck$upda4.filter(composerPackage => composerPackage.name === 'flarum/core').pop();\n if (!core) return null;\n return {\n package: core,\n extension: {\n id: 'flarum-core',\n name: 'flarum/core',\n version: app.data.settings.version,\n icon: {\n // @ts-ignore\n backgroundImage: \"url(\".concat(app.data.resources[0]['attributes']['baseUrl'], \"/assets/extensions/flarum-extension-manager/flarum.svg\")\n },\n extra: {\n 'flarum-extension': {\n title: extractText(app.translator.trans('flarum-extension-manager.admin.updater.flarum'))\n }\n }\n }\n };\n }\n majorUpdate(_ref) {\n let {\n dryRun\n } = _ref;\n app.extensionManager.control.setLoading(dryRun ? 'major-update-dry-run' : 'major-update');\n app.modal.show(LoadingModal);\n const updateState = this.lastUpdateRun.major;\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/major-update\"),\n body: {\n data: {\n dryRun\n }\n }\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.update_successful'));\n window.location.reload();\n }\n }).catch(errorHandler).catch(e => {\n var _e$response, _e$response$errors, _e$response$errors$po;\n app.modal.close();\n updateState.status = 'failure';\n updateState.incompatibleExtensions = (_e$response = e.response) == null ? void 0 : (_e$response$errors = _e$response.errors) == null ? void 0 : (_e$response$errors$po = _e$response$errors.pop()) == null ? void 0 : _e$response$errors$po.incompatible_extensions;\n }).finally(() => {\n m.redraw();\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/states/ControlSectionState', ControlSectionState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport QueueState from './QueueState';\nimport ControlSectionState from './ControlSectionState';\nexport default class ExtensionManagerState {\n constructor() {\n _defineProperty(this, \"queue\", new QueueState());\n _defineProperty(this, \"control\", new ControlSectionState());\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/states/ExtensionManagerState', ExtensionManagerState);","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport isExtensionEnabled from 'flarum/admin/utils/isExtensionEnabled';\nimport SettingsPage from './components/SettingsPage';\nimport Task from './models/Task';\nimport jumpToQueue from './utils/jumpToQueue';\nimport extractText from 'flarum/common/utils/extractText';\nimport ExtensionManagerState from './states/ExtensionManagerState';\napp.initializers.add('flarum-extension-manager', app => {\n app.store.models['extension-manager-tasks'] = Task;\n app.extensionManager = new ExtensionManagerState();\n if (app.data['flarum-extension-manager.using_sync_queue']) {\n app.data.settings['flarum-extension-manager.queue_jobs'] = '0';\n }\n app.extensionData.for('flarum-extension-manager').registerSetting({\n setting: 'flarum-extension-manager.queue_jobs',\n label: app.translator.trans('flarum-extension-manager.admin.settings.queue_jobs'),\n help: m.trust(extractText(app.translator.trans('flarum-extension-manager.admin.settings.queue_jobs_help', {\n basic_impl_link: 'https://discuss.flarum.org/d/28151-database-queue-the-simplest-queue-even-for-shared-hosting',\n adv_impl_link: 'https://discuss.flarum.org/d/21873-redis-sessions-cache-queues',\n php_version: \"\".concat(app.data.phpVersion, \"\"),\n folder_perms_link: 'https://docs.flarum.org/install#folder-ownership'\n }))),\n type: 'boolean',\n disabled: app.data['flarum-extension-manager.using_sync_queue']\n }).registerSetting({\n setting: 'flarum-extension-manager.task_retention_days',\n label: app.translator.trans('flarum-extension-manager.admin.settings.task_retention_days'),\n help: app.translator.trans('flarum-extension-manager.admin.settings.task_retention_days_help'),\n type: 'number'\n }).registerPage(SettingsPage);\n extend(ExtensionPage.prototype, 'topItems', function (items) {\n if (this.extension.id === 'flarum-extension-manager' || isExtensionEnabled(this.extension.id)) {\n return;\n }\n items.add('remove', m(Button, {\n className: \"Button Button--danger\",\n icon: \"fas fa-times\",\n onclick: () => {\n app.modal.show(LoadingModal);\n app.request({\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/extensions/\").concat(this.extension.id),\n method: 'DELETE'\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_remove'));\n window.location = app.forum.attribute('adminUrl');\n }\n }).finally(() => {\n app.modal.close();\n });\n }\n }, app.translator.trans('flarum-extension-manager.admin.extensions.remove')));\n });\n});"],"names":["module","exports","t","s","n","i","e","r","o","u","h","a","d","years","months","days","hours","minutes","seconds","milliseconds","weeks","c","p","f","$l","m","l","$","Math","ceil","floor","y","abs","g","negative","format","this","$d","$ms","parseFromMilliseconds","Object","keys","forEach","calMilliseconds","match","slice","map","Number","prototype","reduce","toISOString","toJSON","Y","YY","YYYY","M","MM","D","DD","H","HH","mm","ss","SSS","replace","String","as","get","add","subtract","locale","clone","humanize","fromNow","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","$utils","duration","isDuration","bind","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","call","getter","__esModule","definition","key","defineProperty","enumerable","obj","prop","hasOwnProperty","Symbol","toStringTag","value","flarum","reg","Label","view","vnode","className","type","attrs","assign","concat","children","TaskOutputModal","title","task","operation","content","status","guessedCause","command","output","humanDuration","start","end","dayjs","extend","durationTime","diff","Pagination","disabled","list","hasPrev","onclick","prev","icon","current","pageNumber","total","getTotalPages","hasNext","next","QueueSection","oninit","super","id","queueTable","columns","items","label","operationIcon","_task$package","extension","package","href","style","name","extra","running","failure","pending","success","includes","size","display","startedAt","finishedAt","text","peakMemoryUsed","tasks","length","toArray","item","index","update_check","update_major","update_minor","update_global","extension_install","extension_remove","extension_update","why_not","_typeof","iterator","constructor","_defineProperty","arg","input","hint","prim","toPrimitive","res","TypeError","toPropertyKey","configurable","writable","Installer","arguments","packageName","htmlFor","extiverse","semantic_link","code","placeholder","bidi","onsubmit","loading","data","error","response","errors","guessed_cause","WhyNotModal","oncreate","requestWhyNot","whyNot","method","url","body","then","reason","redraw","catch","errorHandler","ExtensionItem","_updates$latestMinor","updates","onClickUpdate","whyNotWarning","isCore","isDanger","latestVersion","version","buttonClassName","soft","hard","v","charAt","substring","MajorUpdater","updateState","incompatibleExtensions","alt","src","coreUpdate","update","dismissible","controls","dryRun","Updater","core","lastUpdateCheckView","controlItems","availableUpdatesView","_app$extensionManager","checkedAt","state","hasMinorCoreUpdate","extensionUpdates","updateCoreMinor","lastUpdateRun","limitedPackages","packageUpdates","updateExtension","ControlSection","ConfigureJson","submit","submitButton","isDirty","customSettingComponents","setting","_this$settings$key","settings","readOnly","configuration","_ref","initialSettings","Array","isArray","finally","JSON","stringify","RepositoryModal","repository","context","types","composer","vcs","path","options","onchange","target","hide","ConfigureComposer","buildSettingComponent","help","stable","RC","beta","alpha","dev","newName","repositories","confirm","push","AuthMethodModal","host","token","bearer","oninput","rows","startsWith","ConfigureAuth","authSettings","hasAuthSettings","every","hosts","newType","oldHost","SettingsPage","warnings","sections","setPriority","remove","onsaved","BYTE_UNITS","BIBYTE_UNITS","BIT_UNITS","BIBIT_UNITS","toLocaleString","number","result","Task","createdAt","isFinite","UNITS","bits","binary","signed","isNegative","prefix","localeOptions","minimumFractionDigits","maximumFractionDigits","exponent","min","log","log10","toPrecision","prettyBytes","jumpToQueue","route","set","setTimeout","_document$getElementB","document","getElementById","scrollIntoView","block","window","QueueState","load","params","actionTaken","_params","page","limit","offset","_data$payload$meta","payload","meta","find","pollQueue","location","reload","getItems","polling","clearTimeout","hasPending","_this$tasks","ControlSectionState","parse","major","minor","global","lastUpdateCheck","formatExtensionUpdates","formatCoreUpdate","isLoading","hasOperationRunning","setLoading","requirePackage","processing","extensionId","checkForUpdates","updateMode","updateGlobally","_lastUpdateCheck$upda","_lastUpdateCheck$upda2","installed","filter","composerPackage","safeToUpdate","values","_lastUpdateCheck$upda3","_lastUpdateCheck$upda4","pop","backgroundImage","majorUpdate","_e$response","_e$response$errors","_e$response$errors$po","incompatible_extensions","ExtensionManagerState","app","store","models","extensionManager","extensionData","for","registerSetting","translator","trans","trust","basic_impl_link","adv_impl_link","php_version","phpVersion","folder_perms_link","registerPage","modal","show","request","forum","attribute","alerts","close"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/extension-manager/../../../node_modules/dayjs/plugin/duration.js","webpack://@flarum/extension-manager/webpack/bootstrap","webpack://@flarum/extension-manager/webpack/runtime/compat get default export","webpack://@flarum/extension-manager/webpack/runtime/define property getters","webpack://@flarum/extension-manager/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/extension-manager/webpack/runtime/make namespace object","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/components/LoadingModal')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'admin/utils/isExtensionEnabled')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/extension-manager/../../../node_modules/pretty-bytes/index.js","webpack://@flarum/extension-manager/./src/admin/models/Task.ts","webpack://@flarum/extension-manager/./src/admin/utils/jumpToQueue.ts","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/extension-manager/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/extension-manager/./src/admin/states/QueueState.ts","webpack://@flarum/extension-manager/./src/admin/utils/errorHandler.ts","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/extension-manager/./src/admin/states/ControlSectionState.ts","webpack://@flarum/extension-manager/./src/admin/states/ExtensionManagerState.ts","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Tooltip')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Icon')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/extension-manager/./src/admin/components/Label.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Modal')\"","webpack://@flarum/extension-manager/./src/admin/components/TaskOutputModal.tsx","webpack://@flarum/extension-manager/./src/admin/utils/humanDuration.ts","webpack://@flarum/extension-manager/./src/admin/components/Pagination.tsx","webpack://@flarum/extension-manager/./src/admin/components/QueueSection.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Alert')\"","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/extension-manager/./src/admin/components/Installer.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/helpers/humanTime')\"","webpack://@flarum/extension-manager/./src/admin/components/WhyNotModal.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Dropdown')\"","webpack://@flarum/extension-manager/./src/admin/components/ExtensionItem.tsx","webpack://@flarum/extension-manager/./src/admin/components/MajorUpdater.tsx","webpack://@flarum/extension-manager/./src/admin/components/Updater.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/extension-manager/./src/admin/components/ControlSection.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/FormGroup')\"","webpack://@flarum/extension-manager/./src/admin/components/ConfigureJson.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/components/Select')\"","webpack://@flarum/extension-manager/./src/admin/components/RepositoryModal.tsx","webpack://@flarum/extension-manager/./src/admin/components/ConfigureComposer.tsx","webpack://@flarum/extension-manager/external root \"flarum.reg.get('core', 'common/helpers/listItems')\"","webpack://@flarum/extension-manager/./src/admin/components/AuthMethodModal.tsx","webpack://@flarum/extension-manager/./src/admin/components/ConfigureAuth.tsx","webpack://@flarum/extension-manager/./src/admin/components/SettingsPage.tsx","webpack://@flarum/extension-manager/./src/admin/extend.tsx","webpack://@flarum/extension-manager/./src/admin/index.tsx"],"sourcesContent":["!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,h=2592e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,d={years:u,months:h,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof p},f=function(t,s,n){return new p(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},g=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},p=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*d[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*d[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/h),t%=h,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=g(this.$d.years,\"Y\"),s=g(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=g(n,\"D\"),e=g(this.$d.hours,\"H\"),r=g(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3);var u=g(o,\"S\"),h=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",d=(h?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===d||\"-P\"===d?\"P0D\":d},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/d[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/d[n]):this.$d[n],0===s?0:s},y.add=function(t,s,n){var i;return i=s?t*d[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}();return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)&&(t=t.asMilliseconds()),r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)&&(t=t.asMilliseconds()),o.bind(this)(t,s)}}}));","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/LoadingModal');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/utils/isExtensionEnabled');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","const BYTE_UNITS = [\n\t'B',\n\t'kB',\n\t'MB',\n\t'GB',\n\t'TB',\n\t'PB',\n\t'EB',\n\t'ZB',\n\t'YB',\n];\n\nconst BIBYTE_UNITS = [\n\t'B',\n\t'kiB',\n\t'MiB',\n\t'GiB',\n\t'TiB',\n\t'PiB',\n\t'EiB',\n\t'ZiB',\n\t'YiB',\n];\n\nconst BIT_UNITS = [\n\t'b',\n\t'kbit',\n\t'Mbit',\n\t'Gbit',\n\t'Tbit',\n\t'Pbit',\n\t'Ebit',\n\t'Zbit',\n\t'Ybit',\n];\n\nconst BIBIT_UNITS = [\n\t'b',\n\t'kibit',\n\t'Mibit',\n\t'Gibit',\n\t'Tibit',\n\t'Pibit',\n\t'Eibit',\n\t'Zibit',\n\t'Yibit',\n];\n\n/*\nFormats the given number using `Number#toLocaleString`.\n- If locale is a string, the value is expected to be a locale-key (for example: `de`).\n- If locale is true, the system default locale is used for translation.\n- If no value for locale is specified, the number is returned unmodified.\n*/\nconst toLocaleString = (number, locale, options) => {\n\tlet result = number;\n\tif (typeof locale === 'string' || Array.isArray(locale)) {\n\t\tresult = number.toLocaleString(locale, options);\n\t} else if (locale === true || options !== undefined) {\n\t\tresult = number.toLocaleString(undefined, options);\n\t}\n\n\treturn result;\n};\n\nexport default function prettyBytes(number, options) {\n\tif (!Number.isFinite(number)) {\n\t\tthrow new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);\n\t}\n\n\toptions = {\n\t\tbits: false,\n\t\tbinary: false,\n\t\t...options,\n\t};\n\n\tconst UNITS = options.bits\n\t\t? (options.binary ? BIBIT_UNITS : BIT_UNITS)\n\t\t: (options.binary ? BIBYTE_UNITS : BYTE_UNITS);\n\n\tif (options.signed && number === 0) {\n\t\treturn ` 0 ${UNITS[0]}`;\n\t}\n\n\tconst isNegative = number < 0;\n\tconst prefix = isNegative ? '-' : (options.signed ? '+' : '');\n\n\tif (isNegative) {\n\t\tnumber = -number;\n\t}\n\n\tlet localeOptions;\n\n\tif (options.minimumFractionDigits !== undefined) {\n\t\tlocaleOptions = {minimumFractionDigits: options.minimumFractionDigits};\n\t}\n\n\tif (options.maximumFractionDigits !== undefined) {\n\t\tlocaleOptions = {maximumFractionDigits: options.maximumFractionDigits, ...localeOptions};\n\t}\n\n\tif (number < 1) {\n\t\tconst numberString = toLocaleString(number, options.locale, localeOptions);\n\t\treturn prefix + numberString + ' ' + UNITS[0];\n\t}\n\n\tconst exponent = Math.min(Math.floor(options.binary ? Math.log(number) / Math.log(1024) : Math.log10(number) / 3), UNITS.length - 1);\n\tnumber /= (options.binary ? 1024 : 1000) ** exponent;\n\n\tif (!localeOptions) {\n\t\tnumber = number.toPrecision(3);\n\t}\n\n\tconst numberString = toLocaleString(Number(number), options.locale, localeOptions);\n\n\tconst unit = UNITS[exponent];\n\n\treturn prefix + numberString + ' ' + unit;\n}\n","import Model from 'flarum/common/Model';\nimport prettyBytes from 'pretty-bytes';\nexport default class Task extends Model {\n status() {\n return Model.attribute('status').call(this);\n }\n operation() {\n return Model.attribute('operation').call(this);\n }\n command() {\n return Model.attribute('command').call(this);\n }\n package() {\n return Model.attribute('package').call(this);\n }\n output() {\n return Model.attribute('output').call(this);\n }\n guessedCause() {\n return Model.attribute('guessedCause').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n startedAt() {\n return Model.attribute('startedAt', Model.transformDate).call(this);\n }\n finishedAt() {\n return Model.attribute('finishedAt', Model.transformDate).call(this);\n }\n peakMemoryUsed() {\n return prettyBytes(Model.attribute('peakMemoryUsed').call(this) * 1024);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/models/Task', Task);","import app from 'flarum/admin/app';\n\n// @ts-ignore\nwindow.jumpToQueue = jumpToQueue;\nexport default function jumpToQueue() {\n app.modal.close();\n m.route.set(app.route('extension', {\n id: 'flarum-extension-manager'\n }));\n app.extensionManager.queue.load({}, true);\n setTimeout(() => {\n var _document$getElementB;\n (_document$getElementB = document.getElementById('ExtensionManager-queueSection')) == null ? void 0 : _document$getElementB.scrollIntoView({\n block: 'nearest'\n });\n }, 200);\n}\nflarum.reg.add('flarum-extension-manager', 'admin/utils/jumpToQueue', jumpToQueue);","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nexport default class QueueState {\n constructor() {\n _defineProperty(this, \"polling\", null);\n _defineProperty(this, \"tasks\", null);\n _defineProperty(this, \"limit\", 20);\n _defineProperty(this, \"offset\", 0);\n _defineProperty(this, \"total\", 0);\n }\n load(params, actionTaken) {\n var _params;\n if (actionTaken === void 0) {\n actionTaken = false;\n }\n this.tasks = null;\n params = {\n page: {\n limit: this.limit,\n offset: this.offset,\n ...((_params = params) == null ? void 0 : _params.page)\n },\n ...params\n };\n return app.store.find('extension-manager-tasks', params || {}).then(data => {\n var _data$payload$meta;\n this.tasks = data;\n this.total = ((_data$payload$meta = data.payload.meta) == null ? void 0 : _data$payload$meta.total) || 0;\n m.redraw();\n\n // Check if there is a pending or running task\n const pendingTask = data == null ? void 0 : data.find(task => task.status() === 'pending' || task.status() === 'running');\n if (pendingTask) {\n this.pollQueue(actionTaken);\n } else if (actionTaken) {\n app.extensionManager.control.setLoading(null);\n\n // Refresh the page\n window.location.reload();\n } else if (app.extensionManager.control.isLoading()) {\n app.extensionManager.control.setLoading(null);\n }\n return data;\n });\n }\n getItems() {\n return this.tasks;\n }\n getTotalPages() {\n return Math.ceil(this.total / this.limit);\n }\n pageNumber() {\n return Math.ceil(this.offset / this.limit);\n }\n hasPrev() {\n return this.pageNumber() !== 0;\n }\n hasNext() {\n return this.offset + this.limit < this.total;\n }\n prev() {\n if (this.hasPrev()) {\n this.offset -= this.limit;\n this.load();\n }\n }\n next() {\n if (this.hasNext()) {\n this.offset += this.limit;\n this.load();\n }\n }\n pollQueue(actionTaken) {\n if (actionTaken === void 0) {\n actionTaken = false;\n }\n if (this.polling) {\n clearTimeout(this.polling);\n }\n this.polling = setTimeout(() => {\n this.load({}, actionTaken);\n }, 6000);\n }\n hasPending() {\n var _this$tasks;\n return !!((_this$tasks = this.tasks) != null && _this$tasks.find(task => task.status() === 'pending' || task.status() === 'running'));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/states/QueueState', QueueState);","import app from 'flarum/admin/app';\nexport default function (e) {\n app.extensionManager.control.setLoading(null);\n const error = e.response.errors[0];\n if (!['composer_command_failure', 'extension_already_installed', 'extension_not_installed'].includes(error.code)) {\n throw e;\n }\n app.alerts.clear();\n switch (error.code) {\n case 'composer_command_failure':\n if (error.guessed_cause) {\n app.alerts.show({\n type: 'error'\n }, app.translator.trans(\"flarum-extension-manager.admin.exceptions.guessed_cause.\".concat(error.guessed_cause)));\n app.modal.close();\n } else {\n app.alerts.show({\n type: 'error'\n }, app.translator.trans('flarum-extension-manager.admin.exceptions.composer_command_failure'));\n }\n break;\n case 'extension_already_installed':\n app.alerts.show({\n type: 'error'\n }, app.translator.trans('flarum-extension-manager.admin.exceptions.extension_already_installed'));\n app.modal.close();\n break;\n case 'extension_not_installed':\n app.alerts.show({\n type: 'error'\n }, app.translator.trans('flarum-extension-manager.admin.exceptions.extension_not_installed'));\n app.modal.close();\n }\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport errorHandler from '../utils/errorHandler';\nimport jumpToQueue from '../utils/jumpToQueue';\nimport extractText from 'flarum/common/utils/extractText';\nexport default class ControlSectionState {\n get lastUpdateRun() {\n const lastUpdateRun = JSON.parse(app.data.settings['flarum-extension-manager.last_update_run']);\n lastUpdateRun.limitedPackages = () => [...lastUpdateRun.major.limitedPackages, ...lastUpdateRun.minor.limitedPackages, ...lastUpdateRun.global.limitedPackages];\n return lastUpdateRun;\n }\n constructor() {\n _defineProperty(this, \"loading\", null);\n _defineProperty(this, \"packageUpdates\", {});\n _defineProperty(this, \"lastUpdateCheck\", void 0);\n _defineProperty(this, \"extensionUpdates\", void 0);\n _defineProperty(this, \"coreUpdate\", null);\n this.lastUpdateCheck = JSON.parse(app.data.settings['flarum-extension-manager.last_update_check']);\n this.extensionUpdates = this.formatExtensionUpdates(this.lastUpdateCheck);\n this.coreUpdate = this.formatCoreUpdate(this.lastUpdateCheck);\n }\n isLoading(name) {\n if (name === void 0) {\n name = null;\n }\n return name && this.loading === name || !name && this.loading !== null;\n }\n hasOperationRunning() {\n return this.isLoading() || app.extensionManager.queue.hasPending();\n }\n setLoading(name) {\n this.loading = name;\n }\n requirePackage(data) {\n app.extensionManager.control.setLoading('extension-install');\n app.modal.show(LoadingModal);\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/extensions\"),\n body: {\n data\n }\n }).then(response => {\n if (response.processing) {\n jumpToQueue();\n } else {\n const extensionId = response.id;\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_install', {\n extension: extensionId\n }));\n window.location.href = \"\".concat(app.forum.attribute('adminUrl'), \"#/extension/\").concat(extensionId);\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n checkForUpdates() {\n this.setLoading('check');\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/check-for-updates\")\n }).then(response => {\n if (response.processing) {\n jumpToQueue();\n } else {\n this.lastUpdateCheck = response;\n this.extensionUpdates = this.formatExtensionUpdates(response);\n this.coreUpdate = this.formatCoreUpdate(response);\n this.setLoading(null);\n m.redraw();\n }\n }).catch(errorHandler).finally(() => {\n m.redraw();\n });\n }\n updateCoreMinor() {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.minor_update_confirmation.content')))) {\n app.modal.show(LoadingModal);\n this.setLoading('minor-update');\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/minor-update\")\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.update_successful'));\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n }\n updateExtension(extension, updateMode) {\n app.modal.show(LoadingModal);\n this.setLoading('extension-update');\n app.request({\n method: 'PATCH',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/extensions/\").concat(extension.id),\n body: {\n data: {\n updateMode\n }\n }\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_update', {\n extension: extension.extra['flarum-extension'].title\n }));\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n updateGlobally() {\n app.modal.show(LoadingModal);\n this.setLoading('global-update');\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/global-update\")\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.updater.global_update_successful'));\n window.location.reload();\n }\n }).catch(errorHandler).finally(() => {\n app.modal.close();\n m.redraw();\n });\n }\n formatExtensionUpdates(lastUpdateCheck) {\n var _lastUpdateCheck$upda, _lastUpdateCheck$upda2;\n this.packageUpdates = {};\n lastUpdateCheck == null ? void 0 : (_lastUpdateCheck$upda = lastUpdateCheck.updates) == null ? void 0 : (_lastUpdateCheck$upda2 = _lastUpdateCheck$upda.installed) == null ? void 0 : _lastUpdateCheck$upda2.filter(composerPackage => {\n const id = composerPackage.name.replace('/', '-').replace(/(flarum-ext-)|(flarum-)/, '');\n const extension = app.data.extensions[id];\n const safeToUpdate = ['semver-safe-update', 'update-possible'].includes(composerPackage['latest-status']);\n if (extension && safeToUpdate) {\n this.packageUpdates[extension.id] = composerPackage;\n }\n return extension && safeToUpdate;\n });\n return Object.values(app.data.extensions).filter(extension => this.packageUpdates[extension.id]);\n }\n formatCoreUpdate(lastUpdateCheck) {\n var _lastUpdateCheck$upda3, _lastUpdateCheck$upda4;\n const core = lastUpdateCheck == null ? void 0 : (_lastUpdateCheck$upda3 = lastUpdateCheck.updates) == null ? void 0 : (_lastUpdateCheck$upda4 = _lastUpdateCheck$upda3.installed) == null ? void 0 : _lastUpdateCheck$upda4.filter(composerPackage => composerPackage.name === 'flarum/core').pop();\n if (!core) return null;\n return {\n package: core,\n extension: {\n id: 'flarum-core',\n name: 'flarum/core',\n version: app.data.settings.version,\n icon: {\n // @ts-ignore\n backgroundImage: \"url(\".concat(app.data.resources[0]['attributes']['baseUrl'], \"/assets/extensions/flarum-extension-manager/flarum.svg\")\n },\n extra: {\n 'flarum-extension': {\n title: extractText(app.translator.trans('flarum-extension-manager.admin.updater.flarum'))\n }\n }\n }\n };\n }\n majorUpdate(_ref) {\n let {\n dryRun\n } = _ref;\n app.extensionManager.control.setLoading(dryRun ? 'major-update-dry-run' : 'major-update');\n app.modal.show(LoadingModal);\n const updateState = this.lastUpdateRun.major;\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/major-update\"),\n body: {\n data: {\n dryRun\n }\n }\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.update_successful'));\n window.location.reload();\n }\n }).catch(errorHandler).catch(e => {\n var _e$response, _e$response$errors, _e$response$errors$po;\n app.modal.close();\n updateState.status = 'failure';\n updateState.incompatibleExtensions = (_e$response = e.response) == null ? void 0 : (_e$response$errors = _e$response.errors) == null ? void 0 : (_e$response$errors$po = _e$response$errors.pop()) == null ? void 0 : _e$response$errors$po.incompatible_extensions;\n }).finally(() => {\n m.redraw();\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/states/ControlSectionState', ControlSectionState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport QueueState from './QueueState';\nimport ControlSectionState from './ControlSectionState';\nexport default class ExtensionManagerState {\n constructor() {\n _defineProperty(this, \"queue\", new QueueState());\n _defineProperty(this, \"control\", new ControlSectionState());\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/states/ExtensionManagerState', ExtensionManagerState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Component');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LoadingIndicator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Tooltip');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Icon');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Link');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/classList');","import Component from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nexport default class Label extends Component {\n view(vnode) {\n const {\n className,\n type,\n ...attrs\n } = this.attrs;\n return m(\"span\", Object.assign({\n className: classList(['Label', \"Label--\".concat(this.attrs.type), className])\n }, attrs), vnode.children);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Label', Label);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Modal');","import app from 'flarum/admin/app';\nimport Modal from 'flarum/common/components/Modal';\nexport default class TaskOutputModal extends Modal {\n className() {\n return 'Modal--large QuickModal';\n }\n title() {\n return app.translator.trans(\"flarum-extension-manager.admin.sections.queue.operations.\".concat(this.attrs.task.operation()));\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TaskOutputModal-data\"\n }, this.attrs.task.status() === 'failure' && m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.guessed_cause')), m(\"div\", {\n className: \"FormControl TaskOutputModal-data-guessed-cause\"\n }, this.attrs.task.guessedCause() && app.translator.trans('flarum-extension-manager.admin.exceptions.guessed_cause.' + this.attrs.task.guessedCause()) || app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.cause_unknown'))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.command')), m(\"div\", {\n className: \"FormControl TaskOutputModal-data-command\"\n }, m(\"code\", null, \"$ composer \", this.attrs.task.command()))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.sections.queue.output_modal.output')), m(\"div\", {\n className: \"FormControl TaskOutputModal-data-output\"\n }, m(\"code\", null, m(\"pre\", null, this.attrs.task.output()))))));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/TaskOutputModal', TaskOutputModal);","import duration from 'dayjs/plugin/duration';\nexport default function humanDuration(start, end) {\n dayjs.extend(duration);\n const durationTime = dayjs(end).diff(start);\n return dayjs.duration(durationTime).humanize();\n}\nflarum.reg.add('flarum-extension-manager', 'admin/utils/humanDuration', humanDuration);","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\n/**\n * @todo make it abstract in core for reusability.\n */\nexport default class Pagination extends Component {\n view() {\n return m(\"nav\", {\n className: \"Pagination UserListPage-gridPagination\"\n }, m(Button, {\n disabled: !this.attrs.list.hasPrev() || app.extensionManager.control.isLoading(),\n title: app.translator.trans('core.admin.users.pagination.back_button'),\n onclick: () => this.attrs.list.prev(),\n icon: \"fas fa-chevron-left\",\n className: \"Button Button--icon UserListPage-backBtn\"\n }), m(\"span\", {\n className: \"UserListPage-pageNumber\"\n }, app.translator.trans('core.admin.users.pagination.page_counter', {\n current: this.attrs.list.pageNumber() + 1,\n total: this.attrs.list.getTotalPages()\n })), m(Button, {\n disabled: !this.attrs.list.hasNext() || app.extensionManager.control.isLoading(),\n title: app.translator.trans('core.admin.users.pagination.next_button'),\n onclick: () => this.attrs.list.next(),\n icon: \"fas fa-chevron-right\",\n className: \"Button Button--icon UserListPage-nextBtn\"\n }));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Pagination', Pagination);","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Icon from 'flarum/common/components/Icon';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport extractText from 'flarum/common/utils/extractText';\nimport Link from 'flarum/common/components/Link';\nimport Label from './Label';\nimport TaskOutputModal from './TaskOutputModal';\nimport humanDuration from '../utils/humanDuration';\nimport Pagination from './Pagination';\nexport default class QueueSection extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n app.extensionManager.queue.load();\n }\n view() {\n return m(\"section\", {\n id: \"ExtensionManager-queueSection\",\n className: \"ExtensionPage-permissions ExtensionManager-queueSection\"\n }, m(\"div\", {\n className: \"ExtensionPage-permissions-header ExtensionManager-queueSection-header\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"h2\", {\n className: \"ExtensionTitle\"\n }, app.translator.trans('flarum-extension-manager.admin.sections.queue.title')), m(Button, {\n className: \"Button Button--icon\",\n icon: \"fas fa-sync-alt\",\n onclick: () => app.extensionManager.queue.load(),\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.sections.queue.refresh'),\n disabled: app.extensionManager.control.isLoading()\n }))), m(\"div\", {\n className: \"container\"\n }, this.queueTable()));\n }\n columns() {\n const items = new ItemList();\n items.add('operation', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.operation')),\n content: task => m(\"div\", {\n className: \"ExtensionManager-queueTable-operation\"\n }, m(\"span\", {\n className: \"ExtensionManager-queueTable-operation-icon\"\n }, this.operationIcon(task.operation())), m(\"span\", {\n className: \"ExtensionManager-queueTable-operation-name\"\n }, app.translator.trans(\"flarum-extension-manager.admin.sections.queue.operations.\".concat(task.operation()))))\n }, 80);\n items.add('package', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.package')),\n content: task => {\n var _task$package;\n const extension = app.data.extensions[(_task$package = task.package()) == null ? void 0 : _task$package.replace(/(\\/flarum-|\\/flarum-ext-|\\/)/g, '-')];\n return extension ? m(Link, {\n className: \"ExtensionManager-queueTable-package\",\n href: app.route('extension', {\n id: extension.id\n })\n }, m(\"div\", {\n className: \"ExtensionManager-queueTable-package-icon ExtensionIcon\",\n style: extension.icon\n }, !!extension.icon && m(Icon, {\n name: extension.icon.name\n })), m(\"div\", {\n className: \"ExtensionManager-queueTable-package-details\"\n }, m(\"span\", {\n className: \"ExtensionManager-queueTable-package-title\"\n }, extension.extra['flarum-extension'].title), m(\"span\", {\n className: \"ExtensionManager-queueTable-package-name\"\n }, task.package()))) : task.package();\n }\n }, 75);\n items.add('status', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.status')),\n content: task => m('[', null, m(Label, {\n className: \"ExtensionManager-queueTable-status\",\n type: {\n running: 'neutral',\n failure: 'error',\n pending: 'warning',\n success: 'success'\n }[task.status()]\n }, app.translator.trans(\"flarum-extension-manager.admin.sections.queue.statuses.\".concat(task.status()))), ['pending', 'running'].includes(task.status()) && m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }))\n }, 70);\n items.add('elapsedTime', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.elapsed_time')),\n content: task => !task.startedAt() || !task.finishedAt() ? app.translator.trans('flarum-extension-manager.admin.sections.queue.task_just_started') : m(Tooltip, {\n text: \"\".concat(dayjs(task.startedAt()).format('LL LTS'), \" \").concat(dayjs(task.finishedAt()).format('LL LTS'))\n }, m(\"span\", null, humanDuration(task.startedAt(), task.finishedAt())))\n }, 65);\n items.add('memoryUsed', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.peak_memory_used')),\n content: task => m(\"span\", null, task.peakMemoryUsed())\n }, 60);\n items.add('details', {\n label: extractText(app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.details')),\n content: task => m(Button, {\n className: \"Button Button--icon Table-controls-item\",\n icon: \"fas fa-file-alt\",\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.sections.queue.columns.details')\n // @todo fix in core\n // @ts-ignore\n ,\n onclick: () => app.modal.show(TaskOutputModal, {\n task\n }),\n disabled: ['pending', 'running'].includes(task.status())\n }),\n className: 'Table-controls'\n }, 55);\n return items;\n }\n queueTable() {\n const tasks = app.extensionManager.queue.getItems();\n if (!tasks) {\n return m(LoadingIndicator, null);\n }\n if (tasks && !tasks.length) {\n return m(\"h3\", {\n className: \"ExtensionPage-subHeader\"\n }, app.translator.trans('flarum-extension-manager.admin.sections.queue.none'));\n }\n const columns = this.columns();\n return m('[', null, m(\"table\", {\n className: \"Table ExtensionManager-queueTable\"\n }, m(\"thead\", null, m(\"tr\", null, columns.toArray().map((item, index) => m(\"th\", {\n key: index\n }, item.label)))), m(\"tbody\", null, tasks.map((task, index) => m(\"tr\", {\n key: index\n }, columns.toArray().map((item, index) => {\n const {\n label,\n content,\n ...attrs\n } = item;\n return m(\"td\", Object.assign({\n key: index\n }, attrs), content(task));\n }))))), m(Pagination, {\n list: app.extensionManager.queue\n }));\n }\n operationIcon(operation) {\n return m(Icon, {\n name: {\n update_check: 'fas fa-sync-alt',\n update_major: 'fas fa-play',\n update_minor: 'fas fa-play',\n update_global: 'fas fa-play',\n extension_install: 'fas fa-download',\n extension_remove: 'fas fa-times',\n extension_update: 'fas fa-arrow-alt-circle-up',\n why_not: 'fas fa-exclamation-circle'\n }[operation]\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/QueueSection', QueueSection);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Alert');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/Stream');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport Stream from 'flarum/common/utils/Stream';\nexport default class Installer extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"packageName\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.packageName = Stream('');\n }\n view() {\n return m(\"div\", {\n className: \"Form-group ExtensionManager-installer\"\n }, m(\"label\", {\n htmlFor: \"install-extension\"\n }, app.translator.trans('flarum-extension-manager.admin.extensions.install')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.extensions.install_help', {\n extiverse: m(\"a\", {\n href: \"https://extiverse.com\"\n }, \"extiverse.com\"),\n semantic_link: m(\"a\", {\n href: \"https://devhints.io/semver\"\n }),\n code: m(\"code\", null)\n })), m(\"div\", {\n className: \"FormControl-container\"\n }, m(\"input\", {\n className: \"FormControl\",\n id: \"install-extension\",\n placeholder: \"vendor/package-name\",\n bidi: this.packageName\n }), m(Button, {\n className: \"Button\",\n icon: \"fas fa-download\",\n onclick: this.onsubmit.bind(this),\n loading: app.extensionManager.control.isLoading('extension-install'),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.extensions.proceed'))));\n }\n data() {\n return {\n package: this.packageName()\n };\n }\n onsubmit() {\n app.extensionManager.control.requirePackage(this.data());\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Installer', Installer);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/humanTime');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Modal from 'flarum/common/components/Modal';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport errorHandler from '../utils/errorHandler';\nexport default class WhyNotModal extends Modal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"whyNot\", null);\n }\n className() {\n return 'Modal--large WhyNotModal';\n }\n title() {\n return app.translator.trans('flarum-extension-manager.admin.why_not_modal.title');\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.requestWhyNot();\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, this.loading ? m(LoadingIndicator, null) : m(\"pre\", {\n className: \"WhyNotModal-contents\"\n }, this.whyNot));\n }\n requestWhyNot() {\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/why-not\"),\n body: {\n data: {\n package: this.attrs.package\n }\n }\n }).then(response => {\n this.loading = false;\n this.whyNot = response.data.reason;\n m.redraw();\n }).catch(errorHandler);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/WhyNotModal', WhyNotModal);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Dropdown');","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport classList from 'flarum/common/utils/classList';\nimport Icon from 'flarum/common/components/Icon';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Button from 'flarum/common/components/Button';\nimport WhyNotModal from './WhyNotModal';\nimport Label from './Label';\nimport Dropdown from 'flarum/common/components/Dropdown';\nexport default class ExtensionItem extends Component {\n view(vnode) {\n var _updates$latestMinor;\n const {\n extension,\n updates,\n onClickUpdate,\n whyNotWarning,\n isCore,\n isDanger\n } = this.attrs;\n const latestVersion = (_updates$latestMinor = updates['latest-minor']) != null ? _updates$latestMinor : updates['latest-major'] && !isCore ? updates['latest-major'] : null;\n return m(\"div\", {\n className: classList({\n 'ExtensionManager-extension': true,\n 'ExtensionManager-extension--core': isCore,\n 'ExtensionManager-extension--danger': isDanger\n })\n }, m(\"div\", {\n className: \"ExtensionManager-extension-icon ExtensionIcon\",\n style: extension.icon\n }, extension.icon ? m(Icon, {\n name: extension.icon.name\n }) : ''), m(\"div\", {\n className: \"ExtensionManager-extension-info\"\n }, m(\"div\", {\n className: \"ExtensionManager-extension-name\"\n }, extension.extra['flarum-extension'].title), m(\"div\", {\n className: \"ExtensionManager-extension-version\"\n }, m(\"span\", {\n className: \"ExtensionManager-extension-version-current\"\n }, this.version(updates['version'])), latestVersion ? m(Label, {\n className: \"ExtensionManager-extension-version-latest\",\n type: updates['latest-minor'] ? 'success' : 'warning'\n }, this.version(latestVersion)) : null)), m(\"div\", {\n className: \"ExtensionManager-extension-controls\"\n }, onClickUpdate && typeof onClickUpdate === 'function' ? m(Tooltip, {\n text: app.translator.trans('flarum-extension-manager.admin.extensions.update')\n }, m(Button, {\n icon: \"fas fa-arrow-alt-circle-up\",\n className: \"Button Button--icon Button--flat\",\n onclick: onClickUpdate,\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.extensions.update')\n })) : onClickUpdate ? m(Dropdown, {\n buttonClassName: \"Button Button--icon Button--flat\",\n icon: \"fas fa-arrow-alt-circle-up\",\n label: app.translator.trans('flarum-extension-manager.admin.extensions.update')\n }, m(Button, {\n icon: \"fas fa-arrow-alt-circle-up\",\n className: \"Button\",\n onclick: onClickUpdate.soft\n }, app.translator.trans('flarum-extension-manager.admin.extensions.update_soft_label')), m(Button, {\n icon: \"fas fa-arrow-alt-circle-up\",\n className: \"Button\",\n onclick: onClickUpdate.hard,\n disabled: !updates['direct-dependency']\n }, app.translator.trans('flarum-extension-manager.admin.extensions.update_hard_label'))) : null, whyNotWarning ? m(Tooltip, {\n text: app.translator.trans('flarum-extension-manager.admin.extensions.check_why_it_failed_updating')\n }, m(Button, {\n icon: \"fas fa-exclamation-circle\",\n className: \"Button Button--icon Button--flat Button--danger\",\n onclick: () => app.modal.show(WhyNotModal, {\n package: extension.name\n }),\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.extensions.check_why_it_failed_updating')\n })) : null));\n }\n version(v) {\n return v.charAt(0) === 'v' ? v.substring(1) : v;\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ExtensionItem', ExtensionItem);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport Tooltip from 'flarum/common/components/Tooltip';\nimport Alert from 'flarum/common/components/Alert';\nimport WhyNotModal from './WhyNotModal';\nimport ExtensionItem from './ExtensionItem';\nimport classList from 'flarum/common/utils/classList';\nexport default class MajorUpdater extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"updateState\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.updateState = this.attrs.updateState;\n }\n view() {\n // @todo move Form-group--danger class to core for reuse\n return m(\"div\", {\n className: classList('Form-group Form-group--danger ExtensionManager-majorUpdate', {\n 'ExtensionManager-majorUpdate--failed': this.updateState.status === 'failure',\n 'ExtensionManager-majorUpdate--incompatibleExtensions': this.updateState.incompatibleExtensions.length\n })\n }, m(\"img\", {\n alt: \"flarum logo\",\n src: app.forum.attribute('baseUrl') + '/assets/extensions/flarum-extension-manager/flarum.svg'\n }), m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.major_updater.title', {\n version: this.attrs.coreUpdate['latest-major']\n })), m(\"p\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.description')), m(\"div\", {\n className: \"ExtensionManager-updaterControls\"\n }, m(Tooltip, {\n text: app.translator.trans('flarum-extension-manager.admin.major_updater.dry_run_help')\n }, m(Button, {\n className: \"Button\",\n icon: \"fas fa-vial\",\n onclick: this.update.bind(this, true),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.dry_run'))), m(Button, {\n className: \"Button Button--danger\",\n icon: \"fas fa-play\",\n onclick: this.update.bind(this, false),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.update'))), this.updateState.incompatibleExtensions.length ? m(\"div\", {\n className: \"ExtensionManager-majorUpdate-incompatibleExtensions ExtensionManager-extensions-grid\"\n }, this.updateState.incompatibleExtensions.map(extension => m(ExtensionItem, {\n extension: app.data.extensions[extension.replace('flarum-', '').replace('flarum-ext-', '').replace('/', '-')],\n updates: {},\n onClickUpdate: null,\n isDanger: true\n }))) : null, this.updateState.status === 'failure' ? m(Alert, {\n type: \"error\",\n className: \"ExtensionManager-majorUpdate-failure\",\n dismissible: false,\n controls: [m(Button, {\n className: \"Button Button--text ExtensionManager-majorUpdate-failure-details\",\n icon: \"fas fa-question-circle\",\n onclick: () => app.modal.show(WhyNotModal, {\n package: 'flarum/core'\n })\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.failure.why'))]\n }, m(\"p\", {\n className: \"ExtensionManager-majorUpdate-failure-desc\"\n }, app.translator.trans('flarum-extension-manager.admin.major_updater.failure.desc'))) : null);\n }\n update(dryRun) {\n app.extensionManager.control.majorUpdate({\n dryRun\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/MajorUpdater', MajorUpdater);","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport MajorUpdater from './MajorUpdater';\nimport ExtensionItem from './ExtensionItem';\nimport ItemList from 'flarum/common/utils/ItemList';\nexport default class Updater extends Component {\n view() {\n const core = app.extensionManager.control.coreUpdate;\n return [m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.updater.updater_title')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.updater.updater_help')), this.lastUpdateCheckView(), m(\"div\", {\n className: \"ExtensionManager-updaterControls\"\n }, this.controlItems().toArray()), this.availableUpdatesView()), core && core.package['latest-major'] ? m(MajorUpdater, {\n coreUpdate: core.package,\n updateState: app.extensionManager.control.lastUpdateRun.major\n }) : null];\n }\n lastUpdateCheckView() {\n var _app$extensionManager;\n return ((_app$extensionManager = app.extensionManager.control.lastUpdateCheck) == null ? void 0 : _app$extensionManager.checkedAt) && m(\"p\", {\n className: \"ExtensionManager-lastUpdatedAt\"\n }, m(\"span\", {\n className: \"ExtensionManager-lastUpdatedAt-label\"\n }, app.translator.trans('flarum-extension-manager.admin.updater.last_update_checked_at')), m(\"span\", {\n className: \"ExtensionManager-lastUpdatedAt-value\"\n }, humanTime(app.extensionManager.control.lastUpdateCheck.checkedAt))) || null;\n }\n availableUpdatesView() {\n const state = app.extensionManager.control;\n if (app.extensionManager.control.isLoading('check') || app.extensionManager.control.isLoading('global-update')) {\n return m(\"div\", {\n className: \"ExtensionManager-extensions\"\n }, m(LoadingIndicator, null));\n }\n const hasMinorCoreUpdate = state.coreUpdate && state.coreUpdate.package['latest-minor'];\n if (!(state.extensionUpdates.length || hasMinorCoreUpdate)) {\n return m(\"div\", {\n className: \"ExtensionManager-extensions\"\n }, m(\"span\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.updater.up_to_date')));\n }\n return m(\"div\", {\n className: \"ExtensionManager-extensions\"\n }, m(\"div\", {\n className: \"ExtensionManager-extensions-grid\"\n }, hasMinorCoreUpdate ? m(ExtensionItem, {\n extension: state.coreUpdate.extension,\n updates: state.coreUpdate.package,\n isCore: true,\n onClickUpdate: () => state.updateCoreMinor(),\n whyNotWarning: state.lastUpdateRun.limitedPackages().includes('flarum/core')\n }) : null, state.extensionUpdates.map(extension => m(ExtensionItem, {\n extension: extension,\n updates: state.packageUpdates[extension.id],\n onClickUpdate: {\n soft: () => state.updateExtension(extension, 'soft'),\n hard: () => state.updateExtension(extension, 'hard')\n },\n whyNotWarning: state.lastUpdateRun.limitedPackages().includes(extension.name)\n }))));\n }\n controlItems() {\n const items = new ItemList();\n items.add('updateCheck', m(Button, {\n className: \"Button\",\n icon: \"fas fa-sync-alt\",\n onclick: () => app.extensionManager.control.checkForUpdates(),\n loading: app.extensionManager.control.isLoading('check'),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.updater.check_for_updates')), 100);\n items.add('globalUpdate', m(Button, {\n className: \"Button\",\n icon: \"fas fa-play\",\n onclick: () => app.extensionManager.control.updateGlobally(),\n loading: app.extensionManager.control.isLoading('global-update'),\n disabled: app.extensionManager.control.hasOperationRunning()\n }, app.translator.trans('flarum-extension-manager.admin.updater.run_global_update')));\n return items;\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/Updater', Updater);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","import app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Alert from 'flarum/common/components/Alert';\nimport Installer from './Installer';\nimport Updater from './Updater';\nimport Form from 'flarum/common/components/Form';\nexport default class ControlSection extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view() {\n return m(\"div\", {\n className: \"ExtensionPage-permissions ExtensionManager-controlSection\"\n }, m(\"div\", {\n className: \"ExtensionPage-permissions-header\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"h2\", {\n className: \"ExtensionTitle\"\n }, app.translator.trans('flarum-extension-manager.admin.sections.control.title')))), m(\"div\", {\n className: \"container\"\n }, app.data['flarum-extension-manager.writable_dirs'] ? m(Form, null, m(Installer, null), m(Updater, null)) : m(\"div\", {\n className: \"Form-group\"\n }, m(Alert, {\n type: \"warning\",\n dismissible: false\n }, app.translator.trans('flarum-extension-manager.admin.file_permissions')))));\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ControlSection', ControlSection);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormGroup');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport FormGroup from 'flarum/common/components/FormGroup';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nexport default class ConfigureJson extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"settings\", {});\n _defineProperty(this, \"initialSettings\", null);\n _defineProperty(this, \"loading\", false);\n _defineProperty(this, \"type\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.submit(true);\n }\n className() {\n return '';\n }\n view() {\n return m(\"div\", {\n className: classList('FormSection', this.className())\n }, m(\"label\", null, this.title()), this.content(), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, this.submitButton()));\n }\n submitButton() {\n return [m(Button, {\n className: \"Button Button--primary\",\n loading: this.loading,\n onclick: () => this.submit(false),\n disabled: !this.isDirty()\n }, app.translator.trans('core.admin.settings.submit_button'))];\n }\n customSettingComponents() {\n return FormGroup.prototype.customFieldComponents();\n }\n setting(key) {\n var _this$settings$key;\n return (_this$settings$key = this.settings[key]) != null ? _this$settings$key : this.settings[key] = Stream();\n }\n submit(readOnly) {\n this.loading = true;\n const configuration = {};\n Object.keys(this.settings).forEach(key => {\n configuration[key] = this.settings[key]();\n });\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/extension-manager/composer',\n body: {\n type: this.type,\n data: readOnly ? null : configuration\n }\n }).then(_ref => {\n let {\n data\n } = _ref;\n Object.keys(data).forEach(key => {\n this.settings[key] = Stream(data[key]);\n });\n this.initialSettings = Array.isArray(data) ? {} : data;\n }).finally(() => {\n this.loading = false;\n m.redraw();\n });\n }\n isDirty() {\n return JSON.stringify(this.initialSettings) !== JSON.stringify(this.settings);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ConfigureJson', ConfigureJson);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Select');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Modal from 'flarum/common/components/Modal';\nimport app from 'flarum/admin/app';\nimport Select from 'flarum/common/components/Select';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nexport default class RepositoryModal extends Modal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"repository\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.name = Stream(this.attrs.name || '');\n this.repository = Stream(this.attrs.repository || {\n type: 'composer',\n url: ''\n });\n }\n className() {\n return 'RepositoryModal Modal--small';\n }\n title() {\n const context = this.attrs.repository ? 'edit' : 'add';\n return app.translator.trans(\"flarum-extension-manager.admin.composer.\".concat(context, \"_repository_label\"));\n }\n content() {\n const types = {\n composer: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.composer'),\n vcs: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.vcs'),\n path: app.translator.trans('flarum-extension-manager.admin.composer.repositories.types.path')\n };\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.name_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.name\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.type_label')), m(Select, {\n options: types,\n value: this.repository().type,\n onchange: value => this.repository({\n ...this.repository(),\n type: value\n })\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.url')), m(\"input\", {\n className: \"FormControl\",\n onchange: e => this.repository({\n ...this.repository(),\n url: e.target.value\n }),\n value: this.repository().url\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(Button, {\n className: \"Button Button--primary\",\n onclick: this.submit.bind(this)\n }, app.translator.trans('flarum-extension-manager.admin.composer.repositories.add_modal.submit_button'))));\n }\n submit() {\n this.attrs.onsubmit(this.repository(), this.name());\n this.hide();\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/RepositoryModal', RepositoryModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport ConfigureJson from './ConfigureJson';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\nimport RepositoryModal from './RepositoryModal';\nexport default class ConfigureComposer extends ConfigureJson {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"type\", 'composer');\n }\n title() {\n return app.translator.trans('flarum-extension-manager.admin.composer.title');\n }\n className() {\n return 'ConfigureComposer';\n }\n content() {\n return m(\"div\", {\n className: \"Form ExtensionManager-SettingsGroups-content\"\n }, this.attrs.buildSettingComponent.call(this, {\n setting: 'minimum-stability',\n label: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.label'),\n help: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.help'),\n type: 'select',\n options: {\n stable: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.stable'),\n RC: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.rc'),\n beta: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.beta'),\n alpha: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.alpha'),\n dev: app.translator.trans('flarum-extension-manager.admin.composer.minimum_stability.options.dev')\n }\n }), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.composer.repositories.label')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.composer.repositories.help')), m(\"div\", {\n className: \"ConfigureComposer-repositories\"\n }, Object.keys(this.setting('repositories')() || {}).map(name => {\n const repository = this.setting('repositories')()[name];\n return m(\"div\", {\n className: \"ButtonGroup ButtonGroup--full\"\n }, m(Button, {\n className: \"Button\",\n icon: {\n composer: 'fas fa-cubes',\n vcs: 'fas fa-code-branch',\n path: 'fas fa-folder'\n }[repository.type],\n onclick: () => app.modal.show(RepositoryModal, {\n name,\n repository,\n onsubmit: (repository, newName) => {\n const repositories = this.setting('repositories')();\n delete repositories[name];\n this.setting('repositories')(repositories);\n this.onchange(repository, newName);\n }\n })\n }, name, \" (\", repository.type, \")\"), m(Button, {\n className: \"Button Button--icon\",\n icon: \"fas fa-trash\",\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.composer.delete_repository_label'),\n onclick: () => {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.composer.delete_repository_confirmation')))) {\n const repositories = {\n ...this.setting('repositories')()\n };\n delete repositories[name];\n this.setting('repositories')(repositories);\n }\n }\n }));\n }))));\n }\n submitButton() {\n const items = super.submitButton();\n items.push(m(Button, {\n className: \"Button\",\n onclick: () => app.modal.show(RepositoryModal, {\n onsubmit: this.onchange.bind(this)\n })\n }, app.translator.trans('flarum-extension-manager.admin.composer.add_repository_label')));\n return items;\n }\n onchange(repository, name) {\n this.setting('repositories')({\n ...this.setting('repositories')(),\n [name]: repository\n });\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ConfigureComposer', ConfigureComposer);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/listItems');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Modal from 'flarum/common/components/Modal';\nimport app from 'flarum/admin/app';\nimport Select from 'flarum/common/components/Select';\nimport Stream from 'flarum/common/utils/Stream';\nimport Button from 'flarum/common/components/Button';\nimport extractText from 'flarum/common/utils/extractText';\nexport default class AuthMethodModal extends Modal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"type\", void 0);\n _defineProperty(this, \"host\", void 0);\n _defineProperty(this, \"token\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.type = Stream(this.attrs.type || 'bearer');\n this.host = Stream(this.attrs.host || '');\n this.token = Stream(this.attrs.token || '');\n }\n className() {\n return 'AuthMethodModal Modal--small';\n }\n title() {\n const context = this.attrs.host ? 'edit' : 'add';\n return app.translator.trans(\"flarum-extension-manager.admin.auth_config.\".concat(context, \"_label\"));\n }\n content() {\n const types = {\n 'github-oauth': app.translator.trans('flarum-extension-manager.admin.auth_config.types.github-oauth'),\n 'gitlab-oauth': app.translator.trans('flarum-extension-manager.admin.auth_config.types.gitlab-oauth'),\n 'gitlab-token': app.translator.trans('flarum-extension-manager.admin.auth_config.types.gitlab-token'),\n bearer: app.translator.trans('flarum-extension-manager.admin.auth_config.types.bearer')\n };\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.type_label')), m(Select, {\n options: types,\n value: this.type(),\n onchange: this.type\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.host_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.host,\n placeholder: app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.host_placeholder')\n })), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.token_label')), m(\"textarea\", {\n className: \"FormControl\",\n oninput: e => this.token(e.target.value),\n rows: \"6\",\n placeholder: this.token().startsWith('unchanged:') ? extractText(app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.unchanged_token_placeholder')) : ''\n }, this.token().startsWith('unchanged:') ? '' : this.token())), m(\"div\", {\n className: \"Form-group\"\n }, m(Button, {\n className: \"Button Button--primary\",\n onclick: this.submit.bind(this)\n }, app.translator.trans('flarum-extension-manager.admin.auth_config.add_modal.submit_button'))));\n }\n submit() {\n this.attrs.onsubmit(this.type(), this.host(), this.token());\n this.hide();\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/AuthMethodModal', AuthMethodModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport ConfigureJson from './ConfigureJson';\nimport Button from 'flarum/common/components/Button';\nimport AuthMethodModal from './AuthMethodModal';\nimport extractText from 'flarum/common/utils/extractText';\nexport default class ConfigureAuth extends ConfigureJson {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"type\", 'auth');\n }\n title() {\n return app.translator.trans('flarum-extension-manager.admin.auth_config.title');\n }\n className() {\n return 'ConfigureAuth';\n }\n content() {\n const authSettings = Object.keys(this.settings);\n const hasAuthSettings = authSettings.length && authSettings.every(type => {\n const data = this.settings[type]();\n return Array.isArray(data) ? data.length : Object.keys(data).length;\n });\n return m(\"div\", {\n className: \"ExtensionManager-SettingsGroups-content\"\n }, hasAuthSettings ? authSettings.map(type => {\n const hosts = this.settings[type]();\n return m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans(\"flarum-extension-manager.admin.auth_config.types.\".concat(type))), m(\"div\", {\n className: \"ConfigureAuth-hosts\"\n }, Object.keys(hosts).map(host => {\n const data = hosts[host];\n return m(\"div\", {\n className: \"ButtonGroup ButtonGroup--full\"\n }, m(Button, {\n className: \"Button\",\n icon: \"fas fa-key\",\n onclick: () => app.modal.show(AuthMethodModal, {\n type,\n host,\n token: data,\n onsubmit: this.onchange.bind(this, host)\n })\n }, host), m(Button, {\n className: \"Button Button--icon\",\n icon: \"fas fa-trash\",\n \"aria-label\": app.translator.trans('flarum-extension-manager.admin.auth_config.delete_label'),\n onclick: () => {\n if (confirm(extractText(app.translator.trans('flarum-extension-manager.admin.auth_config.delete_confirmation')))) {\n const newType = {\n ...this.setting(type)()\n };\n delete newType[host];\n if (Object.keys(newType).length) {\n this.setting(type)(newType);\n } else {\n delete this.settings[type];\n }\n }\n }\n }));\n })));\n }) : m(\"span\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-extension-manager.admin.auth_config.no_auth_methods_configured')));\n }\n submitButton() {\n const items = super.submitButton();\n items.push(m(Button, {\n className: \"Button\",\n loading: this.loading,\n onclick: () => app.modal.show(AuthMethodModal, {\n onsubmit: this.onchange.bind(this, null)\n })\n }, app.translator.trans('flarum-extension-manager.admin.auth_config.add_label')));\n return items;\n }\n onchange(oldHost, type, host, token) {\n const data = {\n ...this.setting(type)()\n };\n if (oldHost) {\n delete data[oldHost];\n }\n data[host] = token;\n this.setting(type)(data);\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/ConfigureAuth', ConfigureAuth);","import app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport QueueSection from './QueueSection';\nimport ControlSection from './ControlSection';\nimport ConfigureComposer from './ConfigureComposer';\nimport Alert from 'flarum/common/components/Alert';\nimport listItems from 'flarum/common/helpers/listItems';\nimport ConfigureAuth from './ConfigureAuth';\nexport default class SettingsPage extends ExtensionPage {\n content() {\n const settings = app.registry.getSettings(this.extension.id);\n const warnings = [app.translator.trans('flarum-extension-manager.admin.settings.access_warning')];\n if (app.data.debugEnabled) warnings.push(app.translator.trans('flarum-extension-manager.admin.settings.debug_mode_warning'));\n return m(\"div\", {\n className: \"ExtensionPage-settings\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"ExtensionManager-warnings Form-group\"\n }, m(Alert, {\n className: \"ExtensionManager-primaryWarning\",\n type: \"warning\",\n dismissible: false\n }, m(\"ul\", null, listItems(warnings)))), settings ? m(\"div\", {\n className: \"FormSectionGroup ExtensionManager-SettingsGroups\"\n }, m(\"div\", {\n className: \"FormSection\"\n }, m(\"label\", null, app.translator.trans('flarum-extension-manager.admin.settings.title')), m(\"div\", {\n className: \"Form\"\n }, settings.map(this.buildSettingComponent.bind(this))), m(\"div\", {\n className: \"Form-group Form--controls\"\n }, this.submitButton())), m(ConfigureComposer, {\n buildSettingComponent: this.buildSettingComponent\n }), m(ConfigureAuth, {\n buildSettingComponent: this.buildSettingComponent\n })) : m(\"h3\", {\n className: \"ExtensionPage-subHeader\"\n }, app.translator.trans('core.admin.extension.no_settings'))));\n }\n sections(vnode) {\n const items = super.sections(vnode);\n items.setPriority('content', 10);\n items.add('control', m(ControlSection, null), 8);\n if (app.data.settings['flarum-extension-manager.queue_jobs'] !== '0' && app.data.settings['flarum-extension-manager.queue_jobs']) {\n items.add('queue', m(QueueSection, null), 5);\n }\n items.remove('permissions');\n return items;\n }\n onsaved() {\n super.onsaved();\n m.redraw();\n }\n}\nflarum.reg.add('flarum-extension-manager', 'admin/components/SettingsPage', SettingsPage);","import Extend from 'flarum/common/extenders';\nimport app from 'flarum/admin/app';\nimport extractText from 'flarum/common/utils/extractText';\nimport SettingsPage from './components/SettingsPage';\nexport default [new Extend.Admin().setting(() => ({\n setting: 'flarum-extension-manager.queue_jobs',\n label: app.translator.trans('flarum-extension-manager.admin.settings.queue_jobs'),\n help: m.trust(extractText(app.translator.trans('flarum-extension-manager.admin.settings.queue_jobs_help', {\n basic_impl_link: 'https://discuss.flarum.org/d/28151-database-queue-the-simplest-queue-even-for-shared-hosting',\n adv_impl_link: 'https://discuss.flarum.org/d/21873-redis-sessions-cache-queues',\n php_version: \"\".concat(app.data.phpVersion, \"\"),\n folder_perms_link: 'https://docs.flarum.org/install#folder-ownership'\n }))),\n type: 'boolean',\n disabled: app.data['flarum-extension-manager.using_sync_queue']\n})).setting(() => ({\n setting: 'flarum-extension-manager.task_retention_days',\n label: app.translator.trans('flarum-extension-manager.admin.settings.task_retention_days'),\n help: app.translator.trans('flarum-extension-manager.admin.settings.task_retention_days_help'),\n type: 'number'\n})).page(SettingsPage)];","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport isExtensionEnabled from 'flarum/admin/utils/isExtensionEnabled';\nimport Task from './models/Task';\nimport jumpToQueue from './utils/jumpToQueue';\nimport ExtensionManagerState from './states/ExtensionManagerState';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-extension-manager', app => {\n app.store.models['extension-manager-tasks'] = Task;\n app.extensionManager = new ExtensionManagerState();\n if (app.data['flarum-extension-manager.using_sync_queue']) {\n app.data.settings['flarum-extension-manager.queue_jobs'] = '0';\n }\n extend(ExtensionPage.prototype, 'topItems', function (items) {\n if (this.extension.id === 'flarum-extension-manager' || isExtensionEnabled(this.extension.id)) {\n return;\n }\n items.add('remove', m(Button, {\n className: \"Button Button--danger\",\n icon: \"fas fa-times\",\n onclick: () => {\n app.modal.show(LoadingModal);\n app.request({\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/extension-manager/extensions/\").concat(this.extension.id),\n method: 'DELETE'\n }).then(response => {\n if (response != null && response.processing) {\n jumpToQueue();\n } else {\n app.alerts.show({\n type: 'success'\n }, app.translator.trans('flarum-extension-manager.admin.extensions.successful_remove'));\n window.location = app.forum.attribute('adminUrl');\n }\n }).finally(() => {\n app.modal.close();\n });\n }\n }, app.translator.trans('flarum-extension-manager.admin.extensions.remove')));\n });\n});"],"names":["module","exports","t","s","n","i","e","r","o","u","h","a","d","years","months","days","hours","minutes","seconds","milliseconds","weeks","c","p","f","$l","m","l","$","Math","ceil","floor","y","abs","g","negative","format","this","$d","$ms","parseFromMilliseconds","Object","keys","forEach","calMilliseconds","match","slice","map","Number","prototype","reduce","toISOString","toJSON","Y","YY","YYYY","M","MM","D","DD","H","HH","mm","ss","SSS","replace","String","as","get","add","subtract","locale","clone","humanize","fromNow","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","$utils","duration","isDuration","bind","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","call","getter","__esModule","definition","key","defineProperty","enumerable","obj","prop","hasOwnProperty","Symbol","toStringTag","value","flarum","reg","BYTE_UNITS","BIBYTE_UNITS","BIT_UNITS","BIBIT_UNITS","toLocaleString","number","options","result","Array","isArray","Task","status","operation","command","package","output","guessedCause","createdAt","startedAt","finishedAt","peakMemoryUsed","isFinite","TypeError","concat","UNITS","bits","binary","signed","isNegative","prefix","localeOptions","minimumFractionDigits","maximumFractionDigits","exponent","min","log","log10","length","toPrecision","prettyBytes","jumpToQueue","route","set","id","setTimeout","_document$getElementB","document","getElementById","scrollIntoView","block","_typeof","iterator","constructor","_defineProperty","arg","input","hint","prim","toPrimitive","res","toPropertyKey","configurable","writable","window","QueueState","load","params","actionTaken","_params","tasks","page","limit","offset","then","data","_data$payload$meta","total","payload","meta","redraw","find","task","pollQueue","location","reload","getItems","getTotalPages","pageNumber","hasPrev","hasNext","prev","next","polling","clearTimeout","hasPending","_this$tasks","error","response","errors","includes","code","guessed_cause","type","ControlSectionState","lastUpdateRun","JSON","parse","limitedPackages","major","minor","global","lastUpdateCheck","extensionUpdates","formatExtensionUpdates","coreUpdate","formatCoreUpdate","isLoading","name","loading","hasOperationRunning","setLoading","requirePackage","method","url","body","processing","extensionId","extension","href","catch","errorHandler","finally","checkForUpdates","updateCoreMinor","confirm","updateExtension","updateMode","extra","title","updateGlobally","_lastUpdateCheck$upda","_lastUpdateCheck$upda2","packageUpdates","updates","installed","filter","composerPackage","safeToUpdate","values","_lastUpdateCheck$upda3","_lastUpdateCheck$upda4","core","pop","version","icon","backgroundImage","majorUpdate","_ref","dryRun","updateState","_e$response","_e$response$errors","_e$response$errors$po","incompatibleExtensions","incompatible_extensions","ExtensionManagerState","Label","view","vnode","className","attrs","assign","children","TaskOutputModal","content","humanDuration","start","end","dayjs","extend","durationTime","diff","Pagination","disabled","list","onclick","current","QueueSection","oninit","super","queueTable","columns","items","label","operationIcon","_task$package","style","running","failure","pending","success","size","display","text","toArray","item","index","update_check","update_major","update_minor","update_global","extension_install","extension_remove","extension_update","why_not","Installer","arguments","packageName","htmlFor","extiverse","semantic_link","placeholder","bidi","onsubmit","WhyNotModal","oncreate","requestWhyNot","whyNot","reason","ExtensionItem","_updates$latestMinor","onClickUpdate","whyNotWarning","isCore","isDanger","latestVersion","buttonClassName","soft","hard","v","charAt","substring","MajorUpdater","alt","src","update","dismissible","controls","Updater","lastUpdateCheckView","controlItems","availableUpdatesView","_app$extensionManager","checkedAt","state","hasMinorCoreUpdate","ControlSection","ConfigureJson","submit","submitButton","isDirty","customSettingComponents","setting","_this$settings$key","settings","readOnly","configuration","initialSettings","stringify","RepositoryModal","repository","context","types","composer","vcs","path","onchange","target","hide","ConfigureComposer","buildSettingComponent","help","stable","RC","beta","alpha","dev","newName","repositories","push","AuthMethodModal","host","token","bearer","oninput","rows","startsWith","ConfigureAuth","authSettings","hasAuthSettings","every","hosts","newType","oldHost","SettingsPage","warnings","sections","setPriority","remove","onsaved","trust","basic_impl_link","adv_impl_link","php_version","folder_perms_link","app","store","models","extensionManager","modal","show","request","forum","attribute","alerts","translator","trans","close"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/pusher/js/dist-typings/admin/extend.d.ts b/extensions/pusher/js/dist-typings/admin/extend.d.ts new file mode 100644 index 000000000..f83ce3204 --- /dev/null +++ b/extensions/pusher/js/dist-typings/admin/extend.d.ts @@ -0,0 +1,2 @@ +declare const _default: any[]; +export default _default; diff --git a/extensions/pusher/js/dist-typings/admin/index.d.ts b/extensions/pusher/js/dist-typings/admin/index.d.ts index cb0ff5c3b..6d2293da0 100644 --- a/extensions/pusher/js/dist-typings/admin/index.d.ts +++ b/extensions/pusher/js/dist-typings/admin/index.d.ts @@ -1 +1 @@ -export {}; +export { default as extend } from './extend'; diff --git a/extensions/pusher/js/dist/admin.js b/extensions/pusher/js/dist/admin.js index a71e9ad6e..d55b09714 100644 --- a/extensions/pusher/js/dist/admin.js +++ b/extensions/pusher/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t);const r=flarum.reg.get("core","admin/app");var a=e.n(r);a().initializers.add("flarum-pusher",(()=>{a().extensionData.for("flarum-pusher").registerSetting({setting:"flarum-pusher.app_id",label:a().translator.trans("flarum-pusher.admin.pusher_settings.app_id_label"),type:"text"},30).registerSetting({setting:"flarum-pusher.app_key",label:a().translator.trans("flarum-pusher.admin.pusher_settings.app_key_label"),type:"text"},20).registerSetting({setting:"flarum-pusher.app_secret",label:a().translator.trans("flarum-pusher.admin.pusher_settings.app_secret_label"),type:"text"},10).registerSetting({setting:"flarum-pusher.app_cluster",label:a().translator.trans("flarum-pusher.admin.pusher_settings.app_cluster_label"),type:"text"},0)}))})(),module.exports=t})(); +(()=>{var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t),e.d(t,{extend:()=>l});const r=flarum.reg.get("core","admin/app");var a=e.n(r);const s=flarum.reg.get("core","common/extenders"),l=[(new(e.n(s)().Admin)).setting((()=>({setting:"flarum-pusher.app_id",label:a().translator.trans("flarum-pusher.admin.pusher_settings.app_id_label"),type:"text"})),30).setting((()=>({setting:"flarum-pusher.app_key",label:a().translator.trans("flarum-pusher.admin.pusher_settings.app_key_label"),type:"text"})),20).setting((()=>({setting:"flarum-pusher.app_secret",label:a().translator.trans("flarum-pusher.admin.pusher_settings.app_secret_label"),type:"text"})),10).setting((()=>({setting:"flarum-pusher.app_cluster",label:a().translator.trans("flarum-pusher.admin.pusher_settings.app_cluster_label"),type:"text"})),0)];a().initializers.add("flarum-pusher",(()=>{}))})(),module.exports=t})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/pusher/js/dist/admin.js.map b/extensions/pusher/js/dist/admin.js.map index 7d1b83695..1b8e008ab 100644 --- a/extensions/pusher/js/dist/admin.js.map +++ b/extensions/pusher/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCC5D,qBAAqB,iBAAiB,KACpC,sBAAsB,iBAAiBW,gBAAgB,CACrDC,QAAS,uBACTC,MAAO,qBAAqB,oDAC5BC,KAAM,QACL,IAAIH,gBAAgB,CACrBC,QAAS,wBACTC,MAAO,qBAAqB,qDAC5BC,KAAM,QACL,IAAIH,gBAAgB,CACrBC,QAAS,2BACTC,MAAO,qBAAqB,wDAC5BC,KAAM,QACL,IAAIH,gBAAgB,CACrBC,QAAS,4BACTC,MAAO,qBAAqB,yDAC5BC,KAAM,QACL,EAAE,G","sources":["webpack://@flarum/pusher/webpack/bootstrap","webpack://@flarum/pusher/webpack/runtime/compat get default export","webpack://@flarum/pusher/webpack/runtime/define property getters","webpack://@flarum/pusher/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/pusher/webpack/runtime/make namespace object","webpack://@flarum/pusher/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/pusher/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","import app from 'flarum/admin/app';\napp.initializers.add('flarum-pusher', () => {\n app.extensionData.for('flarum-pusher').registerSetting({\n setting: 'flarum-pusher.app_id',\n label: app.translator.trans('flarum-pusher.admin.pusher_settings.app_id_label'),\n type: 'text'\n }, 30).registerSetting({\n setting: 'flarum-pusher.app_key',\n label: app.translator.trans('flarum-pusher.admin.pusher_settings.app_key_label'),\n type: 'text'\n }, 20).registerSetting({\n setting: 'flarum-pusher.app_secret',\n label: app.translator.trans('flarum-pusher.admin.pusher_settings.app_secret_label'),\n type: 'text'\n }, 10).registerSetting({\n setting: 'flarum-pusher.app_cluster',\n label: app.translator.trans('flarum-pusher.admin.pusher_settings.app_cluster_label'),\n type: 'text'\n }, 0);\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","registerSetting","setting","label","type"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oBCE5D,IAAgB,I,MAAI,WAAeW,SAAQ,KAAM,CAC/CA,QAAS,uBACTC,MAAO,qBAAqB,oDAC5BC,KAAM,UACJ,IAAIF,SAAQ,KAAM,CACpBA,QAAS,wBACTC,MAAO,qBAAqB,qDAC5BC,KAAM,UACJ,IAAIF,SAAQ,KAAM,CACpBA,QAAS,2BACTC,MAAO,qBAAqB,wDAC5BC,KAAM,UACJ,IAAIF,SAAQ,KAAM,CACpBA,QAAS,4BACTC,MAAO,qBAAqB,yDAC5BC,KAAM,UACJ,IChBJ,qBAAqB,iBAAiB,Q","sources":["webpack://@flarum/pusher/webpack/bootstrap","webpack://@flarum/pusher/webpack/runtime/compat get default export","webpack://@flarum/pusher/webpack/runtime/define property getters","webpack://@flarum/pusher/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/pusher/webpack/runtime/make namespace object","webpack://@flarum/pusher/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/pusher/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/pusher/./src/admin/extend.tsx","webpack://@flarum/pusher/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","import Extend from 'flarum/common/extenders';\nimport app from 'flarum/admin/app';\nexport default [new Extend.Admin().setting(() => ({\n setting: 'flarum-pusher.app_id',\n label: app.translator.trans('flarum-pusher.admin.pusher_settings.app_id_label'),\n type: 'text'\n}), 30).setting(() => ({\n setting: 'flarum-pusher.app_key',\n label: app.translator.trans('flarum-pusher.admin.pusher_settings.app_key_label'),\n type: 'text'\n}), 20).setting(() => ({\n setting: 'flarum-pusher.app_secret',\n label: app.translator.trans('flarum-pusher.admin.pusher_settings.app_secret_label'),\n type: 'text'\n}), 10).setting(() => ({\n setting: 'flarum-pusher.app_cluster',\n label: app.translator.trans('flarum-pusher.admin.pusher_settings.app_cluster_label'),\n type: 'text'\n}), 0)];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-pusher', () => {\n // ...\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","setting","label","type"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/statistics/js/dist-typings/extend.d.ts b/extensions/statistics/js/dist-typings/extend.d.ts new file mode 100644 index 000000000..f83ce3204 --- /dev/null +++ b/extensions/statistics/js/dist-typings/extend.d.ts @@ -0,0 +1,2 @@ +declare const _default: any[]; +export default _default; diff --git a/extensions/statistics/js/dist-typings/index.d.ts b/extensions/statistics/js/dist-typings/index.d.ts index cb0ff5c3b..6d2293da0 100644 --- a/extensions/statistics/js/dist-typings/index.d.ts +++ b/extensions/statistics/js/dist-typings/index.d.ts @@ -1 +1 @@ -export {}; +export { default as extend } from './extend'; diff --git a/extensions/statistics/js/dist/admin.js b/extensions/statistics/js/dist/admin.js index 51b563b96..2cd64b9f9 100644 --- a/extensions/statistics/js/dist/admin.js +++ b/extensions/statistics/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var t={860:function(t){t.exports=function(){"use strict";var t=6e4,e=36e5,i="millisecond",n="second",s="minute",a="hour",r="day",o="week",l="month",u="quarter",c="year",h="date",d="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,p=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],i=t%100;return"["+t+(e[(i-20)%10]||e[i]||e[0])+"]"}},v=function(t,e,i){var n=String(t);return!n||n.length>=e?t:""+Array(e+1-n.length).join(i)+t},g={s:v,z:function(t){var e=-t.utcOffset(),i=Math.abs(e),n=Math.floor(i/60),s=i%60;return(e<=0?"+":"-")+v(n,2,"0")+":"+v(s,2,"0")},m:function t(e,i){if(e.date()1)return t(r[0])}else{var o=e.name;b[o]=e,s=o}return!n&&s&&(y=s),s||!n&&y},w=function(t,e){if(x(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new M(i)},D=g;D.l=k,D.i=x,D.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var M=function(){function m(t){this.$L=k(t.locale,null,!0),this.parse(t)}var v=m.prototype;return v.parse=function(t){this.$d=function(t){var e=t.date,i=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var n=e.match(f);if(n){var s=n[2]-1||0,a=(n[7]||"0").substring(0,3);return i?new Date(Date.UTC(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)):new Date(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},v.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},v.$utils=function(){return D},v.isValid=function(){return!(this.$d.toString()===d)},v.isSame=function(t,e){var i=w(t);return this.startOf(e)<=i&&i<=this.endOf(e)},v.isAfter=function(t,e){return w(t)=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function s(t){return t.titleHeight+t.margins.top+t.paddings.top}function a(t){return t.margins.left+t.paddings.left}function r(t){return t.margins.top+t.margins.bottom+t.paddings.top+t.paddings.bottom+t.titleHeight+t.legendHeight}function o(t){return t.margins.left+t.margins.right+t.paddings.left+t.paddings.right}function l(t){return parseFloat(t.toFixed(2))}function u(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=n?t[0]:t[t.length-1]);var s=new Array(Math.abs(e)).fill(i);return n?s.concat(t):t.concat(s)}function c(t,e){return(t+"").length*e}function h(t,e){return{x:Math.sin(t*wt)*e,y:Math.cos(t*wt)*e}}function d(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!(Number.isNaN(t)||void 0===t||!Number.isFinite(t)||e&&t<0)}function f(t){var e=void 0,i=void 0,n=void 0;if(t instanceof Date)return new Date(t.getTime());if("object"!==(void 0===t?"undefined":lt(t))||null===t)return t;for(n in e=Array.isArray(t)?[]:{},t)i=t[n],e[n]=f(i);return e}function p(t,e){var i=void 0,n=void 0;return t<=e?(i=e-t,n=t):(i=t-e,n=e),[i,n]}function m(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=u(t,i):e=u(e,i),[t,e]}function v(t,e){if(t)return t.length>e?t.slice(0,e-3)+"...":t}function g(t){var e=void 0;if("number"==typeof t)e=t;else if("string"==typeof t&&(e=Number(t),Number.isNaN(e)))return t;var i=Math.floor(Math.log10(Math.abs(e)));if(i<=2)return e;var n=Math.floor(i/3),s=Math.pow(10,i-3*n)*+(e/Math.pow(10,i)).toFixed(1);return Math.round(100*s)/100+" "+["","K","M","B","T"][n]}function y(t,e){for(var i=[],n=0;n255?255:t<0?0:t}function x(t,e){var i=Pt(t),n=!1;"#"==i[0]&&(i=i.slice(1),n=!0);var s=parseInt(i,16),a=b((s>>16)+e),r=b((s>>8&255)+e);return(n?"#":"")+(b((255&s)+e)|r<<8|a<<16).toString(16)}function k(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function w(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var n in e){var s=e[n];if("inside"===n)k(s).appendChild(i);else if("around"===n){var a=k(s);a.parentNode.insertBefore(i,a),i.appendChild(a)}else"styles"===n?"object"===(void 0===s?"undefined":lt(s))&&Object.keys(s).map((function(t){i.style[t]=s[t]})):("className"===n&&(n="class"),"innerHTML"===n?i.textContent=s:i.setAttribute(n,s))}return i}function D(t,e){return w("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function M(t,e,i,n){return w("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":n})}function P(t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,i={className:t,transform:arguments.length>1&&void 0!==arguments[1]?arguments[1]:""};return e&&(i.inside=e),w("g",i)}function S(t){return w("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none","stroke-width":arguments.length>4&&void 0!==arguments[4]?arguments[4]:2}})}function A(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n="path-fill-gradient-"+e+"-"+(i?"lighter":"default"),s=D(t,n),a=[1,.6,.2];return i&&(a=[.4,.2,0]),M(s,"0%",e,a[0]),M(s,"50%",e,a[1]),M(s,"100%",e,a[2]),n}function T(t,e,i,n,s){var a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},r={className:t,x:e,y:i,width:n,height:n,rx:s,fill:arguments.length>5&&void 0!==arguments[5]?arguments[5]:"none"};return Object.keys(a).map((function(t){r[t]=a[t]})),w("rect",r)}function O(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=s.fontSize||Ot;return w("text",{className:t,x:e,y:i,dy:(void 0!==s.dy?s.dy:a/2)+"px","font-size":a+"px",fill:s.fill||Ct,"text-anchor":s.textAnchor||"start",innerHTML:n})}function L(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};s.stroke||(s.stroke=Lt);var a=w("line",{className:"line-vertical "+s.className,x1:0,x2:0,y1:i,y2:n,styles:{stroke:s.stroke}}),r=w("text",{x:0,y:i>n?i+At:i-At-Ot,dy:Ot+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:e+""}),o=w("g",{transform:"translate("+t+", 0)"});return o.appendChild(a),o.appendChild(r),o}function C(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};s.stroke||(s.stroke=Lt),s.lineType||(s.lineType=""),s.shortenNumbers&&(e=g(e));var a=w("line",{className:"line-horizontal "+s.className+("dashed"===s.lineType?"dashed":""),x1:i,x2:n,y1:0,y2:0,styles:{stroke:s.stroke}}),r=w("text",{x:i4&&void 0!==arguments[4]?arguments[4]:0,a=p(i,(arguments.length>5&&void 0!==arguments[5]?arguments[5]:{}).zeroLine),r=pt(a,2),o=r[0],l=r[1];return l-=s,"rect"!==t.nodeName?[[t.childNodes[0],{width:n,height:o},$t,zt],N(t,t.getAttribute("transform").split("(")[1].slice(0,-1),[e,l],Yt)]:[[t,{width:n,height:o,x:e,y:l},$t,zt]]}function E(t,e){return[t,{d:e},$t,zt]}function Y(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var u=void 0;u="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var c=a[l]||t.getAttribute(l),h=e[l],d={attributeName:l,from:c,to:h,begin:"0s",dur:i/1e3+"s",values:c+";"+h,keySplines:Ht[n],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};for(var f in s&&(d.type=s),d)u.setAttribute(f,d[f]);r.appendChild(u),s?o.setAttribute(l,"translate("+h+")"):o.setAttribute(l,h)}return[r,o]}function W(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function z(t,e){var i=[],n=[];e.map((function(t){var e,s,a=t[0],r=a.parentNode;t[0]=a;var o=Y.apply(void 0,mt(t)),l=pt(o,2);e=l[0],s=l[1],i.push(s),n.push([e,r]),r&&r.replaceChild(e,a)}));var s=t.cloneNode(!0);return n.map((function(t,n){t[1]&&(t[1].replaceChild(i[n],t[0]),e[n][0]=i[n])})),s}function H(t,e,i){if(0!==i.length){var n=z(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(n)),setTimeout((function(){n.parentNode==t&&(t.removeChild(n),t.appendChild(e))}),Wt)}}function F(e){var i=e.cloneNode(!0);i.classList.add("chart-container"),i.setAttribute("xmlns","http://www.w3.org/2000/svg"),i.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink");var n=t.create("style",{innerHTML:Ft});i.insertBefore(n,i.firstChild);var s=t.create("div");return s.appendChild(i),s.innerHTML}function j(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function I(t){var e=t.getDate(),i=t.getMonth()+1;return[t.getFullYear(),(i>9?"":"0")+i,(e>9?"":"0")+e].join("-")}function R(t){return new Date(t.getTime())}function U(t,e){var i=q(t);return Math.ceil(function(t,e){var i=Vt*Ut;return(j(e)-j(t))/i}(i,e)/Rt)}function V(t,e){return t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()}function B(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=Bt[t];return e?i.slice(0,3):i}function G(t,e){return new Date(e,t+1,0)}function q(t){var e=R(t),i=e.getDay();return 0!==i&&J(e,-1*i),e}function J(t,e){t.setDate(t.getDate()+e)}function X(t,e,i){var n=Object.keys(Jt).filter((function(e){return t.includes(e)})),s=Jt[n[0]];return Object.assign(s,{constants:e,getData:i}),new qt(s)}function Z(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function K(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),n=Math.floor(e),s=i-n,a=s,r=1;s>5&&(s%2!=0&&(s=++i-n),a=s/2,r=2),s<=2&&(r=s/(a=4)),0===s&&(a=5,r=1);for(var o=[],l=0;l<=a;l++)o.push(n+r*l);return o}function Q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Z(t),n=pt(i,2),s=n[0],a=n[1],r=e?e/Math.pow(10,a):0,o=K(s=s.toFixed(6),r);return o.map((function(t){return t*Math.pow(10,a)}))}function tt(t){function e(t,e){for(var i=Q(t),n=i[1]-i[0],s=0,a=1;s1&&void 0!==arguments[1]&&arguments[1],n=Math.max.apply(Math,mt(t)),s=Math.min.apply(Math,mt(t)),a=[];if(n>=0&&s>=0)Z(n)[1],a=i?Q(n,s):Q(n);else if(n>0&&s<0){var r=Math.abs(s);n>=r?(Z(n)[1],a=e(n,r)):(Z(r)[1],a=e(r,n).reverse().map((function(t){return-1*t})))}else if(n<=0&&s<=0){var o=Math.abs(s),l=Math.abs(n);Z(o)[1],a=(a=i?Q(o,l):Q(o)).reverse().map((function(t){return-1*t}))}return a}function et(t){var e=it(t);return t.indexOf(0)>=0?t.indexOf(0):t[0]>0?-1*t[0]/e:-1*t[t.length-1]/e+(t.length-1)}function it(t){return t[1]-t[0]}function nt(t){return t[t.length-1]-t[0]}function st(t,e){return l(e.zeroLine-t*e.scaleMultiplier)}function at(t,e){return e.filter((function(e){return ei?n.slice(0,i):u(n,i-n.length,0),t.values=n}else t.values=s;t.chartType||(gt.includes(e),t.chartType=e)})),t.yRegions&&t.yRegions.map((function(t){if(t.end\n\t\t\t\t
    \n\t\t\t\t
    '}),this.hideTip(),this.title=this.container.querySelector(".title"),this.dataPointList=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",(function(){e.hideTip()}))}},{key:"fill",value:function(){var e,i=this;this.index&&this.container.setAttribute("data-point-index",this.index),e=this.titleValueFirst?""+this.titleValue+""+this.titleName:this.titleName+""+this.titleValue+"",this.title.innerHTML=e,this.dataPointList.innerHTML="",this.listValues.map((function(e,n){var s=i.colors[n]||"black",a=0===e.formatted||e.formatted?e.formatted:e.value,r=t.create("li",{styles:{"border-top":"3px solid "+s},innerHTML:''+(0===a||a?a:"")+"\n\t\t\t\t\t"+(e.title?e.title:"")});i.dataPointList.appendChild(r)}))}},{key:"calcPosition",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight-5,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var n="calc(50% + "+(this.left-e)+"px)";i.style.left=n,this.left=e}else i.style.left="50%"}},{key:"setValues",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1;this.titleName=i.name,this.titleValue=i.value,this.listValues=n,this.x=t,this.y=e,this.titleValueFirst=i.valueFirst||0,this.index=s,this.refresh()}},{key:"hideTip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"showTip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),e}(),Mt={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},Pt=function(t){return/rgb[a]{0,1}\([\d, ]+\)/gim.test(t)?/\D+(\d*)\D+(\d*)\D+(\d*)/gim.exec(t).map((function(t,e){return 0!==e?Number(t).toString(16):"#"})).reduce((function(t,e){return""+t+e})):Mt[t]||t},St=6,At=4,Tt=15,Ot=10,Lt="#dadada",Ct="#555b51",Nt={bar:function(t){var e=void 0;"rect"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode();return i.style.fill="#000000",i.style.opacity="0.4",e&&i.setAttribute("transform",e),i},dot:function(t){var e=void 0;"circle"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode(),n=t.getAttribute("r"),s=t.getAttribute("fill");return i.setAttribute("r",parseInt(n)+4),i.setAttribute("fill",s),i.style.opacity="0.6",e&&i.setAttribute("transform",e),i},heat_square:function(t){var e=void 0;"circle"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode(),n=t.getAttribute("r"),s=t.getAttribute("fill");return i.setAttribute("r",parseInt(n)+4),i.setAttribute("fill",s),i.style.opacity="0.6",e&&i.setAttribute("transform",e),i}},_t={bar:function(t,e){var i=void 0;"rect"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["x","y","width","height"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)},dot:function(t,e){var i=void 0;"circle"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["cx","cy"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)},heat_square:function(t,e){var i=void 0;"circle"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["cx","cy"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)}},$t=350,Et=350,Yt=$t,Wt=250,zt="easein",Ht={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},Ft=".chart-container{position:relative;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Roboto','Oxygen','Ubuntu','Cantarell','Fira Sans','Droid Sans','Helvetica Neue',sans-serif}.chart-container .axis,.chart-container .chart-label{fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .dataset-units circle{stroke:#fff;stroke-width:2}.chart-container .dataset-units path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container .dataset-path{stroke-width:2px}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .axis-line .specific-value{text-anchor:start}.chart-container .axis-line .y-line{text-anchor:end}.chart-container .axis-line .x-line{text-anchor:middle}.chart-container .legend-dataset-text{fill:#6c7680;font-weight:600}.graph-svg-tip{position:absolute;z-index:99999;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.graph-svg-tip ul{padding-left:0;display:flex}.graph-svg-tip ol{padding-left:0;display:flex}.graph-svg-tip ul.data-point-list li{min-width:90px;flex:1;font-weight:600}.graph-svg-tip strong{color:#dfe2e5;font-weight:600}.graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:' ';border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}",jt=function(){function e(t,i){if(ut(this,e),i=f(i),this.parent="string"==typeof t?document.querySelector(t):t,!(this.parent instanceof HTMLElement))throw new Error("No `parent` element to render on was provided.");this.rawChartArgs=i,this.title=i.title||"",this.type=i.type||"",this.realData=this.prepareData(i.data),this.data=this.prepareFirstData(this.realData),this.colors=this.validateColors(i.colors,this.type),this.config={showTooltip:1,showLegend:1,isNavigable:i.isNavigable||0,animate:void 0!==i.animate?i.animate:1,truncateLegends:i.truncateLegends||1},this.measures=JSON.parse(JSON.stringify(vt));var n=this.measures;this.setMeasures(i),this.title.length||(n.titleHeight=0),this.config.showLegend||(n.legendHeight=0),this.argHeight=i.height||n.baseHeight,this.state={},this.options={},this.initTimeout=700,this.config.isNavigable&&(this.overlays=[]),this.configure(i)}return ct(e,[{key:"prepareData",value:function(t){return t}},{key:"prepareFirstData",value:function(t){return t}},{key:"validateColors",value:function(t,e){var i=[];return(t=(t||[]).concat(kt[e])).forEach((function(t){var e=Pt(t);!function(t){return/(^\s*)(#)((?:[A-Fa-f0-9]{3}){1,2})$/i.test(t)||/(^\s*)(rgb|hsl)(a?)[(]\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*(?:,\s*([\d.]+)\s*)?[)]$/i.test(t)}(e)?console.warn('"'+t+'" is not a valid color.'):i.push(e)})),i}},{key:"setMeasures",value:function(){}},{key:"configure",value:function(){var t=this,e=this.argHeight;this.baseHeight=e,this.height=e-r(this.measures),this.boundDrawFn=function(){return t.draw(!0)},ResizeObserver&&(this.resizeObserver=new ResizeObserver(this.boundDrawFn),this.resizeObserver.observe(this.parent)),window.addEventListener("resize",this.boundDrawFn),window.addEventListener("orientationchange",this.boundDrawFn)}},{key:"destroy",value:function(){this.resizeObserver&&this.resizeObserver.disconnect(),window.removeEventListener("resize",this.boundDrawFn),window.removeEventListener("orientationchange",this.boundDrawFn)}},{key:"setup",value:function(){this.makeContainer(),this.updateWidth(),this.makeTooltip(),this.draw(!1,!0)}},{key:"makeContainer",value:function(){this.parent.innerHTML="";var e={inside:this.parent,className:"chart-container"};this.independentWidth&&(e.styles={width:this.independentWidth+"px"}),this.container=t.create("div",e)}},{key:"makeTooltip",value:function(){this.tip=new Dt({parent:this.container,colors:this.colors}),this.bindTooltip()}},{key:"bindTooltip",value:function(){}},{key:"draw",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e&&i(this.parent)||(this.updateWidth(),this.calc(e),this.makeChartArea(),this.setupComponents(),this.components.forEach((function(e){return e.setup(t.drawArea)})),this.render(this.components,!1),n&&(this.data=this.realData,setTimeout((function(){t.update(t.data)}),this.initTimeout)),this.renderLegend(),this.setupNavigation(n))}},{key:"calc",value:function(){}},{key:"updateWidth",value:function(){this.baseWidth=function(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}(this.parent),this.width=this.baseWidth-o(this.measures)}},{key:"makeChartArea",value:function(){this.svg&&this.container.removeChild(this.svg);var t=this.measures;this.svg=function(t,e,i,n){return w("svg",{className:e,inside:t,width:i,height:n})}(this.container,"frappe-chart chart",this.baseWidth,this.baseHeight),this.svgDefs=function(t){return w("defs",{inside:t})}(this.svg),this.title.length&&(this.titleEL=O("title",t.margins.left,t.margins.top,this.title,{fontSize:t.titleFontSize,fill:"#666666",dy:t.titleFontSize}));var e=s(t);this.drawArea=P(this.type+"-chart chart-draw-area","translate("+a(t)+", "+e+")"),this.config.showLegend&&(e+=this.height+t.paddings.bottom,this.legendArea=P("chart-legend","translate("+a(t)+", "+e+")")),this.title.length&&this.svg.appendChild(this.titleEL),this.svg.appendChild(this.drawArea),this.config.showLegend&&this.svg.appendChild(this.legendArea),this.updateTipOffset(a(t),s(t))}},{key:"updateTipOffset",value:function(t,e){this.tip.offset={x:t,y:e}}},{key:"setupComponents",value:function(){this.components=new Map}},{key:"update",value:function(t){t||console.error("No data to update."),this.data=this.prepareData(t),this.calc(),this.render(this.components,this.config.animate),this.renderLegend()}},{key:"render",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.components,i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.config.isNavigable&&this.overlays.map((function(t){return t.parentNode.removeChild(t)}));var n=[];e.forEach((function(t){n=n.concat(t.update(i))})),n.length>0?(H(this.container,this.svg,n),setTimeout((function(){e.forEach((function(t){return t.make()})),t.updateNav()}),400)):(e.forEach((function(t){return t.make()})),this.updateNav())}},{key:"updateNav",value:function(){this.config.isNavigable&&(this.makeOverlay(),this.bindUnits())}},{key:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.config.isNavigable&&e&&(this.bindOverlay(),this.keyActions={13:this.onEnterKey.bind(this),37:this.onLeftArrow.bind(this),38:this.onUpArrow.bind(this),39:this.onRightArrow.bind(this),40:this.onDownArrow.bind(this)},document.addEventListener("keydown",(function(e){n(t.container)&&(e=e||window.event,t.keyActions[e.keyCode]&&t.keyActions[e.keyCode]())})))}},{key:"makeOverlay",value:function(){}},{key:"updateOverlay",value:function(){}},{key:"bindOverlay",value:function(){}},{key:"bindUnits",value:function(){}},{key:"onLeftArrow",value:function(){}},{key:"onRightArrow",value:function(){}},{key:"onUpArrow",value:function(){}},{key:"onDownArrow",value:function(){}},{key:"onEnterKey",value:function(){}},{key:"addDataPoint",value:function(){}},{key:"removeDataPoint",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"setCurrentDataPoint",value:function(){}},{key:"updateDataset",value:function(){}},{key:"export",value:function(){var t=F(this.svg);!function(t,e){var i=document.createElement("a");i.style="display: none";var n=new Blob(e,{type:"image/svg+xml; charset=utf-8"}),s=window.URL.createObjectURL(n);i.href=s,i.download=t,document.body.appendChild(i),i.click(),setTimeout((function(){document.body.removeChild(i),window.URL.revokeObjectURL(s)}),300)}(this.title||"Chart",[t])}}]),e}(),It=function(t){function e(t,i){return ut(this,e),ft(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i))}return dt(e,t),ct(e,[{key:"configure",value:function(t){ht(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"configure",this).call(this,t),this.config.formatTooltipY=(t.tooltipOptions||{}).formatTooltipY,this.config.maxSlices=t.maxSlices||20,this.config.maxLegendPoints=t.maxLegendPoints||20}},{key:"calc",value:function(){var t=this,e=this.state,i=this.config.maxSlices;e.sliceTotals=[];var n=this.data.labels.map((function(e,i){var n=0;return t.data.datasets.map((function(t){n+=t.values[i]})),[n,e]})).filter((function(t){return t[0]>=0})),s=n;if(n.length>i){n.sort((function(t,e){return e[0]-t[0]})),s=n.slice(0,i-1);var a=0;n.slice(i-1).map((function(t){a+=t[0]})),s.push([a,"Rest"]),this.colors[i-1]="grey"}e.labels=[],s.map((function(t){e.sliceTotals.push(function(t){return Number(Math.round(t+"e4")+"e-4")}(t[0])),e.labels.push(t[1])})),e.grandTotal=e.sliceTotals.reduce((function(t,e){return t+e}),0),this.center={x:this.width/2,y:this.height/2}}},{key:"renderLegend",value:function(){var t=this,e=this.state;this.legendArea.textContent="",this.legendTotals=e.sliceTotals.slice(0,this.config.maxLegendPoints);var i=0,n=0;this.legendTotals.map((function(s,a){var r=150,l=Math.floor((t.width-o(t.measures))/r);t.legendTotals.lengthl&&(i=0,n+=20);var u=r*i+5,c=t.config.truncateLegends?v(e.labels[a],r/10):e.labels[a],h=t.config.formatTooltipY?t.config.formatTooltipY(s):s,d=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",s=arguments[4];s=arguments.length>5&&void 0!==arguments[5]&&arguments[5]?v(s,Tt):s;var a={className:"legend-dot",cx:0,cy:0,r:i,fill:n},r=w("text",{className:"legend-dataset-text",x:0,y:0,dx:Ot+"px",dy:Ot/3+"px","font-size":1.2*Ot+"px","text-anchor":"start",fill:Ct,innerHTML:s}),o=w("g",{transform:"translate("+t+", "+e+")"});return o.appendChild(w("circle",a)),o.appendChild(r),o}(u,n,5,t.colors[a],c+": "+h,!1);t.legendArea.appendChild(d),i++}))}}]),e}(jt),Rt=7,Ut=1e3,Vt=86400,Bt=["January","February","March","April","May","June","July","August","September","October","November","December"],Gt=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],qt=function(){function t(e){var i=e.layerClass,n=void 0===i?"":i,s=e.layerTransform,a=void 0===s?"":s,r=e.constants,o=e.getData,l=e.makeElements,u=e.animateElements;ut(this,t),this.layerTransform=a,this.constants=r,this.makeElements=l,this.getData=o,this.animateElements=u,this.store=[],this.labels=[],this.layerClass=n,this.layerClass="function"==typeof this.layerClass?this.layerClass():this.layerClass,this.refresh()}return ct(t,[{key:"refresh",value:function(t){this.data=t||this.getData()}},{key:"setup",value:function(t){this.layer=P(this.layerClass,this.layerTransform,t)}},{key:"make",value:function(){this.render(this.data),this.oldData=this.data}},{key:"render",value:function(t){var e=this;this.store=this.makeElements(t),this.layer.textContent="",this.store.forEach((function(t){e.layer.appendChild(t)})),this.labels.forEach((function(t){e.layer.appendChild(t)}))}},{key:"update",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.refresh();var e=[];return t&&(e=this.animateElements(this.data)||[]),e}}]),t}(),Jt={donutSlices:{layerClass:"donut-slices",makeElements:function(t){return t.sliceStrings.map((function(e,i){var n=S(e,"donut-path",t.colors[i],"none",t.strokeWidth);return n.style.transition="transform .3s;",n}))},animateElements:function(t){return this.store.map((function(e,i){return E(e,t.sliceStrings[i])}))}},pieSlices:{layerClass:"pie-slices",makeElements:function(t){return t.sliceStrings.map((function(e,i){var n=S(e,"pie-path","none",t.colors[i]);return n.style.transition="transform .3s;",n}))},animateElements:function(t){return this.store.map((function(e,i){return E(e,t.sliceStrings[i])}))}},percentageBars:{layerClass:"percentage-bars",makeElements:function(t){var e=this;return t.xPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:yt,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"none";return w("rect",{className:"percentage-bar",x:t,y:e,width:i,height:n,fill:a,styles:{stroke:x(a,-25),"stroke-dasharray":"0, "+(n+i)+", "+i+", "+n,"stroke-width":s}})}(i,0,t.widths[n],e.constants.barHeight,e.constants.barDepth,t.colors[n])}))},animateElements:function(t){if(t)return[]}},yAxis:{layerClass:"y axis",makeElements:function(t){var e=this;return t.positions.map((function(i,n){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};d(t)||(t=0),n.pos||(n.pos="left"),n.offset||(n.offset=0),n.mode||(n.mode="span"),n.stroke||(n.stroke=Lt),n.className||(n.className="");var s=-1*St,a="span"===n.mode?i+St:0;return"tick"===n.mode&&"right"===n.pos&&(s=i+St,a=i),C(t,e,s+=n.offset,a+=n.offset,{stroke:n.stroke,className:n.className,lineType:n.lineType,shortenNumbers:n.shortenNumbers})}(i,t.labels[n],e.constants.width,{mode:e.constants.mode,pos:e.constants.pos,shortenNumbers:e.constants.shortenNumbers})}))},animateElements:function(t){var e=t.positions,i=t.labels,n=this.oldData.positions,s=this.oldData.labels,a=m(n,e),r=pt(a,2);n=r[0],e=r[1];var o=m(s,i),l=pt(o,2);return s=l[0],i=l[1],this.render({positions:n,labels:i}),this.store.map((function(t,i){return _(t,e[i],n[i])}))}},xAxis:{layerClass:"x axis",makeElements:function(t){var e=this;return t.positions.map((function(i,n){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};d(t)||(t=0),n.pos||(n.pos="bottom"),n.offset||(n.offset=0),n.mode||(n.mode="span"),n.stroke||(n.stroke=Lt),n.className||(n.className="");var s=i+St,a="span"===n.mode?-1*St:i;return"tick"===n.mode&&"top"===n.pos&&(s=-1*St,a=0),L(t,e,s,a,{stroke:n.stroke,className:n.className,lineType:n.lineType})}(i,t.calcLabels[n],e.constants.height,{mode:e.constants.mode,pos:e.constants.pos})}))},animateElements:function(t){var e=t.positions,i=t.calcLabels,n=this.oldData.positions,s=this.oldData.calcLabels,a=m(n,e),r=pt(a,2);n=r[0],e=r[1];var o=m(s,i),l=pt(o,2);return s=l[0],i=l[1],this.render({positions:n,calcLabels:i}),this.store.map((function(t,i){return function(t,e,i){return N(t,[i,0],[e,0],Yt)}(t,e[i],n[i])}))}},yMarkers:{layerClass:"y-markers",makeElements:function(t){var e=this;return t.map((function(t){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};n.labelPos||(n.labelPos="right");var s=w("text",{className:"chart-label",x:"left"===n.labelPos?At:i-c(e,5)-At,y:0,dy:Ot/-2+"px","font-size":Ot+"px","text-anchor":"start",innerHTML:e+""}),a=C(t,"",0,i,{stroke:n.stroke||Lt,className:n.className||"",lineType:n.lineType});return a.appendChild(s),a}(t.position,t.label,e.constants.width,{labelPos:t.options.labelPos,mode:"span",lineType:"dashed"})}))},animateElements:function(t){var e=m(this.oldData,t),i=pt(e,2);this.oldData=i[0];var n=(t=i[1]).map((function(t){return t.position})),s=t.map((function(t){return t.label})),a=t.map((function(t){return t.options})),r=this.oldData.map((function(t){return t.position}));return this.render(r.map((function(t,e){return{position:r[e],label:s[e],options:a[e]}}))),this.store.map((function(t,e){return _(t,n[e],r[e])}))}},yRegions:{layerClass:"y-regions",makeElements:function(t){var e=this;return t.map((function(t){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=t-e,r=w("rect",{className:"bar mini",styles:{fill:"rgba(228, 234, 239, 0.49)",stroke:Lt,"stroke-dasharray":i+", "+a},x:0,y:0,width:i,height:a});s.labelPos||(s.labelPos="right");var o=w("text",{className:"chart-label",x:"left"===s.labelPos?At:i-c(n+"",4.5)-At,y:0,dy:Ot/-2+"px","font-size":Ot+"px","text-anchor":"start",innerHTML:n+""}),l=w("g",{transform:"translate(0, "+e+")"});return l.appendChild(r),l.appendChild(o),l}(t.startPos,t.endPos,e.constants.width,t.label,{labelPos:t.options.labelPos})}))},animateElements:function(t){var e=m(this.oldData,t),i=pt(e,2);this.oldData=i[0];var n=(t=i[1]).map((function(t){return t.endPos})),s=t.map((function(t){return t.label})),a=t.map((function(t){return t.startPos})),r=t.map((function(t){return t.options})),o=this.oldData.map((function(t){return t.endPos})),l=this.oldData.map((function(t){return t.startPos}));this.render(o.map((function(t,e){return{startPos:l[e],endPos:o[e],label:s[e],options:r[e]}})));var u=[];return this.store.map((function(t,e){u=u.concat(function(t,e,i,n){var s=e-i,a=t.childNodes[0];return[[a,{height:s,"stroke-dasharray":a.getAttribute("width")+", "+s},Yt,zt],N(t,[0,n],[0,i],Yt)]}(t,a[e],n[e],o[e]))})),u}},heatDomain:{layerClass:function(){return"heat-domain domain-"+this.constants.index},makeElements:function(t){var e=this,i=this.constants,n=i.index,s=i.colWidth,a=i.rowHeight,r=i.squareSize,o=i.radius,l=i.xTranslate,u=0;return this.serializedSubDomains=[],t.cols.map((function(t,i){1===i&&e.labels.push(O("domain-name",l,-12,B(n,!0).toUpperCase(),{fontSize:9})),t.map((function(t,i){if(t.fill){var n={"data-date":t.yyyyMmDd,"data-value":t.dataValue,"data-day":i},s=T("day",l,u,r,o,t.fill,n);e.serializedSubDomains.push(s)}u+=a})),u=0,l+=s})),this.serializedSubDomains},animateElements:function(t){if(t)return[]}},barGraph:{layerClass:function(){return"dataset-units dataset-bars dataset-"+this.constants.index},makeElements:function(t){var e=this.constants;return this.unitType="bar",this.units=t.yPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{},l=p(e,o.zeroLine),u=pt(l,2),c=u[0],h=u[1];h-=r,0===c&&(c=o.minHeight,h-=o.minHeight),d(t)||(t=0),d(h)||(h=0),d(c,!0)||(c=0),d(i,!0)||(i=0);var f=w("rect",{className:"bar mini",style:"fill: "+n,"data-point-index":a,x:t,y:h,width:i,height:c});if((s+="")||s.length){f.setAttribute("y",0),f.setAttribute("x",0);var m=w("text",{className:"data-point-value",x:i/2,y:0,dy:Ot/2*-1+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:s}),v=w("g",{"data-point-index":a,transform:"translate("+t+", "+h+")"});return v.appendChild(f),v.appendChild(m),v}return f}(t.xPositions[n],i,t.barWidth,e.color,t.labels[n],n,t.offsets[n],{zeroLine:t.zeroLine,barsWidth:t.barsWidth,minHeight:e.minHeight})})),this.units},animateElements:function(t){var e=t.xPositions,i=t.yPositions,n=t.offsets,s=t.labels,a=this.oldData.xPositions,r=this.oldData.yPositions,o=this.oldData.offsets,l=this.oldData.labels,u=m(a,e),c=pt(u,2);a=c[0],e=c[1];var h=m(r,i),d=pt(h,2);r=d[0],i=d[1];var f=m(o,n),p=pt(f,2);o=p[0],n=p[1];var v=m(l,s),g=pt(v,2);l=g[0],s=g[1],this.render({xPositions:a,yPositions:r,offsets:o,labels:s,zeroLine:this.oldData.zeroLine,barsWidth:this.oldData.barsWidth,barWidth:this.oldData.barWidth});var y=[];return this.store.map((function(s,a){y=y.concat($(s,e[a],i[a],t.barWidth,n[a],{zeroLine:t.zeroLine}))})),y}},lineGraph:{layerClass:function(){return"dataset-units dataset-line dataset-"+this.constants.index},makeElements:function(t){var e=this.constants;return this.unitType="dot",this.paths={},e.hideLine||(this.paths=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=e.map((function(e,i){return t[i]+","+e})).join("L");n.spline&&(a=y(t,e));var r=S("M"+a,"line-graph-path",i);if(n.heatline){var o=A(s.svgDefs,i);r.style.stroke="url(#"+o+")"}var l={path:r};if(n.regionFill){var u=A(s.svgDefs,i,!0),c="M"+t[0]+","+s.zeroLine+"L"+a+"L"+t.slice(-1)[0]+","+s.zeroLine;l.region=S(c,"region-fill","none","url(#"+u+")")}return l}(t.xPositions,t.yPositions,e.color,{heatline:e.heatline,regionFill:e.regionFill,spline:e.spline},{svgDefs:e.svgDefs,zeroLine:t.zeroLine})),this.units=[],e.hideDots||(this.units=t.yPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=w("circle",{style:"fill: "+n,"data-point-index":a,cx:t,cy:e,r:i});if((s+="")||s.length){r.setAttribute("cy",0),r.setAttribute("cx",0);var o=w("text",{className:"data-point-value",x:0,y:0,dy:Ot/2*-1-i+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:s}),l=w("g",{"data-point-index":a,transform:"translate("+t+", "+e+")"});return l.appendChild(r),l.appendChild(o),l}return r}(t.xPositions[n],i,t.radius,e.color,e.valuesOverPoints?t.values[n]:"",n)}))),Object.values(this.paths).concat(this.units)},animateElements:function(t){var e=t.xPositions,i=t.yPositions,n=t.values,s=this.oldData.xPositions,a=this.oldData.yPositions,r=this.oldData.values,o=m(s,e),l=pt(o,2);s=l[0],e=l[1];var u=m(a,i),c=pt(u,2);a=c[0],i=c[1];var h=m(r,n),d=pt(h,2);r=d[0],n=d[1],this.render({xPositions:s,yPositions:a,values:n,zeroLine:this.oldData.zeroLine,radius:this.oldData.radius});var f=[];return Object.keys(this.paths).length&&(f=f.concat(function(t,e,i,n,s){var a=[],r=i.map((function(t,i){return e[i]+","+t})).join("L");s&&(r=y(e,i));var o=[t.path,{d:"M"+r},Et,zt];if(a.push(o),t.region){var l=e[0]+","+n+"L",u="L"+e.slice(-1)[0]+", "+n,c=[t.region,{d:"M"+l+r+u},Et,zt];a.push(c)}return a}(this.paths,e,i,t.zeroLine,this.constants.spline))),this.units.length&&this.units.map((function(t,n){f=f.concat(function(t,e,i){return"circle"!==t.nodeName?[N(t,t.getAttribute("transform").split("(")[1].slice(0,-1),[e,i],Yt)]:[[t,{cx:e,cy:i},$t,zt]]}(t,e[n],i[n]))})),f}}},Xt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="percentage",n.setup(),n}return dt(i,t),ct(i,[{key:"setMeasures",value:function(t){var e=this.measures;this.barOptions=t.barOptions||{};var i=this.barOptions;i.height=i.height||20,i.depth=i.depth||yt,e.paddings.right=30,e.legendHeight=60,e.baseHeight=8*(i.height+.5*i.depth)}},{key:"setupComponents",value:function(){var t=this.state,e=[["percentageBars",{barHeight:this.barOptions.height,barDepth:this.barOptions.depth},function(){return{xPositions:t.xPositions,widths:t.widths,colors:this.colors}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;e.xPositions=[],e.widths=[];var n=0;e.sliceTotals.map((function(i){var s=t.width*i/e.grandTotal;e.widths.push(s),e.xPositions.push(n),n+=s}))}},{key:"makeDataByIndex",value:function(){}},{key:"bindTooltip",value:function(){var t=this,i=this.state;this.container.addEventListener("mousemove",(function(n){var s=t.components.get("percentageBars").store,a=n.target;if(s.includes(a)){var r=s.indexOf(a),o=e(t.container),l=e(a),u=l.left-o.left+parseInt(a.getAttribute("width"))/2,c=l.top-o.top,h=(t.formattedLabels&&t.formattedLabels.length>0?t.formattedLabels[r]:t.state.labels[r])+": ",d=i.sliceTotals[r]/i.grandTotal;t.tip.setValues(u,c,{name:h,value:(100*d).toFixed(1)+"%"}),t.tip.showTip()}}))}}]),i}(It),Zt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="pie",n.initTimeout=0,n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),this.mouseMove=this.mouseMove.bind(this),this.mouseLeave=this.mouseLeave.bind(this),this.hoverRadio=t.hoverRadio||.1,this.config.startAngle=t.startAngle||0,this.clockWise=t.clockWise||!1}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;this.radius=this.height>this.width?this.center.x:this.center.y;var n=this.radius,s=this.clockWise,a=e.slicesProperties||[];e.sliceStrings=[],e.slicesProperties=[];var r=180-this.config.startAngle;e.sliceTotals.map((function(i,o){var l=r,u=i/e.grandTotal*360,c=u>180?1:0,d=s?-u:u,f=r+=d,p=h(l,n),m=h(f,n),v=t.init&&a[o],g=void 0,y=void 0;t.init?(g=v?v.startPosition:p,y=v?v.endPosition:p):(g=p,y=m);var b=360===u?function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=2*i.y,c=i.y+e.y;return"M"+i.x+" "+i.y+"\n\t\tL"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+" z\n\t\tL"+r+" "+u+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+c+" z"}(g,y,t.center,t.radius,s,c):function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=i.y+e.y;return"M"+i.x+" "+i.y+"\n\t\tL"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+" z"}(g,y,t.center,t.radius,s,c);e.sliceStrings.push(b),e.slicesProperties.push({startPosition:p,endPosition:m,value:i,total:e.grandTotal,startAngle:l,endAngle:f,angle:d})})),this.init=0}},{key:"setupComponents",value:function(){var t=this.state,e=[["pieSlices",{},function(){return{sliceStrings:t.sliceStrings,colors:this.colors}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=h(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,s){if(t){var a=this.colors[i];if(n){W(t,this.calTranslateByAngle(this.state.slicesProperties[i])),t.style.fill=x(a,50);var r=e(this.svg),o=s.pageX-r.left+10,l=s.pageY-r.top-10,u=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.state.labels[i])+": ",c=(100*this.state.sliceTotals[i]/this.state.grandTotal).toFixed(1);this.tip.setValues(o,l,{name:u,value:c+"%"}),this.tip.showTip()}else W(t,"translate3d(0,0,0)"),this.tip.hideTip(),t.style.fill=a}}},{key:"bindTooltip",value:function(){this.container.addEventListener("mousemove",this.mouseMove),this.container.addEventListener("mouseleave",this.mouseLeave)}},{key:"mouseMove",value:function(t){var e=t.target,i=this.components.get("pieSlices").store,n=this.curActiveSliceIndex,s=this.curActiveSlice;if(i.includes(e)){var a=i.indexOf(e);this.hoverSlice(s,n,!1),this.curActiveSlice=e,this.curActiveSliceIndex=a,this.hoverSlice(e,a,!0,t)}else this.mouseLeave()}},{key:"mouseLeave",value:function(){this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,!1)}}]),i}(It),Kt=function(t){function e(t,i){ut(this,e);var n=ft(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i));n.type="heatmap",n.countLabel=i.countLabel||"";var s=["Sunday","Monday"],a=s.includes(i.startSubDomain)?i.startSubDomain:"Sunday";return n.startSubDomainIndex=s.indexOf(a),n.setup(),n}return dt(e,t),ct(e,[{key:"setMeasures",value:function(t){var e=this.measures;this.discreteDomains=0===t.discreteDomains?0:1,e.paddings.top=36,e.paddings.bottom=0,e.legendHeight=24,e.baseHeight=12*Rt+r(e);var i=this.data,n=this.discreteDomains?12:0;this.independentWidth=12*(U(i.start,i.end)+n)+o(e)}},{key:"updateWidth",value:function(){var t=this.discreteDomains?12:0,e=this.state.noOfWeeks?this.state.noOfWeeks:52;this.baseWidth=12*(e+t)+o(this.measures)}},{key:"prepareData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data;if(t.start&&t.end&&t.start>t.end)throw new Error("Start date cannot be greater than end date.");if(t.start||(t.start=new Date,t.start.setFullYear(t.start.getFullYear()-1)),t.end||(t.end=new Date),t.dataPoints=t.dataPoints||{},parseInt(Object.keys(t.dataPoints)[0])>1e5){var e={};Object.keys(t.dataPoints).forEach((function(i){var n=new Date(i*Ut);e[I(n)]=t.dataPoints[i]})),t.dataPoints=e}return t}},{key:"calc",value:function(){var t=this.state;t.start=R(this.data.start),t.end=R(this.data.end),t.firstWeekStart=R(t.start),t.noOfWeeks=U(t.start,t.end),t.distribution=function(t,e){for(var i=Math.max.apply(Math,mt(t)),n=1/(e-1),s=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:"",i=[t.getMonth(),t.getFullYear()],n=i[0],s=i[1],a=q(t),r={index:n,cols:[]};J(e=R(e)||G(n,s),1);for(var o=U(a,e),l=[],u=void 0,c=0;c2&&void 0!==arguments[2]&&arguments[2],n=this.state,s=R(t),a=[],r=0;r=n.start&&s<=n.end;i||s.getMonth()!==e||!l?o.yyyyMmDd=I(s):o=this.getSubDomainConfig(s),a.push(o)}return a}},{key:"getSubDomainConfig",value:function(t){var e=I(t),i=this.data.dataPoints[e];return{yyyyMmDd:e,dataValue:i||0,fill:this.colors[at(i,this.state.distribution)]}}}]),e}(jt),Qt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.barOptions=e.barOptions||{},n.lineOptions=e.lineOptions||{},n.type=e.type||"line",n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"setMeasures",value:function(){this.data.datasets.length<=1&&(this.config.showLegend=0,this.measures.paddings.bottom=30)}},{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),t.axisOptions=t.axisOptions||{},t.tooltipOptions=t.tooltipOptions||{},this.config.xAxisMode=t.axisOptions.xAxisMode||"span",this.config.yAxisMode=t.axisOptions.yAxisMode||"span",this.config.xIsSeries=t.axisOptions.xIsSeries||0,this.config.shortenYAxisNumbers=t.axisOptions.shortenYAxisNumbers||0,this.config.formatTooltipX=t.tooltipOptions.formatTooltipX,this.config.formatTooltipY=t.tooltipOptions.formatTooltipY,this.config.valuesOverPoints=t.valuesOverPoints}},{key:"prepareData",value:function(){return rt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data,this.type)}},{key:"prepareFirstData",value:function(){return ot(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data)}},{key:"calc",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.calcXPositions(),t||this.calcYAxisParameters(this.getAllYValues(),"line"===this.type),this.makeDataByIndex()}},{key:"calcXPositions",value:function(){var t=this.state,e=this.data.labels;t.datasetLength=e.length,t.unitWidth=this.width/t.datasetLength,t.xOffset=t.unitWidth/2,t.xAxis={labels:e,positions:e.map((function(e,i){return l(t.xOffset+i*t.unitWidth)}))}}},{key:"calcYAxisParameters",value:function(t){var e=tt(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"false"),i=this.height/nt(e),n=it(e)*i,s=this.height-et(e)*n;this.state.yAxis={labels:e,positions:e.map((function(t){return s-t*i})),scaleMultiplier:i,zeroLine:s},this.calcDatasetPoints(),this.calcYExtremes(),this.calcYRegions()}},{key:"calcDatasetPoints",value:function(){var t=this.state,e=function(e){return e.map((function(e){return st(e,t.yAxis)}))};t.datasets=this.data.datasets.map((function(t,i){var n=t.values,s=t.cumulativeYs||[];return{name:t.name&&t.name.replace(/<|>|&/g,(function(t){return"&"==t?"&":"<"==t?"<":">"})),index:i,chartType:t.chartType,values:n,yPositions:e(n),cumulativeYs:s,cumulativeYPos:e(s)}}))}},{key:"calcYExtremes",value:function(){var t=this.state;this.barOptions.stacked?t.yExtremes=t.datasets[t.datasets.length-1].cumulativeYPos:(t.yExtremes=new Array(t.datasetLength).fill(9999),t.datasets.map((function(e){e.yPositions.map((function(e,i){e1&&void 0!==arguments[1]?arguments[1]:[],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=t/e.length;n<=0&&(n=1);var s=n/bt,a=void 0;if(i){var r=Math.max.apply(Math,mt(e.map((function(t){return t.length}))));a=Math.ceil(r/s)}return e.map((function(t,e){return(t+="").length>s&&(i?e%a!=0&&(t=""):t=s-3>0?t.slice(0,s-3)+" ...":t.slice(0,s)+".."),t}))}(this.width,t.xAxis.labels,this.config.xIsSeries),t.xAxis}.bind(this)],["yRegions",{width:this.width,pos:"right"},function(){return this.state.yRegions}.bind(this)]],i=this.state.datasets.filter((function(t){return"bar"===t.chartType})),n=this.state.datasets.filter((function(t){return"line"===t.chartType})),s=i.map((function(e){var n=e.index;return["barGraph-"+e.index,{index:n,color:t.colors[n],stacked:t.barOptions.stacked,valuesOverPoints:t.config.valuesOverPoints,minHeight:0*t.height},function(){var t=this.state,e=t.datasets[n],s=this.barOptions.stacked,a=this.barOptions.spaceRatio||.5,r=t.unitWidth*(1-a),o=r/(s?1:i.length),l=t.xAxis.positions.map((function(t){return t-r/2}));s||(l=l.map((function(t){return t+o*n})));var u=new Array(t.datasetLength).fill("");this.config.valuesOverPoints&&(u=s&&e.index===t.datasets.length-1?e.cumulativeYs:e.values);var c=new Array(t.datasetLength).fill(0);return s&&(c=e.yPositions.map((function(t,i){return t-e.cumulativeYPos[i]}))),{xPositions:l,yPositions:e.yPositions,offsets:c,labels:u,zeroLine:t.yAxis.zeroLine,barsWidth:r,barWidth:o}}.bind(t)]})),a=n.map((function(e){var i=e.index;return["lineGraph-"+e.index,{index:i,color:t.colors[i],svgDefs:t.svgDefs,heatline:t.lineOptions.heatline,regionFill:t.lineOptions.regionFill,spline:t.lineOptions.spline,hideDots:t.lineOptions.hideDots,hideLine:t.lineOptions.hideLine,valuesOverPoints:t.config.valuesOverPoints},function(){var t=this.state,e=t.datasets[i],n=t.yAxis.positions[0]s(n)?t.mapTooltipXPosition(o):t.tip.hideTip()}))}},{key:"mapTooltipXPosition",value:function(t){var e=this.state;if(e.yExtremes){var i=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.reduce((function(e,i){return Math.abs(i-t)=0){var n=this.dataByIndex[i];this.tip.setValues(n.xPos+this.tip.offset.x,n.yExtreme+this.tip.offset.y,{name:n.formattedLabel,value:""},n.values,i),this.tip.showTip()}}}},{key:"renderLegend",value:function(){var t=this,e=this.data;e.datasets.length>1&&(this.legendArea.textContent="",e.datasets.map((function(e,i){var n=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",s=arguments[4];s=arguments.length>5&&void 0!==arguments[5]&&arguments[5]?v(s,Tt):s;var a={className:"legend-bar",x:0,y:0,width:i,height:"2px",fill:n},r=w("text",{className:"legend-dataset-text",x:0,y:0,dy:2*Ot+"px","font-size":1.2*Ot+"px","text-anchor":"start",fill:Ct,innerHTML:s}),o=w("g",{transform:"translate("+t+", "+e+")"});return o.appendChild(w("rect",a)),o.appendChild(r),o}(100*i,"0",100,t.colors[i],e.name,t.config.truncateLegends);t.legendArea.appendChild(n)})))}},{key:"makeOverlay",value:function(){var t=this;this.init?this.init=0:(this.overlayGuides&&this.overlayGuides.forEach((function(t){var e=t.overlay;e.parentNode.removeChild(e)})),this.overlayGuides=this.dataUnitComponents.map((function(t){return{type:t.unitType,overlay:void 0,units:t.units}})),void 0===this.state.currentIndex&&(this.state.currentIndex=this.state.datasetLength-1),this.overlayGuides.map((function(e){var i=e.units[t.state.currentIndex];e.overlay=Nt[e.type](i),t.drawArea.appendChild(e.overlay)})))}},{key:"updateOverlayGuides",value:function(){this.overlayGuides&&this.overlayGuides.forEach((function(t){var e=t.overlay;e.parentNode.removeChild(e)}))}},{key:"bindOverlay",value:function(){var t=this;this.parent.addEventListener("data-select",(function(){t.updateOverlay()}))}},{key:"bindUnits",value:function(){var t=this;this.dataUnitComponents.map((function(e){e.units.map((function(e){e.addEventListener("click",(function(){var i=e.getAttribute("data-point-index");t.setCurrentDataPoint(i)}))}))})),this.tip.container.addEventListener("click",(function(){var e=t.tip.container.getAttribute("data-point-index");t.setCurrentDataPoint(e)}))}},{key:"updateOverlay",value:function(){var t=this;this.overlayGuides.map((function(e){var i=e.units[t.state.currentIndex];_t[e.type](i,e.overlay)}))}},{key:"onLeftArrow",value:function(){this.setCurrentDataPoint(this.state.currentIndex-1)}},{key:"onRightArrow",value:function(){this.setCurrentDataPoint(this.state.currentIndex+1)}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.currentIndex,e=this.state;return{index:t,label:e.xAxis.labels[t],values:e.datasets.map((function(e){return e.values[t]}))}}},{key:"setCurrentDataPoint",value:function(t){var e=this.state;(t=parseInt(t))<0&&(t=0),t>=e.xAxis.labels.length&&(t=e.xAxis.labels.length-1),t!==e.currentIndex&&(e.currentIndex=t,function(t,e,i){var n=document.createEvent("HTMLEvents");for(var s in n.initEvent(e,!0,!0),i)n[s]=i[s];t.dispatchEvent(n)}(this.parent,"data-select",this.getDataPoint()))}},{key:"addDataPoint",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.state.datasetLength;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"addDataPoint",this).call(this,t,e,n),this.data.labels.splice(n,0,t),this.data.datasets.map((function(t,i){t.values.splice(n,0,e[i])})),this.update(this.data)}},{key:"removeDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.datasetLength-1;this.data.labels.length<=1||(ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"removeDataPoint",this).call(this,t),this.data.labels.splice(t,1),this.data.datasets.map((function(e){e.values.splice(t,1)})),this.update(this.data))}},{key:"updateDataset",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;this.data.datasets[e].values=t,this.update(this.data)}},{key:"updateDatasets",value:function(t){this.data.datasets.map((function(e,i){t[i]&&(e.values=t[i])})),this.update(this.data)}}]),i}(jt),te=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="donut",n.initTimeout=0,n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),this.mouseMove=this.mouseMove.bind(this),this.mouseLeave=this.mouseLeave.bind(this),this.hoverRadio=t.hoverRadio||.1,this.config.startAngle=t.startAngle||0,this.clockWise=t.clockWise||!1,this.strokeWidth=t.strokeWidth||30}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;this.radius=this.height>this.width?this.center.x-this.strokeWidth/2:this.center.y-this.strokeWidth/2;var n=this.radius,s=this.clockWise,a=e.slicesProperties||[];e.sliceStrings=[],e.slicesProperties=[];var r=180-this.config.startAngle;e.sliceTotals.map((function(i,o){var l=r,u=i/e.grandTotal*360,c=u>180?1:0,d=s?-u:u,f=r+=d,p=h(l,n),m=h(f,n),v=t.init&&a[o],g=void 0,y=void 0;t.init?(g=v?v.startPosition:p,y=v?v.endPosition:p):(g=p,y=m);var b=360===u?function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=2*n+o;return"M"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+"\n\t\tM"+r+" "+u+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+(i.y+t.y)}(g,y,t.center,t.radius,t.clockWise,c):function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;return"M"+(i.x+t.x)+" "+(i.y+t.y)+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+(i.x+e.x)+" "+(i.y+e.y)}(g,y,t.center,t.radius,t.clockWise,c);e.sliceStrings.push(b),e.slicesProperties.push({startPosition:p,endPosition:m,value:i,total:e.grandTotal,startAngle:l,endAngle:f,angle:d})})),this.init=0}},{key:"setupComponents",value:function(){var t=this.state,e=[["donutSlices",{},function(){return{sliceStrings:t.sliceStrings,colors:this.colors,strokeWidth:this.strokeWidth}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=h(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,s){if(t){var a=this.colors[i];if(n){W(t,this.calTranslateByAngle(this.state.slicesProperties[i])),t.style.stroke=x(a,50);var r=e(this.svg),o=s.pageX-r.left+10,l=s.pageY-r.top-10,u=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.state.labels[i])+": ",c=(100*this.state.sliceTotals[i]/this.state.grandTotal).toFixed(1);this.tip.setValues(o,l,{name:u,value:c+"%"}),this.tip.showTip()}else W(t,"translate3d(0,0,0)"),this.tip.hideTip(),t.style.stroke=a}}},{key:"bindTooltip",value:function(){this.container.addEventListener("mousemove",this.mouseMove),this.container.addEventListener("mouseleave",this.mouseLeave)}},{key:"mouseMove",value:function(t){var e=t.target,i=this.components.get("donutSlices").store,n=this.curActiveSliceIndex,s=this.curActiveSlice;if(i.includes(e)){var a=i.indexOf(e);this.hoverSlice(s,n,!1),this.curActiveSlice=e,this.curActiveSliceIndex=a,this.hoverSlice(e,a,!0,t)}else this.mouseLeave()}},{key:"mouseLeave",value:function(){this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,!1)}}]),i}(It),ee={bar:Qt,line:Qt,percentage:Xt,heatmap:Kt,pie:Zt,donut:te},ie=Object.freeze({Chart:function t(e,i){return ut(this,t),function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1],i=arguments[2];return"axis-mixed"===t?(i.type="line",new Qt(e,i)):ee[t]?new ee[t](e,i):void console.error("Undefined chart type: "+t)}(i.type,e,i)},PercentageChart:Xt,PieChart:Zt,Heatmap:Kt,AxisChart:Qt});return Object.assign({},{NAME:"Frappe Charts",VERSION:"1.6.2"},ie)}()}},e={};function i(n){var s=e[n];if(void 0!==s)return s.exports;var a=e[n]={exports:{}};return t[n].call(a.exports,a,a.exports,i),a.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";i.r(n);const t=flarum.reg.get("core","admin/app");var e=i.n(t);const s=flarum.reg.get("core","common/extend"),a=flarum.reg.get("core","admin/components/DashboardPage");var r=i.n(a);function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function l(t,e,i){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var n=i.call(t,e);if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===o(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}const u=flarum.reg.get("core","admin/components/DashboardWidget");var c=i.n(u);const h=flarum.reg.get("core","common/components/LoadingIndicator");var d=i.n(h);const f=flarum.reg.get("core","common/components/Link");var p=i.n(f);const v=flarum.reg.get("core","common/utils/abbreviateNumber");var g=i.n(v);class y extends(c()){constructor(){super(...arguments),l(this,"entities",["users","discussions","posts"]),l(this,"lifetimeData",void 0),l(this,"loadingLifetime",!0)}oncreate(t){super.oncreate(t),this.loadLifetimeData()}async loadLifetimeData(){this.loadingLifetime=!0,m.redraw();const t=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"lifetime"}});this.lifetimeData=t,this.loadingLifetime=!1,m.redraw()}className(){return"StatisticsWidget StatisticsWidget--mini"}content(){return m("div",{className:"StatisticsWidget-table"},m("h4",{className:"StatisticsWidget-title"},e().translator.trans("flarum-statistics.admin.statistics.mini_heading")),m("div",{className:"StatisticsWidget-entities"},m("div",{className:"StatisticsWidget-labels"},m("div",{className:"StatisticsWidget-label"},e().translator.trans("flarum-statistics.admin.statistics.total_label"))),this.entities.map((t=>{const i=this.loadingLifetime?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getTotalCount(t);return m("div",{className:"StatisticsWidget-entity"},m("h3",{className:"StatisticsWidget-heading"},e().translator.trans("flarum-statistics.admin.statistics."+t+"_heading")),m("div",{className:"StatisticsWidget-total",title:i},this.loadingLifetime?m(d(),{display:"inline"}):g()(i)))}))),m("div",{className:"StatisticsWidget-viewFull"},m(p(),{href:e().route("extension",{id:"flarum-statistics"})},e().translator.trans("flarum-statistics.admin.statistics.view_full"))))}getTotalCount(t){return this.lifetimeData[t]}}flarum.reg.add("flarum-statistics","admin/components/MiniStatisticsWidget",y);const b=flarum.reg.get("core","admin/components/ExtensionPage");var x=i.n(b);const k=flarum.reg.get("core","common/components/SelectDropdown");var w=i.n(k);const D=flarum.reg.get("core","common/components/Button");var M=i.n(D);const P=flarum.reg.get("core","common/utils/extractText");var S=i.n(P);const A=flarum.reg.get("core","common/components/Placeholder");var T=i.n(A);const O=flarum.reg.get("core","common/components/Icon");var L=i.n(O);const C=flarum.reg.get("core","common/utils/classList");var N=i.n(C);const _=flarum.reg.get("core","common/utils/ItemList");var $=i.n(_);const E=flarum.reg.get("core","common/utils/generateElementId");var Y=i.n(E);const W=flarum.reg.get("core","common/components/FormModal");var z=i.n(W),H=i(860),F=i.n(H),j=i(329),I=i.n(j);F().extend(I());class R extends(z()){constructor(){super(...arguments),l(this,"state",{inputs:{startDateVal:F()().format("YYYY-MM-DD"),endDateVal:F()().format("YYYY-MM-DD")},ids:{startDate:Y()(),endDate:Y()()}})}oninit(t){super.oninit(t),this.attrs.value&&(this.state.inputs={startDateVal:F().utc(1e3*this.attrs.value.start).format("YYYY-MM-DD"),endDateVal:F().utc(1e3*this.attrs.value.end).format("YYYY-MM-DD")})}className(){return"StatisticsWidgetDateSelectionModal Modal--small"}title(){return e().translator.trans("flarum-statistics.admin.date_selection_modal.title")}content(){return m("div",{className:"Modal-body"},this.items().toArray())}items(){const t=new($());return t.add("intro",m("p",null,e().translator.trans("flarum-statistics.admin.date_selection_modal.description")),100),t.add("date_start",m("div",{className:"Form-group"},m("label",{htmlFor:this.state.ids.startDate},e().translator.trans("flarum-statistics.admin.date_selection_modal.start_date")),m("input",{type:"date",id:this.state.ids.startDate,value:this.state.inputs.startDateVal,onchange:this.updateState("startDateVal"),className:"FormControl"})),90),t.add("date_end",m("div",{className:"Form-group"},m("label",{htmlFor:this.state.ids.endDate},e().translator.trans("flarum-statistics.admin.date_selection_modal.end_date")),m("input",{type:"date",id:this.state.ids.endDate,value:this.state.inputs.endDateVal,onchange:this.updateState("endDateVal"),className:"FormControl"})),80),t.add("submit",m(M(),{className:"Button Button--primary",type:"submit"},e().translator.trans("flarum-statistics.admin.date_selection_modal.submit_button")),0),t}updateState(t){return e=>{this.state.inputs[t]=e.currentTarget.value}}submitData(){return{start:Math.floor(+F().utc(this.state.inputs.startDateVal+"Z")/1e3),end:Math.floor(+F().utc(this.state.inputs.endDateVal+"Z").hour(23).minute(59).second(59).millisecond(999)/1e3)}}onsubmit(t){t.preventDefault();const i=this.submitData();i.end(t[e]="unloaded",t)),{})),l(this,"loadingCustom",this.entities.reduce(((t,e)=>(t[e]="unloaded",t)),{})),l(this,"selectedEntity","users"),l(this,"selectedPeriod",void 0),l(this,"chartEntity",void 0),l(this,"chartPeriod",void 0)}oncreate(t){super.oncreate(t),this.loadLifetimeData()}async loadLifetimeData(){this.loadingLifetime=!0,m.redraw();const t=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"lifetime"}});this.lifetimeData=t,this.loadingLifetime=!1,m.redraw()}async loadTimedData(t){this.loadingTimed[t]="loading",m.redraw();try{const i=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"timed",model:t}});this.timedData[t]=i,this.loadingTimed[t]="loaded";let n=new Date;n.setUTCHours(0,0,0,0);const s=n.getTime()/1e3;this.periods={today:{start:s,end:s+86400,step:3600},last_7_days:{start:s-604800,end:s,step:86400},previous_7_days:{start:s-1209600,end:s-604800,step:86400},last_28_days:{start:s-2419200,end:s,step:86400},previous_28_days:{start:s-4838400,end:s-2419200,step:86400},last_12_months:{start:s-31449600,end:s,step:604800}},this.selectedPeriod="last_7_days"}catch(e){console.error(e),this.loadingTimed[t]="fail"}m.redraw()}async loadCustomRangeData(t){this.loadingCustom[t]="loading",m.redraw();const i={...this.customPeriod};try{const n=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"custom",model:t,dateRange:{start:i.start,end:i.end}}});if(JSON.stringify(i)!==JSON.stringify(this.customPeriod))return;this.customPeriodData[t]=n,this.loadingCustom[t]="loaded",m.redraw()}catch(e){if(JSON.stringify(i)!==JSON.stringify(this.customPeriod))return;console.error(e),this.loadingCustom[t]="fail"}}className(){return"StatisticsWidget"}content(){var t,i;const n="loaded"!==("custom"===this.selectedPeriod?this.loadingCustom:this.loadingTimed)[this.selectedEntity],s=n?null:"custom"===this.selectedPeriod?{start:null==(t=this.customPeriod)?void 0:t.end,end:null==(i=this.customPeriod)?void 0:i.end,step:86400}:this.periods[this.selectedPeriod];return"custom"===this.selectedPeriod?this.customPeriodData[this.selectedEntity]||"unloaded"!==this.loadingCustom[this.selectedEntity]||this.loadCustomRangeData(this.selectedEntity):this.timedData[this.selectedEntity]||"unloaded"!==this.loadingTimed[this.selectedEntity]||this.loadTimedData(this.selectedEntity),m("div",{className:"StatisticsWidget-table"},m("div",{className:"StatisticsWidget-entities"},m("div",{className:"StatisticsWidget-labels"},m("div",{className:"StatisticsWidget-label"},e().translator.trans("flarum-statistics.admin.statistics.total_label")),m("div",{className:"StatisticsWidget-label"},n?m(d(),{size:"small",display:"inline"}):m(w(),{disabled:n,buttonClassName:"Button Button--text",caretIcon:"fas fa-caret-down"},Object.keys(this.periods).map((t=>m(M(),{key:t,active:t===this.selectedPeriod,onclick:this.changePeriod.bind(this,t),icon:t!==this.selectedPeriod||"fas fa-check"},e().translator.trans("flarum-statistics.admin.statistics.".concat(t,"_label"))))).concat([m(M(),{key:"custom",active:"custom"===this.selectedPeriod,onclick:()=>{const t={onModalSubmit:t=>{JSON.stringify(t)!==JSON.stringify(this.customPeriod)&&(this.customPeriodData={},Object.keys(this.loadingCustom).forEach((t=>this.loadingCustom[t]="unloaded")),this.customPeriod=t,this.changePeriod("custom"))}};this.customPeriod&&(t.value=this.customPeriod),e().modal.show(R,t)},icon:"custom"!==this.selectedPeriod||"fas fa-check"},"custom"===this.selectedPeriod?S()(e().translator.trans("flarum-statistics.admin.statistics.custom_label_specified",{fromDate:F().utc(1e3*this.customPeriod.start).format("ll"),toDate:F().utc(1e3*this.customPeriod.end).format("ll")})):e().translator.trans("flarum-statistics.admin.statistics.custom_label"))])))),this.entities.map((t=>{const i=this.loadingLifetime?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getTotalCount(t),a=n?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getPeriodCount(t,s),r="custom"===this.selectedPeriod?null:n?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getPeriodCount(t,this.getLastPeriod(s)),o=n||0===r||null===r?0:(a-r)/r*100;return m("button",{className:N()("Button--ua-reset StatisticsWidget-entity",{active:this.selectedEntity===t}),onclick:this.changeEntity.bind(this,t)},m("h3",{className:"StatisticsWidget-heading"},e().translator.trans("flarum-statistics.admin.statistics."+t+"_heading")),m("div",{className:"StatisticsWidget-total",title:i},this.loadingLifetime?m(d(),{display:"inline"}):g()(i)),m("div",{className:"StatisticsWidget-period",title:a},n?m(d(),{display:"inline"}):g()(a),0!==o&&m("[",null," ",m("span",{className:"StatisticsWidget-change StatisticsWidget-change--"+(o>0?"up":"down")},m(L(),{name:"fas fa-arrow-"+(o>0?"up":"down")}),Math.abs(o).toFixed(1),"%"))))}))),m("[",null,n?m("div",{key:"loading",className:"StatisticsWidget-chart","data-loading":"true"},m(d(),{size:"large"})):m("div",{key:"loaded",className:"StatisticsWidget-chart","data-loading":"false",oncreate:this.drawChart.bind(this),onupdate:this.drawChart.bind(this)})),this.noData&&m(T(),{text:e().translator.trans("flarum-statistics.admin.statistics.no_data")}),!this.noData&&!!this.chart&&m(M(),{className:"StatisticsWidget-chartExport Button",icon:"fas fa-file-export",onclick:()=>{this.chart.export()}},e().translator.trans("flarum-statistics.admin.statistics.export_chart_button")))}drawChart(t){var i,n;if(this.chart&&this.chartEntity===this.selectedEntity&&this.chartPeriod===this.selectedPeriod)return;const s="custom"===this.selectedPeriod?{start:null==(i=this.customPeriod)?void 0:i.start,end:null==(n=this.customPeriod)?void 0:n.end,step:86400}:this.periods[this.selectedPeriod],a=s.end-s.start,r=[],o=[],l=[];for(let t=s.start;t86400&&(e+=" - "+F().unix(t+s.step-1).utc().format("D MMM"))),r.push(e),o.push(this.getPeriodCount(this.selectedEntity,{start:t,end:t+s.step})),l.push(this.getPeriodCount(this.selectedEntity,{start:t-a,end:t-a}))}if(0===o.length)return this.noData=!0,void m.redraw();this.noData=!1,m.redraw();const u={labels:r,datasets:[{name:S()(e().translator.trans("flarum-statistics.admin.statistics.current_period")),values:o},{name:S()(e().translator.trans("flarum-statistics.admin.statistics.previous_period")),values:l}]};this.chart&&16&document.compareDocumentPosition(this.chart.parent)?this.chart.update(u):this.chart=new B.Chart(t.dom,{data:u,type:"line",height:280,axisOptions:{xAxisMode:"tick",yAxisMode:"span",xIsSeries:!0},lineOptions:{hideDots:1,regionFill:1},colors:[e().forum.attribute("themePrimaryColor"),"black"]}),this.chartEntity=this.selectedEntity,this.chartPeriod=this.selectedPeriod}changeEntity(t){this.selectedEntity=t}changePeriod(t){this.selectedPeriod=t}getTotalCount(t){return this.lifetimeData[t]}getPeriodCount(t,e){const i=("custom"===this.selectedPeriod?this.customPeriodData:this.timedData)[t];let n=0;for(const t in i){const s=parseInt(t);s>=e.start&&s{(0,s.extend)(r().prototype,"availableWidgets",(function(t){t.add("statistics",m(y,null),20)})),e().extensionData.for("flarum-statistics").registerPage(q)}))})(),module.exports=n})(); +(()=>{var t={860:function(t){t.exports=function(){"use strict";var t=6e4,e=36e5,i="millisecond",n="second",s="minute",a="hour",r="day",o="week",l="month",u="quarter",c="year",h="date",d="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,p=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],i=t%100;return"["+t+(e[(i-20)%10]||e[i]||e[0])+"]"}},v=function(t,e,i){var n=String(t);return!n||n.length>=e?t:""+Array(e+1-n.length).join(i)+t},g={s:v,z:function(t){var e=-t.utcOffset(),i=Math.abs(e),n=Math.floor(i/60),s=i%60;return(e<=0?"+":"-")+v(n,2,"0")+":"+v(s,2,"0")},m:function t(e,i){if(e.date()1)return t(r[0])}else{var o=e.name;b[o]=e,s=o}return!n&&s&&(y=s),s||!n&&y},w=function(t,e){if(x(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new M(i)},D=g;D.l=k,D.i=x,D.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var M=function(){function m(t){this.$L=k(t.locale,null,!0),this.parse(t)}var v=m.prototype;return v.parse=function(t){this.$d=function(t){var e=t.date,i=t.utc;if(null===e)return new Date(NaN);if(D.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var n=e.match(f);if(n){var s=n[2]-1||0,a=(n[7]||"0").substring(0,3);return i?new Date(Date.UTC(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)):new Date(n[1],s,n[3]||1,n[4]||0,n[5]||0,n[6]||0,a)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},v.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},v.$utils=function(){return D},v.isValid=function(){return!(this.$d.toString()===d)},v.isSame=function(t,e){var i=w(t);return this.startOf(e)<=i&&i<=this.endOf(e)},v.isAfter=function(t,e){return w(t)=0&&e.left>=0&&e.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&e.right<=(window.innerWidth||document.documentElement.clientWidth)}function s(t){return t.titleHeight+t.margins.top+t.paddings.top}function a(t){return t.margins.left+t.paddings.left}function r(t){return t.margins.top+t.margins.bottom+t.paddings.top+t.paddings.bottom+t.titleHeight+t.legendHeight}function o(t){return t.margins.left+t.margins.right+t.paddings.left+t.paddings.right}function l(t){return parseFloat(t.toFixed(2))}function u(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];i||(i=n?t[0]:t[t.length-1]);var s=new Array(Math.abs(e)).fill(i);return n?s.concat(t):t.concat(s)}function c(t,e){return(t+"").length*e}function h(t,e){return{x:Math.sin(t*wt)*e,y:Math.cos(t*wt)*e}}function d(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!(Number.isNaN(t)||void 0===t||!Number.isFinite(t)||e&&t<0)}function f(t){var e=void 0,i=void 0,n=void 0;if(t instanceof Date)return new Date(t.getTime());if("object"!==(void 0===t?"undefined":lt(t))||null===t)return t;for(n in e=Array.isArray(t)?[]:{},t)i=t[n],e[n]=f(i);return e}function p(t,e){var i=void 0,n=void 0;return t<=e?(i=e-t,n=t):(i=t-e,n=e),[i,n]}function m(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t.length;return i>0?t=u(t,i):e=u(e,i),[t,e]}function v(t,e){if(t)return t.length>e?t.slice(0,e-3)+"...":t}function g(t){var e=void 0;if("number"==typeof t)e=t;else if("string"==typeof t&&(e=Number(t),Number.isNaN(e)))return t;var i=Math.floor(Math.log10(Math.abs(e)));if(i<=2)return e;var n=Math.floor(i/3),s=Math.pow(10,i-3*n)*+(e/Math.pow(10,i)).toFixed(1);return Math.round(100*s)/100+" "+["","K","M","B","T"][n]}function y(t,e){for(var i=[],n=0;n255?255:t<0?0:t}function x(t,e){var i=Pt(t),n=!1;"#"==i[0]&&(i=i.slice(1),n=!0);var s=parseInt(i,16),a=b((s>>16)+e),r=b((s>>8&255)+e);return(n?"#":"")+(b((255&s)+e)|r<<8|a<<16).toString(16)}function k(t,e){return"string"==typeof t?(e||document).querySelector(t):t||null}function w(t,e){var i=document.createElementNS("http://www.w3.org/2000/svg",t);for(var n in e){var s=e[n];if("inside"===n)k(s).appendChild(i);else if("around"===n){var a=k(s);a.parentNode.insertBefore(i,a),i.appendChild(a)}else"styles"===n?"object"===(void 0===s?"undefined":lt(s))&&Object.keys(s).map((function(t){i.style[t]=s[t]})):("className"===n&&(n="class"),"innerHTML"===n?i.textContent=s:i.setAttribute(n,s))}return i}function D(t,e){return w("linearGradient",{inside:t,id:e,x1:0,x2:0,y1:0,y2:1})}function M(t,e,i,n){return w("stop",{inside:t,style:"stop-color: "+i,offset:e,"stop-opacity":n})}function P(t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,i={className:t,transform:arguments.length>1&&void 0!==arguments[1]?arguments[1]:""};return e&&(i.inside=e),w("g",i)}function S(t){return w("path",{className:arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",d:t,styles:{stroke:arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",fill:arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none","stroke-width":arguments.length>4&&void 0!==arguments[4]?arguments[4]:2}})}function A(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n="path-fill-gradient-"+e+"-"+(i?"lighter":"default"),s=D(t,n),a=[1,.6,.2];return i&&(a=[.4,.2,0]),M(s,"0%",e,a[0]),M(s,"50%",e,a[1]),M(s,"100%",e,a[2]),n}function T(t,e,i,n,s){var a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},r={className:t,x:e,y:i,width:n,height:n,rx:s,fill:arguments.length>5&&void 0!==arguments[5]?arguments[5]:"none"};return Object.keys(a).map((function(t){r[t]=a[t]})),w("rect",r)}function O(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=s.fontSize||Ot;return w("text",{className:t,x:e,y:i,dy:(void 0!==s.dy?s.dy:a/2)+"px","font-size":a+"px",fill:s.fill||Ct,"text-anchor":s.textAnchor||"start",innerHTML:n})}function L(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};s.stroke||(s.stroke=Lt);var a=w("line",{className:"line-vertical "+s.className,x1:0,x2:0,y1:i,y2:n,styles:{stroke:s.stroke}}),r=w("text",{x:0,y:i>n?i+At:i-At-Ot,dy:Ot+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:e+""}),o=w("g",{transform:"translate("+t+", 0)"});return o.appendChild(a),o.appendChild(r),o}function C(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};s.stroke||(s.stroke=Lt),s.lineType||(s.lineType=""),s.shortenNumbers&&(e=g(e));var a=w("line",{className:"line-horizontal "+s.className+("dashed"===s.lineType?"dashed":""),x1:i,x2:n,y1:0,y2:0,styles:{stroke:s.stroke}}),r=w("text",{x:i4&&void 0!==arguments[4]?arguments[4]:0,a=p(i,(arguments.length>5&&void 0!==arguments[5]?arguments[5]:{}).zeroLine),r=pt(a,2),o=r[0],l=r[1];return l-=s,"rect"!==t.nodeName?[[t.childNodes[0],{width:n,height:o},$t,zt],N(t,t.getAttribute("transform").split("(")[1].slice(0,-1),[e,l],Yt)]:[[t,{width:n,height:o,x:e,y:l},$t,zt]]}function E(t,e){return[t,{d:e},$t,zt]}function Y(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"linear",s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=t.cloneNode(!0),o=t.cloneNode(!0);for(var l in e){var u=void 0;u="transform"===l?document.createElementNS("http://www.w3.org/2000/svg","animateTransform"):document.createElementNS("http://www.w3.org/2000/svg","animate");var c=a[l]||t.getAttribute(l),h=e[l],d={attributeName:l,from:c,to:h,begin:"0s",dur:i/1e3+"s",values:c+";"+h,keySplines:Ht[n],keyTimes:"0;1",calcMode:"spline",fill:"freeze"};for(var f in s&&(d.type=s),d)u.setAttribute(f,d[f]);r.appendChild(u),s?o.setAttribute(l,"translate("+h+")"):o.setAttribute(l,h)}return[r,o]}function W(t,e){t.style.transform=e,t.style.webkitTransform=e,t.style.msTransform=e,t.style.mozTransform=e,t.style.oTransform=e}function z(t,e){var i=[],n=[];e.map((function(t){var e,s,a=t[0],r=a.parentNode;t[0]=a;var o=Y.apply(void 0,mt(t)),l=pt(o,2);e=l[0],s=l[1],i.push(s),n.push([e,r]),r&&r.replaceChild(e,a)}));var s=t.cloneNode(!0);return n.map((function(t,n){t[1]&&(t[1].replaceChild(i[n],t[0]),e[n][0]=i[n])})),s}function H(t,e,i){if(0!==i.length){var n=z(e,i);e.parentNode==t&&(t.removeChild(e),t.appendChild(n)),setTimeout((function(){n.parentNode==t&&(t.removeChild(n),t.appendChild(e))}),Wt)}}function F(e){var i=e.cloneNode(!0);i.classList.add("chart-container"),i.setAttribute("xmlns","http://www.w3.org/2000/svg"),i.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink");var n=t.create("style",{innerHTML:Ft});i.insertBefore(n,i.firstChild);var s=t.create("div");return s.appendChild(i),s.innerHTML}function j(t){var e=new Date(t);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e}function I(t){var e=t.getDate(),i=t.getMonth()+1;return[t.getFullYear(),(i>9?"":"0")+i,(e>9?"":"0")+e].join("-")}function R(t){return new Date(t.getTime())}function U(t,e){var i=q(t);return Math.ceil(function(t,e){var i=Vt*Ut;return(j(e)-j(t))/i}(i,e)/Rt)}function V(t,e){return t.getMonth()===e.getMonth()&&t.getFullYear()===e.getFullYear()}function B(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=Bt[t];return e?i.slice(0,3):i}function G(t,e){return new Date(e,t+1,0)}function q(t){var e=R(t),i=e.getDay();return 0!==i&&J(e,-1*i),e}function J(t,e){t.setDate(t.getDate()+e)}function X(t,e,i){var n=Object.keys(Jt).filter((function(e){return t.includes(e)})),s=Jt[n[0]];return Object.assign(s,{constants:e,getData:i}),new qt(s)}function Z(t){if(0===t)return[0,0];if(isNaN(t))return{mantissa:-6755399441055744,exponent:972};var e=t>0?1:-1;if(!isFinite(t))return{mantissa:4503599627370496*e,exponent:972};t=Math.abs(t);var i=Math.floor(Math.log10(t));return[e*(t/Math.pow(10,i)),i]}function K(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Math.ceil(t),n=Math.floor(e),s=i-n,a=s,r=1;s>5&&(s%2!=0&&(s=++i-n),a=s/2,r=2),s<=2&&(r=s/(a=4)),0===s&&(a=5,r=1);for(var o=[],l=0;l<=a;l++)o.push(n+r*l);return o}function Q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=Z(t),n=pt(i,2),s=n[0],a=n[1],r=e?e/Math.pow(10,a):0,o=K(s=s.toFixed(6),r);return o.map((function(t){return t*Math.pow(10,a)}))}function tt(t){function e(t,e){for(var i=Q(t),n=i[1]-i[0],s=0,a=1;s1&&void 0!==arguments[1]&&arguments[1],n=Math.max.apply(Math,mt(t)),s=Math.min.apply(Math,mt(t)),a=[];if(n>=0&&s>=0)Z(n)[1],a=i?Q(n,s):Q(n);else if(n>0&&s<0){var r=Math.abs(s);n>=r?(Z(n)[1],a=e(n,r)):(Z(r)[1],a=e(r,n).reverse().map((function(t){return-1*t})))}else if(n<=0&&s<=0){var o=Math.abs(s),l=Math.abs(n);Z(o)[1],a=(a=i?Q(o,l):Q(o)).reverse().map((function(t){return-1*t}))}return a}function et(t){var e=it(t);return t.indexOf(0)>=0?t.indexOf(0):t[0]>0?-1*t[0]/e:-1*t[t.length-1]/e+(t.length-1)}function it(t){return t[1]-t[0]}function nt(t){return t[t.length-1]-t[0]}function st(t,e){return l(e.zeroLine-t*e.scaleMultiplier)}function at(t,e){return e.filter((function(e){return ei?n.slice(0,i):u(n,i-n.length,0),t.values=n}else t.values=s;t.chartType||(gt.includes(e),t.chartType=e)})),t.yRegions&&t.yRegions.map((function(t){if(t.end\n\t\t\t\t
      \n\t\t\t\t
      '}),this.hideTip(),this.title=this.container.querySelector(".title"),this.dataPointList=this.container.querySelector(".data-point-list"),this.parent.addEventListener("mouseleave",(function(){e.hideTip()}))}},{key:"fill",value:function(){var e,i=this;this.index&&this.container.setAttribute("data-point-index",this.index),e=this.titleValueFirst?""+this.titleValue+""+this.titleName:this.titleName+""+this.titleValue+"",this.title.innerHTML=e,this.dataPointList.innerHTML="",this.listValues.map((function(e,n){var s=i.colors[n]||"black",a=0===e.formatted||e.formatted?e.formatted:e.value,r=t.create("li",{styles:{"border-top":"3px solid "+s},innerHTML:''+(0===a||a?a:"")+"\n\t\t\t\t\t"+(e.title?e.title:"")});i.dataPointList.appendChild(r)}))}},{key:"calcPosition",value:function(){var t=this.container.offsetWidth;this.top=this.y-this.container.offsetHeight-5,this.left=this.x-t/2;var e=this.parent.offsetWidth-t,i=this.container.querySelector(".svg-pointer");if(this.left<0)i.style.left="calc(50% - "+-1*this.left+"px)",this.left=0;else if(this.left>e){var n="calc(50% + "+(this.left-e)+"px)";i.style.left=n,this.left=e}else i.style.left="50%"}},{key:"setValues",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:-1;this.titleName=i.name,this.titleValue=i.value,this.listValues=n,this.x=t,this.y=e,this.titleValueFirst=i.valueFirst||0,this.index=s,this.refresh()}},{key:"hideTip",value:function(){this.container.style.top="0px",this.container.style.left="0px",this.container.style.opacity="0"}},{key:"showTip",value:function(){this.container.style.top=this.top+"px",this.container.style.left=this.left+"px",this.container.style.opacity="1"}}]),e}(),Mt={"light-blue":"#7cd6fd",blue:"#5e64ff",violet:"#743ee2",red:"#ff5858",orange:"#ffa00a",yellow:"#feef72",green:"#28a745","light-green":"#98d85b",purple:"#b554ff",magenta:"#ffa3ef",black:"#36114C",grey:"#bdd3e6","light-grey":"#f0f4f7","dark-grey":"#b8c2cc"},Pt=function(t){return/rgb[a]{0,1}\([\d, ]+\)/gim.test(t)?/\D+(\d*)\D+(\d*)\D+(\d*)/gim.exec(t).map((function(t,e){return 0!==e?Number(t).toString(16):"#"})).reduce((function(t,e){return""+t+e})):Mt[t]||t},St=6,At=4,Tt=15,Ot=10,Lt="#dadada",Ct="#555b51",Nt={bar:function(t){var e=void 0;"rect"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode();return i.style.fill="#000000",i.style.opacity="0.4",e&&i.setAttribute("transform",e),i},dot:function(t){var e=void 0;"circle"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode(),n=t.getAttribute("r"),s=t.getAttribute("fill");return i.setAttribute("r",parseInt(n)+4),i.setAttribute("fill",s),i.style.opacity="0.6",e&&i.setAttribute("transform",e),i},heat_square:function(t){var e=void 0;"circle"!==t.nodeName&&(e=t.getAttribute("transform"),t=t.childNodes[0]);var i=t.cloneNode(),n=t.getAttribute("r"),s=t.getAttribute("fill");return i.setAttribute("r",parseInt(n)+4),i.setAttribute("fill",s),i.style.opacity="0.6",e&&i.setAttribute("transform",e),i}},_t={bar:function(t,e){var i=void 0;"rect"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["x","y","width","height"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)},dot:function(t,e){var i=void 0;"circle"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["cx","cy"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)},heat_square:function(t,e){var i=void 0;"circle"!==t.nodeName&&(i=t.getAttribute("transform"),t=t.childNodes[0]);var n=["cx","cy"];Object.values(t.attributes).filter((function(t){return n.includes(t.name)&&t.specified})).map((function(t){e.setAttribute(t.name,t.nodeValue)})),i&&e.setAttribute("transform",i)}},$t=350,Et=350,Yt=$t,Wt=250,zt="easein",Ht={ease:"0.25 0.1 0.25 1",linear:"0 0 1 1",easein:"0.1 0.8 0.2 1",easeout:"0 0 0.58 1",easeinout:"0.42 0 0.58 1"},Ft=".chart-container{position:relative;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Roboto','Oxygen','Ubuntu','Cantarell','Fira Sans','Droid Sans','Helvetica Neue',sans-serif}.chart-container .axis,.chart-container .chart-label{fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .dataset-units circle{stroke:#fff;stroke-width:2}.chart-container .dataset-units path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container .dataset-path{stroke-width:2px}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .axis-line .specific-value{text-anchor:start}.chart-container .axis-line .y-line{text-anchor:end}.chart-container .axis-line .x-line{text-anchor:middle}.chart-container .legend-dataset-text{fill:#6c7680;font-weight:600}.graph-svg-tip{position:absolute;z-index:99999;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.graph-svg-tip ul{padding-left:0;display:flex}.graph-svg-tip ol{padding-left:0;display:flex}.graph-svg-tip ul.data-point-list li{min-width:90px;flex:1;font-weight:600}.graph-svg-tip strong{color:#dfe2e5;font-weight:600}.graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:' ';border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}",jt=function(){function e(t,i){if(ut(this,e),i=f(i),this.parent="string"==typeof t?document.querySelector(t):t,!(this.parent instanceof HTMLElement))throw new Error("No `parent` element to render on was provided.");this.rawChartArgs=i,this.title=i.title||"",this.type=i.type||"",this.realData=this.prepareData(i.data),this.data=this.prepareFirstData(this.realData),this.colors=this.validateColors(i.colors,this.type),this.config={showTooltip:1,showLegend:1,isNavigable:i.isNavigable||0,animate:void 0!==i.animate?i.animate:1,truncateLegends:i.truncateLegends||1},this.measures=JSON.parse(JSON.stringify(vt));var n=this.measures;this.setMeasures(i),this.title.length||(n.titleHeight=0),this.config.showLegend||(n.legendHeight=0),this.argHeight=i.height||n.baseHeight,this.state={},this.options={},this.initTimeout=700,this.config.isNavigable&&(this.overlays=[]),this.configure(i)}return ct(e,[{key:"prepareData",value:function(t){return t}},{key:"prepareFirstData",value:function(t){return t}},{key:"validateColors",value:function(t,e){var i=[];return(t=(t||[]).concat(kt[e])).forEach((function(t){var e=Pt(t);!function(t){return/(^\s*)(#)((?:[A-Fa-f0-9]{3}){1,2})$/i.test(t)||/(^\s*)(rgb|hsl)(a?)[(]\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*,\s*([\d.]+\s*%?)\s*(?:,\s*([\d.]+)\s*)?[)]$/i.test(t)}(e)?console.warn('"'+t+'" is not a valid color.'):i.push(e)})),i}},{key:"setMeasures",value:function(){}},{key:"configure",value:function(){var t=this,e=this.argHeight;this.baseHeight=e,this.height=e-r(this.measures),this.boundDrawFn=function(){return t.draw(!0)},ResizeObserver&&(this.resizeObserver=new ResizeObserver(this.boundDrawFn),this.resizeObserver.observe(this.parent)),window.addEventListener("resize",this.boundDrawFn),window.addEventListener("orientationchange",this.boundDrawFn)}},{key:"destroy",value:function(){this.resizeObserver&&this.resizeObserver.disconnect(),window.removeEventListener("resize",this.boundDrawFn),window.removeEventListener("orientationchange",this.boundDrawFn)}},{key:"setup",value:function(){this.makeContainer(),this.updateWidth(),this.makeTooltip(),this.draw(!1,!0)}},{key:"makeContainer",value:function(){this.parent.innerHTML="";var e={inside:this.parent,className:"chart-container"};this.independentWidth&&(e.styles={width:this.independentWidth+"px"}),this.container=t.create("div",e)}},{key:"makeTooltip",value:function(){this.tip=new Dt({parent:this.container,colors:this.colors}),this.bindTooltip()}},{key:"bindTooltip",value:function(){}},{key:"draw",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];e&&i(this.parent)||(this.updateWidth(),this.calc(e),this.makeChartArea(),this.setupComponents(),this.components.forEach((function(e){return e.setup(t.drawArea)})),this.render(this.components,!1),n&&(this.data=this.realData,setTimeout((function(){t.update(t.data)}),this.initTimeout)),this.renderLegend(),this.setupNavigation(n))}},{key:"calc",value:function(){}},{key:"updateWidth",value:function(){this.baseWidth=function(t){var e=window.getComputedStyle(t),i=parseFloat(e.paddingLeft)+parseFloat(e.paddingRight);return t.clientWidth-i}(this.parent),this.width=this.baseWidth-o(this.measures)}},{key:"makeChartArea",value:function(){this.svg&&this.container.removeChild(this.svg);var t=this.measures;this.svg=function(t,e,i,n){return w("svg",{className:e,inside:t,width:i,height:n})}(this.container,"frappe-chart chart",this.baseWidth,this.baseHeight),this.svgDefs=function(t){return w("defs",{inside:t})}(this.svg),this.title.length&&(this.titleEL=O("title",t.margins.left,t.margins.top,this.title,{fontSize:t.titleFontSize,fill:"#666666",dy:t.titleFontSize}));var e=s(t);this.drawArea=P(this.type+"-chart chart-draw-area","translate("+a(t)+", "+e+")"),this.config.showLegend&&(e+=this.height+t.paddings.bottom,this.legendArea=P("chart-legend","translate("+a(t)+", "+e+")")),this.title.length&&this.svg.appendChild(this.titleEL),this.svg.appendChild(this.drawArea),this.config.showLegend&&this.svg.appendChild(this.legendArea),this.updateTipOffset(a(t),s(t))}},{key:"updateTipOffset",value:function(t,e){this.tip.offset={x:t,y:e}}},{key:"setupComponents",value:function(){this.components=new Map}},{key:"update",value:function(t){t||console.error("No data to update."),this.data=this.prepareData(t),this.calc(),this.render(this.components,this.config.animate),this.renderLegend()}},{key:"render",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.components,i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.config.isNavigable&&this.overlays.map((function(t){return t.parentNode.removeChild(t)}));var n=[];e.forEach((function(t){n=n.concat(t.update(i))})),n.length>0?(H(this.container,this.svg,n),setTimeout((function(){e.forEach((function(t){return t.make()})),t.updateNav()}),400)):(e.forEach((function(t){return t.make()})),this.updateNav())}},{key:"updateNav",value:function(){this.config.isNavigable&&(this.makeOverlay(),this.bindUnits())}},{key:"renderLegend",value:function(){}},{key:"setupNavigation",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.config.isNavigable&&e&&(this.bindOverlay(),this.keyActions={13:this.onEnterKey.bind(this),37:this.onLeftArrow.bind(this),38:this.onUpArrow.bind(this),39:this.onRightArrow.bind(this),40:this.onDownArrow.bind(this)},document.addEventListener("keydown",(function(e){n(t.container)&&(e=e||window.event,t.keyActions[e.keyCode]&&t.keyActions[e.keyCode]())})))}},{key:"makeOverlay",value:function(){}},{key:"updateOverlay",value:function(){}},{key:"bindOverlay",value:function(){}},{key:"bindUnits",value:function(){}},{key:"onLeftArrow",value:function(){}},{key:"onRightArrow",value:function(){}},{key:"onUpArrow",value:function(){}},{key:"onDownArrow",value:function(){}},{key:"onEnterKey",value:function(){}},{key:"addDataPoint",value:function(){}},{key:"removeDataPoint",value:function(){}},{key:"getDataPoint",value:function(){}},{key:"setCurrentDataPoint",value:function(){}},{key:"updateDataset",value:function(){}},{key:"export",value:function(){var t=F(this.svg);!function(t,e){var i=document.createElement("a");i.style="display: none";var n=new Blob(e,{type:"image/svg+xml; charset=utf-8"}),s=window.URL.createObjectURL(n);i.href=s,i.download=t,document.body.appendChild(i),i.click(),setTimeout((function(){document.body.removeChild(i),window.URL.revokeObjectURL(s)}),300)}(this.title||"Chart",[t])}}]),e}(),It=function(t){function e(t,i){return ut(this,e),ft(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i))}return dt(e,t),ct(e,[{key:"configure",value:function(t){ht(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"configure",this).call(this,t),this.config.formatTooltipY=(t.tooltipOptions||{}).formatTooltipY,this.config.maxSlices=t.maxSlices||20,this.config.maxLegendPoints=t.maxLegendPoints||20}},{key:"calc",value:function(){var t=this,e=this.state,i=this.config.maxSlices;e.sliceTotals=[];var n=this.data.labels.map((function(e,i){var n=0;return t.data.datasets.map((function(t){n+=t.values[i]})),[n,e]})).filter((function(t){return t[0]>=0})),s=n;if(n.length>i){n.sort((function(t,e){return e[0]-t[0]})),s=n.slice(0,i-1);var a=0;n.slice(i-1).map((function(t){a+=t[0]})),s.push([a,"Rest"]),this.colors[i-1]="grey"}e.labels=[],s.map((function(t){e.sliceTotals.push(function(t){return Number(Math.round(t+"e4")+"e-4")}(t[0])),e.labels.push(t[1])})),e.grandTotal=e.sliceTotals.reduce((function(t,e){return t+e}),0),this.center={x:this.width/2,y:this.height/2}}},{key:"renderLegend",value:function(){var t=this,e=this.state;this.legendArea.textContent="",this.legendTotals=e.sliceTotals.slice(0,this.config.maxLegendPoints);var i=0,n=0;this.legendTotals.map((function(s,a){var r=150,l=Math.floor((t.width-o(t.measures))/r);t.legendTotals.lengthl&&(i=0,n+=20);var u=r*i+5,c=t.config.truncateLegends?v(e.labels[a],r/10):e.labels[a],h=t.config.formatTooltipY?t.config.formatTooltipY(s):s,d=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",s=arguments[4];s=arguments.length>5&&void 0!==arguments[5]&&arguments[5]?v(s,Tt):s;var a={className:"legend-dot",cx:0,cy:0,r:i,fill:n},r=w("text",{className:"legend-dataset-text",x:0,y:0,dx:Ot+"px",dy:Ot/3+"px","font-size":1.2*Ot+"px","text-anchor":"start",fill:Ct,innerHTML:s}),o=w("g",{transform:"translate("+t+", "+e+")"});return o.appendChild(w("circle",a)),o.appendChild(r),o}(u,n,5,t.colors[a],c+": "+h,!1);t.legendArea.appendChild(d),i++}))}}]),e}(jt),Rt=7,Ut=1e3,Vt=86400,Bt=["January","February","March","April","May","June","July","August","September","October","November","December"],Gt=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],qt=function(){function t(e){var i=e.layerClass,n=void 0===i?"":i,s=e.layerTransform,a=void 0===s?"":s,r=e.constants,o=e.getData,l=e.makeElements,u=e.animateElements;ut(this,t),this.layerTransform=a,this.constants=r,this.makeElements=l,this.getData=o,this.animateElements=u,this.store=[],this.labels=[],this.layerClass=n,this.layerClass="function"==typeof this.layerClass?this.layerClass():this.layerClass,this.refresh()}return ct(t,[{key:"refresh",value:function(t){this.data=t||this.getData()}},{key:"setup",value:function(t){this.layer=P(this.layerClass,this.layerTransform,t)}},{key:"make",value:function(){this.render(this.data),this.oldData=this.data}},{key:"render",value:function(t){var e=this;this.store=this.makeElements(t),this.layer.textContent="",this.store.forEach((function(t){e.layer.appendChild(t)})),this.labels.forEach((function(t){e.layer.appendChild(t)}))}},{key:"update",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.refresh();var e=[];return t&&(e=this.animateElements(this.data)||[]),e}}]),t}(),Jt={donutSlices:{layerClass:"donut-slices",makeElements:function(t){return t.sliceStrings.map((function(e,i){var n=S(e,"donut-path",t.colors[i],"none",t.strokeWidth);return n.style.transition="transform .3s;",n}))},animateElements:function(t){return this.store.map((function(e,i){return E(e,t.sliceStrings[i])}))}},pieSlices:{layerClass:"pie-slices",makeElements:function(t){return t.sliceStrings.map((function(e,i){var n=S(e,"pie-path","none",t.colors[i]);return n.style.transition="transform .3s;",n}))},animateElements:function(t){return this.store.map((function(e,i){return E(e,t.sliceStrings[i])}))}},percentageBars:{layerClass:"percentage-bars",makeElements:function(t){var e=this;return t.xPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:yt,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"none";return w("rect",{className:"percentage-bar",x:t,y:e,width:i,height:n,fill:a,styles:{stroke:x(a,-25),"stroke-dasharray":"0, "+(n+i)+", "+i+", "+n,"stroke-width":s}})}(i,0,t.widths[n],e.constants.barHeight,e.constants.barDepth,t.colors[n])}))},animateElements:function(t){if(t)return[]}},yAxis:{layerClass:"y axis",makeElements:function(t){var e=this;return t.positions.map((function(i,n){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};d(t)||(t=0),n.pos||(n.pos="left"),n.offset||(n.offset=0),n.mode||(n.mode="span"),n.stroke||(n.stroke=Lt),n.className||(n.className="");var s=-1*St,a="span"===n.mode?i+St:0;return"tick"===n.mode&&"right"===n.pos&&(s=i+St,a=i),C(t,e,s+=n.offset,a+=n.offset,{stroke:n.stroke,className:n.className,lineType:n.lineType,shortenNumbers:n.shortenNumbers})}(i,t.labels[n],e.constants.width,{mode:e.constants.mode,pos:e.constants.pos,shortenNumbers:e.constants.shortenNumbers})}))},animateElements:function(t){var e=t.positions,i=t.labels,n=this.oldData.positions,s=this.oldData.labels,a=m(n,e),r=pt(a,2);n=r[0],e=r[1];var o=m(s,i),l=pt(o,2);return s=l[0],i=l[1],this.render({positions:n,labels:i}),this.store.map((function(t,i){return _(t,e[i],n[i])}))}},xAxis:{layerClass:"x axis",makeElements:function(t){var e=this;return t.positions.map((function(i,n){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};d(t)||(t=0),n.pos||(n.pos="bottom"),n.offset||(n.offset=0),n.mode||(n.mode="span"),n.stroke||(n.stroke=Lt),n.className||(n.className="");var s=i+St,a="span"===n.mode?-1*St:i;return"tick"===n.mode&&"top"===n.pos&&(s=-1*St,a=0),L(t,e,s,a,{stroke:n.stroke,className:n.className,lineType:n.lineType})}(i,t.calcLabels[n],e.constants.height,{mode:e.constants.mode,pos:e.constants.pos})}))},animateElements:function(t){var e=t.positions,i=t.calcLabels,n=this.oldData.positions,s=this.oldData.calcLabels,a=m(n,e),r=pt(a,2);n=r[0],e=r[1];var o=m(s,i),l=pt(o,2);return s=l[0],i=l[1],this.render({positions:n,calcLabels:i}),this.store.map((function(t,i){return function(t,e,i){return N(t,[i,0],[e,0],Yt)}(t,e[i],n[i])}))}},yMarkers:{layerClass:"y-markers",makeElements:function(t){var e=this;return t.map((function(t){return function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};n.labelPos||(n.labelPos="right");var s=w("text",{className:"chart-label",x:"left"===n.labelPos?At:i-c(e,5)-At,y:0,dy:Ot/-2+"px","font-size":Ot+"px","text-anchor":"start",innerHTML:e+""}),a=C(t,"",0,i,{stroke:n.stroke||Lt,className:n.className||"",lineType:n.lineType});return a.appendChild(s),a}(t.position,t.label,e.constants.width,{labelPos:t.options.labelPos,mode:"span",lineType:"dashed"})}))},animateElements:function(t){var e=m(this.oldData,t),i=pt(e,2);this.oldData=i[0];var n=(t=i[1]).map((function(t){return t.position})),s=t.map((function(t){return t.label})),a=t.map((function(t){return t.options})),r=this.oldData.map((function(t){return t.position}));return this.render(r.map((function(t,e){return{position:r[e],label:s[e],options:a[e]}}))),this.store.map((function(t,e){return _(t,n[e],r[e])}))}},yRegions:{layerClass:"y-regions",makeElements:function(t){var e=this;return t.map((function(t){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=t-e,r=w("rect",{className:"bar mini",styles:{fill:"rgba(228, 234, 239, 0.49)",stroke:Lt,"stroke-dasharray":i+", "+a},x:0,y:0,width:i,height:a});s.labelPos||(s.labelPos="right");var o=w("text",{className:"chart-label",x:"left"===s.labelPos?At:i-c(n+"",4.5)-At,y:0,dy:Ot/-2+"px","font-size":Ot+"px","text-anchor":"start",innerHTML:n+""}),l=w("g",{transform:"translate(0, "+e+")"});return l.appendChild(r),l.appendChild(o),l}(t.startPos,t.endPos,e.constants.width,t.label,{labelPos:t.options.labelPos})}))},animateElements:function(t){var e=m(this.oldData,t),i=pt(e,2);this.oldData=i[0];var n=(t=i[1]).map((function(t){return t.endPos})),s=t.map((function(t){return t.label})),a=t.map((function(t){return t.startPos})),r=t.map((function(t){return t.options})),o=this.oldData.map((function(t){return t.endPos})),l=this.oldData.map((function(t){return t.startPos}));this.render(o.map((function(t,e){return{startPos:l[e],endPos:o[e],label:s[e],options:r[e]}})));var u=[];return this.store.map((function(t,e){u=u.concat(function(t,e,i,n){var s=e-i,a=t.childNodes[0];return[[a,{height:s,"stroke-dasharray":a.getAttribute("width")+", "+s},Yt,zt],N(t,[0,n],[0,i],Yt)]}(t,a[e],n[e],o[e]))})),u}},heatDomain:{layerClass:function(){return"heat-domain domain-"+this.constants.index},makeElements:function(t){var e=this,i=this.constants,n=i.index,s=i.colWidth,a=i.rowHeight,r=i.squareSize,o=i.radius,l=i.xTranslate,u=0;return this.serializedSubDomains=[],t.cols.map((function(t,i){1===i&&e.labels.push(O("domain-name",l,-12,B(n,!0).toUpperCase(),{fontSize:9})),t.map((function(t,i){if(t.fill){var n={"data-date":t.yyyyMmDd,"data-value":t.dataValue,"data-day":i},s=T("day",l,u,r,o,t.fill,n);e.serializedSubDomains.push(s)}u+=a})),u=0,l+=s})),this.serializedSubDomains},animateElements:function(t){if(t)return[]}},barGraph:{layerClass:function(){return"dataset-units dataset-bars dataset-"+this.constants.index},makeElements:function(t){var e=this.constants;return this.unitType="bar",this.units=t.yPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,o=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{},l=p(e,o.zeroLine),u=pt(l,2),c=u[0],h=u[1];h-=r,0===c&&(c=o.minHeight,h-=o.minHeight),d(t)||(t=0),d(h)||(h=0),d(c,!0)||(c=0),d(i,!0)||(i=0);var f=w("rect",{className:"bar mini",style:"fill: "+n,"data-point-index":a,x:t,y:h,width:i,height:c});if((s+="")||s.length){f.setAttribute("y",0),f.setAttribute("x",0);var m=w("text",{className:"data-point-value",x:i/2,y:0,dy:Ot/2*-1+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:s}),v=w("g",{"data-point-index":a,transform:"translate("+t+", "+h+")"});return v.appendChild(f),v.appendChild(m),v}return f}(t.xPositions[n],i,t.barWidth,e.color,t.labels[n],n,t.offsets[n],{zeroLine:t.zeroLine,barsWidth:t.barsWidth,minHeight:e.minHeight})})),this.units},animateElements:function(t){var e=t.xPositions,i=t.yPositions,n=t.offsets,s=t.labels,a=this.oldData.xPositions,r=this.oldData.yPositions,o=this.oldData.offsets,l=this.oldData.labels,u=m(a,e),c=pt(u,2);a=c[0],e=c[1];var h=m(r,i),d=pt(h,2);r=d[0],i=d[1];var f=m(o,n),p=pt(f,2);o=p[0],n=p[1];var v=m(l,s),g=pt(v,2);l=g[0],s=g[1],this.render({xPositions:a,yPositions:r,offsets:o,labels:s,zeroLine:this.oldData.zeroLine,barsWidth:this.oldData.barsWidth,barWidth:this.oldData.barWidth});var y=[];return this.store.map((function(s,a){y=y.concat($(s,e[a],i[a],t.barWidth,n[a],{zeroLine:t.zeroLine}))})),y}},lineGraph:{layerClass:function(){return"dataset-units dataset-line dataset-"+this.constants.index},makeElements:function(t){var e=this.constants;return this.unitType="dot",this.paths={},e.hideLine||(this.paths=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=e.map((function(e,i){return t[i]+","+e})).join("L");n.spline&&(a=y(t,e));var r=S("M"+a,"line-graph-path",i);if(n.heatline){var o=A(s.svgDefs,i);r.style.stroke="url(#"+o+")"}var l={path:r};if(n.regionFill){var u=A(s.svgDefs,i,!0),c="M"+t[0]+","+s.zeroLine+"L"+a+"L"+t.slice(-1)[0]+","+s.zeroLine;l.region=S(c,"region-fill","none","url(#"+u+")")}return l}(t.xPositions,t.yPositions,e.color,{heatline:e.heatline,regionFill:e.regionFill,spline:e.spline},{svgDefs:e.svgDefs,zeroLine:t.zeroLine})),this.units=[],e.hideDots||(this.units=t.yPositions.map((function(i,n){return function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=w("circle",{style:"fill: "+n,"data-point-index":a,cx:t,cy:e,r:i});if((s+="")||s.length){r.setAttribute("cy",0),r.setAttribute("cx",0);var o=w("text",{className:"data-point-value",x:0,y:0,dy:Ot/2*-1-i+"px","font-size":Ot+"px","text-anchor":"middle",innerHTML:s}),l=w("g",{"data-point-index":a,transform:"translate("+t+", "+e+")"});return l.appendChild(r),l.appendChild(o),l}return r}(t.xPositions[n],i,t.radius,e.color,e.valuesOverPoints?t.values[n]:"",n)}))),Object.values(this.paths).concat(this.units)},animateElements:function(t){var e=t.xPositions,i=t.yPositions,n=t.values,s=this.oldData.xPositions,a=this.oldData.yPositions,r=this.oldData.values,o=m(s,e),l=pt(o,2);s=l[0],e=l[1];var u=m(a,i),c=pt(u,2);a=c[0],i=c[1];var h=m(r,n),d=pt(h,2);r=d[0],n=d[1],this.render({xPositions:s,yPositions:a,values:n,zeroLine:this.oldData.zeroLine,radius:this.oldData.radius});var f=[];return Object.keys(this.paths).length&&(f=f.concat(function(t,e,i,n,s){var a=[],r=i.map((function(t,i){return e[i]+","+t})).join("L");s&&(r=y(e,i));var o=[t.path,{d:"M"+r},Et,zt];if(a.push(o),t.region){var l=e[0]+","+n+"L",u="L"+e.slice(-1)[0]+", "+n,c=[t.region,{d:"M"+l+r+u},Et,zt];a.push(c)}return a}(this.paths,e,i,t.zeroLine,this.constants.spline))),this.units.length&&this.units.map((function(t,n){f=f.concat(function(t,e,i){return"circle"!==t.nodeName?[N(t,t.getAttribute("transform").split("(")[1].slice(0,-1),[e,i],Yt)]:[[t,{cx:e,cy:i},$t,zt]]}(t,e[n],i[n]))})),f}}},Xt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="percentage",n.setup(),n}return dt(i,t),ct(i,[{key:"setMeasures",value:function(t){var e=this.measures;this.barOptions=t.barOptions||{};var i=this.barOptions;i.height=i.height||20,i.depth=i.depth||yt,e.paddings.right=30,e.legendHeight=60,e.baseHeight=8*(i.height+.5*i.depth)}},{key:"setupComponents",value:function(){var t=this.state,e=[["percentageBars",{barHeight:this.barOptions.height,barDepth:this.barOptions.depth},function(){return{xPositions:t.xPositions,widths:t.widths,colors:this.colors}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;e.xPositions=[],e.widths=[];var n=0;e.sliceTotals.map((function(i){var s=t.width*i/e.grandTotal;e.widths.push(s),e.xPositions.push(n),n+=s}))}},{key:"makeDataByIndex",value:function(){}},{key:"bindTooltip",value:function(){var t=this,i=this.state;this.container.addEventListener("mousemove",(function(n){var s=t.components.get("percentageBars").store,a=n.target;if(s.includes(a)){var r=s.indexOf(a),o=e(t.container),l=e(a),u=l.left-o.left+parseInt(a.getAttribute("width"))/2,c=l.top-o.top,h=(t.formattedLabels&&t.formattedLabels.length>0?t.formattedLabels[r]:t.state.labels[r])+": ",d=i.sliceTotals[r]/i.grandTotal;t.tip.setValues(u,c,{name:h,value:(100*d).toFixed(1)+"%"}),t.tip.showTip()}}))}}]),i}(It),Zt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="pie",n.initTimeout=0,n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),this.mouseMove=this.mouseMove.bind(this),this.mouseLeave=this.mouseLeave.bind(this),this.hoverRadio=t.hoverRadio||.1,this.config.startAngle=t.startAngle||0,this.clockWise=t.clockWise||!1}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;this.radius=this.height>this.width?this.center.x:this.center.y;var n=this.radius,s=this.clockWise,a=e.slicesProperties||[];e.sliceStrings=[],e.slicesProperties=[];var r=180-this.config.startAngle;e.sliceTotals.map((function(i,o){var l=r,u=i/e.grandTotal*360,c=u>180?1:0,d=s?-u:u,f=r+=d,p=h(l,n),m=h(f,n),v=t.init&&a[o],g=void 0,y=void 0;t.init?(g=v?v.startPosition:p,y=v?v.endPosition:p):(g=p,y=m);var b=360===u?function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=2*i.y,c=i.y+e.y;return"M"+i.x+" "+i.y+"\n\t\tL"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+" z\n\t\tL"+r+" "+u+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+c+" z"}(g,y,t.center,t.radius,s,c):function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=i.y+e.y;return"M"+i.x+" "+i.y+"\n\t\tL"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+" z"}(g,y,t.center,t.radius,s,c);e.sliceStrings.push(b),e.slicesProperties.push({startPosition:p,endPosition:m,value:i,total:e.grandTotal,startAngle:l,endAngle:f,angle:d})})),this.init=0}},{key:"setupComponents",value:function(){var t=this.state,e=[["pieSlices",{},function(){return{sliceStrings:t.sliceStrings,colors:this.colors}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=h(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,s){if(t){var a=this.colors[i];if(n){W(t,this.calTranslateByAngle(this.state.slicesProperties[i])),t.style.fill=x(a,50);var r=e(this.svg),o=s.pageX-r.left+10,l=s.pageY-r.top-10,u=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.state.labels[i])+": ",c=(100*this.state.sliceTotals[i]/this.state.grandTotal).toFixed(1);this.tip.setValues(o,l,{name:u,value:c+"%"}),this.tip.showTip()}else W(t,"translate3d(0,0,0)"),this.tip.hideTip(),t.style.fill=a}}},{key:"bindTooltip",value:function(){this.container.addEventListener("mousemove",this.mouseMove),this.container.addEventListener("mouseleave",this.mouseLeave)}},{key:"mouseMove",value:function(t){var e=t.target,i=this.components.get("pieSlices").store,n=this.curActiveSliceIndex,s=this.curActiveSlice;if(i.includes(e)){var a=i.indexOf(e);this.hoverSlice(s,n,!1),this.curActiveSlice=e,this.curActiveSliceIndex=a,this.hoverSlice(e,a,!0,t)}else this.mouseLeave()}},{key:"mouseLeave",value:function(){this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,!1)}}]),i}(It),Kt=function(t){function e(t,i){ut(this,e);var n=ft(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i));n.type="heatmap",n.countLabel=i.countLabel||"";var s=["Sunday","Monday"],a=s.includes(i.startSubDomain)?i.startSubDomain:"Sunday";return n.startSubDomainIndex=s.indexOf(a),n.setup(),n}return dt(e,t),ct(e,[{key:"setMeasures",value:function(t){var e=this.measures;this.discreteDomains=0===t.discreteDomains?0:1,e.paddings.top=36,e.paddings.bottom=0,e.legendHeight=24,e.baseHeight=12*Rt+r(e);var i=this.data,n=this.discreteDomains?12:0;this.independentWidth=12*(U(i.start,i.end)+n)+o(e)}},{key:"updateWidth",value:function(){var t=this.discreteDomains?12:0,e=this.state.noOfWeeks?this.state.noOfWeeks:52;this.baseWidth=12*(e+t)+o(this.measures)}},{key:"prepareData",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data;if(t.start&&t.end&&t.start>t.end)throw new Error("Start date cannot be greater than end date.");if(t.start||(t.start=new Date,t.start.setFullYear(t.start.getFullYear()-1)),t.end||(t.end=new Date),t.dataPoints=t.dataPoints||{},parseInt(Object.keys(t.dataPoints)[0])>1e5){var e={};Object.keys(t.dataPoints).forEach((function(i){var n=new Date(i*Ut);e[I(n)]=t.dataPoints[i]})),t.dataPoints=e}return t}},{key:"calc",value:function(){var t=this.state;t.start=R(this.data.start),t.end=R(this.data.end),t.firstWeekStart=R(t.start),t.noOfWeeks=U(t.start,t.end),t.distribution=function(t,e){for(var i=Math.max.apply(Math,mt(t)),n=1/(e-1),s=[],a=0;a1&&void 0!==arguments[1]?arguments[1]:"",i=[t.getMonth(),t.getFullYear()],n=i[0],s=i[1],a=q(t),r={index:n,cols:[]};J(e=R(e)||G(n,s),1);for(var o=U(a,e),l=[],u=void 0,c=0;c2&&void 0!==arguments[2]&&arguments[2],n=this.state,s=R(t),a=[],r=0;r=n.start&&s<=n.end;i||s.getMonth()!==e||!l?o.yyyyMmDd=I(s):o=this.getSubDomainConfig(s),a.push(o)}return a}},{key:"getSubDomainConfig",value:function(t){var e=I(t),i=this.data.dataPoints[e];return{yyyyMmDd:e,dataValue:i||0,fill:this.colors[at(i,this.state.distribution)]}}}]),e}(jt),Qt=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.barOptions=e.barOptions||{},n.lineOptions=e.lineOptions||{},n.type=e.type||"line",n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"setMeasures",value:function(){this.data.datasets.length<=1&&(this.config.showLegend=0,this.measures.paddings.bottom=30)}},{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),t.axisOptions=t.axisOptions||{},t.tooltipOptions=t.tooltipOptions||{},this.config.xAxisMode=t.axisOptions.xAxisMode||"span",this.config.yAxisMode=t.axisOptions.yAxisMode||"span",this.config.xIsSeries=t.axisOptions.xIsSeries||0,this.config.shortenYAxisNumbers=t.axisOptions.shortenYAxisNumbers||0,this.config.formatTooltipX=t.tooltipOptions.formatTooltipX,this.config.formatTooltipY=t.tooltipOptions.formatTooltipY,this.config.valuesOverPoints=t.valuesOverPoints}},{key:"prepareData",value:function(){return rt(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data,this.type)}},{key:"prepareFirstData",value:function(){return ot(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.data)}},{key:"calc",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.calcXPositions(),t||this.calcYAxisParameters(this.getAllYValues(),"line"===this.type),this.makeDataByIndex()}},{key:"calcXPositions",value:function(){var t=this.state,e=this.data.labels;t.datasetLength=e.length,t.unitWidth=this.width/t.datasetLength,t.xOffset=t.unitWidth/2,t.xAxis={labels:e,positions:e.map((function(e,i){return l(t.xOffset+i*t.unitWidth)}))}}},{key:"calcYAxisParameters",value:function(t){var e=tt(t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"false"),i=this.height/nt(e),n=it(e)*i,s=this.height-et(e)*n;this.state.yAxis={labels:e,positions:e.map((function(t){return s-t*i})),scaleMultiplier:i,zeroLine:s},this.calcDatasetPoints(),this.calcYExtremes(),this.calcYRegions()}},{key:"calcDatasetPoints",value:function(){var t=this.state,e=function(e){return e.map((function(e){return st(e,t.yAxis)}))};t.datasets=this.data.datasets.map((function(t,i){var n=t.values,s=t.cumulativeYs||[];return{name:t.name&&t.name.replace(/<|>|&/g,(function(t){return"&"==t?"&":"<"==t?"<":">"})),index:i,chartType:t.chartType,values:n,yPositions:e(n),cumulativeYs:s,cumulativeYPos:e(s)}}))}},{key:"calcYExtremes",value:function(){var t=this.state;this.barOptions.stacked?t.yExtremes=t.datasets[t.datasets.length-1].cumulativeYPos:(t.yExtremes=new Array(t.datasetLength).fill(9999),t.datasets.map((function(e){e.yPositions.map((function(e,i){e1&&void 0!==arguments[1]?arguments[1]:[],i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=t/e.length;n<=0&&(n=1);var s=n/bt,a=void 0;if(i){var r=Math.max.apply(Math,mt(e.map((function(t){return t.length}))));a=Math.ceil(r/s)}return e.map((function(t,e){return(t+="").length>s&&(i?e%a!=0&&(t=""):t=s-3>0?t.slice(0,s-3)+" ...":t.slice(0,s)+".."),t}))}(this.width,t.xAxis.labels,this.config.xIsSeries),t.xAxis}.bind(this)],["yRegions",{width:this.width,pos:"right"},function(){return this.state.yRegions}.bind(this)]],i=this.state.datasets.filter((function(t){return"bar"===t.chartType})),n=this.state.datasets.filter((function(t){return"line"===t.chartType})),s=i.map((function(e){var n=e.index;return["barGraph-"+e.index,{index:n,color:t.colors[n],stacked:t.barOptions.stacked,valuesOverPoints:t.config.valuesOverPoints,minHeight:0*t.height},function(){var t=this.state,e=t.datasets[n],s=this.barOptions.stacked,a=this.barOptions.spaceRatio||.5,r=t.unitWidth*(1-a),o=r/(s?1:i.length),l=t.xAxis.positions.map((function(t){return t-r/2}));s||(l=l.map((function(t){return t+o*n})));var u=new Array(t.datasetLength).fill("");this.config.valuesOverPoints&&(u=s&&e.index===t.datasets.length-1?e.cumulativeYs:e.values);var c=new Array(t.datasetLength).fill(0);return s&&(c=e.yPositions.map((function(t,i){return t-e.cumulativeYPos[i]}))),{xPositions:l,yPositions:e.yPositions,offsets:c,labels:u,zeroLine:t.yAxis.zeroLine,barsWidth:r,barWidth:o}}.bind(t)]})),a=n.map((function(e){var i=e.index;return["lineGraph-"+e.index,{index:i,color:t.colors[i],svgDefs:t.svgDefs,heatline:t.lineOptions.heatline,regionFill:t.lineOptions.regionFill,spline:t.lineOptions.spline,hideDots:t.lineOptions.hideDots,hideLine:t.lineOptions.hideLine,valuesOverPoints:t.config.valuesOverPoints},function(){var t=this.state,e=t.datasets[i],n=t.yAxis.positions[0]s(n)?t.mapTooltipXPosition(o):t.tip.hideTip()}))}},{key:"mapTooltipXPosition",value:function(t){var e=this.state;if(e.yExtremes){var i=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.reduce((function(e,i){return Math.abs(i-t)=0){var n=this.dataByIndex[i];this.tip.setValues(n.xPos+this.tip.offset.x,n.yExtreme+this.tip.offset.y,{name:n.formattedLabel,value:""},n.values,i),this.tip.showTip()}}}},{key:"renderLegend",value:function(){var t=this,e=this.data;e.datasets.length>1&&(this.legendArea.textContent="",e.datasets.map((function(e,i){var n=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",s=arguments[4];s=arguments.length>5&&void 0!==arguments[5]&&arguments[5]?v(s,Tt):s;var a={className:"legend-bar",x:0,y:0,width:i,height:"2px",fill:n},r=w("text",{className:"legend-dataset-text",x:0,y:0,dy:2*Ot+"px","font-size":1.2*Ot+"px","text-anchor":"start",fill:Ct,innerHTML:s}),o=w("g",{transform:"translate("+t+", "+e+")"});return o.appendChild(w("rect",a)),o.appendChild(r),o}(100*i,"0",100,t.colors[i],e.name,t.config.truncateLegends);t.legendArea.appendChild(n)})))}},{key:"makeOverlay",value:function(){var t=this;this.init?this.init=0:(this.overlayGuides&&this.overlayGuides.forEach((function(t){var e=t.overlay;e.parentNode.removeChild(e)})),this.overlayGuides=this.dataUnitComponents.map((function(t){return{type:t.unitType,overlay:void 0,units:t.units}})),void 0===this.state.currentIndex&&(this.state.currentIndex=this.state.datasetLength-1),this.overlayGuides.map((function(e){var i=e.units[t.state.currentIndex];e.overlay=Nt[e.type](i),t.drawArea.appendChild(e.overlay)})))}},{key:"updateOverlayGuides",value:function(){this.overlayGuides&&this.overlayGuides.forEach((function(t){var e=t.overlay;e.parentNode.removeChild(e)}))}},{key:"bindOverlay",value:function(){var t=this;this.parent.addEventListener("data-select",(function(){t.updateOverlay()}))}},{key:"bindUnits",value:function(){var t=this;this.dataUnitComponents.map((function(e){e.units.map((function(e){e.addEventListener("click",(function(){var i=e.getAttribute("data-point-index");t.setCurrentDataPoint(i)}))}))})),this.tip.container.addEventListener("click",(function(){var e=t.tip.container.getAttribute("data-point-index");t.setCurrentDataPoint(e)}))}},{key:"updateOverlay",value:function(){var t=this;this.overlayGuides.map((function(e){var i=e.units[t.state.currentIndex];_t[e.type](i,e.overlay)}))}},{key:"onLeftArrow",value:function(){this.setCurrentDataPoint(this.state.currentIndex-1)}},{key:"onRightArrow",value:function(){this.setCurrentDataPoint(this.state.currentIndex+1)}},{key:"getDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.currentIndex,e=this.state;return{index:t,label:e.xAxis.labels[t],values:e.datasets.map((function(e){return e.values[t]}))}}},{key:"setCurrentDataPoint",value:function(t){var e=this.state;(t=parseInt(t))<0&&(t=0),t>=e.xAxis.labels.length&&(t=e.xAxis.labels.length-1),t!==e.currentIndex&&(e.currentIndex=t,function(t,e,i){var n=document.createEvent("HTMLEvents");for(var s in n.initEvent(e,!0,!0),i)n[s]=i[s];t.dispatchEvent(n)}(this.parent,"data-select",this.getDataPoint()))}},{key:"addDataPoint",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.state.datasetLength;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"addDataPoint",this).call(this,t,e,n),this.data.labels.splice(n,0,t),this.data.datasets.map((function(t,i){t.values.splice(n,0,e[i])})),this.update(this.data)}},{key:"removeDataPoint",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.datasetLength-1;this.data.labels.length<=1||(ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"removeDataPoint",this).call(this,t),this.data.labels.splice(t,1),this.data.datasets.map((function(e){e.values.splice(t,1)})),this.update(this.data))}},{key:"updateDataset",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;this.data.datasets[e].values=t,this.update(this.data)}},{key:"updateDatasets",value:function(t){this.data.datasets.map((function(e,i){t[i]&&(e.values=t[i])})),this.update(this.data)}}]),i}(jt),te=function(t){function i(t,e){ut(this,i);var n=ft(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,t,e));return n.type="donut",n.initTimeout=0,n.init=1,n.setup(),n}return dt(i,t),ct(i,[{key:"configure",value:function(t){ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"configure",this).call(this,t),this.mouseMove=this.mouseMove.bind(this),this.mouseLeave=this.mouseLeave.bind(this),this.hoverRadio=t.hoverRadio||.1,this.config.startAngle=t.startAngle||0,this.clockWise=t.clockWise||!1,this.strokeWidth=t.strokeWidth||30}},{key:"calc",value:function(){var t=this;ht(i.prototype.__proto__||Object.getPrototypeOf(i.prototype),"calc",this).call(this);var e=this.state;this.radius=this.height>this.width?this.center.x-this.strokeWidth/2:this.center.y-this.strokeWidth/2;var n=this.radius,s=this.clockWise,a=e.slicesProperties||[];e.sliceStrings=[],e.slicesProperties=[];var r=180-this.config.startAngle;e.sliceTotals.map((function(i,o){var l=r,u=i/e.grandTotal*360,c=u>180?1:0,d=s?-u:u,f=r+=d,p=h(l,n),m=h(f,n),v=t.init&&a[o],g=void 0,y=void 0;t.init?(g=v?v.startPosition:p,y=v?v.endPosition:p):(g=p,y=m);var b=360===u?function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,r=i.x+t.x,o=i.y+t.y,l=i.x+e.x,u=2*n+o;return"M"+r+" "+o+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+u+"\n\t\tM"+r+" "+u+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+l+" "+(i.y+t.y)}(g,y,t.center,t.radius,t.clockWise,c):function(t,e,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;return"M"+(i.x+t.x)+" "+(i.y+t.y)+"\n\t\tA "+n+" "+n+" 0 "+a+" "+(s?1:0)+"\n\t\t"+(i.x+e.x)+" "+(i.y+e.y)}(g,y,t.center,t.radius,t.clockWise,c);e.sliceStrings.push(b),e.slicesProperties.push({startPosition:p,endPosition:m,value:i,total:e.grandTotal,startAngle:l,endAngle:f,angle:d})})),this.init=0}},{key:"setupComponents",value:function(){var t=this.state,e=[["donutSlices",{},function(){return{sliceStrings:t.sliceStrings,colors:this.colors,strokeWidth:this.strokeWidth}}.bind(this)]];this.components=new Map(e.map((function(t){var e=X.apply(void 0,mt(t));return[t[0],e]})))}},{key:"calTranslateByAngle",value:function(t){var e=this.radius,i=this.hoverRadio,n=h(t.startAngle+t.angle/2,e);return"translate3d("+n.x*i+"px,"+n.y*i+"px,0)"}},{key:"hoverSlice",value:function(t,i,n,s){if(t){var a=this.colors[i];if(n){W(t,this.calTranslateByAngle(this.state.slicesProperties[i])),t.style.stroke=x(a,50);var r=e(this.svg),o=s.pageX-r.left+10,l=s.pageY-r.top-10,u=(this.formatted_labels&&this.formatted_labels.length>0?this.formatted_labels[i]:this.state.labels[i])+": ",c=(100*this.state.sliceTotals[i]/this.state.grandTotal).toFixed(1);this.tip.setValues(o,l,{name:u,value:c+"%"}),this.tip.showTip()}else W(t,"translate3d(0,0,0)"),this.tip.hideTip(),t.style.stroke=a}}},{key:"bindTooltip",value:function(){this.container.addEventListener("mousemove",this.mouseMove),this.container.addEventListener("mouseleave",this.mouseLeave)}},{key:"mouseMove",value:function(t){var e=t.target,i=this.components.get("donutSlices").store,n=this.curActiveSliceIndex,s=this.curActiveSlice;if(i.includes(e)){var a=i.indexOf(e);this.hoverSlice(s,n,!1),this.curActiveSlice=e,this.curActiveSliceIndex=a,this.hoverSlice(e,a,!0,t)}else this.mouseLeave()}},{key:"mouseLeave",value:function(){this.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,!1)}}]),i}(It),ee={bar:Qt,line:Qt,percentage:Xt,heatmap:Kt,pie:Zt,donut:te},ie=Object.freeze({Chart:function t(e,i){return ut(this,t),function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"line",e=arguments[1],i=arguments[2];return"axis-mixed"===t?(i.type="line",new Qt(e,i)):ee[t]?new ee[t](e,i):void console.error("Undefined chart type: "+t)}(i.type,e,i)},PercentageChart:Xt,PieChart:Zt,Heatmap:Kt,AxisChart:Qt});return Object.assign({},{NAME:"Frappe Charts",VERSION:"1.6.2"},ie)}()}},e={};function i(n){var s=e[n];if(void 0!==s)return s.exports;var a=e[n]={exports:{}};return t[n].call(a.exports,a,a.exports,i),a.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};(()=>{"use strict";i.r(n),i.d(n,{extend:()=>Z});const t=flarum.reg.get("core","admin/app");var e=i.n(t);const s=flarum.reg.get("core","common/extend"),a=flarum.reg.get("core","admin/components/DashboardPage");var r=i.n(a);function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function l(t,e,i){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var n=i.call(t,e);if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===o(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}const u=flarum.reg.get("core","admin/components/DashboardWidget");var c=i.n(u);const h=flarum.reg.get("core","common/components/LoadingIndicator");var d=i.n(h);const f=flarum.reg.get("core","common/components/Link");var p=i.n(f);const v=flarum.reg.get("core","common/utils/abbreviateNumber");var g=i.n(v);class y extends(c()){constructor(){super(...arguments),l(this,"entities",["users","discussions","posts"]),l(this,"lifetimeData",void 0),l(this,"loadingLifetime",!0)}oncreate(t){super.oncreate(t),this.loadLifetimeData()}async loadLifetimeData(){this.loadingLifetime=!0,m.redraw();const t=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"lifetime"}});this.lifetimeData=t,this.loadingLifetime=!1,m.redraw()}className(){return"StatisticsWidget StatisticsWidget--mini"}content(){return m("div",{className:"StatisticsWidget-table"},m("h4",{className:"StatisticsWidget-title"},e().translator.trans("flarum-statistics.admin.statistics.mini_heading")),m("div",{className:"StatisticsWidget-entities"},m("div",{className:"StatisticsWidget-labels"},m("div",{className:"StatisticsWidget-label"},e().translator.trans("flarum-statistics.admin.statistics.total_label"))),this.entities.map((t=>{const i=this.loadingLifetime?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getTotalCount(t);return m("div",{className:"StatisticsWidget-entity"},m("h3",{className:"StatisticsWidget-heading"},e().translator.trans("flarum-statistics.admin.statistics."+t+"_heading")),m("div",{className:"StatisticsWidget-total",title:i},this.loadingLifetime?m(d(),{display:"inline"}):g()(i)))}))),m("div",{className:"StatisticsWidget-viewFull"},m(p(),{href:e().route("extension",{id:"flarum-statistics"})},e().translator.trans("flarum-statistics.admin.statistics.view_full"))))}getTotalCount(t){return this.lifetimeData[t]}}flarum.reg.add("flarum-statistics","admin/components/MiniStatisticsWidget",y);const b=flarum.reg.get("core","common/extenders");var x=i.n(b);const k=flarum.reg.get("core","admin/components/ExtensionPage");var w=i.n(k);const D=flarum.reg.get("core","common/components/SelectDropdown");var M=i.n(D);const P=flarum.reg.get("core","common/components/Button");var S=i.n(P);const A=flarum.reg.get("core","common/utils/extractText");var T=i.n(A);const O=flarum.reg.get("core","common/components/Placeholder");var L=i.n(O);const C=flarum.reg.get("core","common/components/Icon");var N=i.n(C);const _=flarum.reg.get("core","common/utils/classList");var $=i.n(_);const E=flarum.reg.get("core","common/utils/ItemList");var Y=i.n(E);const W=flarum.reg.get("core","common/utils/generateElementId");var z=i.n(W);const H=flarum.reg.get("core","common/components/FormModal");var F=i.n(H),j=i(860),I=i.n(j),R=i(329),U=i.n(R);I().extend(U());class V extends(F()){constructor(){super(...arguments),l(this,"state",{inputs:{startDateVal:I()().format("YYYY-MM-DD"),endDateVal:I()().format("YYYY-MM-DD")},ids:{startDate:z()(),endDate:z()()}})}oninit(t){super.oninit(t),this.attrs.value&&(this.state.inputs={startDateVal:I().utc(1e3*this.attrs.value.start).format("YYYY-MM-DD"),endDateVal:I().utc(1e3*this.attrs.value.end).format("YYYY-MM-DD")})}className(){return"StatisticsWidgetDateSelectionModal Modal--small"}title(){return e().translator.trans("flarum-statistics.admin.date_selection_modal.title")}content(){return m("div",{className:"Modal-body"},this.items().toArray())}items(){const t=new(Y());return t.add("intro",m("p",null,e().translator.trans("flarum-statistics.admin.date_selection_modal.description")),100),t.add("date_start",m("div",{className:"Form-group"},m("label",{htmlFor:this.state.ids.startDate},e().translator.trans("flarum-statistics.admin.date_selection_modal.start_date")),m("input",{type:"date",id:this.state.ids.startDate,value:this.state.inputs.startDateVal,onchange:this.updateState("startDateVal"),className:"FormControl"})),90),t.add("date_end",m("div",{className:"Form-group"},m("label",{htmlFor:this.state.ids.endDate},e().translator.trans("flarum-statistics.admin.date_selection_modal.end_date")),m("input",{type:"date",id:this.state.ids.endDate,value:this.state.inputs.endDateVal,onchange:this.updateState("endDateVal"),className:"FormControl"})),80),t.add("submit",m(S(),{className:"Button Button--primary",type:"submit"},e().translator.trans("flarum-statistics.admin.date_selection_modal.submit_button")),0),t}updateState(t){return e=>{this.state.inputs[t]=e.currentTarget.value}}submitData(){return{start:Math.floor(+I().utc(this.state.inputs.startDateVal+"Z")/1e3),end:Math.floor(+I().utc(this.state.inputs.endDateVal+"Z").hour(23).minute(59).second(59).millisecond(999)/1e3)}}onsubmit(t){t.preventDefault();const i=this.submitData();i.end(t[e]="unloaded",t)),{})),l(this,"loadingCustom",this.entities.reduce(((t,e)=>(t[e]="unloaded",t)),{})),l(this,"selectedEntity","users"),l(this,"selectedPeriod",void 0),l(this,"chartEntity",void 0),l(this,"chartPeriod",void 0)}oncreate(t){super.oncreate(t),this.loadLifetimeData()}async loadLifetimeData(){this.loadingLifetime=!0,m.redraw();const t=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"lifetime"}});this.lifetimeData=t,this.loadingLifetime=!1,m.redraw()}async loadTimedData(t){this.loadingTimed[t]="loading",m.redraw();try{const i=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"timed",model:t}});this.timedData[t]=i,this.loadingTimed[t]="loaded";let n=new Date;n.setUTCHours(0,0,0,0);const s=n.getTime()/1e3;this.periods={today:{start:s,end:s+86400,step:3600},last_7_days:{start:s-604800,end:s,step:86400},previous_7_days:{start:s-1209600,end:s-604800,step:86400},last_28_days:{start:s-2419200,end:s,step:86400},previous_28_days:{start:s-4838400,end:s-2419200,step:86400},last_12_months:{start:s-31449600,end:s,step:604800}},this.selectedPeriod="last_7_days"}catch(e){console.error(e),this.loadingTimed[t]="fail"}m.redraw()}async loadCustomRangeData(t){this.loadingCustom[t]="loading",m.redraw();const i={...this.customPeriod};try{const n=await e().request({method:"GET",url:e().forum.attribute("apiUrl")+"/statistics",params:{period:"custom",model:t,dateRange:{start:i.start,end:i.end}}});if(JSON.stringify(i)!==JSON.stringify(this.customPeriod))return;this.customPeriodData[t]=n,this.loadingCustom[t]="loaded",m.redraw()}catch(e){if(JSON.stringify(i)!==JSON.stringify(this.customPeriod))return;console.error(e),this.loadingCustom[t]="fail"}}className(){return"StatisticsWidget"}content(){var t,i;const n="loaded"!==("custom"===this.selectedPeriod?this.loadingCustom:this.loadingTimed)[this.selectedEntity],s=n?null:"custom"===this.selectedPeriod?{start:null==(t=this.customPeriod)?void 0:t.end,end:null==(i=this.customPeriod)?void 0:i.end,step:86400}:this.periods[this.selectedPeriod];return"custom"===this.selectedPeriod?this.customPeriodData[this.selectedEntity]||"unloaded"!==this.loadingCustom[this.selectedEntity]||this.loadCustomRangeData(this.selectedEntity):this.timedData[this.selectedEntity]||"unloaded"!==this.loadingTimed[this.selectedEntity]||this.loadTimedData(this.selectedEntity),m("div",{className:"StatisticsWidget-table"},m("div",{className:"StatisticsWidget-entities"},m("div",{className:"StatisticsWidget-labels"},m("div",{className:"StatisticsWidget-label"},e().translator.trans("flarum-statistics.admin.statistics.total_label")),m("div",{className:"StatisticsWidget-label"},n?m(d(),{size:"small",display:"inline"}):m(M(),{disabled:n,buttonClassName:"Button Button--text",caretIcon:"fas fa-caret-down"},Object.keys(this.periods).map((t=>m(S(),{key:t,active:t===this.selectedPeriod,onclick:this.changePeriod.bind(this,t),icon:t!==this.selectedPeriod||"fas fa-check"},e().translator.trans("flarum-statistics.admin.statistics.".concat(t,"_label"))))).concat([m(S(),{key:"custom",active:"custom"===this.selectedPeriod,onclick:()=>{const t={onModalSubmit:t=>{JSON.stringify(t)!==JSON.stringify(this.customPeriod)&&(this.customPeriodData={},Object.keys(this.loadingCustom).forEach((t=>this.loadingCustom[t]="unloaded")),this.customPeriod=t,this.changePeriod("custom"))}};this.customPeriod&&(t.value=this.customPeriod),e().modal.show(V,t)},icon:"custom"!==this.selectedPeriod||"fas fa-check"},"custom"===this.selectedPeriod?T()(e().translator.trans("flarum-statistics.admin.statistics.custom_label_specified",{fromDate:I().utc(1e3*this.customPeriod.start).format("ll"),toDate:I().utc(1e3*this.customPeriod.end).format("ll")})):e().translator.trans("flarum-statistics.admin.statistics.custom_label"))])))),this.entities.map((t=>{const i=this.loadingLifetime?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getTotalCount(t),a=n?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getPeriodCount(t,s),r="custom"===this.selectedPeriod?null:n?e().translator.trans("flarum-statistics.admin.statistics.loading"):this.getPeriodCount(t,this.getLastPeriod(s)),o=n||0===r||null===r?0:(a-r)/r*100;return m("button",{className:$()("Button--ua-reset StatisticsWidget-entity",{active:this.selectedEntity===t}),onclick:this.changeEntity.bind(this,t)},m("h3",{className:"StatisticsWidget-heading"},e().translator.trans("flarum-statistics.admin.statistics."+t+"_heading")),m("div",{className:"StatisticsWidget-total",title:i},this.loadingLifetime?m(d(),{display:"inline"}):g()(i)),m("div",{className:"StatisticsWidget-period",title:a},n?m(d(),{display:"inline"}):g()(a),0!==o&&m("[",null," ",m("span",{className:"StatisticsWidget-change StatisticsWidget-change--"+(o>0?"up":"down")},m(N(),{name:"fas fa-arrow-"+(o>0?"up":"down")}),Math.abs(o).toFixed(1),"%"))))}))),m("[",null,n?m("div",{key:"loading",className:"StatisticsWidget-chart","data-loading":"true"},m(d(),{size:"large"})):m("div",{key:"loaded",className:"StatisticsWidget-chart","data-loading":"false",oncreate:this.drawChart.bind(this),onupdate:this.drawChart.bind(this)})),this.noData&&m(L(),{text:e().translator.trans("flarum-statistics.admin.statistics.no_data")}),!this.noData&&!!this.chart&&m(S(),{className:"StatisticsWidget-chartExport Button",icon:"fas fa-file-export",onclick:()=>{this.chart.export()}},e().translator.trans("flarum-statistics.admin.statistics.export_chart_button")))}drawChart(t){var i,n;if(this.chart&&this.chartEntity===this.selectedEntity&&this.chartPeriod===this.selectedPeriod)return;const s="custom"===this.selectedPeriod?{start:null==(i=this.customPeriod)?void 0:i.start,end:null==(n=this.customPeriod)?void 0:n.end,step:86400}:this.periods[this.selectedPeriod],a=s.end-s.start,r=[],o=[],l=[];for(let t=s.start;t86400&&(e+=" - "+I().unix(t+s.step-1).utc().format("D MMM"))),r.push(e),o.push(this.getPeriodCount(this.selectedEntity,{start:t,end:t+s.step})),l.push(this.getPeriodCount(this.selectedEntity,{start:t-a,end:t-a}))}if(0===o.length)return this.noData=!0,void m.redraw();this.noData=!1,m.redraw();const u={labels:r,datasets:[{name:T()(e().translator.trans("flarum-statistics.admin.statistics.current_period")),values:o},{name:T()(e().translator.trans("flarum-statistics.admin.statistics.previous_period")),values:l}]};this.chart&&16&document.compareDocumentPosition(this.chart.parent)?this.chart.update(u):this.chart=new q.Chart(t.dom,{data:u,type:"line",height:280,axisOptions:{xAxisMode:"tick",yAxisMode:"span",xIsSeries:!0},lineOptions:{hideDots:1,regionFill:1},colors:[e().forum.attribute("themePrimaryColor"),"black"]}),this.chartEntity=this.selectedEntity,this.chartPeriod=this.selectedPeriod}changeEntity(t){this.selectedEntity=t}changePeriod(t){this.selectedPeriod=t}getTotalCount(t){return this.lifetimeData[t]}getPeriodCount(t,e){const i=("custom"===this.selectedPeriod?this.customPeriodData:this.timedData)[t];let n=0;for(const t in i){const s=parseInt(t);s>=e.start&&s{(0,s.extend)(r().prototype,"availableWidgets",(function(t){t.add("statistics",m(y,null),20)}))}))})(),module.exports=n})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/statistics/js/dist/admin.js.map b/extensions/statistics/js/dist/admin.js.map index 8c395f134..768269d3b 100644 --- a/extensions/statistics/js/dist/admin.js.map +++ b/extensions/statistics/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/statistics/../../../node_modules/dayjs/dayjs.min.js","webpack://@flarum/statistics/../../../node_modules/dayjs/plugin/localizedFormat.js","webpack://@flarum/statistics/../../../node_modules/dayjs/plugin/utc.js","webpack://@flarum/statistics/../src/js/utils/dom.js","webpack://@flarum/statistics/../src/js/utils/constants.js","webpack://@flarum/statistics/../src/js/utils/helpers.js","webpack://@flarum/statistics/../src/js/utils/draw-utils.js","webpack://@flarum/statistics/../src/js/utils/colors.js","webpack://@flarum/statistics/../src/js/utils/draw.js","webpack://@flarum/statistics/../src/js/utils/animate.js","webpack://@flarum/statistics/../src/js/utils/animation.js","webpack://@flarum/statistics/../src/js/utils/export.js","webpack://@flarum/statistics/../src/js/utils/date-utils.js","webpack://@flarum/statistics/../src/js/objects/ChartComponents.js","webpack://@flarum/statistics/../src/js/utils/intervals.js","webpack://@flarum/statistics/../src/js/utils/axis-chart-utils.js","webpack://@flarum/statistics/../node_modules/style-inject/dist/style-inject.es.js","webpack://@flarum/statistics/../src/js/objects/SvgTip.js","webpack://@flarum/statistics/../src/css/chartsCss.js","webpack://@flarum/statistics/../src/js/charts/BaseChart.js","webpack://@flarum/statistics/../src/js/charts/AggregationChart.js","webpack://@flarum/statistics/../src/js/charts/PercentageChart.js","webpack://@flarum/statistics/../src/js/charts/PieChart.js","webpack://@flarum/statistics/../src/js/charts/Heatmap.js","webpack://@flarum/statistics/../src/js/charts/AxisChart.js","webpack://@flarum/statistics/../src/js/charts/DonutChart.js","webpack://@flarum/statistics/../src/js/chart.js","webpack://@flarum/statistics/../src/js/index.js","webpack://@flarum/statistics/webpack/bootstrap","webpack://@flarum/statistics/webpack/runtime/compat get default export","webpack://@flarum/statistics/webpack/runtime/define property getters","webpack://@flarum/statistics/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/statistics/webpack/runtime/make namespace object","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/DashboardPage')\"","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/DashboardWidget')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/abbreviateNumber')\"","webpack://@flarum/statistics/./src/admin/components/MiniStatisticsWidget.tsx","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/SelectDropdown')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Placeholder')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Icon')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/generateElementId')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/statistics/./src/admin/components/StatisticsWidgetDateSelectionModal.tsx","webpack://@flarum/statistics/./src/admin/components/StatisticsWidget.tsx","webpack://@flarum/statistics/./src/admin/components/StatisticsPage.tsx","webpack://@flarum/statistics/./src/admin/index.tsx"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",f=\"month\",h=\"quarter\",c=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t) {\n\tvar element = document.createElement(tag);\n\n\tfor (var i in o) {\n\t\tvar val = o[i];\n\n\t\tif (i === \"inside\") {\n\t\t\t$(val).appendChild(element);\n\t\t}\n\t\telse if (i === \"around\") {\n\t\t\tvar ref = $(val);\n\t\t\tref.parentNode.insertBefore(element, ref);\n\t\t\telement.appendChild(ref);\n\n\t\t} else if (i === \"styles\") {\n\t\t\tif(typeof val === \"object\") {\n\t\t\t\tObject.keys(val).map(prop => {\n\t\t\t\t\telement.style[prop] = val[prop];\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (i in element ) {\n\t\t\telement[i] = val;\n\t\t}\n\t\telse {\n\t\t\telement.setAttribute(i, val);\n\t\t}\n\t}\n\n\treturn element;\n};\n\nexport function getOffset(element) {\n\tlet rect = element.getBoundingClientRect();\n\treturn {\n\t\t// https://stackoverflow.com/a/7436602/6495043\n\t\t// rect.top varies with scroll, so we add whatever has been\n\t\t// scrolled to it to get absolute distance from actual page top\n\t\ttop: rect.top + (document.documentElement.scrollTop || document.body.scrollTop),\n\t\tleft: rect.left + (document.documentElement.scrollLeft || document.body.scrollLeft)\n\t};\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n// an element's offsetParent property will return null whenever it, or any of its parents,\n// is hidden via the display style property.\nexport function isHidden(el) {\n\treturn (el.offsetParent === null);\n}\n\nexport function isElementInViewport(el) {\n\t// Although straightforward: https://stackoverflow.com/a/7557433/6495043\n\tvar rect = el.getBoundingClientRect();\n\n\treturn (\n\t\trect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */\n rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */\n\t);\n}\n\nexport function getElementContentWidth(element) {\n\tvar styles = window.getComputedStyle(element);\n\tvar padding = parseFloat(styles.paddingLeft) +\n\t\tparseFloat(styles.paddingRight);\n\n\treturn element.clientWidth - padding;\n}\n\nexport function bind(element, o){\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function (event) {\n\t\t\t\telement.addEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function unbind(element, o){\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function(event) {\n\t\t\t\telement.removeEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function fire(target, type, properties) {\n\tvar evt = document.createEvent(\"HTMLEvents\");\n\n\tevt.initEvent(type, true, true );\n\n\tfor (var j in properties) {\n\t\tevt[j] = properties[j];\n\t}\n\n\treturn target.dispatchEvent(evt);\n}\n\n// https://css-tricks.com/snippets/javascript/loop-queryselectorall-matches/\nexport function forEachNode(nodeList, callback, scope) {\n\tif(!nodeList) return;\n\tfor (var i = 0; i < nodeList.length; i++) {\n\t\tcallback.call(scope, nodeList[i], i);\n\t}\n}\n\nexport function activate($parent, $child, commonClass, activeClass='active', index = -1) {\n\tlet $children = $parent.querySelectorAll(`.${commonClass}.${activeClass}`);\n\n\tforEachNode($children, (node, i) => {\n\t\tif(index >= 0 && i <= index) return;\n\t\tnode.classList.remove(activeClass);\n\t});\n\n\t$child.classList.add(activeClass);\n}\n","export const ALL_CHART_TYPES = ['line', 'scatter', 'bar', 'percentage', 'heatmap', 'pie'];\n\nexport const COMPATIBLE_CHARTS = {\n\tbar: ['line', 'scatter', 'percentage', 'pie'],\n\tline: ['scatter', 'bar', 'percentage', 'pie'],\n\tpie: ['line', 'scatter', 'percentage', 'bar'],\n\tpercentage: ['bar', 'line', 'scatter', 'pie'],\n\theatmap: []\n};\n\nexport const DATA_COLOR_DIVISIONS = {\n\tbar: 'datasets',\n\tline: 'datasets',\n\tpie: 'labels',\n\tpercentage: 'labels',\n\theatmap: HEATMAP_DISTRIBUTION_SIZE\n};\n\nexport const BASE_MEASURES = {\n\tmargins: {\n\t\ttop: 10,\n\t\tbottom: 10,\n\t\tleft: 20,\n\t\tright: 20\n\t},\n\tpaddings: {\n\t\ttop: 20,\n\t\tbottom: 40,\n\t\tleft: 30,\n\t\tright: 10\n\t},\n\n\tbaseHeight: 240,\n\ttitleHeight: 20,\n\tlegendHeight: 30,\n\n\ttitleFontSize: 12,\n};\n\nexport function getTopOffset(m) {\n\treturn m.titleHeight + m.margins.top + m.paddings.top;\n}\n\nexport function getLeftOffset(m) {\n\treturn m.margins.left + m.paddings.left;\n}\n\nexport function getExtraHeight(m) {\n\tlet totalExtraHeight = m.margins.top + m.margins.bottom\n\t\t+ m.paddings.top + m.paddings.bottom\n\t\t+ m.titleHeight + m.legendHeight;\n\treturn totalExtraHeight;\n}\n\nexport function getExtraWidth(m) {\n\tlet totalExtraWidth = m.margins.left + m.margins.right\n\t\t+ m.paddings.left + m.paddings.right;\n\n\treturn totalExtraWidth;\n}\n\nexport const INIT_CHART_UPDATE_TIMEOUT = 700;\nexport const CHART_POST_ANIMATE_TIMEOUT = 400;\n\nexport const DEFAULT_AXIS_CHART_TYPE = 'line';\nexport const AXIS_DATASET_CHART_TYPES = ['line', 'bar'];\n\nexport const AXIS_LEGEND_BAR_SIZE = 100;\n\nexport const BAR_CHART_SPACE_RATIO = 0.5;\nexport const MIN_BAR_PERCENT_HEIGHT = 0.00;\n\nexport const LINE_CHART_DOT_SIZE = 4;\nexport const DOT_OVERLAY_SIZE_INCR = 4;\n\nexport const PERCENTAGE_BAR_DEFAULT_HEIGHT = 20;\nexport const PERCENTAGE_BAR_DEFAULT_DEPTH = 2;\n\n// Fixed 5-color theme,\n// More colors are difficult to parse visually\nexport const HEATMAP_DISTRIBUTION_SIZE = 5;\n\nexport const HEATMAP_SQUARE_SIZE = 10;\nexport const HEATMAP_GUTTER_SIZE = 2;\n\nexport const DEFAULT_CHAR_WIDTH = 7;\n\nexport const TOOLTIP_POINTER_TRIANGLE_HEIGHT = 5;\n\nconst DEFAULT_CHART_COLORS = ['light-blue', 'blue', 'violet', 'red', 'orange',\n\t'yellow', 'green', 'light-green', 'purple', 'magenta', 'light-grey', 'dark-grey'];\nconst HEATMAP_COLORS_GREEN = ['#ebedf0', '#c6e48b', '#7bc96f', '#239a3b', '#196127'];\nexport const HEATMAP_COLORS_BLUE = ['#ebedf0', '#c0ddf9', '#73b3f3', '#3886e1', '#17459e'];\nexport const HEATMAP_COLORS_YELLOW = ['#ebedf0', '#fdf436', '#ffc700', '#ff9100', '#06001c'];\n\nexport const DEFAULT_COLORS = {\n\tbar: DEFAULT_CHART_COLORS,\n\tline: DEFAULT_CHART_COLORS,\n\tpie: DEFAULT_CHART_COLORS,\n\tpercentage: DEFAULT_CHART_COLORS,\n\theatmap: HEATMAP_COLORS_GREEN,\n\tdonut: DEFAULT_CHART_COLORS\n};\n\n// Universal constants\nexport const ANGLE_RATIO = Math.PI / 180;\nexport const FULL_ANGLE = 360;\n","import { ANGLE_RATIO } from './constants';\n\n/**\n * Returns the value of a number upto 2 decimal places.\n * @param {Number} d Any number\n */\nexport function floatTwo(d) {\n\treturn parseFloat(d.toFixed(2));\n}\n\n/**\n * Returns whether or not two given arrays are equal.\n * @param {Array} arr1 First array\n * @param {Array} arr2 Second array\n */\nexport function arraysEqual(arr1, arr2) {\n\tif(arr1.length !== arr2.length) return false;\n\tlet areEqual = true;\n\tarr1.map((d, i) => {\n\t\tif(arr2[i] !== d) areEqual = false;\n\t});\n\treturn areEqual;\n}\n\n/**\n * Shuffles array in place. ES6 version\n * @param {Array} array An array containing the items.\n */\nexport function shuffle(array) {\n\t// Awesomeness: https://bost.ocks.org/mike/shuffle/\n\t// https://stackoverflow.com/a/2450976/6495043\n\t// https://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array?noredirect=1&lq=1\n\n\tfor (let i = array.length - 1; i > 0; i--) {\n\t\tlet j = Math.floor(Math.random() * (i + 1));\n\t\t[array[i], array[j]] = [array[j], array[i]];\n\t}\n\n\treturn array;\n}\n\n/**\n * Fill an array with extra points\n * @param {Array} array Array\n * @param {Number} count number of filler elements\n * @param {Object} element element to fill with\n * @param {Boolean} start fill at start?\n */\nexport function fillArray(array, count, element, start=false) {\n\tif(!element) {\n\t\telement = start ? array[0] : array[array.length - 1];\n\t}\n\tlet fillerArray = new Array(Math.abs(count)).fill(element);\n\tarray = start ? fillerArray.concat(array) : array.concat(fillerArray);\n\treturn array;\n}\n\n/**\n * Returns pixel width of string.\n * @param {String} string\n * @param {Number} charWidth Width of single char in pixels\n */\nexport function getStringWidth(string, charWidth) {\n\treturn (string+\"\").length * charWidth;\n}\n\nexport function bindChange(obj, getFn, setFn) {\n\treturn new Proxy(obj, {\n\t\tset: function(target, prop, value) {\n\t\t\tsetFn();\n\t\t\treturn Reflect.set(target, prop, value);\n\t\t},\n\t\tget: function(target, prop) {\n\t\t\tgetFn();\n\t\t\treturn Reflect.get(target, prop);\n\t\t}\n\t});\n}\n\n// https://stackoverflow.com/a/29325222\nexport function getRandomBias(min, max, bias, influence) {\n\tconst range = max - min;\n\tconst biasValue = range * bias + min;\n\tvar rnd = Math.random() * range + min,\t\t// random in range\n\t\tmix = Math.random() * influence;\t\t// random mixer\n\treturn rnd * (1 - mix) + biasValue * mix;\t// mix full range and bias\n}\n\nexport function getPositionByAngle(angle, radius) {\n\treturn {\n\t\tx: Math.sin(angle * ANGLE_RATIO) * radius,\n\t\ty: Math.cos(angle * ANGLE_RATIO) * radius,\n\t};\n}\n\n/**\n * Check if a number is valid for svg attributes\n * @param {object} candidate Candidate to test\n * @param {Boolean} nonNegative flag to treat negative number as invalid\n */\nexport function isValidNumber(candidate, nonNegative=false) {\n\tif (Number.isNaN(candidate)) return false;\n\telse if (candidate === undefined) return false;\n\telse if (!Number.isFinite(candidate)) return false;\n\telse if (nonNegative && candidate < 0) return false;\n\telse return true;\n}\n\n/**\n * Round a number to the closes precision, max max precision 4\n * @param {Number} d Any Number\n */\nexport function round(d) {\n\t// https://floating-point-gui.de/\n\t// https://www.jacklmoore.com/notes/rounding-in-javascript/\n\treturn Number(Math.round(d + 'e4') + 'e-4');\n}\n\n/**\n * Creates a deep clone of an object\n * @param {Object} candidate Any Object\n */\n export function deepClone(candidate) {\n\tlet cloned, value, key;\n \n\tif (candidate instanceof Date) {\n\t return new Date(candidate.getTime());\n\t}\n \n\tif (typeof candidate !== \"object\" || candidate === null) {\n\t return candidate;\n\t}\n \n\tcloned = Array.isArray(candidate) ? [] : {};\n \n\tfor (key in candidate) {\n\t value = candidate[key];\n \n\t cloned[key] = deepClone(value);\n\t}\n \n\treturn cloned;\n }","import { fillArray } from './helpers';\n\nexport function getBarHeightAndYAttr(yTop, zeroLine) {\n\tlet height, y;\n\tif (yTop <= zeroLine) {\n\t\theight = zeroLine - yTop;\n\t\ty = yTop;\n\t} else {\n\t\theight = yTop - zeroLine;\n\t\ty = zeroLine;\n\t}\n\n\treturn [height, y];\n}\n\nexport function equilizeNoOfElements(array1, array2,\n\textraCount = array2.length - array1.length) {\n\n\t// Doesn't work if either has zero elements.\n\tif(extraCount > 0) {\n\t\tarray1 = fillArray(array1, extraCount);\n\t} else {\n\t\tarray2 = fillArray(array2, extraCount);\n\t}\n\treturn [array1, array2];\n}\n\nexport function truncateString(txt, len) {\n\tif (!txt) {\n\t\treturn;\n\t}\n\tif (txt.length > len) {\n\t\treturn txt.slice(0, len-3) + '...';\n\t} else {\n\t\treturn txt;\n\t}\n}\n\nexport function shortenLargeNumber(label) {\n\tlet number;\n\tif (typeof label === 'number') number = label;\n\telse if (typeof label === 'string') {\n\t\tnumber = Number(label);\n\t\tif (Number.isNaN(number)) return label;\n\t}\n\n\t// Using absolute since log wont work for negative numbers\n\tlet p = Math.floor(Math.log10(Math.abs(number)));\n\tif (p <= 2) return number; // Return as is for a 3 digit number of less\n\tlet\tl = Math.floor(p / 3);\n\tlet shortened = (Math.pow(10, p - l * 3) * +(number / Math.pow(10, p)).toFixed(1));\n\n\t// Correct for floating point error upto 2 decimal places\n\treturn Math.round(shortened*100)/100 + ' ' + ['', 'K', 'M', 'B', 'T'][l];\n}\n\n// cubic bezier curve calculation (from example by François Romain)\nexport function getSplineCurvePointsStr(xList, yList) {\n\n\tlet points=[];\n\tfor(let i=0;i {\n\t\tlet lengthX = pointB[0] - pointA[0];\n\t\tlet lengthY = pointB[1] - pointA[1];\n\t\treturn {\n\t\t\tlength: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n\t\t\tangle: Math.atan2(lengthY, lengthX)\n\t\t};\n\t};\n \n\tlet controlPoint = (current, previous, next, reverse) => {\n\t\tlet p = previous || current;\n\t\tlet n = next || current;\n\t\tlet o = line(p, n);\n\t\tlet angle = o.angle + (reverse ? Math.PI : 0);\n\t\tlet length = o.length * smoothing;\n\t\tlet x = current[0] + Math.cos(angle) * length;\n\t\tlet y = current[1] + Math.sin(angle) * length;\n\t\treturn [x, y];\n\t};\n \n\tlet bezierCommand = (point, i, a) => {\n\t\tlet cps = controlPoint(a[i - 1], a[i - 2], point);\n\t\tlet cpe = controlPoint(point, a[i - 1], a[i + 1], true);\n\t\treturn `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}`;\n\t};\n \n\tlet pointStr = (points, command) => {\n\t\treturn points.reduce((acc, point, i, a) => i === 0\n\t\t\t? `${point[0]},${point[1]}`\n\t\t\t: `${acc} ${command(point, i, a)}`, '');\n\t};\n \n\treturn pointStr(points, bezierCommand);\n}\n","const PRESET_COLOR_MAP = {\n\t'light-blue': '#7cd6fd',\n\t'blue': '#5e64ff',\n\t'violet': '#743ee2',\n\t'red': '#ff5858',\n\t'orange': '#ffa00a',\n\t'yellow': '#feef72',\n\t'green': '#28a745',\n\t'light-green': '#98d85b',\n\t'purple': '#b554ff',\n\t'magenta': '#ffa3ef',\n\t'black': '#36114C',\n\t'grey': '#bdd3e6',\n\t'light-grey': '#f0f4f7',\n\t'dark-grey': '#b8c2cc'\n};\n\nfunction limitColor(r){\n\tif (r > 255) return 255;\n\telse if (r < 0) return 0;\n\treturn r;\n}\n\nexport function lightenDarkenColor(color, amt) {\n\tlet col = getColor(color);\n\tlet usePound = false;\n\tif (col[0] == \"#\") {\n\t\tcol = col.slice(1);\n\t\tusePound = true;\n\t}\n\tlet num = parseInt(col,16);\n\tlet r = limitColor((num >> 16) + amt);\n\tlet b = limitColor(((num >> 8) & 0x00FF) + amt);\n\tlet g = limitColor((num & 0x0000FF) + amt);\n\treturn (usePound?\"#\":\"\") + (g | (b << 8) | (r << 16)).toString(16);\n}\n\nexport function isValidColor(string) {\n\t// https://stackoverflow.com/a/32685393\n\tlet HEX_RE = /(^\\s*)(#)((?:[A-Fa-f0-9]{3}){1,2})$/i;\n\tlet RGB_RE = /(^\\s*)(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/i;\n\treturn HEX_RE.test(string) || RGB_RE.test(string);\n}\n\nexport const getColor = (color) => {\n\t// When RGB color, convert to hexadecimal (alpha value is omitted)\n\tif((/rgb[a]{0,1}\\([\\d, ]+\\)/gim).test(color)) {\n\t\treturn (/\\D+(\\d*)\\D+(\\d*)\\D+(\\d*)/gim).exec(color)\n\t\t\t.map((x, i) => (i !== 0 ? Number(x).toString(16) : '#'))\n\t\t\t.reduce((c, ch) => `${c}${ch}`);\n\t}\n\treturn PRESET_COLOR_MAP[color] || color;\n};\n","import { getBarHeightAndYAttr, truncateString, shortenLargeNumber, getSplineCurvePointsStr } from './draw-utils';\nimport { getStringWidth, isValidNumber } from './helpers';\nimport { DOT_OVERLAY_SIZE_INCR, PERCENTAGE_BAR_DEFAULT_DEPTH } from './constants';\nimport { lightenDarkenColor } from './colors';\n\nexport const AXIS_TICK_LENGTH = 6;\nconst LABEL_MARGIN = 4;\nconst LABEL_MAX_CHARS = 15;\nexport const FONT_SIZE = 10;\nconst BASE_LINE_COLOR = '#dadada';\nconst FONT_FILL = '#555b51';\n\nfunction $(expr, con) {\n\treturn typeof expr === \"string\"? (con || document).querySelector(expr) : expr || null;\n}\n\nexport function createSVG(tag, o) {\n\tvar element = document.createElementNS(\"http://www.w3.org/2000/svg\", tag);\n\n\tfor (var i in o) {\n\t\tvar val = o[i];\n\n\t\tif (i === \"inside\") {\n\t\t\t$(val).appendChild(element);\n\t\t}\n\t\telse if (i === \"around\") {\n\t\t\tvar ref = $(val);\n\t\t\tref.parentNode.insertBefore(element, ref);\n\t\t\telement.appendChild(ref);\n\n\t\t} else if (i === \"styles\") {\n\t\t\tif(typeof val === \"object\") {\n\t\t\t\tObject.keys(val).map(prop => {\n\t\t\t\t\telement.style[prop] = val[prop];\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tif(i === \"className\") { i = \"class\"; }\n\t\t\tif(i === \"innerHTML\") {\n\t\t\t\telement['textContent'] = val;\n\t\t\t} else {\n\t\t\t\telement.setAttribute(i, val);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn element;\n}\n\nfunction renderVerticalGradient(svgDefElem, gradientId) {\n\treturn createSVG('linearGradient', {\n\t\tinside: svgDefElem,\n\t\tid: gradientId,\n\t\tx1: 0,\n\t\tx2: 0,\n\t\ty1: 0,\n\t\ty2: 1\n\t});\n}\n\nfunction setGradientStop(gradElem, offset, color, opacity) {\n\treturn createSVG('stop', {\n\t\t'inside': gradElem,\n\t\t'style': `stop-color: ${color}`,\n\t\t'offset': offset,\n\t\t'stop-opacity': opacity\n\t});\n}\n\nexport function makeSVGContainer(parent, className, width, height) {\n\treturn createSVG('svg', {\n\t\tclassName: className,\n\t\tinside: parent,\n\t\twidth: width,\n\t\theight: height\n\t});\n}\n\nexport function makeSVGDefs(svgContainer) {\n\treturn createSVG('defs', {\n\t\tinside: svgContainer,\n\t});\n}\n\nexport function makeSVGGroup(className, transform='', parent=undefined) {\n\tlet args = {\n\t\tclassName: className,\n\t\ttransform: transform\n\t};\n\tif(parent) args.inside = parent;\n\treturn createSVG('g', args);\n}\n\nexport function wrapInSVGGroup(elements, className='') {\n\tlet g = createSVG('g', {\n\t\tclassName: className\n\t});\n\telements.forEach(e => g.appendChild(e));\n\treturn g;\n}\n\nexport function makePath(pathStr, className='', stroke='none', fill='none', strokeWidth=2) {\n\treturn createSVG('path', {\n\t\tclassName: className,\n\t\td: pathStr,\n\t\tstyles: {\n\t\t\tstroke: stroke,\n\t\t\tfill: fill,\n\t\t\t'stroke-width': strokeWidth\n\t\t}\n\t});\n}\n\nexport function makeArcPathStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, arcEndY] = [center.x + endPosition.x, center.y + endPosition.y];\n\treturn `M${center.x} ${center.y}\n\t\tL${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY} z`;\n}\n\nexport function makeCircleStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, midArc, arcEndY] = [center.x + endPosition.x, center.y * 2, center.y + endPosition.y];\n\treturn `M${center.x} ${center.y}\n\t\tL${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${midArc} z\n\t\tL${arcStartX} ${midArc}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY} z`;\n}\n\nexport function makeArcStrokePathStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, arcEndY] = [center.x + endPosition.x, center.y + endPosition.y];\n\n\treturn `M${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY}`;\n}\n\nexport function makeStrokeCircleStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, midArc, arcEndY] = [center.x + endPosition.x, radius * 2 + arcStartY, center.y + startPosition.y];\n\n\treturn `M${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${midArc}\n\t\tM${arcStartX} ${midArc}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY}`;\n}\n\nexport function makeGradient(svgDefElem, color, lighter = false) {\n\tlet gradientId ='path-fill-gradient' + '-' + color + '-' +(lighter ? 'lighter' : 'default');\n\tlet gradientDef = renderVerticalGradient(svgDefElem, gradientId);\n\tlet opacities = [1, 0.6, 0.2];\n\tif(lighter) {\n\t\topacities = [0.4, 0.2, 0];\n\t}\n\n\tsetGradientStop(gradientDef, \"0%\", color, opacities[0]);\n\tsetGradientStop(gradientDef, \"50%\", color, opacities[1]);\n\tsetGradientStop(gradientDef, \"100%\", color, opacities[2]);\n\n\treturn gradientId;\n}\n\nexport function percentageBar(x, y, width, height,\n\tdepth=PERCENTAGE_BAR_DEFAULT_DEPTH, fill='none') {\n\n\tlet args = {\n\t\tclassName: 'percentage-bar',\n\t\tx: x,\n\t\ty: y,\n\t\twidth: width,\n\t\theight: height,\n\t\tfill: fill,\n\t\tstyles: {\n\t\t\t'stroke': lightenDarkenColor(fill, -25),\n\t\t\t// Diabolically good: https://stackoverflow.com/a/9000859\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray\n\t\t\t'stroke-dasharray': `0, ${height + width}, ${width}, ${height}`,\n\t\t\t'stroke-width': depth\n\t\t},\n\t};\n\n\treturn createSVG(\"rect\", args);\n}\n\nexport function heatSquare(className, x, y, size, radius, fill='none', data={}) {\n\tlet args = {\n\t\tclassName: className,\n\t\tx: x,\n\t\ty: y,\n\t\twidth: size,\n\t\theight: size,\n\t\trx: radius,\n\t\tfill: fill\n\t};\n\n\tObject.keys(data).map(key => {\n\t\targs[key] = data[key];\n\t});\n\n\treturn createSVG(\"rect\", args);\n}\n\nexport function legendBar(x, y, size, fill='none', label, truncate=false) {\n\tlabel = truncate ? truncateString(label, LABEL_MAX_CHARS) : label;\n\n\tlet args = {\n\t\tclassName: 'legend-bar',\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: size,\n\t\theight: '2px',\n\t\tfill: fill\n\t};\n\tlet text = createSVG('text', {\n\t\tclassName: 'legend-dataset-text',\n\t\tx: 0,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE * 2) + 'px',\n\t\t'font-size': (FONT_SIZE * 1.2) + 'px',\n\t\t'text-anchor': 'start',\n\t\tfill: FONT_FILL,\n\t\tinnerHTML: label\n\t});\n\n\tlet group = createSVG('g', {\n\t\ttransform: `translate(${x}, ${y})`\n\t});\n\tgroup.appendChild(createSVG(\"rect\", args));\n\tgroup.appendChild(text);\n\n\treturn group;\n}\n\nexport function legendDot(x, y, size, fill='none', label, truncate=false) {\n\tlabel = truncate ? truncateString(label, LABEL_MAX_CHARS) : label;\n\n\tlet args = {\n\t\tclassName: 'legend-dot',\n\t\tcx: 0,\n\t\tcy: 0,\n\t\tr: size,\n\t\tfill: fill\n\t};\n\tlet text = createSVG('text', {\n\t\tclassName: 'legend-dataset-text',\n\t\tx: 0,\n\t\ty: 0,\n\t\tdx: (FONT_SIZE) + 'px',\n\t\tdy: (FONT_SIZE/3) + 'px',\n\t\t'font-size': (FONT_SIZE * 1.2) + 'px',\n\t\t'text-anchor': 'start',\n\t\tfill: FONT_FILL,\n\t\tinnerHTML: label\n\t});\n\n\tlet group = createSVG('g', {\n\t\ttransform: `translate(${x}, ${y})`\n\t});\n\tgroup.appendChild(createSVG(\"circle\", args));\n\tgroup.appendChild(text);\n\n\treturn group;\n}\n\nexport function makeText(className, x, y, content, options = {}) {\n\tlet fontSize = options.fontSize || FONT_SIZE;\n\tlet dy = options.dy !== undefined ? options.dy : (fontSize / 2);\n\tlet fill = options.fill || FONT_FILL;\n\tlet textAnchor = options.textAnchor || 'start';\n\treturn createSVG('text', {\n\t\tclassName: className,\n\t\tx: x,\n\t\ty: y,\n\t\tdy: dy + 'px',\n\t\t'font-size': fontSize + 'px',\n\t\tfill: fill,\n\t\t'text-anchor': textAnchor,\n\t\tinnerHTML: content\n\t});\n}\n\nfunction makeVertLine(x, label, y1, y2, options={}) {\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tlet l = createSVG('line', {\n\t\tclassName: 'line-vertical ' + options.className,\n\t\tx1: 0,\n\t\tx2: 0,\n\t\ty1: y1,\n\t\ty2: y2,\n\t\tstyles: {\n\t\t\tstroke: options.stroke\n\t\t}\n\t});\n\n\tlet text = createSVG('text', {\n\t\tx: 0,\n\t\ty: y1 > y2 ? y1 + LABEL_MARGIN : y1 - LABEL_MARGIN - FONT_SIZE,\n\t\tdy: FONT_SIZE + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'middle',\n\t\tinnerHTML: label + \"\"\n\t});\n\n\tlet line = createSVG('g', {\n\t\ttransform: `translate(${ x }, 0)`\n\t});\n\n\tline.appendChild(l);\n\tline.appendChild(text);\n\n\treturn line;\n}\n\nfunction makeHoriLine(y, label, x1, x2, options={}) {\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.lineType) options.lineType = '';\n\tif (options.shortenNumbers) label = shortenLargeNumber(label);\n\n\tlet className = 'line-horizontal ' + options.className +\n\t\t(options.lineType === \"dashed\" ? \"dashed\": \"\");\n\n\tlet l = createSVG('line', {\n\t\tclassName: className,\n\t\tx1: x1,\n\t\tx2: x2,\n\t\ty1: 0,\n\t\ty2: 0,\n\t\tstyles: {\n\t\t\tstroke: options.stroke\n\t\t}\n\t});\n\n\tlet text = createSVG('text', {\n\t\tx: x1 < x2 ? x1 - LABEL_MARGIN : x1 + LABEL_MARGIN,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / 2 - 2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': x1 < x2 ? 'end' : 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet line = createSVG('g', {\n\t\ttransform: `translate(0, ${y})`,\n\t\t'stroke-opacity': 1\n\t});\n\n\tif(text === 0 || text === '0') {\n\t\tline.style.stroke = \"rgba(27, 31, 35, 0.6)\";\n\t}\n\n\tline.appendChild(l);\n\tline.appendChild(text);\n\n\treturn line;\n}\n\nexport function yLine(y, label, width, options={}) {\n\tif (!isValidNumber(y)) y = 0;\n\n\tif(!options.pos) options.pos = 'left';\n\tif(!options.offset) options.offset = 0;\n\tif(!options.mode) options.mode = 'span';\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.className) options.className = '';\n\n\tlet x1 = -1 * AXIS_TICK_LENGTH;\n\tlet x2 = options.mode === 'span' ? width + AXIS_TICK_LENGTH : 0;\n\n\tif(options.mode === 'tick' && options.pos === 'right') {\n\t\tx1 = width + AXIS_TICK_LENGTH;\n\t\tx2 = width;\n\t}\n\n\t// let offset = options.pos === 'left' ? -1 * options.offset : options.offset;\n\n\tx1 += options.offset;\n\tx2 += options.offset;\n\n\treturn makeHoriLine(y, label, x1, x2, {\n\t\tstroke: options.stroke,\n\t\tclassName: options.className,\n\t\tlineType: options.lineType,\n\t\tshortenNumbers: options.shortenNumbers\n\t});\n}\n\nexport function xLine(x, label, height, options={}) {\n\tif (!isValidNumber(x)) x = 0;\n\n\tif(!options.pos) options.pos = 'bottom';\n\tif(!options.offset) options.offset = 0;\n\tif(!options.mode) options.mode = 'span';\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.className) options.className = '';\n\n\t// Draw X axis line in span/tick mode with optional label\n\t// \ty2(span)\n\t// \t\t\t\t\t\t|\n\t// \t\t\t\t\t\t|\n\t//\t\t\t\tx line\t|\n\t//\t\t\t\t\t\t|\n\t// \t\t\t\t\t \t|\n\t// ---------------------+-- y2(tick)\n\t//\t\t\t\t\t\t|\n\t//\t\t\t\t\t\t\ty1\n\n\tlet y1 = height + AXIS_TICK_LENGTH;\n\tlet y2 = options.mode === 'span' ? -1 * AXIS_TICK_LENGTH : height;\n\n\tif(options.mode === 'tick' && options.pos === 'top') {\n\t\t// top axis ticks\n\t\ty1 = -1 * AXIS_TICK_LENGTH;\n\t\ty2 = 0;\n\t}\n\n\treturn makeVertLine(x, label, y1, y2, {\n\t\tstroke: options.stroke,\n\t\tclassName: options.className,\n\t\tlineType: options.lineType\n\t});\n}\n\nexport function yMarker(y, label, width, options={}) {\n\tif(!options.labelPos) options.labelPos = 'right';\n\tlet x = options.labelPos === 'left' ? LABEL_MARGIN\n\t\t: width - getStringWidth(label, 5) - LABEL_MARGIN;\n\n\tlet labelSvg = createSVG('text', {\n\t\tclassName: 'chart-label',\n\t\tx: x,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / -2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet line = makeHoriLine(y, '', 0, width, {\n\t\tstroke: options.stroke || BASE_LINE_COLOR,\n\t\tclassName: options.className || '',\n\t\tlineType: options.lineType\n\t});\n\n\tline.appendChild(labelSvg);\n\n\treturn line;\n}\n\nexport function yRegion(y1, y2, width, label, options={}) {\n\t// return a group\n\tlet height = y1 - y2;\n\n\tlet rect = createSVG('rect', {\n\t\tclassName: `bar mini`, // remove class\n\t\tstyles: {\n\t\t\tfill: `rgba(228, 234, 239, 0.49)`,\n\t\t\tstroke: BASE_LINE_COLOR,\n\t\t\t'stroke-dasharray': `${width}, ${height}`\n\t\t},\n\t\t// 'data-point-index': index,\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: width,\n\t\theight: height\n\t});\n\n\tif(!options.labelPos) options.labelPos = 'right';\n\tlet x = options.labelPos === 'left' ? LABEL_MARGIN\n\t\t: width - getStringWidth(label+\"\", 4.5) - LABEL_MARGIN;\n\n\tlet labelSvg = createSVG('text', {\n\t\tclassName: 'chart-label',\n\t\tx: x,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / -2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet region = createSVG('g', {\n\t\ttransform: `translate(0, ${y2})`\n\t});\n\n\tregion.appendChild(rect);\n\tregion.appendChild(labelSvg);\n\n\treturn region;\n}\n\nexport function datasetBar(x, yTop, width, color, label='', index=0, offset=0, meta={}) {\n\tlet [height, y] = getBarHeightAndYAttr(yTop, meta.zeroLine);\n\ty -= offset;\n\n\tif(height === 0) {\n\t\theight = meta.minHeight;\n\t\ty -= meta.minHeight;\n\t}\n\n\t// Preprocess numbers to avoid svg building errors\n\tif (!isValidNumber(x)) x = 0;\n\tif (!isValidNumber(y)) y = 0;\n\tif (!isValidNumber(height, true)) height = 0;\n\tif (!isValidNumber(width, true)) width = 0;\n\n\tlet rect = createSVG('rect', {\n\t\tclassName: `bar mini`,\n\t\tstyle: `fill: ${color}`,\n\t\t'data-point-index': index,\n\t\tx: x,\n\t\ty: y,\n\t\twidth: width,\n\t\theight: height\n\t});\n\n\tlabel += \"\";\n\n\tif(!label && !label.length) {\n\t\treturn rect;\n\t} else {\n\t\trect.setAttribute('y', 0);\n\t\trect.setAttribute('x', 0);\n\t\tlet text = createSVG('text', {\n\t\t\tclassName: 'data-point-value',\n\t\t\tx: width/2,\n\t\t\ty: 0,\n\t\t\tdy: (FONT_SIZE / 2 * -1) + 'px',\n\t\t\t'font-size': FONT_SIZE + 'px',\n\t\t\t'text-anchor': 'middle',\n\t\t\tinnerHTML: label\n\t\t});\n\n\t\tlet group = createSVG('g', {\n\t\t\t'data-point-index': index,\n\t\t\ttransform: `translate(${x}, ${y})`\n\t\t});\n\t\tgroup.appendChild(rect);\n\t\tgroup.appendChild(text);\n\n\t\treturn group;\n\t}\n}\n\nexport function datasetDot(x, y, radius, color, label='', index=0) {\n\tlet dot = createSVG('circle', {\n\t\tstyle: `fill: ${color}`,\n\t\t'data-point-index': index,\n\t\tcx: x,\n\t\tcy: y,\n\t\tr: radius\n\t});\n\n\tlabel += \"\";\n\n\tif(!label && !label.length) {\n\t\treturn dot;\n\t} else {\n\t\tdot.setAttribute('cy', 0);\n\t\tdot.setAttribute('cx', 0);\n\n\t\tlet text = createSVG('text', {\n\t\t\tclassName: 'data-point-value',\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tdy: (FONT_SIZE / 2 * -1 - radius) + 'px',\n\t\t\t'font-size': FONT_SIZE + 'px',\n\t\t\t'text-anchor': 'middle',\n\t\t\tinnerHTML: label\n\t\t});\n\n\t\tlet group = createSVG('g', {\n\t\t\t'data-point-index': index,\n\t\t\ttransform: `translate(${x}, ${y})`\n\t\t});\n\t\tgroup.appendChild(dot);\n\t\tgroup.appendChild(text);\n\n\t\treturn group;\n\t}\n}\n\nexport function getPaths(xList, yList, color, options={}, meta={}) {\n\tlet pointsList = yList.map((y, i) => (xList[i] + ',' + y));\n\tlet pointsStr = pointsList.join(\"L\");\n\n\t// Spline\n\tif (options.spline)\n\t\tpointsStr = getSplineCurvePointsStr(xList, yList);\n\n\tlet path = makePath(\"M\"+pointsStr, 'line-graph-path', color);\n\n\t// HeatLine\n\tif(options.heatline) {\n\t\tlet gradient_id = makeGradient(meta.svgDefs, color);\n\t\tpath.style.stroke = `url(#${gradient_id})`;\n\t}\n\n\tlet paths = {\n\t\tpath: path\n\t};\n\n\t// Region\n\tif(options.regionFill) {\n\t\tlet gradient_id_region = makeGradient(meta.svgDefs, color, true);\n\n\t\tlet pathStr = \"M\" + `${xList[0]},${meta.zeroLine}L` + pointsStr + `L${xList.slice(-1)[0]},${meta.zeroLine}`;\n\t\tpaths.region = makePath(pathStr, `region-fill`, 'none', `url(#${gradient_id_region})`);\n\t}\n\n\treturn paths;\n}\n\nexport let makeOverlay = {\n\t'bar': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'rect') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\toverlay.style.fill = '#000000';\n\t\toverlay.style.opacity = '0.4';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t},\n\n\t'dot': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\tlet radius = unit.getAttribute('r');\n\t\tlet fill = unit.getAttribute('fill');\n\t\toverlay.setAttribute('r', parseInt(radius) + DOT_OVERLAY_SIZE_INCR);\n\t\toverlay.setAttribute('fill', fill);\n\t\toverlay.style.opacity = '0.6';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t},\n\n\t'heat_square': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\tlet radius = unit.getAttribute('r');\n\t\tlet fill = unit.getAttribute('fill');\n\t\toverlay.setAttribute('r', parseInt(radius) + DOT_OVERLAY_SIZE_INCR);\n\t\toverlay.setAttribute('fill', fill);\n\t\toverlay.style.opacity = '0.6';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t}\n};\n\nexport let updateOverlay = {\n\t'bar': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'rect') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['x', 'y', 'width', 'height'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n\n\t'dot': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['cx', 'cy'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n\n\t'heat_square': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['cx', 'cy'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n};\n","import { getBarHeightAndYAttr, getSplineCurvePointsStr } from './draw-utils';\n\nexport const UNIT_ANIM_DUR = 350;\nexport const PATH_ANIM_DUR = 350;\nexport const MARKER_LINE_ANIM_DUR = UNIT_ANIM_DUR;\nexport const REPLACE_ALL_NEW_DUR = 250;\n\nexport const STD_EASING = 'easein';\n\nexport function translate(unit, oldCoord, newCoord, duration) {\n\tlet old = typeof oldCoord === 'string' ? oldCoord : oldCoord.join(', ');\n\treturn [\n\t\tunit,\n\t\t{transform: newCoord.join(', ')},\n\t\tduration,\n\t\tSTD_EASING,\n\t\t\"translate\",\n\t\t{transform: old}\n\t];\n}\n\nexport function translateVertLine(xLine, newX, oldX) {\n\treturn translate(xLine, [oldX, 0], [newX, 0], MARKER_LINE_ANIM_DUR);\n}\n\nexport function translateHoriLine(yLine, newY, oldY) {\n\treturn translate(yLine, [0, oldY], [0, newY], MARKER_LINE_ANIM_DUR);\n}\n\nexport function animateRegion(rectGroup, newY1, newY2, oldY2) {\n\tlet newHeight = newY1 - newY2;\n\tlet rect = rectGroup.childNodes[0];\n\tlet width = rect.getAttribute(\"width\");\n\tlet rectAnim = [\n\t\trect,\n\t\t{ height: newHeight, 'stroke-dasharray': `${width}, ${newHeight}` },\n\t\tMARKER_LINE_ANIM_DUR,\n\t\tSTD_EASING\n\t];\n\n\tlet groupAnim = translate(rectGroup, [0, oldY2], [0, newY2], MARKER_LINE_ANIM_DUR);\n\treturn [rectAnim, groupAnim];\n}\n\nexport function animateBar(bar, x, yTop, width, offset=0, meta={}) {\n\tlet [height, y] = getBarHeightAndYAttr(yTop, meta.zeroLine);\n\ty -= offset;\n\tif(bar.nodeName !== 'rect') {\n\t\tlet rect = bar.childNodes[0];\n\t\tlet rectAnim = [\n\t\t\trect,\n\t\t\t{width: width, height: height},\n\t\t\tUNIT_ANIM_DUR,\n\t\t\tSTD_EASING\n\t\t];\n\n\t\tlet oldCoordStr = bar.getAttribute(\"transform\").split(\"(\")[1].slice(0, -1);\n\t\tlet groupAnim = translate(bar, oldCoordStr, [x, y], MARKER_LINE_ANIM_DUR);\n\t\treturn [rectAnim, groupAnim];\n\t} else {\n\t\treturn [[bar, {width: width, height: height, x: x, y: y}, UNIT_ANIM_DUR, STD_EASING]];\n\t}\n\t// bar.animate({height: args.newHeight, y: yTop}, UNIT_ANIM_DUR, mina.easein);\n}\n\nexport function animateDot(dot, x, y) {\n\tif(dot.nodeName !== 'circle') {\n\t\tlet oldCoordStr = dot.getAttribute(\"transform\").split(\"(\")[1].slice(0, -1);\n\t\tlet groupAnim = translate(dot, oldCoordStr, [x, y], MARKER_LINE_ANIM_DUR);\n\t\treturn [groupAnim];\n\t} else {\n\t\treturn [[dot, {cx: x, cy: y}, UNIT_ANIM_DUR, STD_EASING]];\n\t}\n\t// dot.animate({cy: yTop}, UNIT_ANIM_DUR, mina.easein);\n}\n\nexport function animatePath(paths, newXList, newYList, zeroLine, spline) {\n\tlet pathComponents = [];\n\tlet pointsStr = newYList.map((y, i) => (newXList[i] + ',' + y)).join(\"L\");\n\n\tif (spline)\n\t\tpointsStr = getSplineCurvePointsStr(newXList, newYList);\n\n\tconst animPath = [paths.path, {d:\"M\" + pointsStr}, PATH_ANIM_DUR, STD_EASING];\n\tpathComponents.push(animPath);\n\n\tif(paths.region) {\n\t\tlet regStartPt = `${newXList[0]},${zeroLine}L`;\n\t\tlet regEndPt = `L${newXList.slice(-1)[0]}, ${zeroLine}`;\n\n\t\tconst animRegion = [\n\t\t\tpaths.region,\n\t\t\t{d:\"M\" + regStartPt + pointsStr + regEndPt},\n\t\t\tPATH_ANIM_DUR,\n\t\t\tSTD_EASING\n\t\t];\n\t\tpathComponents.push(animRegion);\n\t}\n\n\treturn pathComponents;\n}\n\nexport function animatePathStr(oldPath, pathStr) {\n\treturn [oldPath, {d: pathStr}, UNIT_ANIM_DUR, STD_EASING];\n}\n","// Leveraging SMIL Animations\n\nimport { REPLACE_ALL_NEW_DUR } from './animate';\n\nconst EASING = {\n\tease: \"0.25 0.1 0.25 1\",\n\tlinear: \"0 0 1 1\",\n\t// easein: \"0.42 0 1 1\",\n\teasein: \"0.1 0.8 0.2 1\",\n\teaseout: \"0 0 0.58 1\",\n\teaseinout: \"0.42 0 0.58 1\"\n};\n\nfunction animateSVGElement(element, props, dur, easingType=\"linear\", type=undefined, oldValues={}) {\n\n\tlet animElement = element.cloneNode(true);\n\tlet newElement = element.cloneNode(true);\n\n\tfor(var attributeName in props) {\n\t\tlet animateElement;\n\t\tif(attributeName === 'transform') {\n\t\t\tanimateElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"animateTransform\");\n\t\t} else {\n\t\t\tanimateElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"animate\");\n\t\t}\n\t\tlet currentValue = oldValues[attributeName] || element.getAttribute(attributeName);\n\t\tlet value = props[attributeName];\n\n\t\tlet animAttr = {\n\t\t\tattributeName: attributeName,\n\t\t\tfrom: currentValue,\n\t\t\tto: value,\n\t\t\tbegin: \"0s\",\n\t\t\tdur: dur/1000 + \"s\",\n\t\t\tvalues: currentValue + \";\" + value,\n\t\t\tkeySplines: EASING[easingType],\n\t\t\tkeyTimes: \"0;1\",\n\t\t\tcalcMode: \"spline\",\n\t\t\tfill: 'freeze'\n\t\t};\n\n\t\tif(type) {\n\t\t\tanimAttr[\"type\"] = type;\n\t\t}\n\n\t\tfor (var i in animAttr) {\n\t\t\tanimateElement.setAttribute(i, animAttr[i]);\n\t\t}\n\n\t\tanimElement.appendChild(animateElement);\n\n\t\tif(type) {\n\t\t\tnewElement.setAttribute(attributeName, `translate(${value})`);\n\t\t} else {\n\t\t\tnewElement.setAttribute(attributeName, value);\n\t\t}\n\t}\n\n\treturn [animElement, newElement];\n}\n\nexport function transform(element, style) { // eslint-disable-line no-unused-vars\n\telement.style.transform = style;\n\telement.style.webkitTransform = style;\n\telement.style.msTransform = style;\n\telement.style.mozTransform = style;\n\telement.style.oTransform = style;\n}\n\nfunction animateSVG(svgContainer, elements) {\n\tlet newElements = [];\n\tlet animElements = [];\n\n\telements.map(element => {\n\t\tlet unit = element[0];\n\t\tlet parent = unit.parentNode;\n\n\t\tlet animElement, newElement;\n\n\t\telement[0] = unit;\n\t\t[animElement, newElement] = animateSVGElement(...element);\n\n\t\tnewElements.push(newElement);\n\t\tanimElements.push([animElement, parent]);\n\t\t\n\t\tif (parent) {\n\t\t\tparent.replaceChild(animElement, unit);\n\t\t}\n\t});\n\n\tlet animSvg = svgContainer.cloneNode(true);\n\n\tanimElements.map((animElement, i) => {\n\t\tif (animElement[1]) {\n\t\t\tanimElement[1].replaceChild(newElements[i], animElement[0]);\n\t\t\telements[i][0] = newElements[i];\n\t\t}\n\t});\n\n\treturn animSvg;\n}\n\nexport function runSMILAnimation(parent, svgElement, elementsToAnimate) {\n\tif(elementsToAnimate.length === 0) return;\n\n\tlet animSvgElement = animateSVG(svgElement, elementsToAnimate);\n\tif(svgElement.parentNode == parent) {\n\t\tparent.removeChild(svgElement);\n\t\tparent.appendChild(animSvgElement);\n\n\t}\n\n\t// Replace the new svgElement (data has already been replaced)\n\tsetTimeout(() => {\n\t\tif(animSvgElement.parentNode == parent) {\n\t\t\tparent.removeChild(animSvgElement);\n\t\t\tparent.appendChild(svgElement);\n\t\t}\n\t}, REPLACE_ALL_NEW_DUR);\n}\n","import { $ } from '../utils/dom';\nimport { CSSTEXT } from '../../css/chartsCss';\n\nexport function downloadFile(filename, data) {\n\tvar a = document.createElement('a');\n\ta.style = \"display: none\";\n\tvar blob = new Blob(data, {type: \"image/svg+xml; charset=utf-8\"});\n\tvar url = window.URL.createObjectURL(blob);\n\ta.href = url;\n\ta.download = filename;\n\tdocument.body.appendChild(a);\n\ta.click();\n\tsetTimeout(function(){\n\t\tdocument.body.removeChild(a);\n\t\twindow.URL.revokeObjectURL(url);\n\t}, 300);\n}\n\nexport function prepareForExport(svg) {\n\tlet clone = svg.cloneNode(true);\n\tclone.classList.add('chart-container');\n\tclone.setAttribute('xmlns', \"http://www.w3.org/2000/svg\");\n\tclone.setAttribute('xmlns:xlink', \"http://www.w3.org/1999/xlink\");\n\tlet styleEl = $.create('style', {\n\t\t'innerHTML': CSSTEXT\n\t});\n\tclone.insertBefore(styleEl, clone.firstChild);\n\n\tlet container = $.create('div');\n\tcontainer.appendChild(clone);\n\n\treturn container.innerHTML;\n}\n","// Playing around with dates\n\nexport const NO_OF_YEAR_MONTHS = 12;\nexport const NO_OF_DAYS_IN_WEEK = 7;\nexport const DAYS_IN_YEAR = 375;\nexport const NO_OF_MILLIS = 1000;\nexport const SEC_IN_DAY = 86400;\n\nexport const MONTH_NAMES = [\"January\", \"February\", \"March\", \"April\", \"May\",\n\t\"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\nexport const MONTH_NAMES_SHORT = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n\t\"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\nexport const DAY_NAMES_SHORT = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nexport const DAY_NAMES = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",\n\t\"Thursday\", \"Friday\", \"Saturday\"];\n\n// https://stackoverflow.com/a/11252167/6495043\nfunction treatAsUtc(date) {\n\tlet result = new Date(date);\n\tresult.setMinutes(result.getMinutes() - result.getTimezoneOffset());\n\treturn result;\n}\n\nexport function getYyyyMmDd(date) {\n\tlet dd = date.getDate();\n\tlet mm = date.getMonth() + 1; // getMonth() is zero-based\n\treturn [\n\t\tdate.getFullYear(),\n\t\t(mm>9 ? '' : '0') + mm,\n\t\t(dd>9 ? '' : '0') + dd\n\t].join('-');\n}\n\nexport function clone(date) {\n\treturn new Date(date.getTime());\n}\n\nexport function timestampSec(date) {\n\treturn date.getTime()/NO_OF_MILLIS;\n}\n\nexport function timestampToMidnight(timestamp, roundAhead = false) {\n\tlet midnightTs = Math.floor(timestamp - (timestamp % SEC_IN_DAY));\n\tif(roundAhead) {\n\t\treturn midnightTs + SEC_IN_DAY;\n\t}\n\treturn midnightTs;\n}\n\n// export function getMonthsBetween(startDate, endDate) {}\n\nexport function getWeeksBetween(startDate, endDate) {\n\tlet weekStartDate = setDayToSunday(startDate);\n\treturn Math.ceil(getDaysBetween(weekStartDate, endDate) / NO_OF_DAYS_IN_WEEK);\n}\n\nexport function getDaysBetween(startDate, endDate) {\n\tlet millisecondsPerDay = SEC_IN_DAY * NO_OF_MILLIS;\n\treturn (treatAsUtc(endDate) - treatAsUtc(startDate)) / millisecondsPerDay;\n}\n\nexport function areInSameMonth(startDate, endDate) {\n\treturn startDate.getMonth() === endDate.getMonth()\n\t\t&& startDate.getFullYear() === endDate.getFullYear();\n}\n\nexport function getMonthName(i, short=false) {\n\tlet monthName = MONTH_NAMES[i];\n\treturn short ? monthName.slice(0, 3) : monthName;\n}\n\nexport function getLastDateInMonth (month, year) {\n\treturn new Date(year, month + 1, 0); // 0: last day in previous month\n}\n\n// mutates\nexport function setDayToSunday(date) {\n\tlet newDate = clone(date);\n\tconst day = newDate.getDay();\n\tif(day !== 0) {\n\t\taddDays(newDate, (-1) * day);\n\t}\n\treturn newDate;\n}\n\n// mutates\nexport function addDays(date, numberOfDays) {\n\tdate.setDate(date.getDate() + numberOfDays);\n}\n","import { makeSVGGroup } from '../utils/draw';\nimport { makeText, makePath, xLine, yLine, yMarker, yRegion, datasetBar, datasetDot, percentageBar, getPaths, heatSquare } from '../utils/draw';\nimport { equilizeNoOfElements } from '../utils/draw-utils';\nimport { translateHoriLine, translateVertLine, animateRegion, animateBar,\n\tanimateDot, animatePath, animatePathStr } from '../utils/animate';\nimport { getMonthName } from '../utils/date-utils';\n\nclass ChartComponent {\n\tconstructor({\n\t\tlayerClass = '',\n\t\tlayerTransform = '',\n\t\tconstants,\n\n\t\tgetData,\n\t\tmakeElements,\n\t\tanimateElements\n\t}) {\n\t\tthis.layerTransform = layerTransform;\n\t\tthis.constants = constants;\n\n\t\tthis.makeElements = makeElements;\n\t\tthis.getData = getData;\n\n\t\tthis.animateElements = animateElements;\n\n\t\tthis.store = [];\n\t\tthis.labels = [];\n\n\t\tthis.layerClass = layerClass;\n\t\tthis.layerClass = typeof(this.layerClass) === 'function'\n\t\t\t? this.layerClass() : this.layerClass;\n\n\t\tthis.refresh();\n\t}\n\n\trefresh(data) {\n\t\tthis.data = data || this.getData();\n\t}\n\n\tsetup(parent) {\n\t\tthis.layer = makeSVGGroup(this.layerClass, this.layerTransform, parent);\n\t}\n\n\tmake() {\n\t\tthis.render(this.data);\n\t\tthis.oldData = this.data;\n\t}\n\n\trender(data) {\n\t\tthis.store = this.makeElements(data);\n\n\t\tthis.layer.textContent = '';\n\t\tthis.store.forEach(element => {\n\t\t\tthis.layer.appendChild(element);\n\t\t});\n\t\tthis.labels.forEach(element => {\n\t\t\tthis.layer.appendChild(element);\n\t\t});\n\t}\n\n\tupdate(animate = true) {\n\t\tthis.refresh();\n\t\tlet animateElements = [];\n\t\tif(animate) {\n\t\t\tanimateElements = this.animateElements(this.data) || [];\n\t\t}\n\t\treturn animateElements;\n\t}\n}\n\nlet componentConfigs = {\n\tdonutSlices: {\n\t\tlayerClass: 'donut-slices',\n\t\tmakeElements(data) {\n\t\t\treturn data.sliceStrings.map((s, i) => {\n\t\t\t\tlet slice = makePath(s, 'donut-path', data.colors[i], 'none', data.strokeWidth);\n\t\t\t\tslice.style.transition = 'transform .3s;';\n\t\t\t\treturn slice;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\treturn this.store.map((slice, i) => animatePathStr(slice, newData.sliceStrings[i]));\n\t\t},\n\t},\n\tpieSlices: {\n\t\tlayerClass: 'pie-slices',\n\t\tmakeElements(data) {\n\t\t\treturn data.sliceStrings.map((s, i) =>{\n\t\t\t\tlet slice = makePath(s, 'pie-path', 'none', data.colors[i]);\n\t\t\t\tslice.style.transition = 'transform .3s;';\n\t\t\t\treturn slice;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\treturn this.store.map((slice, i) =>\n\t\t\t\tanimatePathStr(slice, newData.sliceStrings[i])\n\t\t\t);\n\t\t}\n\t},\n\tpercentageBars: {\n\t\tlayerClass: 'percentage-bars',\n\t\tmakeElements(data) {\n\t\t\treturn data.xPositions.map((x, i) =>{\n\t\t\t\tlet y = 0;\n\t\t\t\tlet bar = percentageBar(x, y, data.widths[i],\n\t\t\t\t\tthis.constants.barHeight, this.constants.barDepth, data.colors[i]);\n\t\t\t\treturn bar;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tif(newData) return [];\n\t\t}\n\t},\n\tyAxis: {\n\t\tlayerClass: 'y axis',\n\t\tmakeElements(data) {\n\t\t\treturn data.positions.map((position, i) =>\n\t\t\t\tyLine(position, data.labels[i], this.constants.width,\n\t\t\t\t\t{mode: this.constants.mode, pos: this.constants.pos, shortenNumbers: this.constants.shortenNumbers})\n\t\t\t);\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tlet newPos = newData.positions;\n\t\t\tlet newLabels = newData.labels;\n\t\t\tlet oldPos = this.oldData.positions;\n\t\t\tlet oldLabels = this.oldData.labels;\n\n\t\t\t[oldPos, newPos] = equilizeNoOfElements(oldPos, newPos);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\tpositions: oldPos,\n\t\t\t\tlabels: newLabels\n\t\t\t});\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateHoriLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\txAxis: {\n\t\tlayerClass: 'x axis',\n\t\tmakeElements(data) {\n\t\t\treturn data.positions.map((position, i) =>\n\t\t\t\txLine(position, data.calcLabels[i], this.constants.height,\n\t\t\t\t\t{mode: this.constants.mode, pos: this.constants.pos})\n\t\t\t);\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tlet newPos = newData.positions;\n\t\t\tlet newLabels = newData.calcLabels;\n\t\t\tlet oldPos = this.oldData.positions;\n\t\t\tlet oldLabels = this.oldData.calcLabels;\n\n\t\t\t[oldPos, newPos] = equilizeNoOfElements(oldPos, newPos);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\tpositions: oldPos,\n\t\t\t\tcalcLabels: newLabels\n\t\t\t});\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateVertLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\tyMarkers: {\n\t\tlayerClass: 'y-markers',\n\t\tmakeElements(data) {\n\t\t\treturn data.map(m =>\n\t\t\t\tyMarker(m.position, m.label, this.constants.width,\n\t\t\t\t\t{labelPos: m.options.labelPos, mode: 'span', lineType: 'dashed'})\n\t\t\t);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\t[this.oldData, newData] = equilizeNoOfElements(this.oldData, newData);\n\n\t\t\tlet newPos = newData.map(d => d.position);\n\t\t\tlet newLabels = newData.map(d => d.label);\n\t\t\tlet newOptions = newData.map(d => d.options);\n\n\t\t\tlet oldPos = this.oldData.map(d => d.position);\n\n\t\t\tthis.render(oldPos.map((pos, i) => {\n\t\t\t\treturn {\n\t\t\t\t\tposition: oldPos[i],\n\t\t\t\t\tlabel: newLabels[i],\n\t\t\t\t\toptions: newOptions[i]\n\t\t\t\t};\n\t\t\t}));\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateHoriLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\tyRegions: {\n\t\tlayerClass: 'y-regions',\n\t\tmakeElements(data) {\n\t\t\treturn data.map(r =>\n\t\t\t\tyRegion(r.startPos, r.endPos, this.constants.width,\n\t\t\t\t\tr.label, {labelPos: r.options.labelPos})\n\t\t\t);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\t[this.oldData, newData] = equilizeNoOfElements(this.oldData, newData);\n\n\t\t\tlet newPos = newData.map(d => d.endPos);\n\t\t\tlet newLabels = newData.map(d => d.label);\n\t\t\tlet newStarts = newData.map(d => d.startPos);\n\t\t\tlet newOptions = newData.map(d => d.options);\n\n\t\t\tlet oldPos = this.oldData.map(d => d.endPos);\n\t\t\tlet oldStarts = this.oldData.map(d => d.startPos);\n\n\t\t\tthis.render(oldPos.map((pos, i) => {\n\t\t\t\treturn {\n\t\t\t\t\tstartPos: oldStarts[i],\n\t\t\t\t\tendPos: oldPos[i],\n\t\t\t\t\tlabel: newLabels[i],\n\t\t\t\t\toptions: newOptions[i]\n\t\t\t\t};\n\t\t\t}));\n\n\t\t\tlet animateElements = [];\n\n\t\t\tthis.store.map((rectGroup, i) => {\n\t\t\t\tanimateElements = animateElements.concat(animateRegion(\n\t\t\t\t\trectGroup, newStarts[i], newPos[i], oldPos[i]\n\t\t\t\t));\n\t\t\t});\n\n\t\t\treturn animateElements;\n\t\t}\n\t},\n\n\theatDomain: {\n\t\tlayerClass: function() { return 'heat-domain domain-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet {index, colWidth, rowHeight, squareSize, radius, xTranslate} = this.constants;\n\t\t\tlet monthNameHeight = -12;\n\t\t\tlet x = xTranslate, y = 0;\n\n\t\t\tthis.serializedSubDomains = [];\n\n\t\t\tdata.cols.map((week, weekNo) => {\n\t\t\t\tif(weekNo === 1) {\n\t\t\t\t\tthis.labels.push(\n\t\t\t\t\t\tmakeText('domain-name', x, monthNameHeight, getMonthName(index, true).toUpperCase(),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfontSize: 9\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tweek.map((day, i) => {\n\t\t\t\t\tif(day.fill) {\n\t\t\t\t\t\tlet data = {\n\t\t\t\t\t\t\t'data-date': day.yyyyMmDd,\n\t\t\t\t\t\t\t'data-value': day.dataValue,\n\t\t\t\t\t\t\t'data-day': i\n\t\t\t\t\t\t};\n\t\t\t\t\t\tlet square = heatSquare('day', x, y, squareSize, radius, day.fill, data);\n\t\t\t\t\t\tthis.serializedSubDomains.push(square);\n\t\t\t\t\t}\n\t\t\t\t\ty += rowHeight;\n\t\t\t\t});\n\t\t\t\ty = 0;\n\t\t\t\tx += colWidth;\n\t\t\t});\n\n\t\t\treturn this.serializedSubDomains;\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tif(newData) return [];\n\t\t}\n\t},\n\n\tbarGraph: {\n\t\tlayerClass: function() { return 'dataset-units dataset-bars dataset-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet c = this.constants;\n\t\t\tthis.unitType = 'bar';\n\t\t\tthis.units = data.yPositions.map((y, j) => {\n\t\t\t\treturn datasetBar(\n\t\t\t\t\tdata.xPositions[j],\n\t\t\t\t\ty,\n\t\t\t\t\tdata.barWidth,\n\t\t\t\t\tc.color,\n\t\t\t\t\tdata.labels[j],\n\t\t\t\t\tj,\n\t\t\t\t\tdata.offsets[j],\n\t\t\t\t\t{\n\t\t\t\t\t\tzeroLine: data.zeroLine,\n\t\t\t\t\t\tbarsWidth: data.barsWidth,\n\t\t\t\t\t\tminHeight: c.minHeight\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t\treturn this.units;\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\tlet newXPos = newData.xPositions;\n\t\t\tlet newYPos = newData.yPositions;\n\t\t\tlet newOffsets = newData.offsets;\n\t\t\tlet newLabels = newData.labels;\n\n\t\t\tlet oldXPos = this.oldData.xPositions;\n\t\t\tlet oldYPos = this.oldData.yPositions;\n\t\t\tlet oldOffsets = this.oldData.offsets;\n\t\t\tlet oldLabels = this.oldData.labels;\n\n\t\t\t[oldXPos, newXPos] = equilizeNoOfElements(oldXPos, newXPos);\n\t\t\t[oldYPos, newYPos] = equilizeNoOfElements(oldYPos, newYPos);\n\t\t\t[oldOffsets, newOffsets] = equilizeNoOfElements(oldOffsets, newOffsets);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\txPositions: oldXPos,\n\t\t\t\tyPositions: oldYPos,\n\t\t\t\toffsets: oldOffsets,\n\t\t\t\tlabels: newLabels,\n\n\t\t\t\tzeroLine: this.oldData.zeroLine,\n\t\t\t\tbarsWidth: this.oldData.barsWidth,\n\t\t\t\tbarWidth: this.oldData.barWidth,\n\t\t\t});\n\n\t\t\tlet animateElements = [];\n\n\t\t\tthis.store.map((bar, i) => {\n\t\t\t\tanimateElements = animateElements.concat(animateBar(\n\t\t\t\t\tbar, newXPos[i], newYPos[i], newData.barWidth, newOffsets[i],\n\t\t\t\t\t{zeroLine: newData.zeroLine}\n\t\t\t\t));\n\t\t\t});\n\n\t\t\treturn animateElements;\n\t\t}\n\t},\n\n\tlineGraph: {\n\t\tlayerClass: function() { return 'dataset-units dataset-line dataset-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet c = this.constants;\n\t\t\tthis.unitType = 'dot';\n\t\t\tthis.paths = {};\n\t\t\tif(!c.hideLine) {\n\t\t\t\tthis.paths = getPaths(\n\t\t\t\t\tdata.xPositions,\n\t\t\t\t\tdata.yPositions,\n\t\t\t\t\tc.color,\n\t\t\t\t\t{\n\t\t\t\t\t\theatline: c.heatline,\n\t\t\t\t\t\tregionFill: c.regionFill,\n\t\t\t\t\t\tspline: c.spline\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsvgDefs: c.svgDefs,\n\t\t\t\t\t\tzeroLine: data.zeroLine\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.units = [];\n\t\t\tif(!c.hideDots) {\n\t\t\t\tthis.units = data.yPositions.map((y, j) => {\n\t\t\t\t\treturn datasetDot(\n\t\t\t\t\t\tdata.xPositions[j],\n\t\t\t\t\t\ty,\n\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\tc.color,\n\t\t\t\t\t\t(c.valuesOverPoints ? data.values[j] : ''),\n\t\t\t\t\t\tj\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn Object.values(this.paths).concat(this.units);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\tlet newXPos = newData.xPositions;\n\t\t\tlet newYPos = newData.yPositions;\n\t\t\tlet newValues = newData.values;\n\n\t\t\tlet oldXPos = this.oldData.xPositions;\n\t\t\tlet oldYPos = this.oldData.yPositions;\n\t\t\tlet oldValues = this.oldData.values;\n\n\t\t\t[oldXPos, newXPos] = equilizeNoOfElements(oldXPos, newXPos);\n\t\t\t[oldYPos, newYPos] = equilizeNoOfElements(oldYPos, newYPos);\n\t\t\t[oldValues, newValues] = equilizeNoOfElements(oldValues, newValues);\n\n\t\t\tthis.render({\n\t\t\t\txPositions: oldXPos,\n\t\t\t\tyPositions: oldYPos,\n\t\t\t\tvalues: newValues,\n\n\t\t\t\tzeroLine: this.oldData.zeroLine,\n\t\t\t\tradius: this.oldData.radius,\n\t\t\t});\n\n\t\t\tlet animateElements = [];\n\n\t\t\tif(Object.keys(this.paths).length) {\n\t\t\t\tanimateElements = animateElements.concat(animatePath(\n\t\t\t\t\tthis.paths, newXPos, newYPos, newData.zeroLine, this.constants.spline));\n\t\t\t}\n\n\t\t\tif(this.units.length) {\n\t\t\t\tthis.units.map((dot, i) => {\n\t\t\t\t\tanimateElements = animateElements.concat(animateDot(\n\t\t\t\t\t\tdot, newXPos[i], newYPos[i]));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn animateElements;\n\t\t}\n\t}\n};\n\nexport function getComponent(name, constants, getData) {\n\tlet keys = Object.keys(componentConfigs).filter(k => name.includes(k));\n\tlet config = componentConfigs[keys[0]];\n\tObject.assign(config, {\n\t\tconstants: constants,\n\t\tgetData: getData\n\t});\n\treturn new ChartComponent(config);\n}\n","import { floatTwo } from './helpers';\n\nfunction normalize(x) {\n\t// Calculates mantissa and exponent of a number\n\t// Returns normalized number and exponent\n\t// https://stackoverflow.com/q/9383593/6495043\n\n\tif(x===0) {\n\t\treturn [0, 0];\n\t}\n\tif(isNaN(x)) {\n\t\treturn {mantissa: -6755399441055744, exponent: 972};\n\t}\n\tvar sig = x > 0 ? 1 : -1;\n\tif(!isFinite(x)) {\n\t\treturn {mantissa: sig * 4503599627370496, exponent: 972};\n\t}\n\n\tx = Math.abs(x);\n\tvar exp = Math.floor(Math.log10(x));\n\tvar man = x/Math.pow(10, exp);\n\n\treturn [sig * man, exp];\n}\n\nfunction getChartRangeIntervals(max, min=0) {\n\tlet upperBound = Math.ceil(max);\n\tlet lowerBound = Math.floor(min);\n\tlet range = upperBound - lowerBound;\n\n\tlet noOfParts = range;\n\tlet partSize = 1;\n\n\t// To avoid too many partitions\n\tif(range > 5) {\n\t\tif(range % 2 !== 0) {\n\t\t\tupperBound++;\n\t\t\t// Recalc range\n\t\t\trange = upperBound - lowerBound;\n\t\t}\n\t\tnoOfParts = range/2;\n\t\tpartSize = 2;\n\t}\n\n\t// Special case: 1 and 2\n\tif(range <= 2) {\n\t\tnoOfParts = 4;\n\t\tpartSize = range/noOfParts;\n\t}\n\n\t// Special case: 0\n\tif(range === 0) {\n\t\tnoOfParts = 5;\n\t\tpartSize = 1;\n\t}\n\n\tlet intervals = [];\n\tfor(var i = 0; i <= noOfParts; i++){\n\t\tintervals.push(lowerBound + partSize * i);\n\t}\n\treturn intervals;\n}\n\nfunction getChartIntervals(maxValue, minValue=0) {\n\tlet [normalMaxValue, exponent] = normalize(maxValue);\n\tlet normalMinValue = minValue ? minValue/Math.pow(10, exponent): 0;\n\n\t// Allow only 7 significant digits\n\tnormalMaxValue = normalMaxValue.toFixed(6);\n\n\tlet intervals = getChartRangeIntervals(normalMaxValue, normalMinValue);\n\tintervals = intervals.map(value => value * Math.pow(10, exponent));\n\treturn intervals;\n}\n\nexport function calcChartIntervals(values, withMinimum=false) {\n\t//*** Where the magic happens ***\n\n\t// Calculates best-fit y intervals from given values\n\t// and returns the interval array\n\n\tlet maxValue = Math.max(...values);\n\tlet minValue = Math.min(...values);\n\n\t// Exponent to be used for pretty print\n\tlet exponent = 0, intervals = []; // eslint-disable-line no-unused-vars\n\n\tfunction getPositiveFirstIntervals(maxValue, absMinValue) {\n\t\tlet intervals = getChartIntervals(maxValue);\n\n\t\tlet intervalSize = intervals[1] - intervals[0];\n\n\t\t// Then unshift the negative values\n\t\tlet value = 0;\n\t\tfor(var i = 1; value < absMinValue; i++) {\n\t\t\tvalue += intervalSize;\n\t\t\tintervals.unshift((-1) * value);\n\t\t}\n\t\treturn intervals;\n\t}\n\n\t// CASE I: Both non-negative\n\n\tif(maxValue >= 0 && minValue >= 0) {\n\t\texponent = normalize(maxValue)[1];\n\t\tif(!withMinimum) {\n\t\t\tintervals = getChartIntervals(maxValue);\n\t\t} else {\n\t\t\tintervals = getChartIntervals(maxValue, minValue);\n\t\t}\n\t}\n\n\t// CASE II: Only minValue negative\n\n\telse if(maxValue > 0 && minValue < 0) {\n\t\t// `withMinimum` irrelevant in this case,\n\t\t// We'll be handling both sides of zero separately\n\t\t// (both starting from zero)\n\t\t// Because ceil() and floor() behave differently\n\t\t// in those two regions\n\n\t\tlet absMinValue = Math.abs(minValue);\n\n\t\tif(maxValue >= absMinValue) {\n\t\t\texponent = normalize(maxValue)[1];\n\t\t\tintervals = getPositiveFirstIntervals(maxValue, absMinValue);\n\t\t} else {\n\t\t\t// Mirror: maxValue => absMinValue, then change sign\n\t\t\texponent = normalize(absMinValue)[1];\n\t\t\tlet posIntervals = getPositiveFirstIntervals(absMinValue, maxValue);\n\t\t\tintervals = posIntervals.reverse().map(d => d * (-1));\n\t\t}\n\n\t}\n\n\t// CASE III: Both non-positive\n\n\telse if(maxValue <= 0 && minValue <= 0) {\n\t\t// Mirrored Case I:\n\t\t// Work with positives, then reverse the sign and array\n\n\t\tlet pseudoMaxValue = Math.abs(minValue);\n\t\tlet pseudoMinValue = Math.abs(maxValue);\n\n\t\texponent = normalize(pseudoMaxValue)[1];\n\t\tif(!withMinimum) {\n\t\t\tintervals = getChartIntervals(pseudoMaxValue);\n\t\t} else {\n\t\t\tintervals = getChartIntervals(pseudoMaxValue, pseudoMinValue);\n\t\t}\n\n\t\tintervals = intervals.reverse().map(d => d * (-1));\n\t}\n\n\treturn intervals;\n}\n\nexport function getZeroIndex(yPts) {\n\tlet zeroIndex;\n\tlet interval = getIntervalSize(yPts);\n\tif(yPts.indexOf(0) >= 0) {\n\t\t// the range has a given zero\n\t\t// zero-line on the chart\n\t\tzeroIndex = yPts.indexOf(0);\n\t} else if(yPts[0] > 0) {\n\t\t// Minimum value is positive\n\t\t// zero-line is off the chart: below\n\t\tlet min = yPts[0];\n\t\tzeroIndex = (-1) * min / interval;\n\t} else {\n\t\t// Maximum value is negative\n\t\t// zero-line is off the chart: above\n\t\tlet max = yPts[yPts.length - 1];\n\t\tzeroIndex = (-1) * max / interval + (yPts.length - 1);\n\t}\n\treturn zeroIndex;\n}\n\nexport function getRealIntervals(max, noOfIntervals, min = 0, asc = 1) {\n\tlet range = max - min;\n\tlet part = range * 1.0 / noOfIntervals;\n\tlet intervals = [];\n\n\tfor(var i = 0; i <= noOfIntervals; i++) {\n\t\tintervals.push(min + part * i);\n\t}\n\n\treturn asc ? intervals : intervals.reverse();\n}\n\nexport function getIntervalSize(orderedArray) {\n\treturn orderedArray[1] - orderedArray[0];\n}\n\nexport function getValueRange(orderedArray) {\n\treturn orderedArray[orderedArray.length-1] - orderedArray[0];\n}\n\nexport function scale(val, yAxis) {\n\treturn floatTwo(yAxis.zeroLine - val * yAxis.scaleMultiplier);\n}\n\nexport function isInRange(val, min, max) {\n\treturn val > min && val < max;\n}\n\nexport function isInRange2D(coord, minCoord, maxCoord) {\n\treturn isInRange(coord[0], minCoord[0], maxCoord[0])\n\t\t&& isInRange(coord[1], minCoord[1], maxCoord[1]);\n}\n\nexport function getClosestInArray(goal, arr, index = false) {\n\tlet closest = arr.reduce(function(prev, curr) {\n\t\treturn (Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);\n\t}, []);\n\n\treturn index ? arr.indexOf(closest) : closest;\n}\n\nexport function calcDistribution(values, distributionSize) {\n\t// Assume non-negative values,\n\t// implying distribution minimum at zero\n\n\tlet dataMaxValue = Math.max(...values);\n\n\tlet distributionStep = 1 / (distributionSize - 1);\n\tlet distribution = [];\n\n\tfor(var i = 0; i < distributionSize; i++) {\n\t\tlet checkpoint = dataMaxValue * (distributionStep * i);\n\t\tdistribution.push(checkpoint);\n\t}\n\n\treturn distribution;\n}\n\nexport function getMaxCheckpoint(value, distribution) {\n\treturn distribution.filter(d => d < value).length;\n}\n","import { fillArray } from '../utils/helpers';\nimport { DEFAULT_AXIS_CHART_TYPE, AXIS_DATASET_CHART_TYPES, DEFAULT_CHAR_WIDTH } from '../utils/constants';\n\nexport function dataPrep(data, type) {\n\tdata.labels = data.labels || [];\n\n\tlet datasetLength = data.labels.length;\n\n\t// Datasets\n\tlet datasets = data.datasets;\n\tlet zeroArray = new Array(datasetLength).fill(0);\n\tif(!datasets) {\n\t\t// default\n\t\tdatasets = [{\n\t\t\tvalues: zeroArray\n\t\t}];\n\t}\n\n\tdatasets.map(d=> {\n\t\t// Set values\n\t\tif(!d.values) {\n\t\t\td.values = zeroArray;\n\t\t} else {\n\t\t\t// Check for non values\n\t\t\tlet vals = d.values;\n\t\t\tvals = vals.map(val => (!isNaN(val) ? val : 0));\n\n\t\t\t// Trim or extend\n\t\t\tif(vals.length > datasetLength) {\n\t\t\t\tvals = vals.slice(0, datasetLength);\n\t\t\t} else {\n\t\t\t\tvals = fillArray(vals, datasetLength - vals.length, 0);\n\t\t\t}\n\t\t\td.values = vals;\n\t\t}\n\n\t\t// Set type\n\t\tif(!d.chartType ) {\n\t\t\tif(!AXIS_DATASET_CHART_TYPES.includes(type)) type === DEFAULT_AXIS_CHART_TYPE;\n\t\t\td.chartType = type;\n\t\t}\n\n\t});\n\n\t// Markers\n\n\t// Regions\n\t// data.yRegions = data.yRegions || [];\n\tif(data.yRegions) {\n\t\tdata.yRegions.map(d => {\n\t\t\tif(d.end < d.start) {\n\t\t\t\t[d.start, d.end] = [d.end, d.start];\n\t\t\t}\n\t\t});\n\t}\n\n\treturn data;\n}\n\nexport function zeroDataPrep(realData) {\n\tlet datasetLength = realData.labels.length;\n\tlet zeroArray = new Array(datasetLength).fill(0);\n\n\tlet zeroData = {\n\t\tlabels: realData.labels.slice(0, -1),\n\t\tdatasets: realData.datasets.map(d => {\n\t\t\treturn {\n\t\t\t\tname: '',\n\t\t\t\tvalues: zeroArray.slice(0, -1),\n\t\t\t\tchartType: d.chartType\n\t\t\t};\n\t\t}),\n\t};\n\n\tif(realData.yMarkers) {\n\t\tzeroData.yMarkers = [\n\t\t\t{\n\t\t\t\tvalue: 0,\n\t\t\t\tlabel: ''\n\t\t\t}\n\t\t];\n\t}\n\n\tif(realData.yRegions) {\n\t\tzeroData.yRegions = [\n\t\t\t{\n\t\t\t\tstart: 0,\n\t\t\t\tend: 0,\n\t\t\t\tlabel: ''\n\t\t\t}\n\t\t];\n\t}\n\n\treturn zeroData;\n}\n\nexport function getShortenedLabels(chartWidth, labels=[], isSeries=true) {\n\tlet allowedSpace = chartWidth / labels.length;\n\tif(allowedSpace <= 0) allowedSpace = 1;\n\tlet allowedLetters = allowedSpace / DEFAULT_CHAR_WIDTH;\n\n\tlet seriesMultiple;\n\tif(isSeries) {\n\t\t// Find the maximum label length for spacing calculations\n\t\tlet maxLabelLength = Math.max(...labels.map(label => label.length));\n\t\tseriesMultiple = Math.ceil(maxLabelLength/allowedLetters);\n\t}\n\n\tlet calcLabels = labels.map((label, i) => {\n\t\tlabel += \"\";\n\t\tif(label.length > allowedLetters) {\n\n\t\t\tif(!isSeries) {\n\t\t\t\tif(allowedLetters-3 > 0) {\n\t\t\t\t\tlabel = label.slice(0, allowedLetters-3) + \" ...\";\n\t\t\t\t} else {\n\t\t\t\t\tlabel = label.slice(0, allowedLetters) + '..';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(i % seriesMultiple !== 0) {\n\t\t\t\t\tlabel = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn label;\n\t});\n\n\treturn calcLabels;\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { $ } from '../utils/dom';\nimport { TOOLTIP_POINTER_TRIANGLE_HEIGHT } from '../utils/constants';\n\nexport default class SvgTip {\n\tconstructor({\n\t\tparent = null,\n\t\tcolors = []\n\t}) {\n\t\tthis.parent = parent;\n\t\tthis.colors = colors;\n\t\tthis.titleName = '';\n\t\tthis.titleValue = '';\n\t\tthis.listValues = [];\n\t\tthis.titleValueFirst = 0;\n\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\n\t\tthis.top = 0;\n\t\tthis.left = 0;\n\n\t\tthis.setup();\n\t}\n\n\tsetup() {\n\t\tthis.makeTooltip();\n\t}\n\n\trefresh() {\n\t\tthis.fill();\n\t\tthis.calcPosition();\n\t}\n\n\tmakeTooltip() {\n\t\tthis.container = $.create('div', {\n\t\t\tinside: this.parent,\n\t\t\tclassName: 'graph-svg-tip comparison',\n\t\t\tinnerHTML: `\n\t\t\t\t
        \n\t\t\t\t
        `\n\t\t});\n\t\tthis.hideTip();\n\n\t\tthis.title = this.container.querySelector('.title');\n\t\tthis.dataPointList = this.container.querySelector('.data-point-list');\n\n\t\tthis.parent.addEventListener('mouseleave', () => {\n\t\t\tthis.hideTip();\n\t\t});\n\t}\n\n\tfill() {\n\t\tlet title;\n\t\tif(this.index) {\n\t\t\tthis.container.setAttribute('data-point-index', this.index);\n\t\t}\n\t\tif(this.titleValueFirst) {\n\t\t\ttitle = `${this.titleValue}${this.titleName}`;\n\t\t} else {\n\t\t\ttitle = `${this.titleName}${this.titleValue}`;\n\t\t}\n\t\tthis.title.innerHTML = title;\n\t\tthis.dataPointList.innerHTML = '';\n\n\t\tthis.listValues.map((set, i) => {\n\t\t\tconst color = this.colors[i] || 'black';\n\t\t\tlet value = set.formatted === 0 || set.formatted ? set.formatted : set.value;\n\n\t\t\tlet li = $.create('li', {\n\t\t\t\tstyles: {\n\t\t\t\t\t'border-top': `3px solid ${color}`\n\t\t\t\t},\n\t\t\t\tinnerHTML: `${ value === 0 || value ? value : '' }\n\t\t\t\t\t${set.title ? set.title : '' }`\n\t\t\t});\n\n\t\t\tthis.dataPointList.appendChild(li);\n\t\t});\n\t}\n\n\tcalcPosition() {\n\t\tlet width = this.container.offsetWidth;\n\n\t\tthis.top = this.y - this.container.offsetHeight\n\t\t\t- TOOLTIP_POINTER_TRIANGLE_HEIGHT;\n\t\tthis.left = this.x - width/2;\n\t\tlet maxLeft = this.parent.offsetWidth - width;\n\n\t\tlet pointer = this.container.querySelector('.svg-pointer');\n\n\t\tif(this.left < 0) {\n\t\t\tpointer.style.left = `calc(50% - ${-1 * this.left}px)`;\n\t\t\tthis.left = 0;\n\t\t} else if(this.left > maxLeft) {\n\t\t\tlet delta = this.left - maxLeft;\n\t\t\tlet pointerOffset = `calc(50% + ${delta}px)`;\n\t\t\tpointer.style.left = pointerOffset;\n\n\t\t\tthis.left = maxLeft;\n\t\t} else {\n\t\t\tpointer.style.left = `50%`;\n\t\t}\n\t}\n\n\tsetValues(x, y, title = {}, listValues = [], index = -1) {\n\t\tthis.titleName = title.name;\n\t\tthis.titleValue = title.value;\n\t\tthis.listValues = listValues;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.titleValueFirst = title.valueFirst || 0;\n\t\tthis.index = index;\n\t\tthis.refresh();\n\t}\n\n\thideTip() {\n\t\tthis.container.style.top = '0px';\n\t\tthis.container.style.left = '0px';\n\t\tthis.container.style.opacity = '0';\n\t}\n\n\tshowTip() {\n\t\tthis.container.style.top = this.top + 'px';\n\t\tthis.container.style.left = this.left + 'px';\n\t\tthis.container.style.opacity = '1';\n\t}\n}\n","export const CSSTEXT = \".chart-container{position:relative;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Roboto','Oxygen','Ubuntu','Cantarell','Fira Sans','Droid Sans','Helvetica Neue',sans-serif}.chart-container .axis,.chart-container .chart-label{fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .dataset-units circle{stroke:#fff;stroke-width:2}.chart-container .dataset-units path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container .dataset-path{stroke-width:2px}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .axis-line .specific-value{text-anchor:start}.chart-container .axis-line .y-line{text-anchor:end}.chart-container .axis-line .x-line{text-anchor:middle}.chart-container .legend-dataset-text{fill:#6c7680;font-weight:600}.graph-svg-tip{position:absolute;z-index:99999;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.graph-svg-tip ul{padding-left:0;display:flex}.graph-svg-tip ol{padding-left:0;display:flex}.graph-svg-tip ul.data-point-list li{min-width:90px;flex:1;font-weight:600}.graph-svg-tip strong{color:#dfe2e5;font-weight:600}.graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:' ';border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}\";","import SvgTip from '../objects/SvgTip';\nimport { $, isElementInViewport, getElementContentWidth, isHidden } from '../utils/dom';\nimport { makeSVGContainer, makeSVGDefs, makeSVGGroup, makeText } from '../utils/draw';\nimport { BASE_MEASURES, getExtraHeight, getExtraWidth, getTopOffset, getLeftOffset,\n\tINIT_CHART_UPDATE_TIMEOUT, CHART_POST_ANIMATE_TIMEOUT, DEFAULT_COLORS} from '../utils/constants';\nimport { getColor, isValidColor } from '../utils/colors';\nimport { runSMILAnimation } from '../utils/animation';\nimport { downloadFile, prepareForExport } from '../utils/export';\nimport { deepClone } from '../utils/helpers';\n\nexport default class BaseChart {\n\tconstructor(parent, options) {\n\t\t// deepclone options to avoid making changes to orignal object\n\t\toptions = deepClone(options);\n\n\t\tthis.parent = typeof parent === 'string'\n\t\t\t? document.querySelector(parent)\n\t\t\t: parent;\n\n\t\tif (!(this.parent instanceof HTMLElement)) {\n\t\t\tthrow new Error('No `parent` element to render on was provided.');\n\t\t}\n\n\t\tthis.rawChartArgs = options;\n\n\t\tthis.title = options.title || '';\n\t\tthis.type = options.type || '';\n\n\t\tthis.realData = this.prepareData(options.data);\n\t\tthis.data = this.prepareFirstData(this.realData);\n\n\t\tthis.colors = this.validateColors(options.colors, this.type);\n\n\t\tthis.config = {\n\t\t\tshowTooltip: 1, // calculate\n\t\t\tshowLegend: 1, // calculate\n\t\t\tisNavigable: options.isNavigable || 0,\n\t\t\tanimate: (typeof options.animate !== 'undefined') ? options.animate : 1,\n\t\t\ttruncateLegends: options.truncateLegends || 1\n\t\t};\n\n\t\tthis.measures = JSON.parse(JSON.stringify(BASE_MEASURES));\n\t\tlet m = this.measures;\n\t\tthis.setMeasures(options);\n\t\tif(!this.title.length) { m.titleHeight = 0; }\n\t\tif(!this.config.showLegend) m.legendHeight = 0;\n\t\tthis.argHeight = options.height || m.baseHeight;\n\n\t\tthis.state = {};\n\t\tthis.options = {};\n\n\t\tthis.initTimeout = INIT_CHART_UPDATE_TIMEOUT;\n\n\t\tif(this.config.isNavigable) {\n\t\t\tthis.overlays = [];\n\t\t}\n\n\t\tthis.configure(options);\n\t}\n\n\tprepareData(data) {\n\t\treturn data;\n\t}\n\n\tprepareFirstData(data) {\n\t\treturn data;\n\t}\n\n\tvalidateColors(colors, type) {\n\t\tconst validColors = [];\n\t\tcolors = (colors || []).concat(DEFAULT_COLORS[type]);\n\t\tcolors.forEach((string) => {\n\t\t\tconst color = getColor(string);\n\t\t\tif(!isValidColor(color)) {\n\t\t\t\tconsole.warn('\"' + string + '\" is not a valid color.');\n\t\t\t} else {\n\t\t\t\tvalidColors.push(color);\n\t\t\t}\n\t\t});\n\t\treturn validColors;\n\t}\n\n\tsetMeasures() {\n\t\t// Override measures, including those for title and legend\n\t\t// set config for legend and title\n\t}\n\n\tconfigure() {\n\t\tlet height = this.argHeight;\n\t\tthis.baseHeight = height;\n\t\tthis.height = height - getExtraHeight(this.measures);\n\n\t\t// Bind window events\n\t\tthis.boundDrawFn = () => this.draw(true);\n\t\tif (ResizeObserver) {\n\t\t\tthis.resizeObserver = new ResizeObserver(this.boundDrawFn);\n\t\t\tthis.resizeObserver.observe(this.parent);\n\t\t}\n\t\twindow.addEventListener('resize', this.boundDrawFn);\n\t\twindow.addEventListener('orientationchange', this.boundDrawFn);\n\t}\n\n\tdestroy() {\n\t\tif (this.resizeObserver) this.resizeObserver.disconnect();\n\t\twindow.removeEventListener('resize', this.boundDrawFn);\n\t\twindow.removeEventListener('orientationchange', this.boundDrawFn);\n\t}\n\n\t// Has to be called manually\n\tsetup() {\n\t\tthis.makeContainer();\n\t\tthis.updateWidth();\n\t\tthis.makeTooltip();\n\n\t\tthis.draw(false, true);\n\t}\n\n\tmakeContainer() {\n\t\t// Chart needs a dedicated parent element\n\t\tthis.parent.innerHTML = '';\n\n\t\tlet args = {\n\t\t\tinside: this.parent,\n\t\t\tclassName: 'chart-container'\n\t\t};\n\n\t\tif(this.independentWidth) {\n\t\t\targs.styles = { width: this.independentWidth + 'px' };\n\t\t}\n\n\t\tthis.container = $.create('div', args);\n\t}\n\n\tmakeTooltip() {\n\t\tthis.tip = new SvgTip({\n\t\t\tparent: this.container,\n\t\t\tcolors: this.colors\n\t\t});\n\t\tthis.bindTooltip();\n\t}\n\n\tbindTooltip() {}\n\n\tdraw(onlyWidthChange=false, init=false) {\n\t\tif (onlyWidthChange && isHidden(this.parent)) {\n\t\t\t// Don't update anything if the chart is hidden\n\t\t\treturn;\n\t\t}\n\t\tthis.updateWidth();\n\n\t\tthis.calc(onlyWidthChange);\n\t\tthis.makeChartArea();\n\t\tthis.setupComponents();\n\n\t\tthis.components.forEach(c => c.setup(this.drawArea));\n\t\t// this.components.forEach(c => c.make());\n\t\tthis.render(this.components, false);\n\n\t\tif(init) {\n\t\t\tthis.data = this.realData;\n\t\t\tsetTimeout(() => {this.update(this.data);}, this.initTimeout);\n\t\t}\n\n\t\tthis.renderLegend();\n\n\t\tthis.setupNavigation(init);\n\t}\n\n\tcalc() {} // builds state\n\n\tupdateWidth() {\n\t\tthis.baseWidth = getElementContentWidth(this.parent);\n\t\tthis.width = this.baseWidth - getExtraWidth(this.measures);\n\t}\n\n\tmakeChartArea() {\n\t\tif(this.svg) {\n\t\t\tthis.container.removeChild(this.svg);\n\t\t}\n\t\tlet m = this.measures;\n\n\t\tthis.svg = makeSVGContainer(\n\t\t\tthis.container,\n\t\t\t'frappe-chart chart',\n\t\t\tthis.baseWidth,\n\t\t\tthis.baseHeight\n\t\t);\n\t\tthis.svgDefs = makeSVGDefs(this.svg);\n\n\t\tif(this.title.length) {\n\t\t\tthis.titleEL = makeText(\n\t\t\t\t'title',\n\t\t\t\tm.margins.left,\n\t\t\t\tm.margins.top,\n\t\t\t\tthis.title,\n\t\t\t\t{\n\t\t\t\t\tfontSize: m.titleFontSize,\n\t\t\t\t\tfill: '#666666',\n\t\t\t\t\tdy: m.titleFontSize\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tlet top = getTopOffset(m);\n\t\tthis.drawArea = makeSVGGroup(\n\t\t\tthis.type + '-chart chart-draw-area',\n\t\t\t`translate(${getLeftOffset(m)}, ${top})`\n\t\t);\n\n\t\tif(this.config.showLegend) {\n\t\t\ttop += this.height + m.paddings.bottom;\n\t\t\tthis.legendArea = makeSVGGroup(\n\t\t\t\t'chart-legend',\n\t\t\t\t`translate(${getLeftOffset(m)}, ${top})`\n\t\t\t);\n\t\t}\n\n\t\tif(this.title.length) { this.svg.appendChild(this.titleEL); }\n\t\tthis.svg.appendChild(this.drawArea);\n\t\tif(this.config.showLegend) { this.svg.appendChild(this.legendArea); }\n\n\t\tthis.updateTipOffset(getLeftOffset(m), getTopOffset(m));\n\t}\n\n\tupdateTipOffset(x, y) {\n\t\tthis.tip.offset = {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t}\n\n\tsetupComponents() { this.components = new Map(); }\n\n\tupdate(data) {\n\t\tif(!data) {\n\t\t\tconsole.error('No data to update.');\n\t\t}\n\t\tthis.data = this.prepareData(data);\n\t\tthis.calc(); // builds state\n\t\tthis.render(this.components, this.config.animate);\n\t\tthis.renderLegend();\n\t}\n\n\trender(components=this.components, animate=true) {\n\t\tif(this.config.isNavigable) {\n\t\t\t// Remove all existing overlays\n\t\t\tthis.overlays.map(o => o.parentNode.removeChild(o));\n\t\t\t// ref.parentNode.insertBefore(element, ref);\n\t\t}\n\t\tlet elementsToAnimate = [];\n\t\t// Can decouple to this.refreshComponents() first to save animation timeout\n\t\tcomponents.forEach(c => {\n\t\t\telementsToAnimate = elementsToAnimate.concat(c.update(animate));\n\t\t});\n\t\tif(elementsToAnimate.length > 0) {\n\t\t\trunSMILAnimation(this.container, this.svg, elementsToAnimate);\n\t\t\tsetTimeout(() => {\n\t\t\t\tcomponents.forEach(c => c.make());\n\t\t\t\tthis.updateNav();\n\t\t\t}, CHART_POST_ANIMATE_TIMEOUT);\n\t\t} else {\n\t\t\tcomponents.forEach(c => c.make());\n\t\t\tthis.updateNav();\n\t\t}\n\t}\n\n\tupdateNav() {\n\t\tif(this.config.isNavigable) {\n\t\t\tthis.makeOverlay();\n\t\t\tthis.bindUnits();\n\t\t}\n\t}\n\n\trenderLegend() {}\n\n\tsetupNavigation(init=false) {\n\t\tif(!this.config.isNavigable) return;\n\n\t\tif(init) {\n\t\t\tthis.bindOverlay();\n\n\t\t\tthis.keyActions = {\n\t\t\t\t'13': this.onEnterKey.bind(this),\n\t\t\t\t'37': this.onLeftArrow.bind(this),\n\t\t\t\t'38': this.onUpArrow.bind(this),\n\t\t\t\t'39': this.onRightArrow.bind(this),\n\t\t\t\t'40': this.onDownArrow.bind(this),\n\t\t\t};\n\n\t\t\tdocument.addEventListener('keydown', (e) => {\n\t\t\t\tif(isElementInViewport(this.container)) {\n\t\t\t\t\te = e || window.event;\n\t\t\t\t\tif(this.keyActions[e.keyCode]) {\n\t\t\t\t\t\tthis.keyActions[e.keyCode]();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tmakeOverlay() {}\n\tupdateOverlay() {}\n\tbindOverlay() {}\n\tbindUnits() {}\n\n\tonLeftArrow() {}\n\tonRightArrow() {}\n\tonUpArrow() {}\n\tonDownArrow() {}\n\tonEnterKey() {}\n\n\taddDataPoint() {}\n\tremoveDataPoint() {}\n\n\tgetDataPoint() {}\n\tsetCurrentDataPoint() {}\n\n\tupdateDataset() {}\n\n\texport() {\n\t\tlet chartSvg = prepareForExport(this.svg);\n\t\tdownloadFile(this.title || 'Chart', [chartSvg]);\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { truncateString } from '../utils/draw-utils';\nimport { legendDot } from '../utils/draw';\nimport { round } from '../utils/helpers';\nimport { getExtraWidth } from '../utils/constants';\n\nexport default class AggregationChart extends BaseChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\n\t\tthis.config.formatTooltipY = (args.tooltipOptions || {}).formatTooltipY;\n\t\tthis.config.maxSlices = args.maxSlices || 20;\n\t\tthis.config.maxLegendPoints = args.maxLegendPoints || 20;\n\t}\n\n\tcalc() {\n\t\tlet s = this.state;\n\t\tlet maxSlices = this.config.maxSlices;\n\t\ts.sliceTotals = [];\n\n\t\tlet allTotals = this.data.labels.map((label, i) => {\n\t\t\tlet total = 0;\n\t\t\tthis.data.datasets.map(e => {\n\t\t\t\ttotal += e.values[i];\n\t\t\t});\n\t\t\treturn [total, label];\n\t\t}).filter(d => { return d[0] >= 0; }); // keep only positive results\n\n\t\tlet totals = allTotals;\n\t\tif(allTotals.length > maxSlices) {\n\t\t\t// Prune and keep a grey area for rest as per maxSlices\n\t\t\tallTotals.sort((a, b) => { return b[0] - a[0]; });\n\n\t\t\ttotals = allTotals.slice(0, maxSlices-1);\n\t\t\tlet remaining = allTotals.slice(maxSlices-1);\n\n\t\t\tlet sumOfRemaining = 0;\n\t\t\tremaining.map(d => {sumOfRemaining += d[0];});\n\t\t\ttotals.push([sumOfRemaining, 'Rest']);\n\t\t\tthis.colors[maxSlices-1] = 'grey';\n\t\t}\n\n\t\ts.labels = [];\n\t\ttotals.map(d => {\n\t\t\ts.sliceTotals.push(round(d[0]));\n\t\t\ts.labels.push(d[1]);\n\t\t});\n\n\t\ts.grandTotal = s.sliceTotals.reduce((a, b) => a + b, 0);\n\n\t\tthis.center = {\n\t\t\tx: this.width / 2,\n\t\t\ty: this.height / 2\n\t\t};\n\t}\n\n\trenderLegend() {\n\t\tlet s = this.state;\n\t\tthis.legendArea.textContent = '';\n\t\tthis.legendTotals = s.sliceTotals.slice(0, this.config.maxLegendPoints);\n\n\t\tlet count = 0;\n\t\tlet y = 0;\n\t\tthis.legendTotals.map((d, i) => {\n\t\t\tlet barWidth = 150;\n\t\t\tlet divisor = Math.floor(\n\t\t\t\t(this.width - getExtraWidth(this.measures))/barWidth\n\t\t\t);\n\t\t\tif (this.legendTotals.length < divisor) {\n\t\t\t\tbarWidth = this.width/this.legendTotals.length;\n\t\t\t}\n\t\t\tif(count > divisor) {\n\t\t\t\tcount = 0;\n\t\t\t\ty += 20;\n\t\t\t}\n\t\t\tlet x = barWidth * count + 5;\n\t\t\tlet label = this.config.truncateLegends ? truncateString(s.labels[i], barWidth/10) : s.labels[i];\n\t\t\tlet formatted = this.config.formatTooltipY ? this.config.formatTooltipY(d) : d;\n\t\t\tlet dot = legendDot(\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\t5,\n\t\t\t\tthis.colors[i],\n\t\t\t\t`${label}: ${formatted}`,\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tthis.legendArea.appendChild(dot);\n\t\t\tcount++;\n\t\t});\n\t}\n}\n","import AggregationChart from './AggregationChart';\nimport { getOffset } from '../utils/dom';\nimport { getComponent } from '../objects/ChartComponents';\nimport { PERCENTAGE_BAR_DEFAULT_HEIGHT, PERCENTAGE_BAR_DEFAULT_DEPTH } from '../utils/constants';\n\nexport default class PercentageChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'percentage';\n\t\tthis.setup();\n\t}\n\n\tsetMeasures(options) {\n\t\tlet m = this.measures;\n\t\tthis.barOptions = options.barOptions || {};\n\n\t\tlet b = this.barOptions;\n\t\tb.height = b.height || PERCENTAGE_BAR_DEFAULT_HEIGHT;\n\t\tb.depth = b.depth || PERCENTAGE_BAR_DEFAULT_DEPTH;\n\n\t\tm.paddings.right = 30;\n\t\tm.legendHeight = 60;\n\t\tm.baseHeight = (b.height + b.depth * 0.5) * 8;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'percentageBars',\n\t\t\t\t{\n\t\t\t\t\tbarHeight: this.barOptions.height,\n\t\t\t\t\tbarDepth: this.barOptions.depth,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: s.xPositions,\n\t\t\t\t\t\twidths: s.widths,\n\t\t\t\t\t\tcolors: this.colors\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\n\t\ts.xPositions = [];\n\t\ts.widths = [];\n\n\t\tlet xPos = 0;\n\t\ts.sliceTotals.map((value) => {\n\t\t\tlet width = this.width * value / s.grandTotal;\n\t\t\ts.widths.push(width);\n\t\t\ts.xPositions.push(xPos);\n\t\t\txPos += width;\n\t\t});\n\t}\n\n\tmakeDataByIndex() { }\n\n\tbindTooltip() {\n\t\tlet s = this.state;\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tlet bars = this.components.get('percentageBars').store;\n\t\t\tlet bar = e.target;\n\t\t\tif(bars.includes(bar)) {\n\n\t\t\t\tlet i = bars.indexOf(bar);\n\t\t\t\tlet gOff = getOffset(this.container), pOff = getOffset(bar);\n\n\t\t\t\tlet x = pOff.left - gOff.left + parseInt(bar.getAttribute('width'))/2;\n\t\t\t\tlet y = pOff.top - gOff.top;\n\t\t\t\tlet title = (this.formattedLabels && this.formattedLabels.length>0\n\t\t\t\t\t? this.formattedLabels[i] : this.state.labels[i]) + ': ';\n\t\t\t\tlet fraction = s.sliceTotals[i]/s.grandTotal;\n\n\t\t\t\tthis.tip.setValues(x, y, {name: title, value: (fraction*100).toFixed(1) + \"%\"});\n\t\t\t\tthis.tip.showTip();\n\t\t\t}\n\t\t});\n\t}\n}\n","import AggregationChart from './AggregationChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset } from '../utils/dom';\nimport { getPositionByAngle } from '../utils/helpers';\nimport { makeArcPathStr, makeCircleStr } from '../utils/draw';\nimport { lightenDarkenColor } from '../utils/colors';\nimport { transform } from '../utils/animation';\nimport { FULL_ANGLE } from '../utils/constants';\n\nexport default class PieChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'pie';\n\t\tthis.initTimeout = 0;\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\t\tthis.mouseMove = this.mouseMove.bind(this);\n\t\tthis.mouseLeave = this.mouseLeave.bind(this);\n\n\t\tthis.hoverRadio = args.hoverRadio || 0.1;\n\t\tthis.config.startAngle = args.startAngle || 0;\n\n\t\tthis.clockWise = args.clockWise || false;\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\t\tthis.radius = (this.height > this.width ? this.center.x : this.center.y);\n\n\t\tconst { radius, clockWise } = this;\n\n\t\tconst prevSlicesProperties = s.slicesProperties || [];\n\t\ts.sliceStrings = [];\n\t\ts.slicesProperties = [];\n\t\tlet curAngle = 180 - this.config.startAngle;\n\t\ts.sliceTotals.map((total, i) => {\n\t\t\tconst startAngle = curAngle;\n\t\t\tconst originDiffAngle = (total / s.grandTotal) * FULL_ANGLE;\n\t\t\tconst largeArc = originDiffAngle > 180 ? 1: 0;\n\t\t\tconst diffAngle = clockWise ? -originDiffAngle : originDiffAngle;\n\t\t\tconst endAngle = curAngle = curAngle + diffAngle;\n\t\t\tconst startPosition = getPositionByAngle(startAngle, radius);\n\t\t\tconst endPosition = getPositionByAngle(endAngle, radius);\n\n\t\t\tconst prevProperty = this.init && prevSlicesProperties[i];\n\n\t\t\tlet curStart,curEnd;\n\t\t\tif(this.init) {\n\t\t\t\tcurStart = prevProperty ? prevProperty.startPosition : startPosition;\n\t\t\t\tcurEnd = prevProperty ? prevProperty.endPosition : startPosition;\n\t\t\t} else {\n\t\t\t\tcurStart = startPosition;\n\t\t\t\tcurEnd = endPosition;\n\t\t\t}\n\t\t\tconst curPath =\n\t\t\t\toriginDiffAngle === 360\n\t\t\t\t\t? makeCircleStr(curStart, curEnd, this.center, this.radius, clockWise, largeArc)\n\t\t\t\t\t: makeArcPathStr(curStart, curEnd, this.center, this.radius, clockWise, largeArc);\n\n\t\t\ts.sliceStrings.push(curPath);\n\t\t\ts.slicesProperties.push({\n\t\t\t\tstartPosition,\n\t\t\t\tendPosition,\n\t\t\t\tvalue: total,\n\t\t\t\ttotal: s.grandTotal,\n\t\t\t\tstartAngle,\n\t\t\t\tendAngle,\n\t\t\t\tangle: diffAngle\n\t\t\t});\n\n\t\t});\n\t\tthis.init = 0;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'pieSlices',\n\t\t\t\t{ },\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsliceStrings: s.sliceStrings,\n\t\t\t\t\t\tcolors: this.colors\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalTranslateByAngle(property){\n\t\tconst{radius,hoverRadio} = this;\n\t\tconst position = getPositionByAngle(property.startAngle+(property.angle / 2),radius);\n\t\treturn `translate3d(${(position.x) * hoverRadio}px,${(position.y) * hoverRadio}px,0)`;\n\t}\n\n\thoverSlice(path,i,flag,e){\n\t\tif(!path) return;\n\t\tconst color = this.colors[i];\n\t\tif(flag) {\n\t\t\ttransform(path, this.calTranslateByAngle(this.state.slicesProperties[i]));\n\t\t\tpath.style.fill = lightenDarkenColor(color, 50);\n\t\t\tlet g_off = getOffset(this.svg);\n\t\t\tlet x = e.pageX - g_off.left + 10;\n\t\t\tlet y = e.pageY - g_off.top - 10;\n\t\t\tlet title = (this.formatted_labels && this.formatted_labels.length > 0\n\t\t\t\t? this.formatted_labels[i] : this.state.labels[i]) + ': ';\n\t\t\tlet percent = (this.state.sliceTotals[i] * 100 / this.state.grandTotal).toFixed(1);\n\t\t\tthis.tip.setValues(x, y, {name: title, value: percent + \"%\"});\n\t\t\tthis.tip.showTip();\n\t\t} else {\n\t\t\ttransform(path,'translate3d(0,0,0)');\n\t\t\tthis.tip.hideTip();\n\t\t\tpath.style.fill = color;\n\t\t}\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', this.mouseMove);\n\t\tthis.container.addEventListener('mouseleave', this.mouseLeave);\n\t}\n\n\tmouseMove(e){\n\t\tconst target = e.target;\n\t\tlet slices = this.components.get('pieSlices').store;\n\t\tlet prevIndex = this.curActiveSliceIndex;\n\t\tlet prevAcitve = this.curActiveSlice;\n\t\tif(slices.includes(target)) {\n\t\t\tlet i = slices.indexOf(target);\n\t\t\tthis.hoverSlice(prevAcitve, prevIndex,false);\n\t\t\tthis.curActiveSlice = target;\n\t\t\tthis.curActiveSliceIndex = i;\n\t\t\tthis.hoverSlice(target, i, true, e);\n\t\t} else {\n\t\t\tthis.mouseLeave();\n\t\t}\n\t}\n\n\tmouseLeave(){\n\t\tthis.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,false);\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { makeText, heatSquare } from '../utils/draw';\nimport { DAY_NAMES_SHORT, addDays, areInSameMonth, getLastDateInMonth, setDayToSunday, getYyyyMmDd, getWeeksBetween, getMonthName, clone,\n\tNO_OF_MILLIS, NO_OF_YEAR_MONTHS, NO_OF_DAYS_IN_WEEK } from '../utils/date-utils';\nimport { calcDistribution, getMaxCheckpoint } from '../utils/intervals';\nimport { getExtraHeight, getExtraWidth, HEATMAP_DISTRIBUTION_SIZE, HEATMAP_SQUARE_SIZE,\n\tHEATMAP_GUTTER_SIZE } from '../utils/constants';\n\nconst COL_WIDTH = HEATMAP_SQUARE_SIZE + HEATMAP_GUTTER_SIZE;\nconst ROW_HEIGHT = COL_WIDTH;\n// const DAY_INCR = 1;\n\nexport default class Heatmap extends BaseChart {\n\tconstructor(parent, options) {\n\t\tsuper(parent, options);\n\t\tthis.type = 'heatmap';\n\n\t\tthis.countLabel = options.countLabel || '';\n\n\t\tlet validStarts = ['Sunday', 'Monday'];\n\t\tlet startSubDomain = validStarts.includes(options.startSubDomain)\n\t\t\t? options.startSubDomain : 'Sunday';\n\t\tthis.startSubDomainIndex = validStarts.indexOf(startSubDomain);\n\n\t\tthis.setup();\n\t}\n\n\tsetMeasures(options) {\n\t\tlet m = this.measures;\n\t\tthis.discreteDomains = options.discreteDomains === 0 ? 0 : 1;\n\n\t\tm.paddings.top = ROW_HEIGHT * 3;\n\t\tm.paddings.bottom = 0;\n\t\tm.legendHeight = ROW_HEIGHT * 2;\n\t\tm.baseHeight = ROW_HEIGHT * NO_OF_DAYS_IN_WEEK\n\t\t\t+ getExtraHeight(m);\n\n\t\tlet d = this.data;\n\t\tlet spacing = this.discreteDomains ? NO_OF_YEAR_MONTHS : 0;\n\t\tthis.independentWidth = (getWeeksBetween(d.start, d.end)\n\t\t\t+ spacing) * COL_WIDTH + getExtraWidth(m);\n\t}\n\n\tupdateWidth() {\n\t\tlet spacing = this.discreteDomains ? NO_OF_YEAR_MONTHS : 0;\n\t\tlet noOfWeeks = this.state.noOfWeeks ? this.state.noOfWeeks : 52;\n\t\tthis.baseWidth = (noOfWeeks + spacing) * COL_WIDTH\n\t\t\t+ getExtraWidth(this.measures);\n\t}\n\n\tprepareData(data=this.data) {\n\t\tif(data.start && data.end && data.start > data.end) {\n\t\t\tthrow new Error('Start date cannot be greater than end date.');\n\t\t}\n\n\t\tif(!data.start) {\n\t\t\tdata.start = new Date();\n\t\t\tdata.start.setFullYear( data.start.getFullYear() - 1 );\n\t\t}\n\t\tif(!data.end) { data.end = new Date(); }\n\t\tdata.dataPoints = data.dataPoints || {};\n\n\t\tif(parseInt(Object.keys(data.dataPoints)[0]) > 100000) {\n\t\t\tlet points = {};\n\t\t\tObject.keys(data.dataPoints).forEach(timestampSec => {\n\t\t\t\tlet date = new Date(timestampSec * NO_OF_MILLIS);\n\t\t\t\tpoints[getYyyyMmDd(date)] = data.dataPoints[timestampSec];\n\t\t\t});\n\t\t\tdata.dataPoints = points;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tcalc() {\n\t\tlet s = this.state;\n\n\t\ts.start = clone(this.data.start);\n\t\ts.end = clone(this.data.end);\n\n\t\ts.firstWeekStart = clone(s.start);\n\t\ts.noOfWeeks = getWeeksBetween(s.start, s.end);\n\t\ts.distribution = calcDistribution(\n\t\t\tObject.values(this.data.dataPoints), HEATMAP_DISTRIBUTION_SIZE);\n\n\t\ts.domainConfigs = this.getDomains();\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\t\tlet lessCol = this.discreteDomains ? 0 : 1;\n\n\t\tlet componentConfigs = s.domainConfigs.map((config, i) => [\n\t\t\t'heatDomain',\n\t\t\t{\n\t\t\t\tindex: config.index,\n\t\t\t\tcolWidth: COL_WIDTH,\n\t\t\t\trowHeight: ROW_HEIGHT,\n\t\t\t\tsquareSize: HEATMAP_SQUARE_SIZE,\n\t\t\t\tradius: this.rawChartArgs.radius || 0,\n\t\t\t\txTranslate: s.domainConfigs\n\t\t\t\t\t.filter((config, j) => j < i)\n\t\t\t\t\t.map(config => config.cols.length - lessCol)\n\t\t\t\t\t.reduce((a, b) => a + b, 0)\n\t\t\t\t\t* COL_WIDTH\n\t\t\t},\n\t\t\tfunction() {\n\t\t\t\treturn s.domainConfigs[i];\n\t\t\t}.bind(this)\n\n\t\t]);\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map((args, i) => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0] + '-' + i, component];\n\t\t\t})\n\t\t);\n\n\t\tlet y = 0;\n\t\tDAY_NAMES_SHORT.forEach((dayName, i) => {\n\t\t\tif([1, 3, 5].includes(i)) {\n\t\t\t\tlet dayText = makeText('subdomain-name', -COL_WIDTH/2, y, dayName,\n\t\t\t\t\t{\n\t\t\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE,\n\t\t\t\t\t\tdy: 8,\n\t\t\t\t\t\ttextAnchor: 'end'\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tthis.drawArea.appendChild(dayText);\n\t\t\t}\n\t\t\ty += ROW_HEIGHT;\n\t\t});\n\t}\n\n\tupdate(data) {\n\t\tif(!data) {\n\t\t\tconsole.error('No data to update.');\n\t\t}\n\n\t\tthis.data = this.prepareData(data);\n\t\tthis.draw();\n\t\tthis.bindTooltip();\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tthis.components.forEach(comp => {\n\t\t\t\tlet daySquares = comp.store;\n\t\t\t\tlet daySquare = e.target;\n\t\t\t\tif(daySquares.includes(daySquare)) {\n\n\t\t\t\t\tlet count = daySquare.getAttribute('data-value');\n\t\t\t\t\tlet dateParts = daySquare.getAttribute('data-date').split('-');\n\n\t\t\t\t\tlet month = getMonthName(parseInt(dateParts[1])-1, true);\n\n\t\t\t\t\tlet gOff = this.container.getBoundingClientRect(), pOff = daySquare.getBoundingClientRect();\n\n\t\t\t\t\tlet width = parseInt(e.target.getAttribute('width'));\n\t\t\t\t\tlet x = pOff.left - gOff.left + width/2;\n\t\t\t\t\tlet y = pOff.top - gOff.top;\n\t\t\t\t\tlet value = count + ' ' + this.countLabel;\n\t\t\t\t\tlet name = ' on ' + month + ' ' + dateParts[0] + ', ' + dateParts[2];\n\n\t\t\t\t\tthis.tip.setValues(x, y, {name: name, value: value, valueFirst: 1}, []);\n\t\t\t\t\tthis.tip.showTip();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\trenderLegend() {\n\t\tthis.legendArea.textContent = '';\n\t\tlet x = 0;\n\t\tlet y = ROW_HEIGHT;\n\t\tlet radius = this.rawChartArgs.radius || 0;\n\n\t\tlet lessText = makeText('subdomain-name', x, y, 'Less',\n\t\t\t{\n\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE + 1,\n\t\t\t\tdy: 9\n\t\t\t}\n\t\t);\n\t\tx = (COL_WIDTH * 2) + COL_WIDTH/2;\n\t\tthis.legendArea.appendChild(lessText);\n\n\t\tthis.colors.slice(0, HEATMAP_DISTRIBUTION_SIZE).map((color, i) => {\n\t\t\tconst square = heatSquare('heatmap-legend-unit', x + (COL_WIDTH + 3) * i,\n\t\t\t\ty, HEATMAP_SQUARE_SIZE, radius, color);\n\t\t\tthis.legendArea.appendChild(square);\n\t\t});\n\n\t\tlet moreTextX = x + HEATMAP_DISTRIBUTION_SIZE * (COL_WIDTH + 3) + COL_WIDTH/4;\n\t\tlet moreText = makeText('subdomain-name', moreTextX, y, 'More',\n\t\t\t{\n\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE + 1,\n\t\t\t\tdy: 9\n\t\t\t}\n\t\t);\n\t\tthis.legendArea.appendChild(moreText);\n\t}\n\n\tgetDomains() {\n\t\tlet s = this.state;\n\t\tconst [startMonth, startYear] = [s.start.getMonth(), s.start.getFullYear()];\n\t\tconst [endMonth, endYear] = [s.end.getMonth(), s.end.getFullYear()];\n\n\t\tconst noOfMonths = (endMonth - startMonth + 1) + (endYear - startYear) * 12;\n\n\t\tlet domainConfigs = [];\n\n\t\tlet startOfMonth = clone(s.start);\n\t\tfor(var i = 0; i < noOfMonths; i++) {\n\t\t\tlet endDate = s.end;\n\t\t\tif(!areInSameMonth(startOfMonth, s.end)) {\n\t\t\t\tlet [month, year] = [startOfMonth.getMonth(), startOfMonth.getFullYear()];\n\t\t\t\tendDate = getLastDateInMonth(month, year);\n\t\t\t}\n\t\t\tdomainConfigs.push(this.getDomainConfig(startOfMonth, endDate));\n\n\t\t\taddDays(endDate, 1);\n\t\t\tstartOfMonth = endDate;\n\t\t}\n\n\t\treturn domainConfigs;\n\t}\n\n\tgetDomainConfig(startDate, endDate='') {\n\t\tlet [month, year] = [startDate.getMonth(), startDate.getFullYear()];\n\t\tlet startOfWeek = setDayToSunday(startDate); // TODO: Monday as well\n\t\tendDate = clone(endDate) || getLastDateInMonth(month, year);\n\n\t\tlet domainConfig = {\n\t\t\tindex: month,\n\t\t\tcols: []\n\t\t};\n\n\t\taddDays(endDate, 1);\n\t\tlet noOfMonthWeeks = getWeeksBetween(startOfWeek, endDate);\n\n\t\tlet cols = [], col;\n\t\tfor(var i = 0; i < noOfMonthWeeks; i++) {\n\t\t\tcol = this.getCol(startOfWeek, month);\n\t\t\tcols.push(col);\n\n\t\t\tstartOfWeek = new Date(col[NO_OF_DAYS_IN_WEEK - 1].yyyyMmDd);\n\t\t\taddDays(startOfWeek, 1);\n\t\t}\n\n\t\tif(col[NO_OF_DAYS_IN_WEEK - 1].dataValue !== undefined) {\n\t\t\taddDays(startOfWeek, 1);\n\t\t\tcols.push(this.getCol(startOfWeek, month, true));\n\t\t}\n\n\t\tdomainConfig.cols = cols;\n\n\t\treturn domainConfig;\n\t}\n\n\tgetCol(startDate, month, empty = false) {\n\t\tlet s = this.state;\n\n\t\t// startDate is the start of week\n\t\tlet currentDate = clone(startDate);\n\t\tlet col = [];\n\n\t\tfor(var i = 0; i < NO_OF_DAYS_IN_WEEK; i++, addDays(currentDate, 1)) {\n\t\t\tlet config = {};\n\n\t\t\t// Non-generic adjustment for entire heatmap, needs state\n\t\t\tlet currentDateWithinData = currentDate >= s.start && currentDate <= s.end;\n\n\t\t\tif(empty || currentDate.getMonth() !== month || !currentDateWithinData) {\n\t\t\t\tconfig.yyyyMmDd = getYyyyMmDd(currentDate);\n\t\t\t} else {\n\t\t\t\tconfig = this.getSubDomainConfig(currentDate);\n\t\t\t}\n\t\t\tcol.push(config);\n\t\t}\n\n\t\treturn col;\n\t}\n\n\tgetSubDomainConfig(date) {\n\t\tlet yyyyMmDd = getYyyyMmDd(date);\n\t\tlet dataValue = this.data.dataPoints[yyyyMmDd];\n\t\tlet config = {\n\t\t\tyyyyMmDd: yyyyMmDd,\n\t\t\tdataValue: dataValue || 0,\n\t\t\tfill: this.colors[getMaxCheckpoint(dataValue, this.state.distribution)]\n\t\t};\n\t\treturn config;\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { dataPrep, zeroDataPrep, getShortenedLabels } from '../utils/axis-chart-utils';\nimport { AXIS_LEGEND_BAR_SIZE } from '../utils/constants';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset, fire } from '../utils/dom';\nimport { calcChartIntervals, getIntervalSize, getValueRange, getZeroIndex, scale, getClosestInArray } from '../utils/intervals';\nimport { floatTwo } from '../utils/helpers';\nimport { makeOverlay, updateOverlay, legendBar } from '../utils/draw';\nimport { getTopOffset, getLeftOffset, MIN_BAR_PERCENT_HEIGHT, BAR_CHART_SPACE_RATIO,\n\tLINE_CHART_DOT_SIZE } from '../utils/constants';\n\nexport default class AxisChart extends BaseChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\n\t\tthis.barOptions = args.barOptions || {};\n\t\tthis.lineOptions = args.lineOptions || {};\n\n\t\tthis.type = args.type || 'line';\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tsetMeasures() {\n\t\tif(this.data.datasets.length <= 1) {\n\t\t\tthis.config.showLegend = 0;\n\t\t\tthis.measures.paddings.bottom = 30;\n\t\t}\n\t}\n\n\tconfigure(options) {\n\t\tsuper.configure(options);\n\n\t\toptions.axisOptions = options.axisOptions || {};\n\t\toptions.tooltipOptions = options.tooltipOptions || {};\n\n\t\tthis.config.xAxisMode = options.axisOptions.xAxisMode || 'span';\n\t\tthis.config.yAxisMode = options.axisOptions.yAxisMode || 'span';\n\t\tthis.config.xIsSeries = options.axisOptions.xIsSeries || 0;\n\t\tthis.config.shortenYAxisNumbers = options.axisOptions.shortenYAxisNumbers || 0;\n\n\t\tthis.config.formatTooltipX = options.tooltipOptions.formatTooltipX;\n\t\tthis.config.formatTooltipY = options.tooltipOptions.formatTooltipY;\n\n\t\tthis.config.valuesOverPoints = options.valuesOverPoints;\n\t}\n\n\tprepareData(data=this.data) {\n\t\treturn dataPrep(data, this.type);\n\t}\n\n\tprepareFirstData(data=this.data) {\n\t\treturn zeroDataPrep(data);\n\t}\n\n\tcalc(onlyWidthChange = false) {\n\t\tthis.calcXPositions();\n\t\tif(!onlyWidthChange) {\n\t\t\tthis.calcYAxisParameters(this.getAllYValues(), this.type === 'line');\n\t\t}\n\t\tthis.makeDataByIndex();\n\t}\n\n\tcalcXPositions() {\n\t\tlet s = this.state;\n\t\tlet labels = this.data.labels;\n\t\ts.datasetLength = labels.length;\n\n\t\ts.unitWidth = this.width/(s.datasetLength);\n\t\t// Default, as per bar, and mixed. Only line will be a special case\n\t\ts.xOffset = s.unitWidth/2;\n\n\t\t// // For a pure Line Chart\n\t\t// s.unitWidth = this.width/(s.datasetLength - 1);\n\t\t// s.xOffset = 0;\n\n\t\ts.xAxis = {\n\t\t\tlabels: labels,\n\t\t\tpositions: labels.map((d, i) =>\n\t\t\t\tfloatTwo(s.xOffset + i * s.unitWidth)\n\t\t\t)\n\t\t};\n\t}\n\n\tcalcYAxisParameters(dataValues, withMinimum = 'false') {\n\t\tconst yPts = calcChartIntervals(dataValues, withMinimum);\n\t\tconst scaleMultiplier = this.height / getValueRange(yPts);\n\t\tconst intervalHeight = getIntervalSize(yPts) * scaleMultiplier;\n\t\tconst zeroLine = this.height - (getZeroIndex(yPts) * intervalHeight);\n\n\t\tthis.state.yAxis = {\n\t\t\tlabels: yPts,\n\t\t\tpositions: yPts.map(d => zeroLine - d * scaleMultiplier),\n\t\t\tscaleMultiplier: scaleMultiplier,\n\t\t\tzeroLine: zeroLine,\n\t\t};\n\n\t\t// Dependent if above changes\n\t\tthis.calcDatasetPoints();\n\t\tthis.calcYExtremes();\n\t\tthis.calcYRegions();\n\t}\n\n\tcalcDatasetPoints() {\n\t\tlet s = this.state;\n\t\tlet scaleAll = values => values.map(val => scale(val, s.yAxis));\n\n\t\ts.datasets = this.data.datasets.map((d, i) => {\n\t\t\tlet values = d.values;\n\t\t\tlet cumulativeYs = d.cumulativeYs || [];\n\t\t\treturn {\n\t\t\t\tname: d.name && d.name.replace(/<|>|&/g, (char) => char == '&' ? '&' : char == '<' ? '<' : '>'),\n\t\t\t\tindex: i,\n\t\t\t\tchartType: d.chartType,\n\n\t\t\t\tvalues: values,\n\t\t\t\tyPositions: scaleAll(values),\n\n\t\t\t\tcumulativeYs: cumulativeYs,\n\t\t\t\tcumulativeYPos: scaleAll(cumulativeYs),\n\t\t\t};\n\t\t});\n\t}\n\n\tcalcYExtremes() {\n\t\tlet s = this.state;\n\t\tif(this.barOptions.stacked) {\n\t\t\ts.yExtremes = s.datasets[s.datasets.length - 1].cumulativeYPos;\n\t\t\treturn;\n\t\t}\n\t\ts.yExtremes = new Array(s.datasetLength).fill(9999);\n\t\ts.datasets.map(d => {\n\t\t\td.yPositions.map((pos, j) => {\n\t\t\t\tif(pos < s.yExtremes[j]) {\n\t\t\t\t\ts.yExtremes[j] = pos;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tcalcYRegions() {\n\t\tlet s = this.state;\n\t\tif(this.data.yMarkers) {\n\t\t\tthis.state.yMarkers = this.data.yMarkers.map(d => {\n\t\t\t\td.position = scale(d.value, s.yAxis);\n\t\t\t\tif(!d.options) d.options = {};\n\t\t\t\t// if(!d.label.includes(':')) {\n\t\t\t\t// \td.label += ': ' + d.value;\n\t\t\t\t// }\n\t\t\t\treturn d;\n\t\t\t});\n\t\t}\n\t\tif(this.data.yRegions) {\n\t\t\tthis.state.yRegions = this.data.yRegions.map(d => {\n\t\t\t\td.startPos = scale(d.start, s.yAxis);\n\t\t\t\td.endPos = scale(d.end, s.yAxis);\n\t\t\t\tif(!d.options) d.options = {};\n\t\t\t\treturn d;\n\t\t\t});\n\t\t}\n\t}\n\n\tgetAllYValues() {\n\t\tlet key = 'values';\n\n\t\tif(this.barOptions.stacked) {\n\t\t\tkey = 'cumulativeYs';\n\t\t\tlet cumulative = new Array(this.state.datasetLength).fill(0);\n\t\t\tthis.data.datasets.map((d, i) => {\n\t\t\t\tlet values = this.data.datasets[i].values;\n\t\t\t\td[key] = cumulative = cumulative.map((c, i) => c + values[i]);\n\t\t\t});\n\t\t}\n\n\t\tlet allValueLists = this.data.datasets.map(d => d[key]);\n\t\tif(this.data.yMarkers) {\n\t\t\tallValueLists.push(this.data.yMarkers.map(d => d.value));\n\t\t}\n\t\tif(this.data.yRegions) {\n\t\t\tthis.data.yRegions.map(d => {\n\t\t\t\tallValueLists.push([d.end, d.start]);\n\t\t\t});\n\t\t}\n\n\t\treturn [].concat(...allValueLists);\n\t}\n\n\tsetupComponents() {\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'yAxis',\n\t\t\t\t{\n\t\t\t\t\tmode: this.config.yAxisMode,\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tshortenNumbers: this.config.shortenYAxisNumbers\n\t\t\t\t\t// pos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yAxis;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\n\t\t\t[\n\t\t\t\t'xAxis',\n\t\t\t\t{\n\t\t\t\t\tmode: this.config.xAxisMode,\n\t\t\t\t\theight: this.height,\n\t\t\t\t\t// pos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\ts.xAxis.calcLabels = getShortenedLabels(this.width,\n\t\t\t\t\t\ts.xAxis.labels, this.config.xIsSeries);\n\n\t\t\t\t\treturn s.xAxis;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\n\t\t\t[\n\t\t\t\t'yRegions',\n\t\t\t\t{\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tpos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yRegions;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\t\t];\n\n\t\tlet barDatasets = this.state.datasets.filter(d => d.chartType === 'bar');\n\t\tlet lineDatasets = this.state.datasets.filter(d => d.chartType === 'line');\n\n\t\tlet barsConfigs = barDatasets.map(d => {\n\t\t\tlet index = d.index;\n\t\t\treturn [\n\t\t\t\t'barGraph' + '-' + d.index,\n\t\t\t\t{\n\t\t\t\t\tindex: index,\n\t\t\t\t\tcolor: this.colors[index],\n\t\t\t\t\tstacked: this.barOptions.stacked,\n\n\t\t\t\t\t// same for all datasets\n\t\t\t\t\tvaluesOverPoints: this.config.valuesOverPoints,\n\t\t\t\t\tminHeight: this.height * MIN_BAR_PERCENT_HEIGHT,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\tlet d = s.datasets[index];\n\t\t\t\t\tlet stacked = this.barOptions.stacked;\n\n\t\t\t\t\tlet spaceRatio = this.barOptions.spaceRatio || BAR_CHART_SPACE_RATIO;\n\t\t\t\t\tlet barsWidth = s.unitWidth * (1 - spaceRatio);\n\t\t\t\t\tlet barWidth = barsWidth/(stacked ? 1 : barDatasets.length);\n\n\t\t\t\t\tlet xPositions = s.xAxis.positions.map(x => x - barsWidth/2);\n\t\t\t\t\tif(!stacked) {\n\t\t\t\t\t\txPositions = xPositions.map(p => p + barWidth * index);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet labels = new Array(s.datasetLength).fill('');\n\t\t\t\t\tif(this.config.valuesOverPoints) {\n\t\t\t\t\t\tif(stacked && d.index === s.datasets.length - 1) {\n\t\t\t\t\t\t\tlabels = d.cumulativeYs;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlabels = d.values;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet offsets = new Array(s.datasetLength).fill(0);\n\t\t\t\t\tif(stacked) {\n\t\t\t\t\t\toffsets = d.yPositions.map((y, j) => y - d.cumulativeYPos[j]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: xPositions,\n\t\t\t\t\t\tyPositions: d.yPositions,\n\t\t\t\t\t\toffsets: offsets,\n\t\t\t\t\t\t// values: d.values,\n\t\t\t\t\t\tlabels: labels,\n\n\t\t\t\t\t\tzeroLine: s.yAxis.zeroLine,\n\t\t\t\t\t\tbarsWidth: barsWidth,\n\t\t\t\t\t\tbarWidth: barWidth,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t];\n\t\t});\n\n\t\tlet lineConfigs = lineDatasets.map(d => {\n\t\t\tlet index = d.index;\n\t\t\treturn [\n\t\t\t\t'lineGraph' + '-' + d.index,\n\t\t\t\t{\n\t\t\t\t\tindex: index,\n\t\t\t\t\tcolor: this.colors[index],\n\t\t\t\t\tsvgDefs: this.svgDefs,\n\t\t\t\t\theatline: this.lineOptions.heatline,\n\t\t\t\t\tregionFill: this.lineOptions.regionFill,\n\t\t\t\t\tspline: this.lineOptions.spline,\n\t\t\t\t\thideDots: this.lineOptions.hideDots,\n\t\t\t\t\thideLine: this.lineOptions.hideLine,\n\n\t\t\t\t\t// same for all datasets\n\t\t\t\t\tvaluesOverPoints: this.config.valuesOverPoints,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\tlet d = s.datasets[index];\n\t\t\t\t\tlet minLine = s.yAxis.positions[0] < s.yAxis.zeroLine\n\t\t\t\t\t\t? s.yAxis.positions[0] : s.yAxis.zeroLine;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: s.xAxis.positions,\n\t\t\t\t\t\tyPositions: d.yPositions,\n\n\t\t\t\t\t\tvalues: d.values,\n\n\t\t\t\t\t\tzeroLine: minLine,\n\t\t\t\t\t\tradius: this.lineOptions.dotSize || LINE_CHART_DOT_SIZE,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t];\n\t\t});\n\n\t\tlet markerConfigs = [\n\t\t\t[\n\t\t\t\t'yMarkers',\n\t\t\t\t{\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tpos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yMarkers;\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tcomponentConfigs = componentConfigs.concat(barsConfigs, lineConfigs, markerConfigs);\n\n\t\tlet optionals = ['yMarkers', 'yRegions'];\n\t\tthis.dataUnitComponents = [];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.filter(args => !optionals.includes(args[0]) || this.state[args[0]])\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\tif(args[0].includes('lineGraph') || args[0].includes('barGraph')) {\n\t\t\t\t\tthis.dataUnitComponents.push(component);\n\t\t\t\t}\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tmakeDataByIndex() {\n\t\tthis.dataByIndex = {};\n\n\t\tlet s = this.state;\n\t\tlet formatX = this.config.formatTooltipX;\n\t\tlet formatY = this.config.formatTooltipY;\n\t\tlet titles = s.xAxis.labels;\n\n\t\ttitles.map((label, index) => {\n\t\t\tlet values = this.state.datasets.map((set, i) => {\n\t\t\t\tlet value = set.values[index];\n\t\t\t\treturn {\n\t\t\t\t\ttitle: set.name,\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tyPos: set.yPositions[index],\n\t\t\t\t\tcolor: this.colors[i],\n\t\t\t\t\tformatted: formatY ? formatY(value) : value,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tthis.dataByIndex[index] = {\n\t\t\t\tlabel: label,\n\t\t\t\tformattedLabel: formatX ? formatX(label) : label,\n\t\t\t\txPos: s.xAxis.positions[index],\n\t\t\t\tvalues: values,\n\t\t\t\tyExtreme: s.yExtremes[index],\n\t\t\t};\n\t\t});\n\t}\n\n\tbindTooltip() {\n\t\t// NOTE: could be in tooltip itself, as it is a given functionality for its parent\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tlet m = this.measures;\n\t\t\tlet o = getOffset(this.container);\n\t\t\tlet relX = e.pageX - o.left - getLeftOffset(m);\n\t\t\tlet relY = e.pageY - o.top;\n\n\t\t\tif(relY < this.height + getTopOffset(m)\n\t\t\t\t&& relY > getTopOffset(m)) {\n\t\t\t\tthis.mapTooltipXPosition(relX);\n\t\t\t} else {\n\t\t\t\tthis.tip.hideTip();\n\t\t\t}\n\t\t});\n\t}\n\n\tmapTooltipXPosition(relX) {\n\t\tlet s = this.state;\n\t\tif(!s.yExtremes) return;\n\n\t\tlet index = getClosestInArray(relX, s.xAxis.positions, true);\n\t\tif (index >= 0) {\n\t\t\tlet dbi = this.dataByIndex[index];\n\n\t\t\tthis.tip.setValues(\n\t\t\t\tdbi.xPos + this.tip.offset.x,\n\t\t\t\tdbi.yExtreme + this.tip.offset.y,\n\t\t\t\t{name: dbi.formattedLabel, value: ''},\n\t\t\t\tdbi.values,\n\t\t\t\tindex\n\t\t\t);\n\n\t\t\tthis.tip.showTip();\n\t\t}\n\t}\n\n\trenderLegend() {\n\t\tlet s = this.data;\n\t\tif(s.datasets.length > 1) {\n\t\t\tthis.legendArea.textContent = '';\n\t\t\ts.datasets.map((d, i) => {\n\t\t\t\tlet barWidth = AXIS_LEGEND_BAR_SIZE;\n\t\t\t\t// let rightEndPoint = this.baseWidth - this.measures.margins.left - this.measures.margins.right;\n\t\t\t\t// let multiplier = s.datasets.length - i;\n\t\t\t\tlet rect = legendBar(\n\t\t\t\t\t// rightEndPoint - multiplier * barWidth,\t// To right align\n\t\t\t\t\tbarWidth * i,\n\t\t\t\t\t'0',\n\t\t\t\t\tbarWidth,\n\t\t\t\t\tthis.colors[i],\n\t\t\t\t\td.name,\n\t\t\t\t\tthis.config.truncateLegends);\n\t\t\t\tthis.legendArea.appendChild(rect);\n\t\t\t});\n\t\t}\n\t}\n\n\n\n\t// Overlay\n\tmakeOverlay() {\n\t\tif(this.init) {\n\t\t\tthis.init = 0;\n\t\t\treturn;\n\t\t}\n\t\tif(this.overlayGuides) {\n\t\t\tthis.overlayGuides.forEach(g => {\n\t\t\t\tlet o = g.overlay;\n\t\t\t\to.parentNode.removeChild(o);\n\t\t\t});\n\t\t}\n\n\t\tthis.overlayGuides = this.dataUnitComponents.map(c => {\n\t\t\treturn {\n\t\t\t\ttype: c.unitType,\n\t\t\t\toverlay: undefined,\n\t\t\t\tunits: c.units,\n\t\t\t};\n\t\t});\n\n\t\tif(this.state.currentIndex === undefined) {\n\t\t\tthis.state.currentIndex = this.state.datasetLength - 1;\n\t\t}\n\n\t\t// Render overlays\n\t\tthis.overlayGuides.map(d => {\n\t\t\tlet currentUnit = d.units[this.state.currentIndex];\n\n\t\t\td.overlay = makeOverlay[d.type](currentUnit);\n\t\t\tthis.drawArea.appendChild(d.overlay);\n\t\t});\n\t}\n\n\tupdateOverlayGuides() {\n\t\tif(this.overlayGuides) {\n\t\t\tthis.overlayGuides.forEach(g => {\n\t\t\t\tlet o = g.overlay;\n\t\t\t\to.parentNode.removeChild(o);\n\t\t\t});\n\t\t}\n\t}\n\n\tbindOverlay() {\n\t\tthis.parent.addEventListener('data-select', () => {\n\t\t\tthis.updateOverlay();\n\t\t});\n\t}\n\n\tbindUnits() {\n\t\tthis.dataUnitComponents.map(c => {\n\t\t\tc.units.map(unit => {\n\t\t\t\tunit.addEventListener('click', () => {\n\t\t\t\t\tlet index = unit.getAttribute('data-point-index');\n\t\t\t\t\tthis.setCurrentDataPoint(index);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\t// Note: Doesn't work as tooltip is absolutely positioned\n\t\tthis.tip.container.addEventListener('click', () => {\n\t\t\tlet index = this.tip.container.getAttribute('data-point-index');\n\t\t\tthis.setCurrentDataPoint(index);\n\t\t});\n\t}\n\n\tupdateOverlay() {\n\t\tthis.overlayGuides.map(d => {\n\t\t\tlet currentUnit = d.units[this.state.currentIndex];\n\t\t\tupdateOverlay[d.type](currentUnit, d.overlay);\n\t\t});\n\t}\n\n\tonLeftArrow() {\n\t\tthis.setCurrentDataPoint(this.state.currentIndex - 1);\n\t}\n\n\tonRightArrow() {\n\t\tthis.setCurrentDataPoint(this.state.currentIndex + 1);\n\t}\n\n\tgetDataPoint(index=this.state.currentIndex) {\n\t\tlet s = this.state;\n\t\tlet data_point = {\n\t\t\tindex: index,\n\t\t\tlabel: s.xAxis.labels[index],\n\t\t\tvalues: s.datasets.map(d => d.values[index])\n\t\t};\n\t\treturn data_point;\n\t}\n\n\tsetCurrentDataPoint(index) {\n\t\tlet s = this.state;\n\t\tindex = parseInt(index);\n\t\tif(index < 0) index = 0;\n\t\tif(index >= s.xAxis.labels.length) index = s.xAxis.labels.length - 1;\n\t\tif(index === s.currentIndex) return;\n\t\ts.currentIndex = index;\n\t\tfire(this.parent, \"data-select\", this.getDataPoint());\n\t}\n\n\n\n\t// API\n\taddDataPoint(label, datasetValues, index=this.state.datasetLength) {\n\t\tsuper.addDataPoint(label, datasetValues, index);\n\t\tthis.data.labels.splice(index, 0, label);\n\t\tthis.data.datasets.map((d, i) => {\n\t\t\td.values.splice(index, 0, datasetValues[i]);\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\tremoveDataPoint(index = this.state.datasetLength-1) {\n\t\tif (this.data.labels.length <= 1) {\n\t\t\treturn;\n\t\t}\n\t\tsuper.removeDataPoint(index);\n\t\tthis.data.labels.splice(index, 1);\n\t\tthis.data.datasets.map(d => {\n\t\t\td.values.splice(index, 1);\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\tupdateDataset(datasetValues, index=0) {\n\t\tthis.data.datasets[index].values = datasetValues;\n\t\tthis.update(this.data);\n\t}\n\t// addDataset(dataset, index) {}\n\t// removeDataset(index = 0) {}\n\n\tupdateDatasets(datasets) {\n\t\tthis.data.datasets.map((d, i) => {\n\t\t\tif(datasets[i]) {\n\t\t\t\td.values = datasets[i];\n\t\t\t}\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\t// updateDataPoint(dataPoint, index = 0) {}\n\t// addDataPoint(dataPoint, index = 0) {}\n\t// removeDataPoint(index = 0) {}\n}\n","import AggregationChart from './AggregationChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset } from '../utils/dom';\nimport { getPositionByAngle } from '../utils/helpers';\nimport { makeArcStrokePathStr, makeStrokeCircleStr } from '../utils/draw';\nimport { lightenDarkenColor } from '../utils/colors';\nimport { transform } from '../utils/animation';\nimport { FULL_ANGLE } from '../utils/constants';\n\nexport default class DonutChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'donut';\n\t\tthis.initTimeout = 0;\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\t\tthis.mouseMove = this.mouseMove.bind(this);\n\t\tthis.mouseLeave = this.mouseLeave.bind(this);\n\n\t\tthis.hoverRadio = args.hoverRadio || 0.1;\n\t\tthis.config.startAngle = args.startAngle || 0;\n\n\t\tthis.clockWise = args.clockWise || false;\n\t\tthis.strokeWidth = args.strokeWidth || 30;\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\t\tthis.radius =\n\t\t\tthis.height > this.width\n\t\t\t\t? this.center.x - this.strokeWidth / 2\n\t\t\t\t: this.center.y - this.strokeWidth / 2;\n\n\t\tconst { radius, clockWise } = this;\n\n\t\tconst prevSlicesProperties = s.slicesProperties || [];\n\t\ts.sliceStrings = [];\n\t\ts.slicesProperties = [];\n\t\tlet curAngle = 180 - this.config.startAngle;\n\n\t\ts.sliceTotals.map((total, i) => {\n\t\t\tconst startAngle = curAngle;\n\t\t\tconst originDiffAngle = (total / s.grandTotal) * FULL_ANGLE;\n\t\t\tconst largeArc = originDiffAngle > 180 ? 1: 0;\n\t\t\tconst diffAngle = clockWise ? -originDiffAngle : originDiffAngle;\n\t\t\tconst endAngle = curAngle = curAngle + diffAngle;\n\t\t\tconst startPosition = getPositionByAngle(startAngle, radius);\n\t\t\tconst endPosition = getPositionByAngle(endAngle, radius);\n\n\t\t\tconst prevProperty = this.init && prevSlicesProperties[i];\n\n\t\t\tlet curStart,curEnd;\n\t\t\tif(this.init) {\n\t\t\t\tcurStart = prevProperty ? prevProperty.startPosition : startPosition;\n\t\t\t\tcurEnd = prevProperty ? prevProperty.endPosition : startPosition;\n\t\t\t} else {\n\t\t\t\tcurStart = startPosition;\n\t\t\t\tcurEnd = endPosition;\n\t\t\t}\n\t\t\tconst curPath =\n\t\t\t\toriginDiffAngle === 360\n\t\t\t\t\t? makeStrokeCircleStr(curStart, curEnd, this.center, this.radius, this.clockWise, largeArc)\n\t\t\t\t\t: makeArcStrokePathStr(curStart, curEnd, this.center, this.radius, this.clockWise, largeArc);\n\n\t\t\ts.sliceStrings.push(curPath);\n\t\t\ts.slicesProperties.push({\n\t\t\t\tstartPosition,\n\t\t\t\tendPosition,\n\t\t\t\tvalue: total,\n\t\t\t\ttotal: s.grandTotal,\n\t\t\t\tstartAngle,\n\t\t\t\tendAngle,\n\t\t\t\tangle: diffAngle\n\t\t\t});\n\n\t\t});\n\t\tthis.init = 0;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'donutSlices',\n\t\t\t\t{ },\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsliceStrings: s.sliceStrings,\n\t\t\t\t\t\tcolors: this.colors,\n\t\t\t\t\t\tstrokeWidth: this.strokeWidth,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalTranslateByAngle(property){\n\t\tconst{ radius, hoverRadio } = this;\n\t\tconst position = getPositionByAngle(property.startAngle+(property.angle / 2),radius);\n\t\treturn `translate3d(${(position.x) * hoverRadio}px,${(position.y) * hoverRadio}px,0)`;\n\t}\n\n\thoverSlice(path,i,flag,e){\n\t\tif(!path) return;\n\t\tconst color = this.colors[i];\n\t\tif(flag) {\n\t\t\ttransform(path, this.calTranslateByAngle(this.state.slicesProperties[i]));\n\t\t\tpath.style.stroke = lightenDarkenColor(color, 50);\n\t\t\tlet g_off = getOffset(this.svg);\n\t\t\tlet x = e.pageX - g_off.left + 10;\n\t\t\tlet y = e.pageY - g_off.top - 10;\n\t\t\tlet title = (this.formatted_labels && this.formatted_labels.length > 0\n\t\t\t\t? this.formatted_labels[i] : this.state.labels[i]) + ': ';\n\t\t\tlet percent = (this.state.sliceTotals[i] * 100 / this.state.grandTotal).toFixed(1);\n\t\t\tthis.tip.setValues(x, y, {name: title, value: percent + \"%\"});\n\t\t\tthis.tip.showTip();\n\t\t} else {\n\t\t\ttransform(path,'translate3d(0,0,0)');\n\t\t\tthis.tip.hideTip();\n\t\t\tpath.style.stroke = color;\n\t\t}\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', this.mouseMove);\n\t\tthis.container.addEventListener('mouseleave', this.mouseLeave);\n\t}\n\n\tmouseMove(e){\n\t\tconst target = e.target;\n\t\tlet slices = this.components.get('donutSlices').store;\n\t\tlet prevIndex = this.curActiveSliceIndex;\n\t\tlet prevAcitve = this.curActiveSlice;\n\t\tif(slices.includes(target)) {\n\t\t\tlet i = slices.indexOf(target);\n\t\t\tthis.hoverSlice(prevAcitve, prevIndex,false);\n\t\t\tthis.curActiveSlice = target;\n\t\t\tthis.curActiveSliceIndex = i;\n\t\t\tthis.hoverSlice(target, i, true, e);\n\t\t} else {\n\t\t\tthis.mouseLeave();\n\t\t}\n\t}\n\n\tmouseLeave(){\n\t\tthis.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,false);\n\t}\n}\n","import '../css/charts.scss';\n\n// import MultiAxisChart from './charts/MultiAxisChart';\nimport PercentageChart from './charts/PercentageChart';\nimport PieChart from './charts/PieChart';\nimport Heatmap from './charts/Heatmap';\nimport AxisChart from './charts/AxisChart';\nimport DonutChart from './charts/DonutChart';\n\nconst chartTypes = {\n\tbar: AxisChart,\n\tline: AxisChart,\n\t// multiaxis: MultiAxisChart,\n\tpercentage: PercentageChart,\n\theatmap: Heatmap,\n\tpie: PieChart,\n\tdonut: DonutChart,\n};\n\nfunction getChartByType(chartType = 'line', parent, options) {\n\tif (chartType === 'axis-mixed') {\n\t\toptions.type = 'line';\n\t\treturn new AxisChart(parent, options);\n\t}\n\n\tif (!chartTypes[chartType]) {\n\t\tconsole.error(\"Undefined chart type: \" + chartType);\n\t\treturn;\n\t}\n\n\treturn new chartTypes[chartType](parent, options);\n}\n\nclass Chart {\n\tconstructor(parent, options) {\n\t\treturn getChartByType(options.type, parent, options);\n\t}\n}\n\nexport { Chart, PercentageChart, PieChart, Heatmap, AxisChart };","import * as Charts from './chart';\n\nlet frappe = { };\n\nfrappe.NAME = 'Frappe Charts';\nfrappe.VERSION = '1.6.2';\n\nfrappe = Object.assign({ }, frappe, Charts);\n\nexport default frappe;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/DashboardPage');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/DashboardWidget');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LoadingIndicator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Link');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/abbreviateNumber');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport DashboardWidget from 'flarum/admin/components/DashboardWidget';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Link from 'flarum/common/components/Link';\nimport abbreviateNumber from 'flarum/common/utils/abbreviateNumber';\nexport default class MiniStatisticsWidget extends DashboardWidget {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"entities\", ['users', 'discussions', 'posts']);\n _defineProperty(this, \"lifetimeData\", void 0);\n _defineProperty(this, \"loadingLifetime\", true);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.loadLifetimeData();\n }\n async loadLifetimeData() {\n this.loadingLifetime = true;\n m.redraw();\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'lifetime'\n }\n });\n this.lifetimeData = data;\n this.loadingLifetime = false;\n m.redraw();\n }\n className() {\n return 'StatisticsWidget StatisticsWidget--mini';\n }\n content() {\n return m(\"div\", {\n className: \"StatisticsWidget-table\"\n }, m(\"h4\", {\n className: \"StatisticsWidget-title\"\n }, app.translator.trans('flarum-statistics.admin.statistics.mini_heading')), m(\"div\", {\n className: \"StatisticsWidget-entities\"\n }, m(\"div\", {\n className: \"StatisticsWidget-labels\"\n }, m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, app.translator.trans('flarum-statistics.admin.statistics.total_label'))), this.entities.map(entity => {\n const totalCount = this.loadingLifetime ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getTotalCount(entity);\n return m(\"div\", {\n className: \"StatisticsWidget-entity\"\n }, m(\"h3\", {\n className: \"StatisticsWidget-heading\"\n }, app.translator.trans('flarum-statistics.admin.statistics.' + entity + '_heading')), m(\"div\", {\n className: \"StatisticsWidget-total\",\n title: totalCount\n }, this.loadingLifetime ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(totalCount)));\n })), m(\"div\", {\n className: \"StatisticsWidget-viewFull\"\n }, m(Link, {\n href: app.route('extension', {\n id: 'flarum-statistics'\n })\n }, app.translator.trans('flarum-statistics.admin.statistics.view_full'))));\n }\n getTotalCount(entity) {\n return this.lifetimeData[entity];\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/MiniStatisticsWidget', MiniStatisticsWidget);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/SelectDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Placeholder');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Icon');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/classList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/generateElementId');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormModal');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport generateElementId from 'flarum/common/utils/generateElementId';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Button from 'flarum/common/components/Button';\nimport dayjs from 'dayjs';\nimport dayjsUtc from 'dayjs/plugin/utc';\ndayjs.extend(dayjsUtc);\nexport default class StatisticsWidgetDateSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n /* @ts-expect-error core typings don't allow us to set the type of the state attr :( */\n _defineProperty(this, \"state\", {\n inputs: {\n startDateVal: dayjs().format('YYYY-MM-DD'),\n endDateVal: dayjs().format('YYYY-MM-DD')\n },\n ids: {\n startDate: generateElementId(),\n endDate: generateElementId()\n }\n });\n }\n oninit(vnode) {\n super.oninit(vnode);\n if (this.attrs.value) {\n this.state.inputs = {\n startDateVal: dayjs.utc(this.attrs.value.start * 1000).format('YYYY-MM-DD'),\n endDateVal: dayjs.utc(this.attrs.value.end * 1000).format('YYYY-MM-DD')\n };\n }\n }\n className() {\n return 'StatisticsWidgetDateSelectionModal Modal--small';\n }\n title() {\n return app.translator.trans('flarum-statistics.admin.date_selection_modal.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, this.items().toArray());\n }\n items() {\n const items = new ItemList();\n items.add('intro', m(\"p\", null, app.translator.trans('flarum-statistics.admin.date_selection_modal.description')), 100);\n items.add('date_start', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", {\n htmlFor: this.state.ids.startDate\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.start_date')), m(\"input\", {\n type: \"date\",\n id: this.state.ids.startDate,\n value: this.state.inputs.startDateVal,\n onchange: this.updateState('startDateVal'),\n className: \"FormControl\"\n })), 90);\n items.add('date_end', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", {\n htmlFor: this.state.ids.endDate\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.end_date')), m(\"input\", {\n type: \"date\",\n id: this.state.ids.endDate,\n value: this.state.inputs.endDateVal,\n onchange: this.updateState('endDateVal'),\n className: \"FormControl\"\n })), 80);\n items.add('submit', m(Button, {\n className: \"Button Button--primary\",\n type: \"submit\"\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.submit_button')), 0);\n return items;\n }\n updateState(field) {\n return e => {\n this.state.inputs[field] = e.currentTarget.value;\n };\n }\n submitData() {\n // We force 'zulu' time (UTC)\n return {\n start: Math.floor(+dayjs.utc(this.state.inputs.startDateVal + 'Z') / 1000),\n // Ensures that the end date is the end of the day\n end: Math.floor(+dayjs.utc(this.state.inputs.endDateVal + 'Z').hour(23).minute(59).second(59).millisecond(999) / 1000)\n };\n }\n onsubmit(e) {\n e.preventDefault();\n const data = this.submitData();\n if (data.end < data.start) {\n this.alertAttrs = {\n type: 'error',\n controls: app.translator.trans('flarum-statistics.admin.date_selection_modal.errors.end_before_start')\n };\n return;\n }\n this.attrs.onModalSubmit(data);\n this.hide();\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsWidgetDateSelectionModal', StatisticsWidgetDateSelectionModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport SelectDropdown from 'flarum/common/components/SelectDropdown';\nimport Button from 'flarum/common/components/Button';\nimport abbreviateNumber from 'flarum/common/utils/abbreviateNumber';\nimport extractText from 'flarum/common/utils/extractText';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Placeholder from 'flarum/common/components/Placeholder';\nimport Icon from 'flarum/common/components/Icon';\nimport classList from 'flarum/common/utils/classList';\nimport DashboardWidget from 'flarum/admin/components/DashboardWidget';\nimport StatisticsWidgetDateSelectionModal from './StatisticsWidgetDateSelectionModal';\nimport dayjs from 'dayjs';\nimport dayjsUtc from 'dayjs/plugin/utc';\nimport dayjsLocalizedFormat from 'dayjs/plugin/localizedFormat';\n// @ts-expect-error No typings available\nimport { Chart } from 'frappe-charts';\ndayjs.extend(dayjsUtc);\ndayjs.extend(dayjsLocalizedFormat);\nexport default class StatisticsWidget extends DashboardWidget {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"entities\", ['users', 'discussions', 'posts']);\n _defineProperty(this, \"periods\", void 0);\n _defineProperty(this, \"chart\", void 0);\n _defineProperty(this, \"customPeriod\", null);\n _defineProperty(this, \"timedData\", {});\n _defineProperty(this, \"lifetimeData\", void 0);\n _defineProperty(this, \"customPeriodData\", {});\n _defineProperty(this, \"noData\", false);\n _defineProperty(this, \"loadingLifetime\", true);\n _defineProperty(this, \"loadingTimed\", this.entities.reduce((acc, curr) => {\n acc[curr] = 'unloaded';\n return acc;\n }, {}));\n _defineProperty(this, \"loadingCustom\", this.entities.reduce((acc, curr) => {\n acc[curr] = 'unloaded';\n return acc;\n }, {}));\n _defineProperty(this, \"selectedEntity\", 'users');\n _defineProperty(this, \"selectedPeriod\", void 0);\n _defineProperty(this, \"chartEntity\", void 0);\n _defineProperty(this, \"chartPeriod\", void 0);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.loadLifetimeData();\n }\n async loadLifetimeData() {\n this.loadingLifetime = true;\n m.redraw();\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'lifetime'\n }\n });\n this.lifetimeData = data;\n this.loadingLifetime = false;\n m.redraw();\n }\n async loadTimedData(model) {\n this.loadingTimed[model] = 'loading';\n m.redraw();\n try {\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'timed',\n model\n }\n });\n this.timedData[model] = data;\n this.loadingTimed[model] = 'loaded';\n\n // Create a Date object which represents the start of the day.\n let todayDate = new Date();\n todayDate.setUTCHours(0, 0, 0, 0);\n const today = todayDate.getTime() / 1000;\n this.periods = {\n today: {\n start: today,\n end: today + 86400,\n step: 3600\n },\n last_7_days: {\n start: today - 86400 * 7,\n end: today,\n step: 86400\n },\n previous_7_days: {\n start: today - 86400 * 14,\n end: today - 86400 * 7,\n step: 86400\n },\n last_28_days: {\n start: today - 86400 * 28,\n end: today,\n step: 86400\n },\n previous_28_days: {\n start: today - 86400 * 28 * 2,\n end: today - 86400 * 28,\n step: 86400\n },\n last_12_months: {\n start: today - 86400 * 364,\n end: today,\n step: 86400 * 7\n }\n };\n this.selectedPeriod = 'last_7_days';\n } catch (e) {\n console.error(e);\n this.loadingTimed[model] = 'fail';\n }\n m.redraw();\n }\n async loadCustomRangeData(model) {\n this.loadingCustom[model] = 'loading';\n m.redraw();\n\n // We clone so we can check that the same period is still selected\n // once the HTTP request is complete and the data is to be displayed\n const range = {\n ...this.customPeriod\n };\n try {\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'custom',\n model,\n dateRange: {\n start: range.start,\n end: range.end\n }\n }\n });\n if (JSON.stringify(range) !== JSON.stringify(this.customPeriod)) {\n // The range this method was called with is no longer the selected.\n // Bail out here.\n return;\n }\n this.customPeriodData[model] = data;\n this.loadingCustom[model] = 'loaded';\n m.redraw();\n } catch (e) {\n if (JSON.stringify(range) !== JSON.stringify(this.customPeriod)) {\n // The range this method was called with is no longer the selected.\n // Bail out here.\n return;\n }\n console.error(e);\n this.loadingCustom[model] = 'fail';\n }\n }\n className() {\n return 'StatisticsWidget';\n }\n content() {\n var _this$customPeriod, _this$customPeriod2;\n const loadingSelectedEntity = (this.selectedPeriod === 'custom' ? this.loadingCustom : this.loadingTimed)[this.selectedEntity] !== 'loaded';\n const thisPeriod = loadingSelectedEntity ? null : this.selectedPeriod === 'custom' ? {\n start: (_this$customPeriod = this.customPeriod) == null ? void 0 : _this$customPeriod.end,\n end: (_this$customPeriod2 = this.customPeriod) == null ? void 0 : _this$customPeriod2.end,\n step: 86400\n } : this.periods[this.selectedPeriod];\n if (this.selectedPeriod === 'custom') {\n if (!this.customPeriodData[this.selectedEntity] && this.loadingCustom[this.selectedEntity] === 'unloaded') {\n this.loadCustomRangeData(this.selectedEntity);\n }\n } else {\n if (!this.timedData[this.selectedEntity] && this.loadingTimed[this.selectedEntity] === 'unloaded') {\n this.loadTimedData(this.selectedEntity);\n }\n }\n return m(\"div\", {\n className: \"StatisticsWidget-table\"\n }, m(\"div\", {\n className: \"StatisticsWidget-entities\"\n }, m(\"div\", {\n className: \"StatisticsWidget-labels\"\n }, m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, app.translator.trans('flarum-statistics.admin.statistics.total_label')), m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, loadingSelectedEntity ? m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }) : m(SelectDropdown, {\n disabled: loadingSelectedEntity,\n buttonClassName: \"Button Button--text\",\n caretIcon: \"fas fa-caret-down\"\n }, Object.keys(this.periods).map(period => m(Button, {\n key: period,\n active: period === this.selectedPeriod,\n onclick: this.changePeriod.bind(this, period),\n icon: period === this.selectedPeriod ? 'fas fa-check' : true\n }, app.translator.trans(\"flarum-statistics.admin.statistics.\".concat(period, \"_label\")))).concat([m(Button, {\n key: \"custom\",\n active: this.selectedPeriod === 'custom',\n onclick: () => {\n const attrs = {\n onModalSubmit: dates => {\n if (JSON.stringify(dates) === JSON.stringify(this.customPeriod)) {\n // If same period is selected, don't reload data\n return;\n }\n this.customPeriodData = {};\n Object.keys(this.loadingCustom).forEach(k => this.loadingCustom[k] = 'unloaded');\n this.customPeriod = dates;\n this.changePeriod('custom');\n }\n };\n\n // If we have a custom period set already,\n // let's prefill the modal with it\n if (this.customPeriod) {\n attrs.value = this.customPeriod;\n }\n app.modal.show(StatisticsWidgetDateSelectionModal, attrs);\n },\n icon: this.selectedPeriod === 'custom' ? 'fas fa-check' : true\n }, this.selectedPeriod === 'custom' ? extractText(app.translator.trans(\"flarum-statistics.admin.statistics.custom_label_specified\", {\n fromDate: dayjs.utc(this.customPeriod.start * 1000).format('ll'),\n toDate: dayjs.utc(this.customPeriod.end * 1000).format('ll')\n })) : app.translator.trans(\"flarum-statistics.admin.statistics.custom_label\"))])))), this.entities.map(entity => {\n const totalCount = this.loadingLifetime ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getTotalCount(entity);\n const thisPeriodCount = loadingSelectedEntity ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getPeriodCount(entity, thisPeriod);\n const lastPeriodCount = this.selectedPeriod === 'custom' ? null : loadingSelectedEntity ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getPeriodCount(entity, this.getLastPeriod(thisPeriod));\n const periodChange = loadingSelectedEntity || lastPeriodCount === 0 || lastPeriodCount === null ? 0 : (thisPeriodCount - lastPeriodCount) / lastPeriodCount * 100;\n return m(\"button\", {\n className: classList('Button--ua-reset StatisticsWidget-entity', {\n active: this.selectedEntity === entity\n }),\n onclick: this.changeEntity.bind(this, entity)\n }, m(\"h3\", {\n className: \"StatisticsWidget-heading\"\n }, app.translator.trans('flarum-statistics.admin.statistics.' + entity + '_heading')), m(\"div\", {\n className: \"StatisticsWidget-total\",\n title: totalCount\n }, this.loadingLifetime ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(totalCount)), m(\"div\", {\n className: \"StatisticsWidget-period\",\n title: thisPeriodCount\n }, loadingSelectedEntity ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(thisPeriodCount), periodChange !== 0 && m('[', null, ' ', m(\"span\", {\n className: 'StatisticsWidget-change StatisticsWidget-change--' + (periodChange > 0 ? 'up' : 'down')\n }, m(Icon, {\n name: 'fas fa-arrow-' + (periodChange > 0 ? 'up' : 'down')\n }), Math.abs(periodChange).toFixed(1), \"%\"))));\n })), m('[', null, loadingSelectedEntity ? m(\"div\", {\n key: \"loading\",\n className: \"StatisticsWidget-chart\",\n \"data-loading\": \"true\"\n }, m(LoadingIndicator, {\n size: \"large\"\n })) : m(\"div\", {\n key: \"loaded\",\n className: \"StatisticsWidget-chart\",\n \"data-loading\": \"false\",\n oncreate: this.drawChart.bind(this),\n onupdate: this.drawChart.bind(this)\n })), this.noData && m(Placeholder, {\n text: app.translator.trans(\"flarum-statistics.admin.statistics.no_data\")\n }), !this.noData && !!this.chart && m(Button, {\n className: \"StatisticsWidget-chartExport Button\",\n icon: \"fas fa-file-export\",\n onclick: () => {\n this.chart.export();\n }\n }, app.translator.trans('flarum-statistics.admin.statistics.export_chart_button')));\n }\n drawChart(vnode) {\n var _this$customPeriod3, _this$customPeriod4;\n if (this.chart && this.chartEntity === this.selectedEntity && this.chartPeriod === this.selectedPeriod) {\n return;\n }\n const period = this.selectedPeriod === 'custom' ? {\n start: (_this$customPeriod3 = this.customPeriod) == null ? void 0 : _this$customPeriod3.start,\n end: (_this$customPeriod4 = this.customPeriod) == null ? void 0 : _this$customPeriod4.end,\n step: 86400\n } : this.periods[this.selectedPeriod];\n const periodLength = period.end - period.start;\n const labels = [];\n const thisPeriod = [];\n const lastPeriod = [];\n for (let i = period.start; i < period.end; i += period.step) {\n let label;\n if (period.step < 86400) {\n label = dayjs.unix(i).utc().format('h A');\n } else {\n label = dayjs.unix(i).utc().format('D MMM');\n if (period.step > 86400) {\n label += ' - ' + dayjs.unix(i + period.step - 1).utc().format('D MMM');\n }\n }\n labels.push(label);\n thisPeriod.push(this.getPeriodCount(this.selectedEntity, {\n start: i,\n end: i + period.step\n }));\n lastPeriod.push(this.getPeriodCount(this.selectedEntity, {\n start: i - periodLength,\n end: i - periodLength\n }));\n }\n if (thisPeriod.length === 0) {\n this.noData = true;\n m.redraw();\n return;\n } else {\n this.noData = false;\n m.redraw();\n }\n const datasets = [{\n name: extractText(app.translator.trans('flarum-statistics.admin.statistics.current_period')),\n values: thisPeriod\n }, {\n name: extractText(app.translator.trans('flarum-statistics.admin.statistics.previous_period')),\n values: lastPeriod\n }];\n const data = {\n labels,\n datasets\n };\n\n // If the dom element no longer exists, recreate the chart\n // https://stackoverflow.com/a/2620373/11091039\n if (!this.chart || !(document.compareDocumentPosition(this.chart.parent) & 16)) {\n this.chart = new Chart(vnode.dom, {\n data,\n type: 'line',\n height: 280,\n axisOptions: {\n xAxisMode: 'tick',\n yAxisMode: 'span',\n xIsSeries: true\n },\n lineOptions: {\n hideDots: 1,\n regionFill: 1\n },\n colors: [app.forum.attribute('themePrimaryColor'), 'black']\n });\n } else {\n this.chart.update(data);\n }\n this.chartEntity = this.selectedEntity;\n this.chartPeriod = this.selectedPeriod;\n }\n changeEntity(entity) {\n this.selectedEntity = entity;\n }\n changePeriod(period) {\n this.selectedPeriod = period;\n }\n getTotalCount(entity) {\n return this.lifetimeData[entity];\n }\n getPeriodCount(entity, period) {\n const timed = (this.selectedPeriod === 'custom' ? this.customPeriodData : this.timedData)[entity];\n let count = 0;\n for (const t in timed) {\n const time = parseInt(t);\n if (time >= period.start && time < period.end) {\n count += timed[time];\n }\n }\n return count;\n }\n getLastPeriod(thisPeriod) {\n return {\n start: thisPeriod.start - (thisPeriod.end - thisPeriod.start),\n end: thisPeriod.start\n };\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsWidget', StatisticsWidget);","import ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport StatisticsWidget from './StatisticsWidget';\nexport default class StatisticsPage extends ExtensionPage {\n content() {\n return m(\"div\", {\n className: \"StatisticsPage\"\n }, m(\"div\", {\n className: \"container\"\n }, m(StatisticsWidget, null)));\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsPage', StatisticsPage);","import app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport DashboardPage from 'flarum/admin/components/DashboardPage';\nimport MiniStatisticsWidget from './components/MiniStatisticsWidget';\nimport StatisticsPage from './components/StatisticsPage';\napp.initializers.add('flarum-statistics', () => {\n extend(DashboardPage.prototype, 'availableWidgets', function (widgets) {\n widgets.add('statistics', m(MiniStatisticsWidget, null), 20);\n });\n app.extensionData.for('flarum-statistics').registerPage(StatisticsPage);\n});"],"names":["module","exports","e","n","r","i","s","u","a","o","f","h","c","d","l","$","y","M","name","weekdays","split","months","ordinal","t","m","String","length","Array","join","v","z","utcOffset","Math","abs","floor","date","year","month","clone","add","ceil","p","w","D","ms","Q","toLowerCase","replace","g","_","S","args","arguments","O","locale","$L","utc","$u","x","$x","$offset","this","parse","prototype","$d","Date","NaN","test","match","substring","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","toString","isSame","startOf","endOf","isAfter","isBefore","$g","set","unix","valueOf","getTime","toDate","apply","slice","$locale","weekStart","$set","min","daysInMonth","get","Number","round","subtract","format","invalidDate","meridiem","YY","YYYY","MM","MMM","monthsShort","MMMM","DD","dd","weekdaysMin","ddd","weekdaysShort","dddd","H","HH","hh","A","mm","ss","SSS","Z","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","T","forEach","extend","$i","isDayjs","en","Ls","LTS","LT","L","LL","LLL","LLLL","formats","toUpperCase","call","local","getUTCFullYear","getUTCMonth","getUTCDate","getUTCDay","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","$localOffset","isUTC","document","querySelector","getBoundingClientRect","top","documentElement","scrollTop","body","left","scrollLeft","offsetParent","bottom","window","innerHeight","clientHeight","right","innerWidth","clientWidth","titleHeight","margins","paddings","legendHeight","parseFloat","toFixed","fill","concat","sin","Zt","cos","isNaN","isFinite","Ft","isArray","b","log10","pow","k","push","sqrt","angle","atan2","PI","reduce","ie","parseInt","createElementNS","appendChild","parentNode","insertBefore","Object","keys","map","style","textContent","setAttribute","inside","id","x1","x2","y1","y2","offset","N","className","transform","styles","stroke","j","width","height","rx","Y","fontSize","re","dy","le","textAnchor","innerHTML","B","oe","ae","V","lineType","shortenNumbers","ve","tt","pe","it","zeroLine","Vt","nodeName","childNodes","ce","getAttribute","st","rt","cloneNode","attributeName","from","to","begin","dur","values","keySplines","ge","keyTimes","calcMode","type","ot","webkitTransform","msTransform","mozTransform","oTransform","lt","Ut","replaceChild","ut","removeChild","setTimeout","fe","ct","classList","create","me","firstChild","dt","setMinutes","pt","ft","vt","xt","we","ke","gt","xe","mt","yt","Ae","bt","kt","setDate","wt","Le","filter","includes","assign","constants","getData","Te","At","mantissa","exponent","Pt","Tt","Lt","unshift","max","reverse","Ot","Mt","indexOf","Ct","Dt","scaleMultiplier","Et","_t","labels","datasets","chartType","Xt","yRegions","end","start","zt","yMarkers","value","label","insertAt","head","getElementsByTagName","createElement","styleSheet","cssText","createTextNode","Symbol","iterator","constructor","Ht","Promise","resolve","then","done","reject","next","key","arg","_invoke","return","asyncIterator","throw","TypeError","It","enumerable","configurable","writable","defineProperty","Rt","Function","getOwnPropertyDescriptor","getPrototypeOf","Yt","setPrototypeOf","__proto__","Bt","ReferenceError","Gt","baseHeight","titleFontSize","Jt","Kt","$t","Qt","bar","line","pie","percentage","heatmap","donut","te","parent","colors","titleName","titleValue","listValues","titleValueFirst","setup","makeTooltip","calcPosition","container","hideTip","title","dataPointList","addEventListener","index","formatted","offsetWidth","offsetHeight","valueFirst","refresh","opacity","ee","blue","violet","red","orange","yellow","green","purple","magenta","black","grey","exec","ne","se","ue","dot","heat_square","he","attributes","specified","nodeValue","de","ease","linear","easein","easeout","easeinout","ye","HTMLElement","Error","rawChartArgs","realData","prepareData","data","prepareFirstData","validateColors","config","showTooltip","showLegend","isNavigable","animate","truncateLegends","measures","JSON","stringify","setMeasures","argHeight","state","options","initTimeout","overlays","configure","P","console","warn","boundDrawFn","draw","ResizeObserver","resizeObserver","observe","disconnect","removeEventListener","makeContainer","updateWidth","independentWidth","tip","bindTooltip","calc","makeChartArea","setupComponents","components","drawArea","render","update","renderLegend","setupNavigation","baseWidth","getComputedStyle","paddingLeft","paddingRight","svg","C","svgDefs","titleEL","legendArea","updateTipOffset","Map","error","make","updateNav","makeOverlay","bindUnits","bindOverlay","keyActions","onEnterKey","bind","onLeftArrow","onUpArrow","onRightArrow","onDownArrow","event","keyCode","Blob","URL","createObjectURL","href","download","click","revokeObjectURL","ht","be","formatTooltipY","tooltipOptions","maxSlices","maxLegendPoints","sliceTotals","sort","grandTotal","center","legendTotals","cx","cy","dx","R","Pe","layerClass","layerTransform","makeElements","animateElements","store","layer","oldData","donutSlices","sliceStrings","strokeWidth","transition","pieSlices","percentageBars","xPositions","F","widths","barHeight","barDepth","yAxis","positions","pos","mode","U","xAxis","G","calcLabels","labelPos","q","position","X","startPos","endPos","et","heatDomain","colWidth","rowHeight","squareSize","radius","xTranslate","serializedSubDomains","cols","yyyyMmDd","dataValue","barGraph","unitType","units","yPositions","minHeight","J","barWidth","color","offsets","barsWidth","lineGraph","paths","hideLine","spline","heatline","path","regionFill","region","hideDots","K","valuesOverPoints","at","nt","Oe","barOptions","depth","target","formattedLabels","setValues","showTip","Me","mouseMove","mouseLeave","hoverRadio","startAngle","clockWise","slicesProperties","startPosition","endPosition","E","total","endAngle","calTranslateByAngle","pageX","pageY","formatted_labels","curActiveSliceIndex","curActiveSlice","hoverSlice","Ce","countLabel","startSubDomain","startSubDomainIndex","discreteDomains","noOfWeeks","setFullYear","dataPoints","firstWeekStart","distribution","St","domainConfigs","getDomains","getDomainConfig","getCol","getSubDomainConfig","De","lineOptions","axisOptions","xAxisMode","yAxisMode","xIsSeries","shortenYAxisNumbers","formatTooltipX","calcXPositions","calcYAxisParameters","getAllYValues","makeDataByIndex","datasetLength","unitWidth","xOffset","calcDatasetPoints","calcYExtremes","calcYRegions","cumulativeYs","cumulativeYPos","stacked","yExtremes","Wt","spaceRatio","dotSize","dataUnitComponents","dataByIndex","yPos","formattedLabel","xPos","yExtreme","mapTooltipXPosition","Nt","I","overlayGuides","overlay","currentIndex","updateOverlay","setCurrentDataPoint","createEvent","initEvent","dispatchEvent","getDataPoint","splice","Ne","W","Se","_e","freeze","Chart","jt","PercentageChart","PieChart","Heatmap","AxisChart","ze","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","obj","prop","hasOwnProperty","toStringTag","flarum","reg","_typeof","_defineProperty","input","hint","prim","toPrimitive","res","toPropertyKey","MiniStatisticsWidget","super","oncreate","vnode","loadLifetimeData","async","loadingLifetime","redraw","method","url","params","period","lifetimeData","content","entities","entity","totalCount","getTotalCount","display","StatisticsWidgetDateSelectionModal","inputs","startDateVal","endDateVal","ids","startDate","endDate","oninit","attrs","items","toArray","htmlFor","onchange","updateState","field","currentTarget","submitData","hour","minute","second","millisecond","onsubmit","preventDefault","alertAttrs","controls","onModalSubmit","hide","StatisticsWidget","acc","curr","model","loadingTimed","timedData","todayDate","setUTCHours","today","periods","step","last_7_days","previous_7_days","last_28_days","previous_28_days","last_12_months","selectedPeriod","loadingCustom","range","customPeriod","dateRange","customPeriodData","_this$customPeriod","_this$customPeriod2","loadingSelectedEntity","selectedEntity","thisPeriod","loadCustomRangeData","loadTimedData","size","disabled","buttonClassName","caretIcon","active","onclick","changePeriod","icon","dates","fromDate","thisPeriodCount","getPeriodCount","lastPeriodCount","getLastPeriod","periodChange","changeEntity","drawChart","onupdate","noData","text","chart","export","_this$customPeriod3","_this$customPeriod4","chartEntity","chartPeriod","periodLength","lastPeriod","compareDocumentPosition","dom","timed","count","time","StatisticsPage","widgets","registerPage"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/statistics/../../../node_modules/dayjs/dayjs.min.js","webpack://@flarum/statistics/../../../node_modules/dayjs/plugin/localizedFormat.js","webpack://@flarum/statistics/../../../node_modules/dayjs/plugin/utc.js","webpack://@flarum/statistics/../src/js/utils/dom.js","webpack://@flarum/statistics/../src/js/utils/constants.js","webpack://@flarum/statistics/../src/js/utils/helpers.js","webpack://@flarum/statistics/../src/js/utils/draw-utils.js","webpack://@flarum/statistics/../src/js/utils/colors.js","webpack://@flarum/statistics/../src/js/utils/draw.js","webpack://@flarum/statistics/../src/js/utils/animate.js","webpack://@flarum/statistics/../src/js/utils/animation.js","webpack://@flarum/statistics/../src/js/utils/export.js","webpack://@flarum/statistics/../src/js/utils/date-utils.js","webpack://@flarum/statistics/../src/js/objects/ChartComponents.js","webpack://@flarum/statistics/../src/js/utils/intervals.js","webpack://@flarum/statistics/../src/js/utils/axis-chart-utils.js","webpack://@flarum/statistics/../node_modules/style-inject/dist/style-inject.es.js","webpack://@flarum/statistics/../src/js/objects/SvgTip.js","webpack://@flarum/statistics/../src/css/chartsCss.js","webpack://@flarum/statistics/../src/js/charts/BaseChart.js","webpack://@flarum/statistics/../src/js/charts/AggregationChart.js","webpack://@flarum/statistics/../src/js/charts/PercentageChart.js","webpack://@flarum/statistics/../src/js/charts/PieChart.js","webpack://@flarum/statistics/../src/js/charts/Heatmap.js","webpack://@flarum/statistics/../src/js/charts/AxisChart.js","webpack://@flarum/statistics/../src/js/charts/DonutChart.js","webpack://@flarum/statistics/../src/js/chart.js","webpack://@flarum/statistics/../src/js/index.js","webpack://@flarum/statistics/webpack/bootstrap","webpack://@flarum/statistics/webpack/runtime/compat get default export","webpack://@flarum/statistics/webpack/runtime/define property getters","webpack://@flarum/statistics/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/statistics/webpack/runtime/make namespace object","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/DashboardPage')\"","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/statistics/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/DashboardWidget')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/abbreviateNumber')\"","webpack://@flarum/statistics/./src/admin/components/MiniStatisticsWidget.tsx","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/SelectDropdown')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Placeholder')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/Icon')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/utils/generateElementId')\"","webpack://@flarum/statistics/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/statistics/./src/admin/components/StatisticsWidgetDateSelectionModal.tsx","webpack://@flarum/statistics/./src/admin/components/StatisticsWidget.tsx","webpack://@flarum/statistics/./src/admin/components/StatisticsPage.tsx","webpack://@flarum/statistics/./src/admin/extend.tsx","webpack://@flarum/statistics/./src/admin/index.tsx"],"sourcesContent":["!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",f=\"month\",h=\"quarter\",c=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t) {\n\tvar element = document.createElement(tag);\n\n\tfor (var i in o) {\n\t\tvar val = o[i];\n\n\t\tif (i === \"inside\") {\n\t\t\t$(val).appendChild(element);\n\t\t}\n\t\telse if (i === \"around\") {\n\t\t\tvar ref = $(val);\n\t\t\tref.parentNode.insertBefore(element, ref);\n\t\t\telement.appendChild(ref);\n\n\t\t} else if (i === \"styles\") {\n\t\t\tif(typeof val === \"object\") {\n\t\t\t\tObject.keys(val).map(prop => {\n\t\t\t\t\telement.style[prop] = val[prop];\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (i in element ) {\n\t\t\telement[i] = val;\n\t\t}\n\t\telse {\n\t\t\telement.setAttribute(i, val);\n\t\t}\n\t}\n\n\treturn element;\n};\n\nexport function getOffset(element) {\n\tlet rect = element.getBoundingClientRect();\n\treturn {\n\t\t// https://stackoverflow.com/a/7436602/6495043\n\t\t// rect.top varies with scroll, so we add whatever has been\n\t\t// scrolled to it to get absolute distance from actual page top\n\t\ttop: rect.top + (document.documentElement.scrollTop || document.body.scrollTop),\n\t\tleft: rect.left + (document.documentElement.scrollLeft || document.body.scrollLeft)\n\t};\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n// an element's offsetParent property will return null whenever it, or any of its parents,\n// is hidden via the display style property.\nexport function isHidden(el) {\n\treturn (el.offsetParent === null);\n}\n\nexport function isElementInViewport(el) {\n\t// Although straightforward: https://stackoverflow.com/a/7557433/6495043\n\tvar rect = el.getBoundingClientRect();\n\n\treturn (\n\t\trect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */\n rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */\n\t);\n}\n\nexport function getElementContentWidth(element) {\n\tvar styles = window.getComputedStyle(element);\n\tvar padding = parseFloat(styles.paddingLeft) +\n\t\tparseFloat(styles.paddingRight);\n\n\treturn element.clientWidth - padding;\n}\n\nexport function bind(element, o){\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function (event) {\n\t\t\t\telement.addEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function unbind(element, o){\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function(event) {\n\t\t\t\telement.removeEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n}\n\nexport function fire(target, type, properties) {\n\tvar evt = document.createEvent(\"HTMLEvents\");\n\n\tevt.initEvent(type, true, true );\n\n\tfor (var j in properties) {\n\t\tevt[j] = properties[j];\n\t}\n\n\treturn target.dispatchEvent(evt);\n}\n\n// https://css-tricks.com/snippets/javascript/loop-queryselectorall-matches/\nexport function forEachNode(nodeList, callback, scope) {\n\tif(!nodeList) return;\n\tfor (var i = 0; i < nodeList.length; i++) {\n\t\tcallback.call(scope, nodeList[i], i);\n\t}\n}\n\nexport function activate($parent, $child, commonClass, activeClass='active', index = -1) {\n\tlet $children = $parent.querySelectorAll(`.${commonClass}.${activeClass}`);\n\n\tforEachNode($children, (node, i) => {\n\t\tif(index >= 0 && i <= index) return;\n\t\tnode.classList.remove(activeClass);\n\t});\n\n\t$child.classList.add(activeClass);\n}\n","export const ALL_CHART_TYPES = ['line', 'scatter', 'bar', 'percentage', 'heatmap', 'pie'];\n\nexport const COMPATIBLE_CHARTS = {\n\tbar: ['line', 'scatter', 'percentage', 'pie'],\n\tline: ['scatter', 'bar', 'percentage', 'pie'],\n\tpie: ['line', 'scatter', 'percentage', 'bar'],\n\tpercentage: ['bar', 'line', 'scatter', 'pie'],\n\theatmap: []\n};\n\nexport const DATA_COLOR_DIVISIONS = {\n\tbar: 'datasets',\n\tline: 'datasets',\n\tpie: 'labels',\n\tpercentage: 'labels',\n\theatmap: HEATMAP_DISTRIBUTION_SIZE\n};\n\nexport const BASE_MEASURES = {\n\tmargins: {\n\t\ttop: 10,\n\t\tbottom: 10,\n\t\tleft: 20,\n\t\tright: 20\n\t},\n\tpaddings: {\n\t\ttop: 20,\n\t\tbottom: 40,\n\t\tleft: 30,\n\t\tright: 10\n\t},\n\n\tbaseHeight: 240,\n\ttitleHeight: 20,\n\tlegendHeight: 30,\n\n\ttitleFontSize: 12,\n};\n\nexport function getTopOffset(m) {\n\treturn m.titleHeight + m.margins.top + m.paddings.top;\n}\n\nexport function getLeftOffset(m) {\n\treturn m.margins.left + m.paddings.left;\n}\n\nexport function getExtraHeight(m) {\n\tlet totalExtraHeight = m.margins.top + m.margins.bottom\n\t\t+ m.paddings.top + m.paddings.bottom\n\t\t+ m.titleHeight + m.legendHeight;\n\treturn totalExtraHeight;\n}\n\nexport function getExtraWidth(m) {\n\tlet totalExtraWidth = m.margins.left + m.margins.right\n\t\t+ m.paddings.left + m.paddings.right;\n\n\treturn totalExtraWidth;\n}\n\nexport const INIT_CHART_UPDATE_TIMEOUT = 700;\nexport const CHART_POST_ANIMATE_TIMEOUT = 400;\n\nexport const DEFAULT_AXIS_CHART_TYPE = 'line';\nexport const AXIS_DATASET_CHART_TYPES = ['line', 'bar'];\n\nexport const AXIS_LEGEND_BAR_SIZE = 100;\n\nexport const BAR_CHART_SPACE_RATIO = 0.5;\nexport const MIN_BAR_PERCENT_HEIGHT = 0.00;\n\nexport const LINE_CHART_DOT_SIZE = 4;\nexport const DOT_OVERLAY_SIZE_INCR = 4;\n\nexport const PERCENTAGE_BAR_DEFAULT_HEIGHT = 20;\nexport const PERCENTAGE_BAR_DEFAULT_DEPTH = 2;\n\n// Fixed 5-color theme,\n// More colors are difficult to parse visually\nexport const HEATMAP_DISTRIBUTION_SIZE = 5;\n\nexport const HEATMAP_SQUARE_SIZE = 10;\nexport const HEATMAP_GUTTER_SIZE = 2;\n\nexport const DEFAULT_CHAR_WIDTH = 7;\n\nexport const TOOLTIP_POINTER_TRIANGLE_HEIGHT = 5;\n\nconst DEFAULT_CHART_COLORS = ['light-blue', 'blue', 'violet', 'red', 'orange',\n\t'yellow', 'green', 'light-green', 'purple', 'magenta', 'light-grey', 'dark-grey'];\nconst HEATMAP_COLORS_GREEN = ['#ebedf0', '#c6e48b', '#7bc96f', '#239a3b', '#196127'];\nexport const HEATMAP_COLORS_BLUE = ['#ebedf0', '#c0ddf9', '#73b3f3', '#3886e1', '#17459e'];\nexport const HEATMAP_COLORS_YELLOW = ['#ebedf0', '#fdf436', '#ffc700', '#ff9100', '#06001c'];\n\nexport const DEFAULT_COLORS = {\n\tbar: DEFAULT_CHART_COLORS,\n\tline: DEFAULT_CHART_COLORS,\n\tpie: DEFAULT_CHART_COLORS,\n\tpercentage: DEFAULT_CHART_COLORS,\n\theatmap: HEATMAP_COLORS_GREEN,\n\tdonut: DEFAULT_CHART_COLORS\n};\n\n// Universal constants\nexport const ANGLE_RATIO = Math.PI / 180;\nexport const FULL_ANGLE = 360;\n","import { ANGLE_RATIO } from './constants';\n\n/**\n * Returns the value of a number upto 2 decimal places.\n * @param {Number} d Any number\n */\nexport function floatTwo(d) {\n\treturn parseFloat(d.toFixed(2));\n}\n\n/**\n * Returns whether or not two given arrays are equal.\n * @param {Array} arr1 First array\n * @param {Array} arr2 Second array\n */\nexport function arraysEqual(arr1, arr2) {\n\tif(arr1.length !== arr2.length) return false;\n\tlet areEqual = true;\n\tarr1.map((d, i) => {\n\t\tif(arr2[i] !== d) areEqual = false;\n\t});\n\treturn areEqual;\n}\n\n/**\n * Shuffles array in place. ES6 version\n * @param {Array} array An array containing the items.\n */\nexport function shuffle(array) {\n\t// Awesomeness: https://bost.ocks.org/mike/shuffle/\n\t// https://stackoverflow.com/a/2450976/6495043\n\t// https://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array?noredirect=1&lq=1\n\n\tfor (let i = array.length - 1; i > 0; i--) {\n\t\tlet j = Math.floor(Math.random() * (i + 1));\n\t\t[array[i], array[j]] = [array[j], array[i]];\n\t}\n\n\treturn array;\n}\n\n/**\n * Fill an array with extra points\n * @param {Array} array Array\n * @param {Number} count number of filler elements\n * @param {Object} element element to fill with\n * @param {Boolean} start fill at start?\n */\nexport function fillArray(array, count, element, start=false) {\n\tif(!element) {\n\t\telement = start ? array[0] : array[array.length - 1];\n\t}\n\tlet fillerArray = new Array(Math.abs(count)).fill(element);\n\tarray = start ? fillerArray.concat(array) : array.concat(fillerArray);\n\treturn array;\n}\n\n/**\n * Returns pixel width of string.\n * @param {String} string\n * @param {Number} charWidth Width of single char in pixels\n */\nexport function getStringWidth(string, charWidth) {\n\treturn (string+\"\").length * charWidth;\n}\n\nexport function bindChange(obj, getFn, setFn) {\n\treturn new Proxy(obj, {\n\t\tset: function(target, prop, value) {\n\t\t\tsetFn();\n\t\t\treturn Reflect.set(target, prop, value);\n\t\t},\n\t\tget: function(target, prop) {\n\t\t\tgetFn();\n\t\t\treturn Reflect.get(target, prop);\n\t\t}\n\t});\n}\n\n// https://stackoverflow.com/a/29325222\nexport function getRandomBias(min, max, bias, influence) {\n\tconst range = max - min;\n\tconst biasValue = range * bias + min;\n\tvar rnd = Math.random() * range + min,\t\t// random in range\n\t\tmix = Math.random() * influence;\t\t// random mixer\n\treturn rnd * (1 - mix) + biasValue * mix;\t// mix full range and bias\n}\n\nexport function getPositionByAngle(angle, radius) {\n\treturn {\n\t\tx: Math.sin(angle * ANGLE_RATIO) * radius,\n\t\ty: Math.cos(angle * ANGLE_RATIO) * radius,\n\t};\n}\n\n/**\n * Check if a number is valid for svg attributes\n * @param {object} candidate Candidate to test\n * @param {Boolean} nonNegative flag to treat negative number as invalid\n */\nexport function isValidNumber(candidate, nonNegative=false) {\n\tif (Number.isNaN(candidate)) return false;\n\telse if (candidate === undefined) return false;\n\telse if (!Number.isFinite(candidate)) return false;\n\telse if (nonNegative && candidate < 0) return false;\n\telse return true;\n}\n\n/**\n * Round a number to the closes precision, max max precision 4\n * @param {Number} d Any Number\n */\nexport function round(d) {\n\t// https://floating-point-gui.de/\n\t// https://www.jacklmoore.com/notes/rounding-in-javascript/\n\treturn Number(Math.round(d + 'e4') + 'e-4');\n}\n\n/**\n * Creates a deep clone of an object\n * @param {Object} candidate Any Object\n */\n export function deepClone(candidate) {\n\tlet cloned, value, key;\n \n\tif (candidate instanceof Date) {\n\t return new Date(candidate.getTime());\n\t}\n \n\tif (typeof candidate !== \"object\" || candidate === null) {\n\t return candidate;\n\t}\n \n\tcloned = Array.isArray(candidate) ? [] : {};\n \n\tfor (key in candidate) {\n\t value = candidate[key];\n \n\t cloned[key] = deepClone(value);\n\t}\n \n\treturn cloned;\n }","import { fillArray } from './helpers';\n\nexport function getBarHeightAndYAttr(yTop, zeroLine) {\n\tlet height, y;\n\tif (yTop <= zeroLine) {\n\t\theight = zeroLine - yTop;\n\t\ty = yTop;\n\t} else {\n\t\theight = yTop - zeroLine;\n\t\ty = zeroLine;\n\t}\n\n\treturn [height, y];\n}\n\nexport function equilizeNoOfElements(array1, array2,\n\textraCount = array2.length - array1.length) {\n\n\t// Doesn't work if either has zero elements.\n\tif(extraCount > 0) {\n\t\tarray1 = fillArray(array1, extraCount);\n\t} else {\n\t\tarray2 = fillArray(array2, extraCount);\n\t}\n\treturn [array1, array2];\n}\n\nexport function truncateString(txt, len) {\n\tif (!txt) {\n\t\treturn;\n\t}\n\tif (txt.length > len) {\n\t\treturn txt.slice(0, len-3) + '...';\n\t} else {\n\t\treturn txt;\n\t}\n}\n\nexport function shortenLargeNumber(label) {\n\tlet number;\n\tif (typeof label === 'number') number = label;\n\telse if (typeof label === 'string') {\n\t\tnumber = Number(label);\n\t\tif (Number.isNaN(number)) return label;\n\t}\n\n\t// Using absolute since log wont work for negative numbers\n\tlet p = Math.floor(Math.log10(Math.abs(number)));\n\tif (p <= 2) return number; // Return as is for a 3 digit number of less\n\tlet\tl = Math.floor(p / 3);\n\tlet shortened = (Math.pow(10, p - l * 3) * +(number / Math.pow(10, p)).toFixed(1));\n\n\t// Correct for floating point error upto 2 decimal places\n\treturn Math.round(shortened*100)/100 + ' ' + ['', 'K', 'M', 'B', 'T'][l];\n}\n\n// cubic bezier curve calculation (from example by François Romain)\nexport function getSplineCurvePointsStr(xList, yList) {\n\n\tlet points=[];\n\tfor(let i=0;i {\n\t\tlet lengthX = pointB[0] - pointA[0];\n\t\tlet lengthY = pointB[1] - pointA[1];\n\t\treturn {\n\t\t\tlength: Math.sqrt(Math.pow(lengthX, 2) + Math.pow(lengthY, 2)),\n\t\t\tangle: Math.atan2(lengthY, lengthX)\n\t\t};\n\t};\n \n\tlet controlPoint = (current, previous, next, reverse) => {\n\t\tlet p = previous || current;\n\t\tlet n = next || current;\n\t\tlet o = line(p, n);\n\t\tlet angle = o.angle + (reverse ? Math.PI : 0);\n\t\tlet length = o.length * smoothing;\n\t\tlet x = current[0] + Math.cos(angle) * length;\n\t\tlet y = current[1] + Math.sin(angle) * length;\n\t\treturn [x, y];\n\t};\n \n\tlet bezierCommand = (point, i, a) => {\n\t\tlet cps = controlPoint(a[i - 1], a[i - 2], point);\n\t\tlet cpe = controlPoint(point, a[i - 1], a[i + 1], true);\n\t\treturn `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}`;\n\t};\n \n\tlet pointStr = (points, command) => {\n\t\treturn points.reduce((acc, point, i, a) => i === 0\n\t\t\t? `${point[0]},${point[1]}`\n\t\t\t: `${acc} ${command(point, i, a)}`, '');\n\t};\n \n\treturn pointStr(points, bezierCommand);\n}\n","const PRESET_COLOR_MAP = {\n\t'light-blue': '#7cd6fd',\n\t'blue': '#5e64ff',\n\t'violet': '#743ee2',\n\t'red': '#ff5858',\n\t'orange': '#ffa00a',\n\t'yellow': '#feef72',\n\t'green': '#28a745',\n\t'light-green': '#98d85b',\n\t'purple': '#b554ff',\n\t'magenta': '#ffa3ef',\n\t'black': '#36114C',\n\t'grey': '#bdd3e6',\n\t'light-grey': '#f0f4f7',\n\t'dark-grey': '#b8c2cc'\n};\n\nfunction limitColor(r){\n\tif (r > 255) return 255;\n\telse if (r < 0) return 0;\n\treturn r;\n}\n\nexport function lightenDarkenColor(color, amt) {\n\tlet col = getColor(color);\n\tlet usePound = false;\n\tif (col[0] == \"#\") {\n\t\tcol = col.slice(1);\n\t\tusePound = true;\n\t}\n\tlet num = parseInt(col,16);\n\tlet r = limitColor((num >> 16) + amt);\n\tlet b = limitColor(((num >> 8) & 0x00FF) + amt);\n\tlet g = limitColor((num & 0x0000FF) + amt);\n\treturn (usePound?\"#\":\"\") + (g | (b << 8) | (r << 16)).toString(16);\n}\n\nexport function isValidColor(string) {\n\t// https://stackoverflow.com/a/32685393\n\tlet HEX_RE = /(^\\s*)(#)((?:[A-Fa-f0-9]{3}){1,2})$/i;\n\tlet RGB_RE = /(^\\s*)(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/i;\n\treturn HEX_RE.test(string) || RGB_RE.test(string);\n}\n\nexport const getColor = (color) => {\n\t// When RGB color, convert to hexadecimal (alpha value is omitted)\n\tif((/rgb[a]{0,1}\\([\\d, ]+\\)/gim).test(color)) {\n\t\treturn (/\\D+(\\d*)\\D+(\\d*)\\D+(\\d*)/gim).exec(color)\n\t\t\t.map((x, i) => (i !== 0 ? Number(x).toString(16) : '#'))\n\t\t\t.reduce((c, ch) => `${c}${ch}`);\n\t}\n\treturn PRESET_COLOR_MAP[color] || color;\n};\n","import { getBarHeightAndYAttr, truncateString, shortenLargeNumber, getSplineCurvePointsStr } from './draw-utils';\nimport { getStringWidth, isValidNumber } from './helpers';\nimport { DOT_OVERLAY_SIZE_INCR, PERCENTAGE_BAR_DEFAULT_DEPTH } from './constants';\nimport { lightenDarkenColor } from './colors';\n\nexport const AXIS_TICK_LENGTH = 6;\nconst LABEL_MARGIN = 4;\nconst LABEL_MAX_CHARS = 15;\nexport const FONT_SIZE = 10;\nconst BASE_LINE_COLOR = '#dadada';\nconst FONT_FILL = '#555b51';\n\nfunction $(expr, con) {\n\treturn typeof expr === \"string\"? (con || document).querySelector(expr) : expr || null;\n}\n\nexport function createSVG(tag, o) {\n\tvar element = document.createElementNS(\"http://www.w3.org/2000/svg\", tag);\n\n\tfor (var i in o) {\n\t\tvar val = o[i];\n\n\t\tif (i === \"inside\") {\n\t\t\t$(val).appendChild(element);\n\t\t}\n\t\telse if (i === \"around\") {\n\t\t\tvar ref = $(val);\n\t\t\tref.parentNode.insertBefore(element, ref);\n\t\t\telement.appendChild(ref);\n\n\t\t} else if (i === \"styles\") {\n\t\t\tif(typeof val === \"object\") {\n\t\t\t\tObject.keys(val).map(prop => {\n\t\t\t\t\telement.style[prop] = val[prop];\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tif(i === \"className\") { i = \"class\"; }\n\t\t\tif(i === \"innerHTML\") {\n\t\t\t\telement['textContent'] = val;\n\t\t\t} else {\n\t\t\t\telement.setAttribute(i, val);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn element;\n}\n\nfunction renderVerticalGradient(svgDefElem, gradientId) {\n\treturn createSVG('linearGradient', {\n\t\tinside: svgDefElem,\n\t\tid: gradientId,\n\t\tx1: 0,\n\t\tx2: 0,\n\t\ty1: 0,\n\t\ty2: 1\n\t});\n}\n\nfunction setGradientStop(gradElem, offset, color, opacity) {\n\treturn createSVG('stop', {\n\t\t'inside': gradElem,\n\t\t'style': `stop-color: ${color}`,\n\t\t'offset': offset,\n\t\t'stop-opacity': opacity\n\t});\n}\n\nexport function makeSVGContainer(parent, className, width, height) {\n\treturn createSVG('svg', {\n\t\tclassName: className,\n\t\tinside: parent,\n\t\twidth: width,\n\t\theight: height\n\t});\n}\n\nexport function makeSVGDefs(svgContainer) {\n\treturn createSVG('defs', {\n\t\tinside: svgContainer,\n\t});\n}\n\nexport function makeSVGGroup(className, transform='', parent=undefined) {\n\tlet args = {\n\t\tclassName: className,\n\t\ttransform: transform\n\t};\n\tif(parent) args.inside = parent;\n\treturn createSVG('g', args);\n}\n\nexport function wrapInSVGGroup(elements, className='') {\n\tlet g = createSVG('g', {\n\t\tclassName: className\n\t});\n\telements.forEach(e => g.appendChild(e));\n\treturn g;\n}\n\nexport function makePath(pathStr, className='', stroke='none', fill='none', strokeWidth=2) {\n\treturn createSVG('path', {\n\t\tclassName: className,\n\t\td: pathStr,\n\t\tstyles: {\n\t\t\tstroke: stroke,\n\t\t\tfill: fill,\n\t\t\t'stroke-width': strokeWidth\n\t\t}\n\t});\n}\n\nexport function makeArcPathStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, arcEndY] = [center.x + endPosition.x, center.y + endPosition.y];\n\treturn `M${center.x} ${center.y}\n\t\tL${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY} z`;\n}\n\nexport function makeCircleStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, midArc, arcEndY] = [center.x + endPosition.x, center.y * 2, center.y + endPosition.y];\n\treturn `M${center.x} ${center.y}\n\t\tL${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${midArc} z\n\t\tL${arcStartX} ${midArc}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY} z`;\n}\n\nexport function makeArcStrokePathStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, arcEndY] = [center.x + endPosition.x, center.y + endPosition.y];\n\n\treturn `M${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY}`;\n}\n\nexport function makeStrokeCircleStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){\n\tlet [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y];\n\tlet [arcEndX, midArc, arcEndY] = [center.x + endPosition.x, radius * 2 + arcStartY, center.y + startPosition.y];\n\n\treturn `M${arcStartX} ${arcStartY}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${midArc}\n\t\tM${arcStartX} ${midArc}\n\t\tA ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0}\n\t\t${arcEndX} ${arcEndY}`;\n}\n\nexport function makeGradient(svgDefElem, color, lighter = false) {\n\tlet gradientId ='path-fill-gradient' + '-' + color + '-' +(lighter ? 'lighter' : 'default');\n\tlet gradientDef = renderVerticalGradient(svgDefElem, gradientId);\n\tlet opacities = [1, 0.6, 0.2];\n\tif(lighter) {\n\t\topacities = [0.4, 0.2, 0];\n\t}\n\n\tsetGradientStop(gradientDef, \"0%\", color, opacities[0]);\n\tsetGradientStop(gradientDef, \"50%\", color, opacities[1]);\n\tsetGradientStop(gradientDef, \"100%\", color, opacities[2]);\n\n\treturn gradientId;\n}\n\nexport function percentageBar(x, y, width, height,\n\tdepth=PERCENTAGE_BAR_DEFAULT_DEPTH, fill='none') {\n\n\tlet args = {\n\t\tclassName: 'percentage-bar',\n\t\tx: x,\n\t\ty: y,\n\t\twidth: width,\n\t\theight: height,\n\t\tfill: fill,\n\t\tstyles: {\n\t\t\t'stroke': lightenDarkenColor(fill, -25),\n\t\t\t// Diabolically good: https://stackoverflow.com/a/9000859\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray\n\t\t\t'stroke-dasharray': `0, ${height + width}, ${width}, ${height}`,\n\t\t\t'stroke-width': depth\n\t\t},\n\t};\n\n\treturn createSVG(\"rect\", args);\n}\n\nexport function heatSquare(className, x, y, size, radius, fill='none', data={}) {\n\tlet args = {\n\t\tclassName: className,\n\t\tx: x,\n\t\ty: y,\n\t\twidth: size,\n\t\theight: size,\n\t\trx: radius,\n\t\tfill: fill\n\t};\n\n\tObject.keys(data).map(key => {\n\t\targs[key] = data[key];\n\t});\n\n\treturn createSVG(\"rect\", args);\n}\n\nexport function legendBar(x, y, size, fill='none', label, truncate=false) {\n\tlabel = truncate ? truncateString(label, LABEL_MAX_CHARS) : label;\n\n\tlet args = {\n\t\tclassName: 'legend-bar',\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: size,\n\t\theight: '2px',\n\t\tfill: fill\n\t};\n\tlet text = createSVG('text', {\n\t\tclassName: 'legend-dataset-text',\n\t\tx: 0,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE * 2) + 'px',\n\t\t'font-size': (FONT_SIZE * 1.2) + 'px',\n\t\t'text-anchor': 'start',\n\t\tfill: FONT_FILL,\n\t\tinnerHTML: label\n\t});\n\n\tlet group = createSVG('g', {\n\t\ttransform: `translate(${x}, ${y})`\n\t});\n\tgroup.appendChild(createSVG(\"rect\", args));\n\tgroup.appendChild(text);\n\n\treturn group;\n}\n\nexport function legendDot(x, y, size, fill='none', label, truncate=false) {\n\tlabel = truncate ? truncateString(label, LABEL_MAX_CHARS) : label;\n\n\tlet args = {\n\t\tclassName: 'legend-dot',\n\t\tcx: 0,\n\t\tcy: 0,\n\t\tr: size,\n\t\tfill: fill\n\t};\n\tlet text = createSVG('text', {\n\t\tclassName: 'legend-dataset-text',\n\t\tx: 0,\n\t\ty: 0,\n\t\tdx: (FONT_SIZE) + 'px',\n\t\tdy: (FONT_SIZE/3) + 'px',\n\t\t'font-size': (FONT_SIZE * 1.2) + 'px',\n\t\t'text-anchor': 'start',\n\t\tfill: FONT_FILL,\n\t\tinnerHTML: label\n\t});\n\n\tlet group = createSVG('g', {\n\t\ttransform: `translate(${x}, ${y})`\n\t});\n\tgroup.appendChild(createSVG(\"circle\", args));\n\tgroup.appendChild(text);\n\n\treturn group;\n}\n\nexport function makeText(className, x, y, content, options = {}) {\n\tlet fontSize = options.fontSize || FONT_SIZE;\n\tlet dy = options.dy !== undefined ? options.dy : (fontSize / 2);\n\tlet fill = options.fill || FONT_FILL;\n\tlet textAnchor = options.textAnchor || 'start';\n\treturn createSVG('text', {\n\t\tclassName: className,\n\t\tx: x,\n\t\ty: y,\n\t\tdy: dy + 'px',\n\t\t'font-size': fontSize + 'px',\n\t\tfill: fill,\n\t\t'text-anchor': textAnchor,\n\t\tinnerHTML: content\n\t});\n}\n\nfunction makeVertLine(x, label, y1, y2, options={}) {\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tlet l = createSVG('line', {\n\t\tclassName: 'line-vertical ' + options.className,\n\t\tx1: 0,\n\t\tx2: 0,\n\t\ty1: y1,\n\t\ty2: y2,\n\t\tstyles: {\n\t\t\tstroke: options.stroke\n\t\t}\n\t});\n\n\tlet text = createSVG('text', {\n\t\tx: 0,\n\t\ty: y1 > y2 ? y1 + LABEL_MARGIN : y1 - LABEL_MARGIN - FONT_SIZE,\n\t\tdy: FONT_SIZE + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'middle',\n\t\tinnerHTML: label + \"\"\n\t});\n\n\tlet line = createSVG('g', {\n\t\ttransform: `translate(${ x }, 0)`\n\t});\n\n\tline.appendChild(l);\n\tline.appendChild(text);\n\n\treturn line;\n}\n\nfunction makeHoriLine(y, label, x1, x2, options={}) {\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.lineType) options.lineType = '';\n\tif (options.shortenNumbers) label = shortenLargeNumber(label);\n\n\tlet className = 'line-horizontal ' + options.className +\n\t\t(options.lineType === \"dashed\" ? \"dashed\": \"\");\n\n\tlet l = createSVG('line', {\n\t\tclassName: className,\n\t\tx1: x1,\n\t\tx2: x2,\n\t\ty1: 0,\n\t\ty2: 0,\n\t\tstyles: {\n\t\t\tstroke: options.stroke\n\t\t}\n\t});\n\n\tlet text = createSVG('text', {\n\t\tx: x1 < x2 ? x1 - LABEL_MARGIN : x1 + LABEL_MARGIN,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / 2 - 2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': x1 < x2 ? 'end' : 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet line = createSVG('g', {\n\t\ttransform: `translate(0, ${y})`,\n\t\t'stroke-opacity': 1\n\t});\n\n\tif(text === 0 || text === '0') {\n\t\tline.style.stroke = \"rgba(27, 31, 35, 0.6)\";\n\t}\n\n\tline.appendChild(l);\n\tline.appendChild(text);\n\n\treturn line;\n}\n\nexport function yLine(y, label, width, options={}) {\n\tif (!isValidNumber(y)) y = 0;\n\n\tif(!options.pos) options.pos = 'left';\n\tif(!options.offset) options.offset = 0;\n\tif(!options.mode) options.mode = 'span';\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.className) options.className = '';\n\n\tlet x1 = -1 * AXIS_TICK_LENGTH;\n\tlet x2 = options.mode === 'span' ? width + AXIS_TICK_LENGTH : 0;\n\n\tif(options.mode === 'tick' && options.pos === 'right') {\n\t\tx1 = width + AXIS_TICK_LENGTH;\n\t\tx2 = width;\n\t}\n\n\t// let offset = options.pos === 'left' ? -1 * options.offset : options.offset;\n\n\tx1 += options.offset;\n\tx2 += options.offset;\n\n\treturn makeHoriLine(y, label, x1, x2, {\n\t\tstroke: options.stroke,\n\t\tclassName: options.className,\n\t\tlineType: options.lineType,\n\t\tshortenNumbers: options.shortenNumbers\n\t});\n}\n\nexport function xLine(x, label, height, options={}) {\n\tif (!isValidNumber(x)) x = 0;\n\n\tif(!options.pos) options.pos = 'bottom';\n\tif(!options.offset) options.offset = 0;\n\tif(!options.mode) options.mode = 'span';\n\tif(!options.stroke) options.stroke = BASE_LINE_COLOR;\n\tif(!options.className) options.className = '';\n\n\t// Draw X axis line in span/tick mode with optional label\n\t// \ty2(span)\n\t// \t\t\t\t\t\t|\n\t// \t\t\t\t\t\t|\n\t//\t\t\t\tx line\t|\n\t//\t\t\t\t\t\t|\n\t// \t\t\t\t\t \t|\n\t// ---------------------+-- y2(tick)\n\t//\t\t\t\t\t\t|\n\t//\t\t\t\t\t\t\ty1\n\n\tlet y1 = height + AXIS_TICK_LENGTH;\n\tlet y2 = options.mode === 'span' ? -1 * AXIS_TICK_LENGTH : height;\n\n\tif(options.mode === 'tick' && options.pos === 'top') {\n\t\t// top axis ticks\n\t\ty1 = -1 * AXIS_TICK_LENGTH;\n\t\ty2 = 0;\n\t}\n\n\treturn makeVertLine(x, label, y1, y2, {\n\t\tstroke: options.stroke,\n\t\tclassName: options.className,\n\t\tlineType: options.lineType\n\t});\n}\n\nexport function yMarker(y, label, width, options={}) {\n\tif(!options.labelPos) options.labelPos = 'right';\n\tlet x = options.labelPos === 'left' ? LABEL_MARGIN\n\t\t: width - getStringWidth(label, 5) - LABEL_MARGIN;\n\n\tlet labelSvg = createSVG('text', {\n\t\tclassName: 'chart-label',\n\t\tx: x,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / -2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet line = makeHoriLine(y, '', 0, width, {\n\t\tstroke: options.stroke || BASE_LINE_COLOR,\n\t\tclassName: options.className || '',\n\t\tlineType: options.lineType\n\t});\n\n\tline.appendChild(labelSvg);\n\n\treturn line;\n}\n\nexport function yRegion(y1, y2, width, label, options={}) {\n\t// return a group\n\tlet height = y1 - y2;\n\n\tlet rect = createSVG('rect', {\n\t\tclassName: `bar mini`, // remove class\n\t\tstyles: {\n\t\t\tfill: `rgba(228, 234, 239, 0.49)`,\n\t\t\tstroke: BASE_LINE_COLOR,\n\t\t\t'stroke-dasharray': `${width}, ${height}`\n\t\t},\n\t\t// 'data-point-index': index,\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: width,\n\t\theight: height\n\t});\n\n\tif(!options.labelPos) options.labelPos = 'right';\n\tlet x = options.labelPos === 'left' ? LABEL_MARGIN\n\t\t: width - getStringWidth(label+\"\", 4.5) - LABEL_MARGIN;\n\n\tlet labelSvg = createSVG('text', {\n\t\tclassName: 'chart-label',\n\t\tx: x,\n\t\ty: 0,\n\t\tdy: (FONT_SIZE / -2) + 'px',\n\t\t'font-size': FONT_SIZE + 'px',\n\t\t'text-anchor': 'start',\n\t\tinnerHTML: label+\"\"\n\t});\n\n\tlet region = createSVG('g', {\n\t\ttransform: `translate(0, ${y2})`\n\t});\n\n\tregion.appendChild(rect);\n\tregion.appendChild(labelSvg);\n\n\treturn region;\n}\n\nexport function datasetBar(x, yTop, width, color, label='', index=0, offset=0, meta={}) {\n\tlet [height, y] = getBarHeightAndYAttr(yTop, meta.zeroLine);\n\ty -= offset;\n\n\tif(height === 0) {\n\t\theight = meta.minHeight;\n\t\ty -= meta.minHeight;\n\t}\n\n\t// Preprocess numbers to avoid svg building errors\n\tif (!isValidNumber(x)) x = 0;\n\tif (!isValidNumber(y)) y = 0;\n\tif (!isValidNumber(height, true)) height = 0;\n\tif (!isValidNumber(width, true)) width = 0;\n\n\tlet rect = createSVG('rect', {\n\t\tclassName: `bar mini`,\n\t\tstyle: `fill: ${color}`,\n\t\t'data-point-index': index,\n\t\tx: x,\n\t\ty: y,\n\t\twidth: width,\n\t\theight: height\n\t});\n\n\tlabel += \"\";\n\n\tif(!label && !label.length) {\n\t\treturn rect;\n\t} else {\n\t\trect.setAttribute('y', 0);\n\t\trect.setAttribute('x', 0);\n\t\tlet text = createSVG('text', {\n\t\t\tclassName: 'data-point-value',\n\t\t\tx: width/2,\n\t\t\ty: 0,\n\t\t\tdy: (FONT_SIZE / 2 * -1) + 'px',\n\t\t\t'font-size': FONT_SIZE + 'px',\n\t\t\t'text-anchor': 'middle',\n\t\t\tinnerHTML: label\n\t\t});\n\n\t\tlet group = createSVG('g', {\n\t\t\t'data-point-index': index,\n\t\t\ttransform: `translate(${x}, ${y})`\n\t\t});\n\t\tgroup.appendChild(rect);\n\t\tgroup.appendChild(text);\n\n\t\treturn group;\n\t}\n}\n\nexport function datasetDot(x, y, radius, color, label='', index=0) {\n\tlet dot = createSVG('circle', {\n\t\tstyle: `fill: ${color}`,\n\t\t'data-point-index': index,\n\t\tcx: x,\n\t\tcy: y,\n\t\tr: radius\n\t});\n\n\tlabel += \"\";\n\n\tif(!label && !label.length) {\n\t\treturn dot;\n\t} else {\n\t\tdot.setAttribute('cy', 0);\n\t\tdot.setAttribute('cx', 0);\n\n\t\tlet text = createSVG('text', {\n\t\t\tclassName: 'data-point-value',\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\tdy: (FONT_SIZE / 2 * -1 - radius) + 'px',\n\t\t\t'font-size': FONT_SIZE + 'px',\n\t\t\t'text-anchor': 'middle',\n\t\t\tinnerHTML: label\n\t\t});\n\n\t\tlet group = createSVG('g', {\n\t\t\t'data-point-index': index,\n\t\t\ttransform: `translate(${x}, ${y})`\n\t\t});\n\t\tgroup.appendChild(dot);\n\t\tgroup.appendChild(text);\n\n\t\treturn group;\n\t}\n}\n\nexport function getPaths(xList, yList, color, options={}, meta={}) {\n\tlet pointsList = yList.map((y, i) => (xList[i] + ',' + y));\n\tlet pointsStr = pointsList.join(\"L\");\n\n\t// Spline\n\tif (options.spline)\n\t\tpointsStr = getSplineCurvePointsStr(xList, yList);\n\n\tlet path = makePath(\"M\"+pointsStr, 'line-graph-path', color);\n\n\t// HeatLine\n\tif(options.heatline) {\n\t\tlet gradient_id = makeGradient(meta.svgDefs, color);\n\t\tpath.style.stroke = `url(#${gradient_id})`;\n\t}\n\n\tlet paths = {\n\t\tpath: path\n\t};\n\n\t// Region\n\tif(options.regionFill) {\n\t\tlet gradient_id_region = makeGradient(meta.svgDefs, color, true);\n\n\t\tlet pathStr = \"M\" + `${xList[0]},${meta.zeroLine}L` + pointsStr + `L${xList.slice(-1)[0]},${meta.zeroLine}`;\n\t\tpaths.region = makePath(pathStr, `region-fill`, 'none', `url(#${gradient_id_region})`);\n\t}\n\n\treturn paths;\n}\n\nexport let makeOverlay = {\n\t'bar': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'rect') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\toverlay.style.fill = '#000000';\n\t\toverlay.style.opacity = '0.4';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t},\n\n\t'dot': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\tlet radius = unit.getAttribute('r');\n\t\tlet fill = unit.getAttribute('fill');\n\t\toverlay.setAttribute('r', parseInt(radius) + DOT_OVERLAY_SIZE_INCR);\n\t\toverlay.setAttribute('fill', fill);\n\t\toverlay.style.opacity = '0.6';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t},\n\n\t'heat_square': (unit) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet overlay = unit.cloneNode();\n\t\tlet radius = unit.getAttribute('r');\n\t\tlet fill = unit.getAttribute('fill');\n\t\toverlay.setAttribute('r', parseInt(radius) + DOT_OVERLAY_SIZE_INCR);\n\t\toverlay.setAttribute('fill', fill);\n\t\toverlay.style.opacity = '0.6';\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t\treturn overlay;\n\t}\n};\n\nexport let updateOverlay = {\n\t'bar': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'rect') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['x', 'y', 'width', 'height'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n\n\t'dot': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['cx', 'cy'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n\n\t'heat_square': (unit, overlay) => {\n\t\tlet transformValue;\n\t\tif(unit.nodeName !== 'circle') {\n\t\t\ttransformValue = unit.getAttribute('transform');\n\t\t\tunit = unit.childNodes[0];\n\t\t}\n\t\tlet attributes = ['cx', 'cy'];\n\t\tObject.values(unit.attributes)\n\t\t\t.filter(attr => attributes.includes(attr.name) && attr.specified)\n\t\t\t.map(attr => {\n\t\t\t\toverlay.setAttribute(attr.name, attr.nodeValue);\n\t\t\t});\n\n\t\tif(transformValue) {\n\t\t\toverlay.setAttribute('transform', transformValue);\n\t\t}\n\t},\n};\n","import { getBarHeightAndYAttr, getSplineCurvePointsStr } from './draw-utils';\n\nexport const UNIT_ANIM_DUR = 350;\nexport const PATH_ANIM_DUR = 350;\nexport const MARKER_LINE_ANIM_DUR = UNIT_ANIM_DUR;\nexport const REPLACE_ALL_NEW_DUR = 250;\n\nexport const STD_EASING = 'easein';\n\nexport function translate(unit, oldCoord, newCoord, duration) {\n\tlet old = typeof oldCoord === 'string' ? oldCoord : oldCoord.join(', ');\n\treturn [\n\t\tunit,\n\t\t{transform: newCoord.join(', ')},\n\t\tduration,\n\t\tSTD_EASING,\n\t\t\"translate\",\n\t\t{transform: old}\n\t];\n}\n\nexport function translateVertLine(xLine, newX, oldX) {\n\treturn translate(xLine, [oldX, 0], [newX, 0], MARKER_LINE_ANIM_DUR);\n}\n\nexport function translateHoriLine(yLine, newY, oldY) {\n\treturn translate(yLine, [0, oldY], [0, newY], MARKER_LINE_ANIM_DUR);\n}\n\nexport function animateRegion(rectGroup, newY1, newY2, oldY2) {\n\tlet newHeight = newY1 - newY2;\n\tlet rect = rectGroup.childNodes[0];\n\tlet width = rect.getAttribute(\"width\");\n\tlet rectAnim = [\n\t\trect,\n\t\t{ height: newHeight, 'stroke-dasharray': `${width}, ${newHeight}` },\n\t\tMARKER_LINE_ANIM_DUR,\n\t\tSTD_EASING\n\t];\n\n\tlet groupAnim = translate(rectGroup, [0, oldY2], [0, newY2], MARKER_LINE_ANIM_DUR);\n\treturn [rectAnim, groupAnim];\n}\n\nexport function animateBar(bar, x, yTop, width, offset=0, meta={}) {\n\tlet [height, y] = getBarHeightAndYAttr(yTop, meta.zeroLine);\n\ty -= offset;\n\tif(bar.nodeName !== 'rect') {\n\t\tlet rect = bar.childNodes[0];\n\t\tlet rectAnim = [\n\t\t\trect,\n\t\t\t{width: width, height: height},\n\t\t\tUNIT_ANIM_DUR,\n\t\t\tSTD_EASING\n\t\t];\n\n\t\tlet oldCoordStr = bar.getAttribute(\"transform\").split(\"(\")[1].slice(0, -1);\n\t\tlet groupAnim = translate(bar, oldCoordStr, [x, y], MARKER_LINE_ANIM_DUR);\n\t\treturn [rectAnim, groupAnim];\n\t} else {\n\t\treturn [[bar, {width: width, height: height, x: x, y: y}, UNIT_ANIM_DUR, STD_EASING]];\n\t}\n\t// bar.animate({height: args.newHeight, y: yTop}, UNIT_ANIM_DUR, mina.easein);\n}\n\nexport function animateDot(dot, x, y) {\n\tif(dot.nodeName !== 'circle') {\n\t\tlet oldCoordStr = dot.getAttribute(\"transform\").split(\"(\")[1].slice(0, -1);\n\t\tlet groupAnim = translate(dot, oldCoordStr, [x, y], MARKER_LINE_ANIM_DUR);\n\t\treturn [groupAnim];\n\t} else {\n\t\treturn [[dot, {cx: x, cy: y}, UNIT_ANIM_DUR, STD_EASING]];\n\t}\n\t// dot.animate({cy: yTop}, UNIT_ANIM_DUR, mina.easein);\n}\n\nexport function animatePath(paths, newXList, newYList, zeroLine, spline) {\n\tlet pathComponents = [];\n\tlet pointsStr = newYList.map((y, i) => (newXList[i] + ',' + y)).join(\"L\");\n\n\tif (spline)\n\t\tpointsStr = getSplineCurvePointsStr(newXList, newYList);\n\n\tconst animPath = [paths.path, {d:\"M\" + pointsStr}, PATH_ANIM_DUR, STD_EASING];\n\tpathComponents.push(animPath);\n\n\tif(paths.region) {\n\t\tlet regStartPt = `${newXList[0]},${zeroLine}L`;\n\t\tlet regEndPt = `L${newXList.slice(-1)[0]}, ${zeroLine}`;\n\n\t\tconst animRegion = [\n\t\t\tpaths.region,\n\t\t\t{d:\"M\" + regStartPt + pointsStr + regEndPt},\n\t\t\tPATH_ANIM_DUR,\n\t\t\tSTD_EASING\n\t\t];\n\t\tpathComponents.push(animRegion);\n\t}\n\n\treturn pathComponents;\n}\n\nexport function animatePathStr(oldPath, pathStr) {\n\treturn [oldPath, {d: pathStr}, UNIT_ANIM_DUR, STD_EASING];\n}\n","// Leveraging SMIL Animations\n\nimport { REPLACE_ALL_NEW_DUR } from './animate';\n\nconst EASING = {\n\tease: \"0.25 0.1 0.25 1\",\n\tlinear: \"0 0 1 1\",\n\t// easein: \"0.42 0 1 1\",\n\teasein: \"0.1 0.8 0.2 1\",\n\teaseout: \"0 0 0.58 1\",\n\teaseinout: \"0.42 0 0.58 1\"\n};\n\nfunction animateSVGElement(element, props, dur, easingType=\"linear\", type=undefined, oldValues={}) {\n\n\tlet animElement = element.cloneNode(true);\n\tlet newElement = element.cloneNode(true);\n\n\tfor(var attributeName in props) {\n\t\tlet animateElement;\n\t\tif(attributeName === 'transform') {\n\t\t\tanimateElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"animateTransform\");\n\t\t} else {\n\t\t\tanimateElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"animate\");\n\t\t}\n\t\tlet currentValue = oldValues[attributeName] || element.getAttribute(attributeName);\n\t\tlet value = props[attributeName];\n\n\t\tlet animAttr = {\n\t\t\tattributeName: attributeName,\n\t\t\tfrom: currentValue,\n\t\t\tto: value,\n\t\t\tbegin: \"0s\",\n\t\t\tdur: dur/1000 + \"s\",\n\t\t\tvalues: currentValue + \";\" + value,\n\t\t\tkeySplines: EASING[easingType],\n\t\t\tkeyTimes: \"0;1\",\n\t\t\tcalcMode: \"spline\",\n\t\t\tfill: 'freeze'\n\t\t};\n\n\t\tif(type) {\n\t\t\tanimAttr[\"type\"] = type;\n\t\t}\n\n\t\tfor (var i in animAttr) {\n\t\t\tanimateElement.setAttribute(i, animAttr[i]);\n\t\t}\n\n\t\tanimElement.appendChild(animateElement);\n\n\t\tif(type) {\n\t\t\tnewElement.setAttribute(attributeName, `translate(${value})`);\n\t\t} else {\n\t\t\tnewElement.setAttribute(attributeName, value);\n\t\t}\n\t}\n\n\treturn [animElement, newElement];\n}\n\nexport function transform(element, style) { // eslint-disable-line no-unused-vars\n\telement.style.transform = style;\n\telement.style.webkitTransform = style;\n\telement.style.msTransform = style;\n\telement.style.mozTransform = style;\n\telement.style.oTransform = style;\n}\n\nfunction animateSVG(svgContainer, elements) {\n\tlet newElements = [];\n\tlet animElements = [];\n\n\telements.map(element => {\n\t\tlet unit = element[0];\n\t\tlet parent = unit.parentNode;\n\n\t\tlet animElement, newElement;\n\n\t\telement[0] = unit;\n\t\t[animElement, newElement] = animateSVGElement(...element);\n\n\t\tnewElements.push(newElement);\n\t\tanimElements.push([animElement, parent]);\n\t\t\n\t\tif (parent) {\n\t\t\tparent.replaceChild(animElement, unit);\n\t\t}\n\t});\n\n\tlet animSvg = svgContainer.cloneNode(true);\n\n\tanimElements.map((animElement, i) => {\n\t\tif (animElement[1]) {\n\t\t\tanimElement[1].replaceChild(newElements[i], animElement[0]);\n\t\t\telements[i][0] = newElements[i];\n\t\t}\n\t});\n\n\treturn animSvg;\n}\n\nexport function runSMILAnimation(parent, svgElement, elementsToAnimate) {\n\tif(elementsToAnimate.length === 0) return;\n\n\tlet animSvgElement = animateSVG(svgElement, elementsToAnimate);\n\tif(svgElement.parentNode == parent) {\n\t\tparent.removeChild(svgElement);\n\t\tparent.appendChild(animSvgElement);\n\n\t}\n\n\t// Replace the new svgElement (data has already been replaced)\n\tsetTimeout(() => {\n\t\tif(animSvgElement.parentNode == parent) {\n\t\t\tparent.removeChild(animSvgElement);\n\t\t\tparent.appendChild(svgElement);\n\t\t}\n\t}, REPLACE_ALL_NEW_DUR);\n}\n","import { $ } from '../utils/dom';\nimport { CSSTEXT } from '../../css/chartsCss';\n\nexport function downloadFile(filename, data) {\n\tvar a = document.createElement('a');\n\ta.style = \"display: none\";\n\tvar blob = new Blob(data, {type: \"image/svg+xml; charset=utf-8\"});\n\tvar url = window.URL.createObjectURL(blob);\n\ta.href = url;\n\ta.download = filename;\n\tdocument.body.appendChild(a);\n\ta.click();\n\tsetTimeout(function(){\n\t\tdocument.body.removeChild(a);\n\t\twindow.URL.revokeObjectURL(url);\n\t}, 300);\n}\n\nexport function prepareForExport(svg) {\n\tlet clone = svg.cloneNode(true);\n\tclone.classList.add('chart-container');\n\tclone.setAttribute('xmlns', \"http://www.w3.org/2000/svg\");\n\tclone.setAttribute('xmlns:xlink', \"http://www.w3.org/1999/xlink\");\n\tlet styleEl = $.create('style', {\n\t\t'innerHTML': CSSTEXT\n\t});\n\tclone.insertBefore(styleEl, clone.firstChild);\n\n\tlet container = $.create('div');\n\tcontainer.appendChild(clone);\n\n\treturn container.innerHTML;\n}\n","// Playing around with dates\n\nexport const NO_OF_YEAR_MONTHS = 12;\nexport const NO_OF_DAYS_IN_WEEK = 7;\nexport const DAYS_IN_YEAR = 375;\nexport const NO_OF_MILLIS = 1000;\nexport const SEC_IN_DAY = 86400;\n\nexport const MONTH_NAMES = [\"January\", \"February\", \"March\", \"April\", \"May\",\n\t\"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\nexport const MONTH_NAMES_SHORT = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n\t\"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\nexport const DAY_NAMES_SHORT = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nexport const DAY_NAMES = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",\n\t\"Thursday\", \"Friday\", \"Saturday\"];\n\n// https://stackoverflow.com/a/11252167/6495043\nfunction treatAsUtc(date) {\n\tlet result = new Date(date);\n\tresult.setMinutes(result.getMinutes() - result.getTimezoneOffset());\n\treturn result;\n}\n\nexport function getYyyyMmDd(date) {\n\tlet dd = date.getDate();\n\tlet mm = date.getMonth() + 1; // getMonth() is zero-based\n\treturn [\n\t\tdate.getFullYear(),\n\t\t(mm>9 ? '' : '0') + mm,\n\t\t(dd>9 ? '' : '0') + dd\n\t].join('-');\n}\n\nexport function clone(date) {\n\treturn new Date(date.getTime());\n}\n\nexport function timestampSec(date) {\n\treturn date.getTime()/NO_OF_MILLIS;\n}\n\nexport function timestampToMidnight(timestamp, roundAhead = false) {\n\tlet midnightTs = Math.floor(timestamp - (timestamp % SEC_IN_DAY));\n\tif(roundAhead) {\n\t\treturn midnightTs + SEC_IN_DAY;\n\t}\n\treturn midnightTs;\n}\n\n// export function getMonthsBetween(startDate, endDate) {}\n\nexport function getWeeksBetween(startDate, endDate) {\n\tlet weekStartDate = setDayToSunday(startDate);\n\treturn Math.ceil(getDaysBetween(weekStartDate, endDate) / NO_OF_DAYS_IN_WEEK);\n}\n\nexport function getDaysBetween(startDate, endDate) {\n\tlet millisecondsPerDay = SEC_IN_DAY * NO_OF_MILLIS;\n\treturn (treatAsUtc(endDate) - treatAsUtc(startDate)) / millisecondsPerDay;\n}\n\nexport function areInSameMonth(startDate, endDate) {\n\treturn startDate.getMonth() === endDate.getMonth()\n\t\t&& startDate.getFullYear() === endDate.getFullYear();\n}\n\nexport function getMonthName(i, short=false) {\n\tlet monthName = MONTH_NAMES[i];\n\treturn short ? monthName.slice(0, 3) : monthName;\n}\n\nexport function getLastDateInMonth (month, year) {\n\treturn new Date(year, month + 1, 0); // 0: last day in previous month\n}\n\n// mutates\nexport function setDayToSunday(date) {\n\tlet newDate = clone(date);\n\tconst day = newDate.getDay();\n\tif(day !== 0) {\n\t\taddDays(newDate, (-1) * day);\n\t}\n\treturn newDate;\n}\n\n// mutates\nexport function addDays(date, numberOfDays) {\n\tdate.setDate(date.getDate() + numberOfDays);\n}\n","import { makeSVGGroup } from '../utils/draw';\nimport { makeText, makePath, xLine, yLine, yMarker, yRegion, datasetBar, datasetDot, percentageBar, getPaths, heatSquare } from '../utils/draw';\nimport { equilizeNoOfElements } from '../utils/draw-utils';\nimport { translateHoriLine, translateVertLine, animateRegion, animateBar,\n\tanimateDot, animatePath, animatePathStr } from '../utils/animate';\nimport { getMonthName } from '../utils/date-utils';\n\nclass ChartComponent {\n\tconstructor({\n\t\tlayerClass = '',\n\t\tlayerTransform = '',\n\t\tconstants,\n\n\t\tgetData,\n\t\tmakeElements,\n\t\tanimateElements\n\t}) {\n\t\tthis.layerTransform = layerTransform;\n\t\tthis.constants = constants;\n\n\t\tthis.makeElements = makeElements;\n\t\tthis.getData = getData;\n\n\t\tthis.animateElements = animateElements;\n\n\t\tthis.store = [];\n\t\tthis.labels = [];\n\n\t\tthis.layerClass = layerClass;\n\t\tthis.layerClass = typeof(this.layerClass) === 'function'\n\t\t\t? this.layerClass() : this.layerClass;\n\n\t\tthis.refresh();\n\t}\n\n\trefresh(data) {\n\t\tthis.data = data || this.getData();\n\t}\n\n\tsetup(parent) {\n\t\tthis.layer = makeSVGGroup(this.layerClass, this.layerTransform, parent);\n\t}\n\n\tmake() {\n\t\tthis.render(this.data);\n\t\tthis.oldData = this.data;\n\t}\n\n\trender(data) {\n\t\tthis.store = this.makeElements(data);\n\n\t\tthis.layer.textContent = '';\n\t\tthis.store.forEach(element => {\n\t\t\tthis.layer.appendChild(element);\n\t\t});\n\t\tthis.labels.forEach(element => {\n\t\t\tthis.layer.appendChild(element);\n\t\t});\n\t}\n\n\tupdate(animate = true) {\n\t\tthis.refresh();\n\t\tlet animateElements = [];\n\t\tif(animate) {\n\t\t\tanimateElements = this.animateElements(this.data) || [];\n\t\t}\n\t\treturn animateElements;\n\t}\n}\n\nlet componentConfigs = {\n\tdonutSlices: {\n\t\tlayerClass: 'donut-slices',\n\t\tmakeElements(data) {\n\t\t\treturn data.sliceStrings.map((s, i) => {\n\t\t\t\tlet slice = makePath(s, 'donut-path', data.colors[i], 'none', data.strokeWidth);\n\t\t\t\tslice.style.transition = 'transform .3s;';\n\t\t\t\treturn slice;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\treturn this.store.map((slice, i) => animatePathStr(slice, newData.sliceStrings[i]));\n\t\t},\n\t},\n\tpieSlices: {\n\t\tlayerClass: 'pie-slices',\n\t\tmakeElements(data) {\n\t\t\treturn data.sliceStrings.map((s, i) =>{\n\t\t\t\tlet slice = makePath(s, 'pie-path', 'none', data.colors[i]);\n\t\t\t\tslice.style.transition = 'transform .3s;';\n\t\t\t\treturn slice;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\treturn this.store.map((slice, i) =>\n\t\t\t\tanimatePathStr(slice, newData.sliceStrings[i])\n\t\t\t);\n\t\t}\n\t},\n\tpercentageBars: {\n\t\tlayerClass: 'percentage-bars',\n\t\tmakeElements(data) {\n\t\t\treturn data.xPositions.map((x, i) =>{\n\t\t\t\tlet y = 0;\n\t\t\t\tlet bar = percentageBar(x, y, data.widths[i],\n\t\t\t\t\tthis.constants.barHeight, this.constants.barDepth, data.colors[i]);\n\t\t\t\treturn bar;\n\t\t\t});\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tif(newData) return [];\n\t\t}\n\t},\n\tyAxis: {\n\t\tlayerClass: 'y axis',\n\t\tmakeElements(data) {\n\t\t\treturn data.positions.map((position, i) =>\n\t\t\t\tyLine(position, data.labels[i], this.constants.width,\n\t\t\t\t\t{mode: this.constants.mode, pos: this.constants.pos, shortenNumbers: this.constants.shortenNumbers})\n\t\t\t);\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tlet newPos = newData.positions;\n\t\t\tlet newLabels = newData.labels;\n\t\t\tlet oldPos = this.oldData.positions;\n\t\t\tlet oldLabels = this.oldData.labels;\n\n\t\t\t[oldPos, newPos] = equilizeNoOfElements(oldPos, newPos);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\tpositions: oldPos,\n\t\t\t\tlabels: newLabels\n\t\t\t});\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateHoriLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\txAxis: {\n\t\tlayerClass: 'x axis',\n\t\tmakeElements(data) {\n\t\t\treturn data.positions.map((position, i) =>\n\t\t\t\txLine(position, data.calcLabels[i], this.constants.height,\n\t\t\t\t\t{mode: this.constants.mode, pos: this.constants.pos})\n\t\t\t);\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tlet newPos = newData.positions;\n\t\t\tlet newLabels = newData.calcLabels;\n\t\t\tlet oldPos = this.oldData.positions;\n\t\t\tlet oldLabels = this.oldData.calcLabels;\n\n\t\t\t[oldPos, newPos] = equilizeNoOfElements(oldPos, newPos);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\tpositions: oldPos,\n\t\t\t\tcalcLabels: newLabels\n\t\t\t});\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateVertLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\tyMarkers: {\n\t\tlayerClass: 'y-markers',\n\t\tmakeElements(data) {\n\t\t\treturn data.map(m =>\n\t\t\t\tyMarker(m.position, m.label, this.constants.width,\n\t\t\t\t\t{labelPos: m.options.labelPos, mode: 'span', lineType: 'dashed'})\n\t\t\t);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\t[this.oldData, newData] = equilizeNoOfElements(this.oldData, newData);\n\n\t\t\tlet newPos = newData.map(d => d.position);\n\t\t\tlet newLabels = newData.map(d => d.label);\n\t\t\tlet newOptions = newData.map(d => d.options);\n\n\t\t\tlet oldPos = this.oldData.map(d => d.position);\n\n\t\t\tthis.render(oldPos.map((pos, i) => {\n\t\t\t\treturn {\n\t\t\t\t\tposition: oldPos[i],\n\t\t\t\t\tlabel: newLabels[i],\n\t\t\t\t\toptions: newOptions[i]\n\t\t\t\t};\n\t\t\t}));\n\n\t\t\treturn this.store.map((line, i) => {\n\t\t\t\treturn translateHoriLine(\n\t\t\t\t\tline, newPos[i], oldPos[i]\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t},\n\n\tyRegions: {\n\t\tlayerClass: 'y-regions',\n\t\tmakeElements(data) {\n\t\t\treturn data.map(r =>\n\t\t\t\tyRegion(r.startPos, r.endPos, this.constants.width,\n\t\t\t\t\tr.label, {labelPos: r.options.labelPos})\n\t\t\t);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\t[this.oldData, newData] = equilizeNoOfElements(this.oldData, newData);\n\n\t\t\tlet newPos = newData.map(d => d.endPos);\n\t\t\tlet newLabels = newData.map(d => d.label);\n\t\t\tlet newStarts = newData.map(d => d.startPos);\n\t\t\tlet newOptions = newData.map(d => d.options);\n\n\t\t\tlet oldPos = this.oldData.map(d => d.endPos);\n\t\t\tlet oldStarts = this.oldData.map(d => d.startPos);\n\n\t\t\tthis.render(oldPos.map((pos, i) => {\n\t\t\t\treturn {\n\t\t\t\t\tstartPos: oldStarts[i],\n\t\t\t\t\tendPos: oldPos[i],\n\t\t\t\t\tlabel: newLabels[i],\n\t\t\t\t\toptions: newOptions[i]\n\t\t\t\t};\n\t\t\t}));\n\n\t\t\tlet animateElements = [];\n\n\t\t\tthis.store.map((rectGroup, i) => {\n\t\t\t\tanimateElements = animateElements.concat(animateRegion(\n\t\t\t\t\trectGroup, newStarts[i], newPos[i], oldPos[i]\n\t\t\t\t));\n\t\t\t});\n\n\t\t\treturn animateElements;\n\t\t}\n\t},\n\n\theatDomain: {\n\t\tlayerClass: function() { return 'heat-domain domain-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet {index, colWidth, rowHeight, squareSize, radius, xTranslate} = this.constants;\n\t\t\tlet monthNameHeight = -12;\n\t\t\tlet x = xTranslate, y = 0;\n\n\t\t\tthis.serializedSubDomains = [];\n\n\t\t\tdata.cols.map((week, weekNo) => {\n\t\t\t\tif(weekNo === 1) {\n\t\t\t\t\tthis.labels.push(\n\t\t\t\t\t\tmakeText('domain-name', x, monthNameHeight, getMonthName(index, true).toUpperCase(),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfontSize: 9\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tweek.map((day, i) => {\n\t\t\t\t\tif(day.fill) {\n\t\t\t\t\t\tlet data = {\n\t\t\t\t\t\t\t'data-date': day.yyyyMmDd,\n\t\t\t\t\t\t\t'data-value': day.dataValue,\n\t\t\t\t\t\t\t'data-day': i\n\t\t\t\t\t\t};\n\t\t\t\t\t\tlet square = heatSquare('day', x, y, squareSize, radius, day.fill, data);\n\t\t\t\t\t\tthis.serializedSubDomains.push(square);\n\t\t\t\t\t}\n\t\t\t\t\ty += rowHeight;\n\t\t\t\t});\n\t\t\t\ty = 0;\n\t\t\t\tx += colWidth;\n\t\t\t});\n\n\t\t\treturn this.serializedSubDomains;\n\t\t},\n\n\t\tanimateElements(newData) {\n\t\t\tif(newData) return [];\n\t\t}\n\t},\n\n\tbarGraph: {\n\t\tlayerClass: function() { return 'dataset-units dataset-bars dataset-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet c = this.constants;\n\t\t\tthis.unitType = 'bar';\n\t\t\tthis.units = data.yPositions.map((y, j) => {\n\t\t\t\treturn datasetBar(\n\t\t\t\t\tdata.xPositions[j],\n\t\t\t\t\ty,\n\t\t\t\t\tdata.barWidth,\n\t\t\t\t\tc.color,\n\t\t\t\t\tdata.labels[j],\n\t\t\t\t\tj,\n\t\t\t\t\tdata.offsets[j],\n\t\t\t\t\t{\n\t\t\t\t\t\tzeroLine: data.zeroLine,\n\t\t\t\t\t\tbarsWidth: data.barsWidth,\n\t\t\t\t\t\tminHeight: c.minHeight\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t\t\treturn this.units;\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\tlet newXPos = newData.xPositions;\n\t\t\tlet newYPos = newData.yPositions;\n\t\t\tlet newOffsets = newData.offsets;\n\t\t\tlet newLabels = newData.labels;\n\n\t\t\tlet oldXPos = this.oldData.xPositions;\n\t\t\tlet oldYPos = this.oldData.yPositions;\n\t\t\tlet oldOffsets = this.oldData.offsets;\n\t\t\tlet oldLabels = this.oldData.labels;\n\n\t\t\t[oldXPos, newXPos] = equilizeNoOfElements(oldXPos, newXPos);\n\t\t\t[oldYPos, newYPos] = equilizeNoOfElements(oldYPos, newYPos);\n\t\t\t[oldOffsets, newOffsets] = equilizeNoOfElements(oldOffsets, newOffsets);\n\t\t\t[oldLabels, newLabels] = equilizeNoOfElements(oldLabels, newLabels);\n\n\t\t\tthis.render({\n\t\t\t\txPositions: oldXPos,\n\t\t\t\tyPositions: oldYPos,\n\t\t\t\toffsets: oldOffsets,\n\t\t\t\tlabels: newLabels,\n\n\t\t\t\tzeroLine: this.oldData.zeroLine,\n\t\t\t\tbarsWidth: this.oldData.barsWidth,\n\t\t\t\tbarWidth: this.oldData.barWidth,\n\t\t\t});\n\n\t\t\tlet animateElements = [];\n\n\t\t\tthis.store.map((bar, i) => {\n\t\t\t\tanimateElements = animateElements.concat(animateBar(\n\t\t\t\t\tbar, newXPos[i], newYPos[i], newData.barWidth, newOffsets[i],\n\t\t\t\t\t{zeroLine: newData.zeroLine}\n\t\t\t\t));\n\t\t\t});\n\n\t\t\treturn animateElements;\n\t\t}\n\t},\n\n\tlineGraph: {\n\t\tlayerClass: function() { return 'dataset-units dataset-line dataset-' + this.constants.index; },\n\t\tmakeElements(data) {\n\t\t\tlet c = this.constants;\n\t\t\tthis.unitType = 'dot';\n\t\t\tthis.paths = {};\n\t\t\tif(!c.hideLine) {\n\t\t\t\tthis.paths = getPaths(\n\t\t\t\t\tdata.xPositions,\n\t\t\t\t\tdata.yPositions,\n\t\t\t\t\tc.color,\n\t\t\t\t\t{\n\t\t\t\t\t\theatline: c.heatline,\n\t\t\t\t\t\tregionFill: c.regionFill,\n\t\t\t\t\t\tspline: c.spline\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tsvgDefs: c.svgDefs,\n\t\t\t\t\t\tzeroLine: data.zeroLine\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.units = [];\n\t\t\tif(!c.hideDots) {\n\t\t\t\tthis.units = data.yPositions.map((y, j) => {\n\t\t\t\t\treturn datasetDot(\n\t\t\t\t\t\tdata.xPositions[j],\n\t\t\t\t\t\ty,\n\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\tc.color,\n\t\t\t\t\t\t(c.valuesOverPoints ? data.values[j] : ''),\n\t\t\t\t\t\tj\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn Object.values(this.paths).concat(this.units);\n\t\t},\n\t\tanimateElements(newData) {\n\t\t\tlet newXPos = newData.xPositions;\n\t\t\tlet newYPos = newData.yPositions;\n\t\t\tlet newValues = newData.values;\n\n\t\t\tlet oldXPos = this.oldData.xPositions;\n\t\t\tlet oldYPos = this.oldData.yPositions;\n\t\t\tlet oldValues = this.oldData.values;\n\n\t\t\t[oldXPos, newXPos] = equilizeNoOfElements(oldXPos, newXPos);\n\t\t\t[oldYPos, newYPos] = equilizeNoOfElements(oldYPos, newYPos);\n\t\t\t[oldValues, newValues] = equilizeNoOfElements(oldValues, newValues);\n\n\t\t\tthis.render({\n\t\t\t\txPositions: oldXPos,\n\t\t\t\tyPositions: oldYPos,\n\t\t\t\tvalues: newValues,\n\n\t\t\t\tzeroLine: this.oldData.zeroLine,\n\t\t\t\tradius: this.oldData.radius,\n\t\t\t});\n\n\t\t\tlet animateElements = [];\n\n\t\t\tif(Object.keys(this.paths).length) {\n\t\t\t\tanimateElements = animateElements.concat(animatePath(\n\t\t\t\t\tthis.paths, newXPos, newYPos, newData.zeroLine, this.constants.spline));\n\t\t\t}\n\n\t\t\tif(this.units.length) {\n\t\t\t\tthis.units.map((dot, i) => {\n\t\t\t\t\tanimateElements = animateElements.concat(animateDot(\n\t\t\t\t\t\tdot, newXPos[i], newYPos[i]));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn animateElements;\n\t\t}\n\t}\n};\n\nexport function getComponent(name, constants, getData) {\n\tlet keys = Object.keys(componentConfigs).filter(k => name.includes(k));\n\tlet config = componentConfigs[keys[0]];\n\tObject.assign(config, {\n\t\tconstants: constants,\n\t\tgetData: getData\n\t});\n\treturn new ChartComponent(config);\n}\n","import { floatTwo } from './helpers';\n\nfunction normalize(x) {\n\t// Calculates mantissa and exponent of a number\n\t// Returns normalized number and exponent\n\t// https://stackoverflow.com/q/9383593/6495043\n\n\tif(x===0) {\n\t\treturn [0, 0];\n\t}\n\tif(isNaN(x)) {\n\t\treturn {mantissa: -6755399441055744, exponent: 972};\n\t}\n\tvar sig = x > 0 ? 1 : -1;\n\tif(!isFinite(x)) {\n\t\treturn {mantissa: sig * 4503599627370496, exponent: 972};\n\t}\n\n\tx = Math.abs(x);\n\tvar exp = Math.floor(Math.log10(x));\n\tvar man = x/Math.pow(10, exp);\n\n\treturn [sig * man, exp];\n}\n\nfunction getChartRangeIntervals(max, min=0) {\n\tlet upperBound = Math.ceil(max);\n\tlet lowerBound = Math.floor(min);\n\tlet range = upperBound - lowerBound;\n\n\tlet noOfParts = range;\n\tlet partSize = 1;\n\n\t// To avoid too many partitions\n\tif(range > 5) {\n\t\tif(range % 2 !== 0) {\n\t\t\tupperBound++;\n\t\t\t// Recalc range\n\t\t\trange = upperBound - lowerBound;\n\t\t}\n\t\tnoOfParts = range/2;\n\t\tpartSize = 2;\n\t}\n\n\t// Special case: 1 and 2\n\tif(range <= 2) {\n\t\tnoOfParts = 4;\n\t\tpartSize = range/noOfParts;\n\t}\n\n\t// Special case: 0\n\tif(range === 0) {\n\t\tnoOfParts = 5;\n\t\tpartSize = 1;\n\t}\n\n\tlet intervals = [];\n\tfor(var i = 0; i <= noOfParts; i++){\n\t\tintervals.push(lowerBound + partSize * i);\n\t}\n\treturn intervals;\n}\n\nfunction getChartIntervals(maxValue, minValue=0) {\n\tlet [normalMaxValue, exponent] = normalize(maxValue);\n\tlet normalMinValue = minValue ? minValue/Math.pow(10, exponent): 0;\n\n\t// Allow only 7 significant digits\n\tnormalMaxValue = normalMaxValue.toFixed(6);\n\n\tlet intervals = getChartRangeIntervals(normalMaxValue, normalMinValue);\n\tintervals = intervals.map(value => value * Math.pow(10, exponent));\n\treturn intervals;\n}\n\nexport function calcChartIntervals(values, withMinimum=false) {\n\t//*** Where the magic happens ***\n\n\t// Calculates best-fit y intervals from given values\n\t// and returns the interval array\n\n\tlet maxValue = Math.max(...values);\n\tlet minValue = Math.min(...values);\n\n\t// Exponent to be used for pretty print\n\tlet exponent = 0, intervals = []; // eslint-disable-line no-unused-vars\n\n\tfunction getPositiveFirstIntervals(maxValue, absMinValue) {\n\t\tlet intervals = getChartIntervals(maxValue);\n\n\t\tlet intervalSize = intervals[1] - intervals[0];\n\n\t\t// Then unshift the negative values\n\t\tlet value = 0;\n\t\tfor(var i = 1; value < absMinValue; i++) {\n\t\t\tvalue += intervalSize;\n\t\t\tintervals.unshift((-1) * value);\n\t\t}\n\t\treturn intervals;\n\t}\n\n\t// CASE I: Both non-negative\n\n\tif(maxValue >= 0 && minValue >= 0) {\n\t\texponent = normalize(maxValue)[1];\n\t\tif(!withMinimum) {\n\t\t\tintervals = getChartIntervals(maxValue);\n\t\t} else {\n\t\t\tintervals = getChartIntervals(maxValue, minValue);\n\t\t}\n\t}\n\n\t// CASE II: Only minValue negative\n\n\telse if(maxValue > 0 && minValue < 0) {\n\t\t// `withMinimum` irrelevant in this case,\n\t\t// We'll be handling both sides of zero separately\n\t\t// (both starting from zero)\n\t\t// Because ceil() and floor() behave differently\n\t\t// in those two regions\n\n\t\tlet absMinValue = Math.abs(minValue);\n\n\t\tif(maxValue >= absMinValue) {\n\t\t\texponent = normalize(maxValue)[1];\n\t\t\tintervals = getPositiveFirstIntervals(maxValue, absMinValue);\n\t\t} else {\n\t\t\t// Mirror: maxValue => absMinValue, then change sign\n\t\t\texponent = normalize(absMinValue)[1];\n\t\t\tlet posIntervals = getPositiveFirstIntervals(absMinValue, maxValue);\n\t\t\tintervals = posIntervals.reverse().map(d => d * (-1));\n\t\t}\n\n\t}\n\n\t// CASE III: Both non-positive\n\n\telse if(maxValue <= 0 && minValue <= 0) {\n\t\t// Mirrored Case I:\n\t\t// Work with positives, then reverse the sign and array\n\n\t\tlet pseudoMaxValue = Math.abs(minValue);\n\t\tlet pseudoMinValue = Math.abs(maxValue);\n\n\t\texponent = normalize(pseudoMaxValue)[1];\n\t\tif(!withMinimum) {\n\t\t\tintervals = getChartIntervals(pseudoMaxValue);\n\t\t} else {\n\t\t\tintervals = getChartIntervals(pseudoMaxValue, pseudoMinValue);\n\t\t}\n\n\t\tintervals = intervals.reverse().map(d => d * (-1));\n\t}\n\n\treturn intervals;\n}\n\nexport function getZeroIndex(yPts) {\n\tlet zeroIndex;\n\tlet interval = getIntervalSize(yPts);\n\tif(yPts.indexOf(0) >= 0) {\n\t\t// the range has a given zero\n\t\t// zero-line on the chart\n\t\tzeroIndex = yPts.indexOf(0);\n\t} else if(yPts[0] > 0) {\n\t\t// Minimum value is positive\n\t\t// zero-line is off the chart: below\n\t\tlet min = yPts[0];\n\t\tzeroIndex = (-1) * min / interval;\n\t} else {\n\t\t// Maximum value is negative\n\t\t// zero-line is off the chart: above\n\t\tlet max = yPts[yPts.length - 1];\n\t\tzeroIndex = (-1) * max / interval + (yPts.length - 1);\n\t}\n\treturn zeroIndex;\n}\n\nexport function getRealIntervals(max, noOfIntervals, min = 0, asc = 1) {\n\tlet range = max - min;\n\tlet part = range * 1.0 / noOfIntervals;\n\tlet intervals = [];\n\n\tfor(var i = 0; i <= noOfIntervals; i++) {\n\t\tintervals.push(min + part * i);\n\t}\n\n\treturn asc ? intervals : intervals.reverse();\n}\n\nexport function getIntervalSize(orderedArray) {\n\treturn orderedArray[1] - orderedArray[0];\n}\n\nexport function getValueRange(orderedArray) {\n\treturn orderedArray[orderedArray.length-1] - orderedArray[0];\n}\n\nexport function scale(val, yAxis) {\n\treturn floatTwo(yAxis.zeroLine - val * yAxis.scaleMultiplier);\n}\n\nexport function isInRange(val, min, max) {\n\treturn val > min && val < max;\n}\n\nexport function isInRange2D(coord, minCoord, maxCoord) {\n\treturn isInRange(coord[0], minCoord[0], maxCoord[0])\n\t\t&& isInRange(coord[1], minCoord[1], maxCoord[1]);\n}\n\nexport function getClosestInArray(goal, arr, index = false) {\n\tlet closest = arr.reduce(function(prev, curr) {\n\t\treturn (Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev);\n\t}, []);\n\n\treturn index ? arr.indexOf(closest) : closest;\n}\n\nexport function calcDistribution(values, distributionSize) {\n\t// Assume non-negative values,\n\t// implying distribution minimum at zero\n\n\tlet dataMaxValue = Math.max(...values);\n\n\tlet distributionStep = 1 / (distributionSize - 1);\n\tlet distribution = [];\n\n\tfor(var i = 0; i < distributionSize; i++) {\n\t\tlet checkpoint = dataMaxValue * (distributionStep * i);\n\t\tdistribution.push(checkpoint);\n\t}\n\n\treturn distribution;\n}\n\nexport function getMaxCheckpoint(value, distribution) {\n\treturn distribution.filter(d => d < value).length;\n}\n","import { fillArray } from '../utils/helpers';\nimport { DEFAULT_AXIS_CHART_TYPE, AXIS_DATASET_CHART_TYPES, DEFAULT_CHAR_WIDTH } from '../utils/constants';\n\nexport function dataPrep(data, type) {\n\tdata.labels = data.labels || [];\n\n\tlet datasetLength = data.labels.length;\n\n\t// Datasets\n\tlet datasets = data.datasets;\n\tlet zeroArray = new Array(datasetLength).fill(0);\n\tif(!datasets) {\n\t\t// default\n\t\tdatasets = [{\n\t\t\tvalues: zeroArray\n\t\t}];\n\t}\n\n\tdatasets.map(d=> {\n\t\t// Set values\n\t\tif(!d.values) {\n\t\t\td.values = zeroArray;\n\t\t} else {\n\t\t\t// Check for non values\n\t\t\tlet vals = d.values;\n\t\t\tvals = vals.map(val => (!isNaN(val) ? val : 0));\n\n\t\t\t// Trim or extend\n\t\t\tif(vals.length > datasetLength) {\n\t\t\t\tvals = vals.slice(0, datasetLength);\n\t\t\t} else {\n\t\t\t\tvals = fillArray(vals, datasetLength - vals.length, 0);\n\t\t\t}\n\t\t\td.values = vals;\n\t\t}\n\n\t\t// Set type\n\t\tif(!d.chartType ) {\n\t\t\tif(!AXIS_DATASET_CHART_TYPES.includes(type)) type === DEFAULT_AXIS_CHART_TYPE;\n\t\t\td.chartType = type;\n\t\t}\n\n\t});\n\n\t// Markers\n\n\t// Regions\n\t// data.yRegions = data.yRegions || [];\n\tif(data.yRegions) {\n\t\tdata.yRegions.map(d => {\n\t\t\tif(d.end < d.start) {\n\t\t\t\t[d.start, d.end] = [d.end, d.start];\n\t\t\t}\n\t\t});\n\t}\n\n\treturn data;\n}\n\nexport function zeroDataPrep(realData) {\n\tlet datasetLength = realData.labels.length;\n\tlet zeroArray = new Array(datasetLength).fill(0);\n\n\tlet zeroData = {\n\t\tlabels: realData.labels.slice(0, -1),\n\t\tdatasets: realData.datasets.map(d => {\n\t\t\treturn {\n\t\t\t\tname: '',\n\t\t\t\tvalues: zeroArray.slice(0, -1),\n\t\t\t\tchartType: d.chartType\n\t\t\t};\n\t\t}),\n\t};\n\n\tif(realData.yMarkers) {\n\t\tzeroData.yMarkers = [\n\t\t\t{\n\t\t\t\tvalue: 0,\n\t\t\t\tlabel: ''\n\t\t\t}\n\t\t];\n\t}\n\n\tif(realData.yRegions) {\n\t\tzeroData.yRegions = [\n\t\t\t{\n\t\t\t\tstart: 0,\n\t\t\t\tend: 0,\n\t\t\t\tlabel: ''\n\t\t\t}\n\t\t];\n\t}\n\n\treturn zeroData;\n}\n\nexport function getShortenedLabels(chartWidth, labels=[], isSeries=true) {\n\tlet allowedSpace = chartWidth / labels.length;\n\tif(allowedSpace <= 0) allowedSpace = 1;\n\tlet allowedLetters = allowedSpace / DEFAULT_CHAR_WIDTH;\n\n\tlet seriesMultiple;\n\tif(isSeries) {\n\t\t// Find the maximum label length for spacing calculations\n\t\tlet maxLabelLength = Math.max(...labels.map(label => label.length));\n\t\tseriesMultiple = Math.ceil(maxLabelLength/allowedLetters);\n\t}\n\n\tlet calcLabels = labels.map((label, i) => {\n\t\tlabel += \"\";\n\t\tif(label.length > allowedLetters) {\n\n\t\t\tif(!isSeries) {\n\t\t\t\tif(allowedLetters-3 > 0) {\n\t\t\t\t\tlabel = label.slice(0, allowedLetters-3) + \" ...\";\n\t\t\t\t} else {\n\t\t\t\t\tlabel = label.slice(0, allowedLetters) + '..';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(i % seriesMultiple !== 0) {\n\t\t\t\t\tlabel = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn label;\n\t});\n\n\treturn calcLabels;\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { $ } from '../utils/dom';\nimport { TOOLTIP_POINTER_TRIANGLE_HEIGHT } from '../utils/constants';\n\nexport default class SvgTip {\n\tconstructor({\n\t\tparent = null,\n\t\tcolors = []\n\t}) {\n\t\tthis.parent = parent;\n\t\tthis.colors = colors;\n\t\tthis.titleName = '';\n\t\tthis.titleValue = '';\n\t\tthis.listValues = [];\n\t\tthis.titleValueFirst = 0;\n\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\n\t\tthis.top = 0;\n\t\tthis.left = 0;\n\n\t\tthis.setup();\n\t}\n\n\tsetup() {\n\t\tthis.makeTooltip();\n\t}\n\n\trefresh() {\n\t\tthis.fill();\n\t\tthis.calcPosition();\n\t}\n\n\tmakeTooltip() {\n\t\tthis.container = $.create('div', {\n\t\t\tinside: this.parent,\n\t\t\tclassName: 'graph-svg-tip comparison',\n\t\t\tinnerHTML: `\n\t\t\t\t
          \n\t\t\t\t
          `\n\t\t});\n\t\tthis.hideTip();\n\n\t\tthis.title = this.container.querySelector('.title');\n\t\tthis.dataPointList = this.container.querySelector('.data-point-list');\n\n\t\tthis.parent.addEventListener('mouseleave', () => {\n\t\t\tthis.hideTip();\n\t\t});\n\t}\n\n\tfill() {\n\t\tlet title;\n\t\tif(this.index) {\n\t\t\tthis.container.setAttribute('data-point-index', this.index);\n\t\t}\n\t\tif(this.titleValueFirst) {\n\t\t\ttitle = `${this.titleValue}${this.titleName}`;\n\t\t} else {\n\t\t\ttitle = `${this.titleName}${this.titleValue}`;\n\t\t}\n\t\tthis.title.innerHTML = title;\n\t\tthis.dataPointList.innerHTML = '';\n\n\t\tthis.listValues.map((set, i) => {\n\t\t\tconst color = this.colors[i] || 'black';\n\t\t\tlet value = set.formatted === 0 || set.formatted ? set.formatted : set.value;\n\n\t\t\tlet li = $.create('li', {\n\t\t\t\tstyles: {\n\t\t\t\t\t'border-top': `3px solid ${color}`\n\t\t\t\t},\n\t\t\t\tinnerHTML: `${ value === 0 || value ? value : '' }\n\t\t\t\t\t${set.title ? set.title : '' }`\n\t\t\t});\n\n\t\t\tthis.dataPointList.appendChild(li);\n\t\t});\n\t}\n\n\tcalcPosition() {\n\t\tlet width = this.container.offsetWidth;\n\n\t\tthis.top = this.y - this.container.offsetHeight\n\t\t\t- TOOLTIP_POINTER_TRIANGLE_HEIGHT;\n\t\tthis.left = this.x - width/2;\n\t\tlet maxLeft = this.parent.offsetWidth - width;\n\n\t\tlet pointer = this.container.querySelector('.svg-pointer');\n\n\t\tif(this.left < 0) {\n\t\t\tpointer.style.left = `calc(50% - ${-1 * this.left}px)`;\n\t\t\tthis.left = 0;\n\t\t} else if(this.left > maxLeft) {\n\t\t\tlet delta = this.left - maxLeft;\n\t\t\tlet pointerOffset = `calc(50% + ${delta}px)`;\n\t\t\tpointer.style.left = pointerOffset;\n\n\t\t\tthis.left = maxLeft;\n\t\t} else {\n\t\t\tpointer.style.left = `50%`;\n\t\t}\n\t}\n\n\tsetValues(x, y, title = {}, listValues = [], index = -1) {\n\t\tthis.titleName = title.name;\n\t\tthis.titleValue = title.value;\n\t\tthis.listValues = listValues;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.titleValueFirst = title.valueFirst || 0;\n\t\tthis.index = index;\n\t\tthis.refresh();\n\t}\n\n\thideTip() {\n\t\tthis.container.style.top = '0px';\n\t\tthis.container.style.left = '0px';\n\t\tthis.container.style.opacity = '0';\n\t}\n\n\tshowTip() {\n\t\tthis.container.style.top = this.top + 'px';\n\t\tthis.container.style.left = this.left + 'px';\n\t\tthis.container.style.opacity = '1';\n\t}\n}\n","export const CSSTEXT = \".chart-container{position:relative;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','Roboto','Oxygen','Ubuntu','Cantarell','Fira Sans','Droid Sans','Helvetica Neue',sans-serif}.chart-container .axis,.chart-container .chart-label{fill:#555b51}.chart-container .axis line,.chart-container .chart-label line{stroke:#dadada}.chart-container .dataset-units circle{stroke:#fff;stroke-width:2}.chart-container .dataset-units path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container .dataset-path{stroke-width:2px}.chart-container .path-group path{fill:none;stroke-opacity:1;stroke-width:2px}.chart-container line.dashed{stroke-dasharray:5,3}.chart-container .axis-line .specific-value{text-anchor:start}.chart-container .axis-line .y-line{text-anchor:end}.chart-container .axis-line .x-line{text-anchor:middle}.chart-container .legend-dataset-text{fill:#6c7680;font-weight:600}.graph-svg-tip{position:absolute;z-index:99999;padding:10px;font-size:12px;color:#959da5;text-align:center;background:rgba(0,0,0,.8);border-radius:3px}.graph-svg-tip ul{padding-left:0;display:flex}.graph-svg-tip ol{padding-left:0;display:flex}.graph-svg-tip ul.data-point-list li{min-width:90px;flex:1;font-weight:600}.graph-svg-tip strong{color:#dfe2e5;font-weight:600}.graph-svg-tip .svg-pointer{position:absolute;height:5px;margin:0 0 0 -5px;content:' ';border:5px solid transparent;border-top-color:rgba(0,0,0,.8)}.graph-svg-tip.comparison{padding:0;text-align:left;pointer-events:none}.graph-svg-tip.comparison .title{display:block;padding:10px;margin:0;font-weight:600;line-height:1;pointer-events:none}.graph-svg-tip.comparison ul{margin:0;white-space:nowrap;list-style:none}.graph-svg-tip.comparison li{display:inline-block;padding:5px 10px}\";","import SvgTip from '../objects/SvgTip';\nimport { $, isElementInViewport, getElementContentWidth, isHidden } from '../utils/dom';\nimport { makeSVGContainer, makeSVGDefs, makeSVGGroup, makeText } from '../utils/draw';\nimport { BASE_MEASURES, getExtraHeight, getExtraWidth, getTopOffset, getLeftOffset,\n\tINIT_CHART_UPDATE_TIMEOUT, CHART_POST_ANIMATE_TIMEOUT, DEFAULT_COLORS} from '../utils/constants';\nimport { getColor, isValidColor } from '../utils/colors';\nimport { runSMILAnimation } from '../utils/animation';\nimport { downloadFile, prepareForExport } from '../utils/export';\nimport { deepClone } from '../utils/helpers';\n\nexport default class BaseChart {\n\tconstructor(parent, options) {\n\t\t// deepclone options to avoid making changes to orignal object\n\t\toptions = deepClone(options);\n\n\t\tthis.parent = typeof parent === 'string'\n\t\t\t? document.querySelector(parent)\n\t\t\t: parent;\n\n\t\tif (!(this.parent instanceof HTMLElement)) {\n\t\t\tthrow new Error('No `parent` element to render on was provided.');\n\t\t}\n\n\t\tthis.rawChartArgs = options;\n\n\t\tthis.title = options.title || '';\n\t\tthis.type = options.type || '';\n\n\t\tthis.realData = this.prepareData(options.data);\n\t\tthis.data = this.prepareFirstData(this.realData);\n\n\t\tthis.colors = this.validateColors(options.colors, this.type);\n\n\t\tthis.config = {\n\t\t\tshowTooltip: 1, // calculate\n\t\t\tshowLegend: 1, // calculate\n\t\t\tisNavigable: options.isNavigable || 0,\n\t\t\tanimate: (typeof options.animate !== 'undefined') ? options.animate : 1,\n\t\t\ttruncateLegends: options.truncateLegends || 1\n\t\t};\n\n\t\tthis.measures = JSON.parse(JSON.stringify(BASE_MEASURES));\n\t\tlet m = this.measures;\n\t\tthis.setMeasures(options);\n\t\tif(!this.title.length) { m.titleHeight = 0; }\n\t\tif(!this.config.showLegend) m.legendHeight = 0;\n\t\tthis.argHeight = options.height || m.baseHeight;\n\n\t\tthis.state = {};\n\t\tthis.options = {};\n\n\t\tthis.initTimeout = INIT_CHART_UPDATE_TIMEOUT;\n\n\t\tif(this.config.isNavigable) {\n\t\t\tthis.overlays = [];\n\t\t}\n\n\t\tthis.configure(options);\n\t}\n\n\tprepareData(data) {\n\t\treturn data;\n\t}\n\n\tprepareFirstData(data) {\n\t\treturn data;\n\t}\n\n\tvalidateColors(colors, type) {\n\t\tconst validColors = [];\n\t\tcolors = (colors || []).concat(DEFAULT_COLORS[type]);\n\t\tcolors.forEach((string) => {\n\t\t\tconst color = getColor(string);\n\t\t\tif(!isValidColor(color)) {\n\t\t\t\tconsole.warn('\"' + string + '\" is not a valid color.');\n\t\t\t} else {\n\t\t\t\tvalidColors.push(color);\n\t\t\t}\n\t\t});\n\t\treturn validColors;\n\t}\n\n\tsetMeasures() {\n\t\t// Override measures, including those for title and legend\n\t\t// set config for legend and title\n\t}\n\n\tconfigure() {\n\t\tlet height = this.argHeight;\n\t\tthis.baseHeight = height;\n\t\tthis.height = height - getExtraHeight(this.measures);\n\n\t\t// Bind window events\n\t\tthis.boundDrawFn = () => this.draw(true);\n\t\tif (ResizeObserver) {\n\t\t\tthis.resizeObserver = new ResizeObserver(this.boundDrawFn);\n\t\t\tthis.resizeObserver.observe(this.parent);\n\t\t}\n\t\twindow.addEventListener('resize', this.boundDrawFn);\n\t\twindow.addEventListener('orientationchange', this.boundDrawFn);\n\t}\n\n\tdestroy() {\n\t\tif (this.resizeObserver) this.resizeObserver.disconnect();\n\t\twindow.removeEventListener('resize', this.boundDrawFn);\n\t\twindow.removeEventListener('orientationchange', this.boundDrawFn);\n\t}\n\n\t// Has to be called manually\n\tsetup() {\n\t\tthis.makeContainer();\n\t\tthis.updateWidth();\n\t\tthis.makeTooltip();\n\n\t\tthis.draw(false, true);\n\t}\n\n\tmakeContainer() {\n\t\t// Chart needs a dedicated parent element\n\t\tthis.parent.innerHTML = '';\n\n\t\tlet args = {\n\t\t\tinside: this.parent,\n\t\t\tclassName: 'chart-container'\n\t\t};\n\n\t\tif(this.independentWidth) {\n\t\t\targs.styles = { width: this.independentWidth + 'px' };\n\t\t}\n\n\t\tthis.container = $.create('div', args);\n\t}\n\n\tmakeTooltip() {\n\t\tthis.tip = new SvgTip({\n\t\t\tparent: this.container,\n\t\t\tcolors: this.colors\n\t\t});\n\t\tthis.bindTooltip();\n\t}\n\n\tbindTooltip() {}\n\n\tdraw(onlyWidthChange=false, init=false) {\n\t\tif (onlyWidthChange && isHidden(this.parent)) {\n\t\t\t// Don't update anything if the chart is hidden\n\t\t\treturn;\n\t\t}\n\t\tthis.updateWidth();\n\n\t\tthis.calc(onlyWidthChange);\n\t\tthis.makeChartArea();\n\t\tthis.setupComponents();\n\n\t\tthis.components.forEach(c => c.setup(this.drawArea));\n\t\t// this.components.forEach(c => c.make());\n\t\tthis.render(this.components, false);\n\n\t\tif(init) {\n\t\t\tthis.data = this.realData;\n\t\t\tsetTimeout(() => {this.update(this.data);}, this.initTimeout);\n\t\t}\n\n\t\tthis.renderLegend();\n\n\t\tthis.setupNavigation(init);\n\t}\n\n\tcalc() {} // builds state\n\n\tupdateWidth() {\n\t\tthis.baseWidth = getElementContentWidth(this.parent);\n\t\tthis.width = this.baseWidth - getExtraWidth(this.measures);\n\t}\n\n\tmakeChartArea() {\n\t\tif(this.svg) {\n\t\t\tthis.container.removeChild(this.svg);\n\t\t}\n\t\tlet m = this.measures;\n\n\t\tthis.svg = makeSVGContainer(\n\t\t\tthis.container,\n\t\t\t'frappe-chart chart',\n\t\t\tthis.baseWidth,\n\t\t\tthis.baseHeight\n\t\t);\n\t\tthis.svgDefs = makeSVGDefs(this.svg);\n\n\t\tif(this.title.length) {\n\t\t\tthis.titleEL = makeText(\n\t\t\t\t'title',\n\t\t\t\tm.margins.left,\n\t\t\t\tm.margins.top,\n\t\t\t\tthis.title,\n\t\t\t\t{\n\t\t\t\t\tfontSize: m.titleFontSize,\n\t\t\t\t\tfill: '#666666',\n\t\t\t\t\tdy: m.titleFontSize\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tlet top = getTopOffset(m);\n\t\tthis.drawArea = makeSVGGroup(\n\t\t\tthis.type + '-chart chart-draw-area',\n\t\t\t`translate(${getLeftOffset(m)}, ${top})`\n\t\t);\n\n\t\tif(this.config.showLegend) {\n\t\t\ttop += this.height + m.paddings.bottom;\n\t\t\tthis.legendArea = makeSVGGroup(\n\t\t\t\t'chart-legend',\n\t\t\t\t`translate(${getLeftOffset(m)}, ${top})`\n\t\t\t);\n\t\t}\n\n\t\tif(this.title.length) { this.svg.appendChild(this.titleEL); }\n\t\tthis.svg.appendChild(this.drawArea);\n\t\tif(this.config.showLegend) { this.svg.appendChild(this.legendArea); }\n\n\t\tthis.updateTipOffset(getLeftOffset(m), getTopOffset(m));\n\t}\n\n\tupdateTipOffset(x, y) {\n\t\tthis.tip.offset = {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t}\n\n\tsetupComponents() { this.components = new Map(); }\n\n\tupdate(data) {\n\t\tif(!data) {\n\t\t\tconsole.error('No data to update.');\n\t\t}\n\t\tthis.data = this.prepareData(data);\n\t\tthis.calc(); // builds state\n\t\tthis.render(this.components, this.config.animate);\n\t\tthis.renderLegend();\n\t}\n\n\trender(components=this.components, animate=true) {\n\t\tif(this.config.isNavigable) {\n\t\t\t// Remove all existing overlays\n\t\t\tthis.overlays.map(o => o.parentNode.removeChild(o));\n\t\t\t// ref.parentNode.insertBefore(element, ref);\n\t\t}\n\t\tlet elementsToAnimate = [];\n\t\t// Can decouple to this.refreshComponents() first to save animation timeout\n\t\tcomponents.forEach(c => {\n\t\t\telementsToAnimate = elementsToAnimate.concat(c.update(animate));\n\t\t});\n\t\tif(elementsToAnimate.length > 0) {\n\t\t\trunSMILAnimation(this.container, this.svg, elementsToAnimate);\n\t\t\tsetTimeout(() => {\n\t\t\t\tcomponents.forEach(c => c.make());\n\t\t\t\tthis.updateNav();\n\t\t\t}, CHART_POST_ANIMATE_TIMEOUT);\n\t\t} else {\n\t\t\tcomponents.forEach(c => c.make());\n\t\t\tthis.updateNav();\n\t\t}\n\t}\n\n\tupdateNav() {\n\t\tif(this.config.isNavigable) {\n\t\t\tthis.makeOverlay();\n\t\t\tthis.bindUnits();\n\t\t}\n\t}\n\n\trenderLegend() {}\n\n\tsetupNavigation(init=false) {\n\t\tif(!this.config.isNavigable) return;\n\n\t\tif(init) {\n\t\t\tthis.bindOverlay();\n\n\t\t\tthis.keyActions = {\n\t\t\t\t'13': this.onEnterKey.bind(this),\n\t\t\t\t'37': this.onLeftArrow.bind(this),\n\t\t\t\t'38': this.onUpArrow.bind(this),\n\t\t\t\t'39': this.onRightArrow.bind(this),\n\t\t\t\t'40': this.onDownArrow.bind(this),\n\t\t\t};\n\n\t\t\tdocument.addEventListener('keydown', (e) => {\n\t\t\t\tif(isElementInViewport(this.container)) {\n\t\t\t\t\te = e || window.event;\n\t\t\t\t\tif(this.keyActions[e.keyCode]) {\n\t\t\t\t\t\tthis.keyActions[e.keyCode]();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tmakeOverlay() {}\n\tupdateOverlay() {}\n\tbindOverlay() {}\n\tbindUnits() {}\n\n\tonLeftArrow() {}\n\tonRightArrow() {}\n\tonUpArrow() {}\n\tonDownArrow() {}\n\tonEnterKey() {}\n\n\taddDataPoint() {}\n\tremoveDataPoint() {}\n\n\tgetDataPoint() {}\n\tsetCurrentDataPoint() {}\n\n\tupdateDataset() {}\n\n\texport() {\n\t\tlet chartSvg = prepareForExport(this.svg);\n\t\tdownloadFile(this.title || 'Chart', [chartSvg]);\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { truncateString } from '../utils/draw-utils';\nimport { legendDot } from '../utils/draw';\nimport { round } from '../utils/helpers';\nimport { getExtraWidth } from '../utils/constants';\n\nexport default class AggregationChart extends BaseChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\n\t\tthis.config.formatTooltipY = (args.tooltipOptions || {}).formatTooltipY;\n\t\tthis.config.maxSlices = args.maxSlices || 20;\n\t\tthis.config.maxLegendPoints = args.maxLegendPoints || 20;\n\t}\n\n\tcalc() {\n\t\tlet s = this.state;\n\t\tlet maxSlices = this.config.maxSlices;\n\t\ts.sliceTotals = [];\n\n\t\tlet allTotals = this.data.labels.map((label, i) => {\n\t\t\tlet total = 0;\n\t\t\tthis.data.datasets.map(e => {\n\t\t\t\ttotal += e.values[i];\n\t\t\t});\n\t\t\treturn [total, label];\n\t\t}).filter(d => { return d[0] >= 0; }); // keep only positive results\n\n\t\tlet totals = allTotals;\n\t\tif(allTotals.length > maxSlices) {\n\t\t\t// Prune and keep a grey area for rest as per maxSlices\n\t\t\tallTotals.sort((a, b) => { return b[0] - a[0]; });\n\n\t\t\ttotals = allTotals.slice(0, maxSlices-1);\n\t\t\tlet remaining = allTotals.slice(maxSlices-1);\n\n\t\t\tlet sumOfRemaining = 0;\n\t\t\tremaining.map(d => {sumOfRemaining += d[0];});\n\t\t\ttotals.push([sumOfRemaining, 'Rest']);\n\t\t\tthis.colors[maxSlices-1] = 'grey';\n\t\t}\n\n\t\ts.labels = [];\n\t\ttotals.map(d => {\n\t\t\ts.sliceTotals.push(round(d[0]));\n\t\t\ts.labels.push(d[1]);\n\t\t});\n\n\t\ts.grandTotal = s.sliceTotals.reduce((a, b) => a + b, 0);\n\n\t\tthis.center = {\n\t\t\tx: this.width / 2,\n\t\t\ty: this.height / 2\n\t\t};\n\t}\n\n\trenderLegend() {\n\t\tlet s = this.state;\n\t\tthis.legendArea.textContent = '';\n\t\tthis.legendTotals = s.sliceTotals.slice(0, this.config.maxLegendPoints);\n\n\t\tlet count = 0;\n\t\tlet y = 0;\n\t\tthis.legendTotals.map((d, i) => {\n\t\t\tlet barWidth = 150;\n\t\t\tlet divisor = Math.floor(\n\t\t\t\t(this.width - getExtraWidth(this.measures))/barWidth\n\t\t\t);\n\t\t\tif (this.legendTotals.length < divisor) {\n\t\t\t\tbarWidth = this.width/this.legendTotals.length;\n\t\t\t}\n\t\t\tif(count > divisor) {\n\t\t\t\tcount = 0;\n\t\t\t\ty += 20;\n\t\t\t}\n\t\t\tlet x = barWidth * count + 5;\n\t\t\tlet label = this.config.truncateLegends ? truncateString(s.labels[i], barWidth/10) : s.labels[i];\n\t\t\tlet formatted = this.config.formatTooltipY ? this.config.formatTooltipY(d) : d;\n\t\t\tlet dot = legendDot(\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\t5,\n\t\t\t\tthis.colors[i],\n\t\t\t\t`${label}: ${formatted}`,\n\t\t\t\tfalse\n\t\t\t);\n\t\t\tthis.legendArea.appendChild(dot);\n\t\t\tcount++;\n\t\t});\n\t}\n}\n","import AggregationChart from './AggregationChart';\nimport { getOffset } from '../utils/dom';\nimport { getComponent } from '../objects/ChartComponents';\nimport { PERCENTAGE_BAR_DEFAULT_HEIGHT, PERCENTAGE_BAR_DEFAULT_DEPTH } from '../utils/constants';\n\nexport default class PercentageChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'percentage';\n\t\tthis.setup();\n\t}\n\n\tsetMeasures(options) {\n\t\tlet m = this.measures;\n\t\tthis.barOptions = options.barOptions || {};\n\n\t\tlet b = this.barOptions;\n\t\tb.height = b.height || PERCENTAGE_BAR_DEFAULT_HEIGHT;\n\t\tb.depth = b.depth || PERCENTAGE_BAR_DEFAULT_DEPTH;\n\n\t\tm.paddings.right = 30;\n\t\tm.legendHeight = 60;\n\t\tm.baseHeight = (b.height + b.depth * 0.5) * 8;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'percentageBars',\n\t\t\t\t{\n\t\t\t\t\tbarHeight: this.barOptions.height,\n\t\t\t\t\tbarDepth: this.barOptions.depth,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: s.xPositions,\n\t\t\t\t\t\twidths: s.widths,\n\t\t\t\t\t\tcolors: this.colors\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\n\t\ts.xPositions = [];\n\t\ts.widths = [];\n\n\t\tlet xPos = 0;\n\t\ts.sliceTotals.map((value) => {\n\t\t\tlet width = this.width * value / s.grandTotal;\n\t\t\ts.widths.push(width);\n\t\t\ts.xPositions.push(xPos);\n\t\t\txPos += width;\n\t\t});\n\t}\n\n\tmakeDataByIndex() { }\n\n\tbindTooltip() {\n\t\tlet s = this.state;\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tlet bars = this.components.get('percentageBars').store;\n\t\t\tlet bar = e.target;\n\t\t\tif(bars.includes(bar)) {\n\n\t\t\t\tlet i = bars.indexOf(bar);\n\t\t\t\tlet gOff = getOffset(this.container), pOff = getOffset(bar);\n\n\t\t\t\tlet x = pOff.left - gOff.left + parseInt(bar.getAttribute('width'))/2;\n\t\t\t\tlet y = pOff.top - gOff.top;\n\t\t\t\tlet title = (this.formattedLabels && this.formattedLabels.length>0\n\t\t\t\t\t? this.formattedLabels[i] : this.state.labels[i]) + ': ';\n\t\t\t\tlet fraction = s.sliceTotals[i]/s.grandTotal;\n\n\t\t\t\tthis.tip.setValues(x, y, {name: title, value: (fraction*100).toFixed(1) + \"%\"});\n\t\t\t\tthis.tip.showTip();\n\t\t\t}\n\t\t});\n\t}\n}\n","import AggregationChart from './AggregationChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset } from '../utils/dom';\nimport { getPositionByAngle } from '../utils/helpers';\nimport { makeArcPathStr, makeCircleStr } from '../utils/draw';\nimport { lightenDarkenColor } from '../utils/colors';\nimport { transform } from '../utils/animation';\nimport { FULL_ANGLE } from '../utils/constants';\n\nexport default class PieChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'pie';\n\t\tthis.initTimeout = 0;\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\t\tthis.mouseMove = this.mouseMove.bind(this);\n\t\tthis.mouseLeave = this.mouseLeave.bind(this);\n\n\t\tthis.hoverRadio = args.hoverRadio || 0.1;\n\t\tthis.config.startAngle = args.startAngle || 0;\n\n\t\tthis.clockWise = args.clockWise || false;\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\t\tthis.radius = (this.height > this.width ? this.center.x : this.center.y);\n\n\t\tconst { radius, clockWise } = this;\n\n\t\tconst prevSlicesProperties = s.slicesProperties || [];\n\t\ts.sliceStrings = [];\n\t\ts.slicesProperties = [];\n\t\tlet curAngle = 180 - this.config.startAngle;\n\t\ts.sliceTotals.map((total, i) => {\n\t\t\tconst startAngle = curAngle;\n\t\t\tconst originDiffAngle = (total / s.grandTotal) * FULL_ANGLE;\n\t\t\tconst largeArc = originDiffAngle > 180 ? 1: 0;\n\t\t\tconst diffAngle = clockWise ? -originDiffAngle : originDiffAngle;\n\t\t\tconst endAngle = curAngle = curAngle + diffAngle;\n\t\t\tconst startPosition = getPositionByAngle(startAngle, radius);\n\t\t\tconst endPosition = getPositionByAngle(endAngle, radius);\n\n\t\t\tconst prevProperty = this.init && prevSlicesProperties[i];\n\n\t\t\tlet curStart,curEnd;\n\t\t\tif(this.init) {\n\t\t\t\tcurStart = prevProperty ? prevProperty.startPosition : startPosition;\n\t\t\t\tcurEnd = prevProperty ? prevProperty.endPosition : startPosition;\n\t\t\t} else {\n\t\t\t\tcurStart = startPosition;\n\t\t\t\tcurEnd = endPosition;\n\t\t\t}\n\t\t\tconst curPath =\n\t\t\t\toriginDiffAngle === 360\n\t\t\t\t\t? makeCircleStr(curStart, curEnd, this.center, this.radius, clockWise, largeArc)\n\t\t\t\t\t: makeArcPathStr(curStart, curEnd, this.center, this.radius, clockWise, largeArc);\n\n\t\t\ts.sliceStrings.push(curPath);\n\t\t\ts.slicesProperties.push({\n\t\t\t\tstartPosition,\n\t\t\t\tendPosition,\n\t\t\t\tvalue: total,\n\t\t\t\ttotal: s.grandTotal,\n\t\t\t\tstartAngle,\n\t\t\t\tendAngle,\n\t\t\t\tangle: diffAngle\n\t\t\t});\n\n\t\t});\n\t\tthis.init = 0;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'pieSlices',\n\t\t\t\t{ },\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsliceStrings: s.sliceStrings,\n\t\t\t\t\t\tcolors: this.colors\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalTranslateByAngle(property){\n\t\tconst{radius,hoverRadio} = this;\n\t\tconst position = getPositionByAngle(property.startAngle+(property.angle / 2),radius);\n\t\treturn `translate3d(${(position.x) * hoverRadio}px,${(position.y) * hoverRadio}px,0)`;\n\t}\n\n\thoverSlice(path,i,flag,e){\n\t\tif(!path) return;\n\t\tconst color = this.colors[i];\n\t\tif(flag) {\n\t\t\ttransform(path, this.calTranslateByAngle(this.state.slicesProperties[i]));\n\t\t\tpath.style.fill = lightenDarkenColor(color, 50);\n\t\t\tlet g_off = getOffset(this.svg);\n\t\t\tlet x = e.pageX - g_off.left + 10;\n\t\t\tlet y = e.pageY - g_off.top - 10;\n\t\t\tlet title = (this.formatted_labels && this.formatted_labels.length > 0\n\t\t\t\t? this.formatted_labels[i] : this.state.labels[i]) + ': ';\n\t\t\tlet percent = (this.state.sliceTotals[i] * 100 / this.state.grandTotal).toFixed(1);\n\t\t\tthis.tip.setValues(x, y, {name: title, value: percent + \"%\"});\n\t\t\tthis.tip.showTip();\n\t\t} else {\n\t\t\ttransform(path,'translate3d(0,0,0)');\n\t\t\tthis.tip.hideTip();\n\t\t\tpath.style.fill = color;\n\t\t}\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', this.mouseMove);\n\t\tthis.container.addEventListener('mouseleave', this.mouseLeave);\n\t}\n\n\tmouseMove(e){\n\t\tconst target = e.target;\n\t\tlet slices = this.components.get('pieSlices').store;\n\t\tlet prevIndex = this.curActiveSliceIndex;\n\t\tlet prevAcitve = this.curActiveSlice;\n\t\tif(slices.includes(target)) {\n\t\t\tlet i = slices.indexOf(target);\n\t\t\tthis.hoverSlice(prevAcitve, prevIndex,false);\n\t\t\tthis.curActiveSlice = target;\n\t\t\tthis.curActiveSliceIndex = i;\n\t\t\tthis.hoverSlice(target, i, true, e);\n\t\t} else {\n\t\t\tthis.mouseLeave();\n\t\t}\n\t}\n\n\tmouseLeave(){\n\t\tthis.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,false);\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { makeText, heatSquare } from '../utils/draw';\nimport { DAY_NAMES_SHORT, addDays, areInSameMonth, getLastDateInMonth, setDayToSunday, getYyyyMmDd, getWeeksBetween, getMonthName, clone,\n\tNO_OF_MILLIS, NO_OF_YEAR_MONTHS, NO_OF_DAYS_IN_WEEK } from '../utils/date-utils';\nimport { calcDistribution, getMaxCheckpoint } from '../utils/intervals';\nimport { getExtraHeight, getExtraWidth, HEATMAP_DISTRIBUTION_SIZE, HEATMAP_SQUARE_SIZE,\n\tHEATMAP_GUTTER_SIZE } from '../utils/constants';\n\nconst COL_WIDTH = HEATMAP_SQUARE_SIZE + HEATMAP_GUTTER_SIZE;\nconst ROW_HEIGHT = COL_WIDTH;\n// const DAY_INCR = 1;\n\nexport default class Heatmap extends BaseChart {\n\tconstructor(parent, options) {\n\t\tsuper(parent, options);\n\t\tthis.type = 'heatmap';\n\n\t\tthis.countLabel = options.countLabel || '';\n\n\t\tlet validStarts = ['Sunday', 'Monday'];\n\t\tlet startSubDomain = validStarts.includes(options.startSubDomain)\n\t\t\t? options.startSubDomain : 'Sunday';\n\t\tthis.startSubDomainIndex = validStarts.indexOf(startSubDomain);\n\n\t\tthis.setup();\n\t}\n\n\tsetMeasures(options) {\n\t\tlet m = this.measures;\n\t\tthis.discreteDomains = options.discreteDomains === 0 ? 0 : 1;\n\n\t\tm.paddings.top = ROW_HEIGHT * 3;\n\t\tm.paddings.bottom = 0;\n\t\tm.legendHeight = ROW_HEIGHT * 2;\n\t\tm.baseHeight = ROW_HEIGHT * NO_OF_DAYS_IN_WEEK\n\t\t\t+ getExtraHeight(m);\n\n\t\tlet d = this.data;\n\t\tlet spacing = this.discreteDomains ? NO_OF_YEAR_MONTHS : 0;\n\t\tthis.independentWidth = (getWeeksBetween(d.start, d.end)\n\t\t\t+ spacing) * COL_WIDTH + getExtraWidth(m);\n\t}\n\n\tupdateWidth() {\n\t\tlet spacing = this.discreteDomains ? NO_OF_YEAR_MONTHS : 0;\n\t\tlet noOfWeeks = this.state.noOfWeeks ? this.state.noOfWeeks : 52;\n\t\tthis.baseWidth = (noOfWeeks + spacing) * COL_WIDTH\n\t\t\t+ getExtraWidth(this.measures);\n\t}\n\n\tprepareData(data=this.data) {\n\t\tif(data.start && data.end && data.start > data.end) {\n\t\t\tthrow new Error('Start date cannot be greater than end date.');\n\t\t}\n\n\t\tif(!data.start) {\n\t\t\tdata.start = new Date();\n\t\t\tdata.start.setFullYear( data.start.getFullYear() - 1 );\n\t\t}\n\t\tif(!data.end) { data.end = new Date(); }\n\t\tdata.dataPoints = data.dataPoints || {};\n\n\t\tif(parseInt(Object.keys(data.dataPoints)[0]) > 100000) {\n\t\t\tlet points = {};\n\t\t\tObject.keys(data.dataPoints).forEach(timestampSec => {\n\t\t\t\tlet date = new Date(timestampSec * NO_OF_MILLIS);\n\t\t\t\tpoints[getYyyyMmDd(date)] = data.dataPoints[timestampSec];\n\t\t\t});\n\t\t\tdata.dataPoints = points;\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tcalc() {\n\t\tlet s = this.state;\n\n\t\ts.start = clone(this.data.start);\n\t\ts.end = clone(this.data.end);\n\n\t\ts.firstWeekStart = clone(s.start);\n\t\ts.noOfWeeks = getWeeksBetween(s.start, s.end);\n\t\ts.distribution = calcDistribution(\n\t\t\tObject.values(this.data.dataPoints), HEATMAP_DISTRIBUTION_SIZE);\n\n\t\ts.domainConfigs = this.getDomains();\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\t\tlet lessCol = this.discreteDomains ? 0 : 1;\n\n\t\tlet componentConfigs = s.domainConfigs.map((config, i) => [\n\t\t\t'heatDomain',\n\t\t\t{\n\t\t\t\tindex: config.index,\n\t\t\t\tcolWidth: COL_WIDTH,\n\t\t\t\trowHeight: ROW_HEIGHT,\n\t\t\t\tsquareSize: HEATMAP_SQUARE_SIZE,\n\t\t\t\tradius: this.rawChartArgs.radius || 0,\n\t\t\t\txTranslate: s.domainConfigs\n\t\t\t\t\t.filter((config, j) => j < i)\n\t\t\t\t\t.map(config => config.cols.length - lessCol)\n\t\t\t\t\t.reduce((a, b) => a + b, 0)\n\t\t\t\t\t* COL_WIDTH\n\t\t\t},\n\t\t\tfunction() {\n\t\t\t\treturn s.domainConfigs[i];\n\t\t\t}.bind(this)\n\n\t\t]);\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map((args, i) => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0] + '-' + i, component];\n\t\t\t})\n\t\t);\n\n\t\tlet y = 0;\n\t\tDAY_NAMES_SHORT.forEach((dayName, i) => {\n\t\t\tif([1, 3, 5].includes(i)) {\n\t\t\t\tlet dayText = makeText('subdomain-name', -COL_WIDTH/2, y, dayName,\n\t\t\t\t\t{\n\t\t\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE,\n\t\t\t\t\t\tdy: 8,\n\t\t\t\t\t\ttextAnchor: 'end'\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tthis.drawArea.appendChild(dayText);\n\t\t\t}\n\t\t\ty += ROW_HEIGHT;\n\t\t});\n\t}\n\n\tupdate(data) {\n\t\tif(!data) {\n\t\t\tconsole.error('No data to update.');\n\t\t}\n\n\t\tthis.data = this.prepareData(data);\n\t\tthis.draw();\n\t\tthis.bindTooltip();\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tthis.components.forEach(comp => {\n\t\t\t\tlet daySquares = comp.store;\n\t\t\t\tlet daySquare = e.target;\n\t\t\t\tif(daySquares.includes(daySquare)) {\n\n\t\t\t\t\tlet count = daySquare.getAttribute('data-value');\n\t\t\t\t\tlet dateParts = daySquare.getAttribute('data-date').split('-');\n\n\t\t\t\t\tlet month = getMonthName(parseInt(dateParts[1])-1, true);\n\n\t\t\t\t\tlet gOff = this.container.getBoundingClientRect(), pOff = daySquare.getBoundingClientRect();\n\n\t\t\t\t\tlet width = parseInt(e.target.getAttribute('width'));\n\t\t\t\t\tlet x = pOff.left - gOff.left + width/2;\n\t\t\t\t\tlet y = pOff.top - gOff.top;\n\t\t\t\t\tlet value = count + ' ' + this.countLabel;\n\t\t\t\t\tlet name = ' on ' + month + ' ' + dateParts[0] + ', ' + dateParts[2];\n\n\t\t\t\t\tthis.tip.setValues(x, y, {name: name, value: value, valueFirst: 1}, []);\n\t\t\t\t\tthis.tip.showTip();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\trenderLegend() {\n\t\tthis.legendArea.textContent = '';\n\t\tlet x = 0;\n\t\tlet y = ROW_HEIGHT;\n\t\tlet radius = this.rawChartArgs.radius || 0;\n\n\t\tlet lessText = makeText('subdomain-name', x, y, 'Less',\n\t\t\t{\n\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE + 1,\n\t\t\t\tdy: 9\n\t\t\t}\n\t\t);\n\t\tx = (COL_WIDTH * 2) + COL_WIDTH/2;\n\t\tthis.legendArea.appendChild(lessText);\n\n\t\tthis.colors.slice(0, HEATMAP_DISTRIBUTION_SIZE).map((color, i) => {\n\t\t\tconst square = heatSquare('heatmap-legend-unit', x + (COL_WIDTH + 3) * i,\n\t\t\t\ty, HEATMAP_SQUARE_SIZE, radius, color);\n\t\t\tthis.legendArea.appendChild(square);\n\t\t});\n\n\t\tlet moreTextX = x + HEATMAP_DISTRIBUTION_SIZE * (COL_WIDTH + 3) + COL_WIDTH/4;\n\t\tlet moreText = makeText('subdomain-name', moreTextX, y, 'More',\n\t\t\t{\n\t\t\t\tfontSize: HEATMAP_SQUARE_SIZE + 1,\n\t\t\t\tdy: 9\n\t\t\t}\n\t\t);\n\t\tthis.legendArea.appendChild(moreText);\n\t}\n\n\tgetDomains() {\n\t\tlet s = this.state;\n\t\tconst [startMonth, startYear] = [s.start.getMonth(), s.start.getFullYear()];\n\t\tconst [endMonth, endYear] = [s.end.getMonth(), s.end.getFullYear()];\n\n\t\tconst noOfMonths = (endMonth - startMonth + 1) + (endYear - startYear) * 12;\n\n\t\tlet domainConfigs = [];\n\n\t\tlet startOfMonth = clone(s.start);\n\t\tfor(var i = 0; i < noOfMonths; i++) {\n\t\t\tlet endDate = s.end;\n\t\t\tif(!areInSameMonth(startOfMonth, s.end)) {\n\t\t\t\tlet [month, year] = [startOfMonth.getMonth(), startOfMonth.getFullYear()];\n\t\t\t\tendDate = getLastDateInMonth(month, year);\n\t\t\t}\n\t\t\tdomainConfigs.push(this.getDomainConfig(startOfMonth, endDate));\n\n\t\t\taddDays(endDate, 1);\n\t\t\tstartOfMonth = endDate;\n\t\t}\n\n\t\treturn domainConfigs;\n\t}\n\n\tgetDomainConfig(startDate, endDate='') {\n\t\tlet [month, year] = [startDate.getMonth(), startDate.getFullYear()];\n\t\tlet startOfWeek = setDayToSunday(startDate); // TODO: Monday as well\n\t\tendDate = clone(endDate) || getLastDateInMonth(month, year);\n\n\t\tlet domainConfig = {\n\t\t\tindex: month,\n\t\t\tcols: []\n\t\t};\n\n\t\taddDays(endDate, 1);\n\t\tlet noOfMonthWeeks = getWeeksBetween(startOfWeek, endDate);\n\n\t\tlet cols = [], col;\n\t\tfor(var i = 0; i < noOfMonthWeeks; i++) {\n\t\t\tcol = this.getCol(startOfWeek, month);\n\t\t\tcols.push(col);\n\n\t\t\tstartOfWeek = new Date(col[NO_OF_DAYS_IN_WEEK - 1].yyyyMmDd);\n\t\t\taddDays(startOfWeek, 1);\n\t\t}\n\n\t\tif(col[NO_OF_DAYS_IN_WEEK - 1].dataValue !== undefined) {\n\t\t\taddDays(startOfWeek, 1);\n\t\t\tcols.push(this.getCol(startOfWeek, month, true));\n\t\t}\n\n\t\tdomainConfig.cols = cols;\n\n\t\treturn domainConfig;\n\t}\n\n\tgetCol(startDate, month, empty = false) {\n\t\tlet s = this.state;\n\n\t\t// startDate is the start of week\n\t\tlet currentDate = clone(startDate);\n\t\tlet col = [];\n\n\t\tfor(var i = 0; i < NO_OF_DAYS_IN_WEEK; i++, addDays(currentDate, 1)) {\n\t\t\tlet config = {};\n\n\t\t\t// Non-generic adjustment for entire heatmap, needs state\n\t\t\tlet currentDateWithinData = currentDate >= s.start && currentDate <= s.end;\n\n\t\t\tif(empty || currentDate.getMonth() !== month || !currentDateWithinData) {\n\t\t\t\tconfig.yyyyMmDd = getYyyyMmDd(currentDate);\n\t\t\t} else {\n\t\t\t\tconfig = this.getSubDomainConfig(currentDate);\n\t\t\t}\n\t\t\tcol.push(config);\n\t\t}\n\n\t\treturn col;\n\t}\n\n\tgetSubDomainConfig(date) {\n\t\tlet yyyyMmDd = getYyyyMmDd(date);\n\t\tlet dataValue = this.data.dataPoints[yyyyMmDd];\n\t\tlet config = {\n\t\t\tyyyyMmDd: yyyyMmDd,\n\t\t\tdataValue: dataValue || 0,\n\t\t\tfill: this.colors[getMaxCheckpoint(dataValue, this.state.distribution)]\n\t\t};\n\t\treturn config;\n\t}\n}\n","import BaseChart from './BaseChart';\nimport { dataPrep, zeroDataPrep, getShortenedLabels } from '../utils/axis-chart-utils';\nimport { AXIS_LEGEND_BAR_SIZE } from '../utils/constants';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset, fire } from '../utils/dom';\nimport { calcChartIntervals, getIntervalSize, getValueRange, getZeroIndex, scale, getClosestInArray } from '../utils/intervals';\nimport { floatTwo } from '../utils/helpers';\nimport { makeOverlay, updateOverlay, legendBar } from '../utils/draw';\nimport { getTopOffset, getLeftOffset, MIN_BAR_PERCENT_HEIGHT, BAR_CHART_SPACE_RATIO,\n\tLINE_CHART_DOT_SIZE } from '../utils/constants';\n\nexport default class AxisChart extends BaseChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\n\t\tthis.barOptions = args.barOptions || {};\n\t\tthis.lineOptions = args.lineOptions || {};\n\n\t\tthis.type = args.type || 'line';\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tsetMeasures() {\n\t\tif(this.data.datasets.length <= 1) {\n\t\t\tthis.config.showLegend = 0;\n\t\t\tthis.measures.paddings.bottom = 30;\n\t\t}\n\t}\n\n\tconfigure(options) {\n\t\tsuper.configure(options);\n\n\t\toptions.axisOptions = options.axisOptions || {};\n\t\toptions.tooltipOptions = options.tooltipOptions || {};\n\n\t\tthis.config.xAxisMode = options.axisOptions.xAxisMode || 'span';\n\t\tthis.config.yAxisMode = options.axisOptions.yAxisMode || 'span';\n\t\tthis.config.xIsSeries = options.axisOptions.xIsSeries || 0;\n\t\tthis.config.shortenYAxisNumbers = options.axisOptions.shortenYAxisNumbers || 0;\n\n\t\tthis.config.formatTooltipX = options.tooltipOptions.formatTooltipX;\n\t\tthis.config.formatTooltipY = options.tooltipOptions.formatTooltipY;\n\n\t\tthis.config.valuesOverPoints = options.valuesOverPoints;\n\t}\n\n\tprepareData(data=this.data) {\n\t\treturn dataPrep(data, this.type);\n\t}\n\n\tprepareFirstData(data=this.data) {\n\t\treturn zeroDataPrep(data);\n\t}\n\n\tcalc(onlyWidthChange = false) {\n\t\tthis.calcXPositions();\n\t\tif(!onlyWidthChange) {\n\t\t\tthis.calcYAxisParameters(this.getAllYValues(), this.type === 'line');\n\t\t}\n\t\tthis.makeDataByIndex();\n\t}\n\n\tcalcXPositions() {\n\t\tlet s = this.state;\n\t\tlet labels = this.data.labels;\n\t\ts.datasetLength = labels.length;\n\n\t\ts.unitWidth = this.width/(s.datasetLength);\n\t\t// Default, as per bar, and mixed. Only line will be a special case\n\t\ts.xOffset = s.unitWidth/2;\n\n\t\t// // For a pure Line Chart\n\t\t// s.unitWidth = this.width/(s.datasetLength - 1);\n\t\t// s.xOffset = 0;\n\n\t\ts.xAxis = {\n\t\t\tlabels: labels,\n\t\t\tpositions: labels.map((d, i) =>\n\t\t\t\tfloatTwo(s.xOffset + i * s.unitWidth)\n\t\t\t)\n\t\t};\n\t}\n\n\tcalcYAxisParameters(dataValues, withMinimum = 'false') {\n\t\tconst yPts = calcChartIntervals(dataValues, withMinimum);\n\t\tconst scaleMultiplier = this.height / getValueRange(yPts);\n\t\tconst intervalHeight = getIntervalSize(yPts) * scaleMultiplier;\n\t\tconst zeroLine = this.height - (getZeroIndex(yPts) * intervalHeight);\n\n\t\tthis.state.yAxis = {\n\t\t\tlabels: yPts,\n\t\t\tpositions: yPts.map(d => zeroLine - d * scaleMultiplier),\n\t\t\tscaleMultiplier: scaleMultiplier,\n\t\t\tzeroLine: zeroLine,\n\t\t};\n\n\t\t// Dependent if above changes\n\t\tthis.calcDatasetPoints();\n\t\tthis.calcYExtremes();\n\t\tthis.calcYRegions();\n\t}\n\n\tcalcDatasetPoints() {\n\t\tlet s = this.state;\n\t\tlet scaleAll = values => values.map(val => scale(val, s.yAxis));\n\n\t\ts.datasets = this.data.datasets.map((d, i) => {\n\t\t\tlet values = d.values;\n\t\t\tlet cumulativeYs = d.cumulativeYs || [];\n\t\t\treturn {\n\t\t\t\tname: d.name && d.name.replace(/<|>|&/g, (char) => char == '&' ? '&' : char == '<' ? '<' : '>'),\n\t\t\t\tindex: i,\n\t\t\t\tchartType: d.chartType,\n\n\t\t\t\tvalues: values,\n\t\t\t\tyPositions: scaleAll(values),\n\n\t\t\t\tcumulativeYs: cumulativeYs,\n\t\t\t\tcumulativeYPos: scaleAll(cumulativeYs),\n\t\t\t};\n\t\t});\n\t}\n\n\tcalcYExtremes() {\n\t\tlet s = this.state;\n\t\tif(this.barOptions.stacked) {\n\t\t\ts.yExtremes = s.datasets[s.datasets.length - 1].cumulativeYPos;\n\t\t\treturn;\n\t\t}\n\t\ts.yExtremes = new Array(s.datasetLength).fill(9999);\n\t\ts.datasets.map(d => {\n\t\t\td.yPositions.map((pos, j) => {\n\t\t\t\tif(pos < s.yExtremes[j]) {\n\t\t\t\t\ts.yExtremes[j] = pos;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tcalcYRegions() {\n\t\tlet s = this.state;\n\t\tif(this.data.yMarkers) {\n\t\t\tthis.state.yMarkers = this.data.yMarkers.map(d => {\n\t\t\t\td.position = scale(d.value, s.yAxis);\n\t\t\t\tif(!d.options) d.options = {};\n\t\t\t\t// if(!d.label.includes(':')) {\n\t\t\t\t// \td.label += ': ' + d.value;\n\t\t\t\t// }\n\t\t\t\treturn d;\n\t\t\t});\n\t\t}\n\t\tif(this.data.yRegions) {\n\t\t\tthis.state.yRegions = this.data.yRegions.map(d => {\n\t\t\t\td.startPos = scale(d.start, s.yAxis);\n\t\t\t\td.endPos = scale(d.end, s.yAxis);\n\t\t\t\tif(!d.options) d.options = {};\n\t\t\t\treturn d;\n\t\t\t});\n\t\t}\n\t}\n\n\tgetAllYValues() {\n\t\tlet key = 'values';\n\n\t\tif(this.barOptions.stacked) {\n\t\t\tkey = 'cumulativeYs';\n\t\t\tlet cumulative = new Array(this.state.datasetLength).fill(0);\n\t\t\tthis.data.datasets.map((d, i) => {\n\t\t\t\tlet values = this.data.datasets[i].values;\n\t\t\t\td[key] = cumulative = cumulative.map((c, i) => c + values[i]);\n\t\t\t});\n\t\t}\n\n\t\tlet allValueLists = this.data.datasets.map(d => d[key]);\n\t\tif(this.data.yMarkers) {\n\t\t\tallValueLists.push(this.data.yMarkers.map(d => d.value));\n\t\t}\n\t\tif(this.data.yRegions) {\n\t\t\tthis.data.yRegions.map(d => {\n\t\t\t\tallValueLists.push([d.end, d.start]);\n\t\t\t});\n\t\t}\n\n\t\treturn [].concat(...allValueLists);\n\t}\n\n\tsetupComponents() {\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'yAxis',\n\t\t\t\t{\n\t\t\t\t\tmode: this.config.yAxisMode,\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tshortenNumbers: this.config.shortenYAxisNumbers\n\t\t\t\t\t// pos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yAxis;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\n\t\t\t[\n\t\t\t\t'xAxis',\n\t\t\t\t{\n\t\t\t\t\tmode: this.config.xAxisMode,\n\t\t\t\t\theight: this.height,\n\t\t\t\t\t// pos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\ts.xAxis.calcLabels = getShortenedLabels(this.width,\n\t\t\t\t\t\ts.xAxis.labels, this.config.xIsSeries);\n\n\t\t\t\t\treturn s.xAxis;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\n\t\t\t[\n\t\t\t\t'yRegions',\n\t\t\t\t{\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tpos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yRegions;\n\t\t\t\t}.bind(this)\n\t\t\t],\n\t\t];\n\n\t\tlet barDatasets = this.state.datasets.filter(d => d.chartType === 'bar');\n\t\tlet lineDatasets = this.state.datasets.filter(d => d.chartType === 'line');\n\n\t\tlet barsConfigs = barDatasets.map(d => {\n\t\t\tlet index = d.index;\n\t\t\treturn [\n\t\t\t\t'barGraph' + '-' + d.index,\n\t\t\t\t{\n\t\t\t\t\tindex: index,\n\t\t\t\t\tcolor: this.colors[index],\n\t\t\t\t\tstacked: this.barOptions.stacked,\n\n\t\t\t\t\t// same for all datasets\n\t\t\t\t\tvaluesOverPoints: this.config.valuesOverPoints,\n\t\t\t\t\tminHeight: this.height * MIN_BAR_PERCENT_HEIGHT,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\tlet d = s.datasets[index];\n\t\t\t\t\tlet stacked = this.barOptions.stacked;\n\n\t\t\t\t\tlet spaceRatio = this.barOptions.spaceRatio || BAR_CHART_SPACE_RATIO;\n\t\t\t\t\tlet barsWidth = s.unitWidth * (1 - spaceRatio);\n\t\t\t\t\tlet barWidth = barsWidth/(stacked ? 1 : barDatasets.length);\n\n\t\t\t\t\tlet xPositions = s.xAxis.positions.map(x => x - barsWidth/2);\n\t\t\t\t\tif(!stacked) {\n\t\t\t\t\t\txPositions = xPositions.map(p => p + barWidth * index);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet labels = new Array(s.datasetLength).fill('');\n\t\t\t\t\tif(this.config.valuesOverPoints) {\n\t\t\t\t\t\tif(stacked && d.index === s.datasets.length - 1) {\n\t\t\t\t\t\t\tlabels = d.cumulativeYs;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlabels = d.values;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet offsets = new Array(s.datasetLength).fill(0);\n\t\t\t\t\tif(stacked) {\n\t\t\t\t\t\toffsets = d.yPositions.map((y, j) => y - d.cumulativeYPos[j]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: xPositions,\n\t\t\t\t\t\tyPositions: d.yPositions,\n\t\t\t\t\t\toffsets: offsets,\n\t\t\t\t\t\t// values: d.values,\n\t\t\t\t\t\tlabels: labels,\n\n\t\t\t\t\t\tzeroLine: s.yAxis.zeroLine,\n\t\t\t\t\t\tbarsWidth: barsWidth,\n\t\t\t\t\t\tbarWidth: barWidth,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t];\n\t\t});\n\n\t\tlet lineConfigs = lineDatasets.map(d => {\n\t\t\tlet index = d.index;\n\t\t\treturn [\n\t\t\t\t'lineGraph' + '-' + d.index,\n\t\t\t\t{\n\t\t\t\t\tindex: index,\n\t\t\t\t\tcolor: this.colors[index],\n\t\t\t\t\tsvgDefs: this.svgDefs,\n\t\t\t\t\theatline: this.lineOptions.heatline,\n\t\t\t\t\tregionFill: this.lineOptions.regionFill,\n\t\t\t\t\tspline: this.lineOptions.spline,\n\t\t\t\t\thideDots: this.lineOptions.hideDots,\n\t\t\t\t\thideLine: this.lineOptions.hideLine,\n\n\t\t\t\t\t// same for all datasets\n\t\t\t\t\tvaluesOverPoints: this.config.valuesOverPoints,\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tlet s = this.state;\n\t\t\t\t\tlet d = s.datasets[index];\n\t\t\t\t\tlet minLine = s.yAxis.positions[0] < s.yAxis.zeroLine\n\t\t\t\t\t\t? s.yAxis.positions[0] : s.yAxis.zeroLine;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\txPositions: s.xAxis.positions,\n\t\t\t\t\t\tyPositions: d.yPositions,\n\n\t\t\t\t\t\tvalues: d.values,\n\n\t\t\t\t\t\tzeroLine: minLine,\n\t\t\t\t\t\tradius: this.lineOptions.dotSize || LINE_CHART_DOT_SIZE,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t];\n\t\t});\n\n\t\tlet markerConfigs = [\n\t\t\t[\n\t\t\t\t'yMarkers',\n\t\t\t\t{\n\t\t\t\t\twidth: this.width,\n\t\t\t\t\tpos: 'right'\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\treturn this.state.yMarkers;\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tcomponentConfigs = componentConfigs.concat(barsConfigs, lineConfigs, markerConfigs);\n\n\t\tlet optionals = ['yMarkers', 'yRegions'];\n\t\tthis.dataUnitComponents = [];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.filter(args => !optionals.includes(args[0]) || this.state[args[0]])\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\tif(args[0].includes('lineGraph') || args[0].includes('barGraph')) {\n\t\t\t\t\tthis.dataUnitComponents.push(component);\n\t\t\t\t}\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tmakeDataByIndex() {\n\t\tthis.dataByIndex = {};\n\n\t\tlet s = this.state;\n\t\tlet formatX = this.config.formatTooltipX;\n\t\tlet formatY = this.config.formatTooltipY;\n\t\tlet titles = s.xAxis.labels;\n\n\t\ttitles.map((label, index) => {\n\t\t\tlet values = this.state.datasets.map((set, i) => {\n\t\t\t\tlet value = set.values[index];\n\t\t\t\treturn {\n\t\t\t\t\ttitle: set.name,\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tyPos: set.yPositions[index],\n\t\t\t\t\tcolor: this.colors[i],\n\t\t\t\t\tformatted: formatY ? formatY(value) : value,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tthis.dataByIndex[index] = {\n\t\t\t\tlabel: label,\n\t\t\t\tformattedLabel: formatX ? formatX(label) : label,\n\t\t\t\txPos: s.xAxis.positions[index],\n\t\t\t\tvalues: values,\n\t\t\t\tyExtreme: s.yExtremes[index],\n\t\t\t};\n\t\t});\n\t}\n\n\tbindTooltip() {\n\t\t// NOTE: could be in tooltip itself, as it is a given functionality for its parent\n\t\tthis.container.addEventListener('mousemove', (e) => {\n\t\t\tlet m = this.measures;\n\t\t\tlet o = getOffset(this.container);\n\t\t\tlet relX = e.pageX - o.left - getLeftOffset(m);\n\t\t\tlet relY = e.pageY - o.top;\n\n\t\t\tif(relY < this.height + getTopOffset(m)\n\t\t\t\t&& relY > getTopOffset(m)) {\n\t\t\t\tthis.mapTooltipXPosition(relX);\n\t\t\t} else {\n\t\t\t\tthis.tip.hideTip();\n\t\t\t}\n\t\t});\n\t}\n\n\tmapTooltipXPosition(relX) {\n\t\tlet s = this.state;\n\t\tif(!s.yExtremes) return;\n\n\t\tlet index = getClosestInArray(relX, s.xAxis.positions, true);\n\t\tif (index >= 0) {\n\t\t\tlet dbi = this.dataByIndex[index];\n\n\t\t\tthis.tip.setValues(\n\t\t\t\tdbi.xPos + this.tip.offset.x,\n\t\t\t\tdbi.yExtreme + this.tip.offset.y,\n\t\t\t\t{name: dbi.formattedLabel, value: ''},\n\t\t\t\tdbi.values,\n\t\t\t\tindex\n\t\t\t);\n\n\t\t\tthis.tip.showTip();\n\t\t}\n\t}\n\n\trenderLegend() {\n\t\tlet s = this.data;\n\t\tif(s.datasets.length > 1) {\n\t\t\tthis.legendArea.textContent = '';\n\t\t\ts.datasets.map((d, i) => {\n\t\t\t\tlet barWidth = AXIS_LEGEND_BAR_SIZE;\n\t\t\t\t// let rightEndPoint = this.baseWidth - this.measures.margins.left - this.measures.margins.right;\n\t\t\t\t// let multiplier = s.datasets.length - i;\n\t\t\t\tlet rect = legendBar(\n\t\t\t\t\t// rightEndPoint - multiplier * barWidth,\t// To right align\n\t\t\t\t\tbarWidth * i,\n\t\t\t\t\t'0',\n\t\t\t\t\tbarWidth,\n\t\t\t\t\tthis.colors[i],\n\t\t\t\t\td.name,\n\t\t\t\t\tthis.config.truncateLegends);\n\t\t\t\tthis.legendArea.appendChild(rect);\n\t\t\t});\n\t\t}\n\t}\n\n\n\n\t// Overlay\n\tmakeOverlay() {\n\t\tif(this.init) {\n\t\t\tthis.init = 0;\n\t\t\treturn;\n\t\t}\n\t\tif(this.overlayGuides) {\n\t\t\tthis.overlayGuides.forEach(g => {\n\t\t\t\tlet o = g.overlay;\n\t\t\t\to.parentNode.removeChild(o);\n\t\t\t});\n\t\t}\n\n\t\tthis.overlayGuides = this.dataUnitComponents.map(c => {\n\t\t\treturn {\n\t\t\t\ttype: c.unitType,\n\t\t\t\toverlay: undefined,\n\t\t\t\tunits: c.units,\n\t\t\t};\n\t\t});\n\n\t\tif(this.state.currentIndex === undefined) {\n\t\t\tthis.state.currentIndex = this.state.datasetLength - 1;\n\t\t}\n\n\t\t// Render overlays\n\t\tthis.overlayGuides.map(d => {\n\t\t\tlet currentUnit = d.units[this.state.currentIndex];\n\n\t\t\td.overlay = makeOverlay[d.type](currentUnit);\n\t\t\tthis.drawArea.appendChild(d.overlay);\n\t\t});\n\t}\n\n\tupdateOverlayGuides() {\n\t\tif(this.overlayGuides) {\n\t\t\tthis.overlayGuides.forEach(g => {\n\t\t\t\tlet o = g.overlay;\n\t\t\t\to.parentNode.removeChild(o);\n\t\t\t});\n\t\t}\n\t}\n\n\tbindOverlay() {\n\t\tthis.parent.addEventListener('data-select', () => {\n\t\t\tthis.updateOverlay();\n\t\t});\n\t}\n\n\tbindUnits() {\n\t\tthis.dataUnitComponents.map(c => {\n\t\t\tc.units.map(unit => {\n\t\t\t\tunit.addEventListener('click', () => {\n\t\t\t\t\tlet index = unit.getAttribute('data-point-index');\n\t\t\t\t\tthis.setCurrentDataPoint(index);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\t// Note: Doesn't work as tooltip is absolutely positioned\n\t\tthis.tip.container.addEventListener('click', () => {\n\t\t\tlet index = this.tip.container.getAttribute('data-point-index');\n\t\t\tthis.setCurrentDataPoint(index);\n\t\t});\n\t}\n\n\tupdateOverlay() {\n\t\tthis.overlayGuides.map(d => {\n\t\t\tlet currentUnit = d.units[this.state.currentIndex];\n\t\t\tupdateOverlay[d.type](currentUnit, d.overlay);\n\t\t});\n\t}\n\n\tonLeftArrow() {\n\t\tthis.setCurrentDataPoint(this.state.currentIndex - 1);\n\t}\n\n\tonRightArrow() {\n\t\tthis.setCurrentDataPoint(this.state.currentIndex + 1);\n\t}\n\n\tgetDataPoint(index=this.state.currentIndex) {\n\t\tlet s = this.state;\n\t\tlet data_point = {\n\t\t\tindex: index,\n\t\t\tlabel: s.xAxis.labels[index],\n\t\t\tvalues: s.datasets.map(d => d.values[index])\n\t\t};\n\t\treturn data_point;\n\t}\n\n\tsetCurrentDataPoint(index) {\n\t\tlet s = this.state;\n\t\tindex = parseInt(index);\n\t\tif(index < 0) index = 0;\n\t\tif(index >= s.xAxis.labels.length) index = s.xAxis.labels.length - 1;\n\t\tif(index === s.currentIndex) return;\n\t\ts.currentIndex = index;\n\t\tfire(this.parent, \"data-select\", this.getDataPoint());\n\t}\n\n\n\n\t// API\n\taddDataPoint(label, datasetValues, index=this.state.datasetLength) {\n\t\tsuper.addDataPoint(label, datasetValues, index);\n\t\tthis.data.labels.splice(index, 0, label);\n\t\tthis.data.datasets.map((d, i) => {\n\t\t\td.values.splice(index, 0, datasetValues[i]);\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\tremoveDataPoint(index = this.state.datasetLength-1) {\n\t\tif (this.data.labels.length <= 1) {\n\t\t\treturn;\n\t\t}\n\t\tsuper.removeDataPoint(index);\n\t\tthis.data.labels.splice(index, 1);\n\t\tthis.data.datasets.map(d => {\n\t\t\td.values.splice(index, 1);\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\tupdateDataset(datasetValues, index=0) {\n\t\tthis.data.datasets[index].values = datasetValues;\n\t\tthis.update(this.data);\n\t}\n\t// addDataset(dataset, index) {}\n\t// removeDataset(index = 0) {}\n\n\tupdateDatasets(datasets) {\n\t\tthis.data.datasets.map((d, i) => {\n\t\t\tif(datasets[i]) {\n\t\t\t\td.values = datasets[i];\n\t\t\t}\n\t\t});\n\t\tthis.update(this.data);\n\t}\n\n\t// updateDataPoint(dataPoint, index = 0) {}\n\t// addDataPoint(dataPoint, index = 0) {}\n\t// removeDataPoint(index = 0) {}\n}\n","import AggregationChart from './AggregationChart';\nimport { getComponent } from '../objects/ChartComponents';\nimport { getOffset } from '../utils/dom';\nimport { getPositionByAngle } from '../utils/helpers';\nimport { makeArcStrokePathStr, makeStrokeCircleStr } from '../utils/draw';\nimport { lightenDarkenColor } from '../utils/colors';\nimport { transform } from '../utils/animation';\nimport { FULL_ANGLE } from '../utils/constants';\n\nexport default class DonutChart extends AggregationChart {\n\tconstructor(parent, args) {\n\t\tsuper(parent, args);\n\t\tthis.type = 'donut';\n\t\tthis.initTimeout = 0;\n\t\tthis.init = 1;\n\n\t\tthis.setup();\n\t}\n\n\tconfigure(args) {\n\t\tsuper.configure(args);\n\t\tthis.mouseMove = this.mouseMove.bind(this);\n\t\tthis.mouseLeave = this.mouseLeave.bind(this);\n\n\t\tthis.hoverRadio = args.hoverRadio || 0.1;\n\t\tthis.config.startAngle = args.startAngle || 0;\n\n\t\tthis.clockWise = args.clockWise || false;\n\t\tthis.strokeWidth = args.strokeWidth || 30;\n\t}\n\n\tcalc() {\n\t\tsuper.calc();\n\t\tlet s = this.state;\n\t\tthis.radius =\n\t\t\tthis.height > this.width\n\t\t\t\t? this.center.x - this.strokeWidth / 2\n\t\t\t\t: this.center.y - this.strokeWidth / 2;\n\n\t\tconst { radius, clockWise } = this;\n\n\t\tconst prevSlicesProperties = s.slicesProperties || [];\n\t\ts.sliceStrings = [];\n\t\ts.slicesProperties = [];\n\t\tlet curAngle = 180 - this.config.startAngle;\n\n\t\ts.sliceTotals.map((total, i) => {\n\t\t\tconst startAngle = curAngle;\n\t\t\tconst originDiffAngle = (total / s.grandTotal) * FULL_ANGLE;\n\t\t\tconst largeArc = originDiffAngle > 180 ? 1: 0;\n\t\t\tconst diffAngle = clockWise ? -originDiffAngle : originDiffAngle;\n\t\t\tconst endAngle = curAngle = curAngle + diffAngle;\n\t\t\tconst startPosition = getPositionByAngle(startAngle, radius);\n\t\t\tconst endPosition = getPositionByAngle(endAngle, radius);\n\n\t\t\tconst prevProperty = this.init && prevSlicesProperties[i];\n\n\t\t\tlet curStart,curEnd;\n\t\t\tif(this.init) {\n\t\t\t\tcurStart = prevProperty ? prevProperty.startPosition : startPosition;\n\t\t\t\tcurEnd = prevProperty ? prevProperty.endPosition : startPosition;\n\t\t\t} else {\n\t\t\t\tcurStart = startPosition;\n\t\t\t\tcurEnd = endPosition;\n\t\t\t}\n\t\t\tconst curPath =\n\t\t\t\toriginDiffAngle === 360\n\t\t\t\t\t? makeStrokeCircleStr(curStart, curEnd, this.center, this.radius, this.clockWise, largeArc)\n\t\t\t\t\t: makeArcStrokePathStr(curStart, curEnd, this.center, this.radius, this.clockWise, largeArc);\n\n\t\t\ts.sliceStrings.push(curPath);\n\t\t\ts.slicesProperties.push({\n\t\t\t\tstartPosition,\n\t\t\t\tendPosition,\n\t\t\t\tvalue: total,\n\t\t\t\ttotal: s.grandTotal,\n\t\t\t\tstartAngle,\n\t\t\t\tendAngle,\n\t\t\t\tangle: diffAngle\n\t\t\t});\n\n\t\t});\n\t\tthis.init = 0;\n\t}\n\n\tsetupComponents() {\n\t\tlet s = this.state;\n\n\t\tlet componentConfigs = [\n\t\t\t[\n\t\t\t\t'donutSlices',\n\t\t\t\t{ },\n\t\t\t\tfunction() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsliceStrings: s.sliceStrings,\n\t\t\t\t\t\tcolors: this.colors,\n\t\t\t\t\t\tstrokeWidth: this.strokeWidth,\n\t\t\t\t\t};\n\t\t\t\t}.bind(this)\n\t\t\t]\n\t\t];\n\n\t\tthis.components = new Map(componentConfigs\n\t\t\t.map(args => {\n\t\t\t\tlet component = getComponent(...args);\n\t\t\t\treturn [args[0], component];\n\t\t\t}));\n\t}\n\n\tcalTranslateByAngle(property){\n\t\tconst{ radius, hoverRadio } = this;\n\t\tconst position = getPositionByAngle(property.startAngle+(property.angle / 2),radius);\n\t\treturn `translate3d(${(position.x) * hoverRadio}px,${(position.y) * hoverRadio}px,0)`;\n\t}\n\n\thoverSlice(path,i,flag,e){\n\t\tif(!path) return;\n\t\tconst color = this.colors[i];\n\t\tif(flag) {\n\t\t\ttransform(path, this.calTranslateByAngle(this.state.slicesProperties[i]));\n\t\t\tpath.style.stroke = lightenDarkenColor(color, 50);\n\t\t\tlet g_off = getOffset(this.svg);\n\t\t\tlet x = e.pageX - g_off.left + 10;\n\t\t\tlet y = e.pageY - g_off.top - 10;\n\t\t\tlet title = (this.formatted_labels && this.formatted_labels.length > 0\n\t\t\t\t? this.formatted_labels[i] : this.state.labels[i]) + ': ';\n\t\t\tlet percent = (this.state.sliceTotals[i] * 100 / this.state.grandTotal).toFixed(1);\n\t\t\tthis.tip.setValues(x, y, {name: title, value: percent + \"%\"});\n\t\t\tthis.tip.showTip();\n\t\t} else {\n\t\t\ttransform(path,'translate3d(0,0,0)');\n\t\t\tthis.tip.hideTip();\n\t\t\tpath.style.stroke = color;\n\t\t}\n\t}\n\n\tbindTooltip() {\n\t\tthis.container.addEventListener('mousemove', this.mouseMove);\n\t\tthis.container.addEventListener('mouseleave', this.mouseLeave);\n\t}\n\n\tmouseMove(e){\n\t\tconst target = e.target;\n\t\tlet slices = this.components.get('donutSlices').store;\n\t\tlet prevIndex = this.curActiveSliceIndex;\n\t\tlet prevAcitve = this.curActiveSlice;\n\t\tif(slices.includes(target)) {\n\t\t\tlet i = slices.indexOf(target);\n\t\t\tthis.hoverSlice(prevAcitve, prevIndex,false);\n\t\t\tthis.curActiveSlice = target;\n\t\t\tthis.curActiveSliceIndex = i;\n\t\t\tthis.hoverSlice(target, i, true, e);\n\t\t} else {\n\t\t\tthis.mouseLeave();\n\t\t}\n\t}\n\n\tmouseLeave(){\n\t\tthis.hoverSlice(this.curActiveSlice,this.curActiveSliceIndex,false);\n\t}\n}\n","import '../css/charts.scss';\n\n// import MultiAxisChart from './charts/MultiAxisChart';\nimport PercentageChart from './charts/PercentageChart';\nimport PieChart from './charts/PieChart';\nimport Heatmap from './charts/Heatmap';\nimport AxisChart from './charts/AxisChart';\nimport DonutChart from './charts/DonutChart';\n\nconst chartTypes = {\n\tbar: AxisChart,\n\tline: AxisChart,\n\t// multiaxis: MultiAxisChart,\n\tpercentage: PercentageChart,\n\theatmap: Heatmap,\n\tpie: PieChart,\n\tdonut: DonutChart,\n};\n\nfunction getChartByType(chartType = 'line', parent, options) {\n\tif (chartType === 'axis-mixed') {\n\t\toptions.type = 'line';\n\t\treturn new AxisChart(parent, options);\n\t}\n\n\tif (!chartTypes[chartType]) {\n\t\tconsole.error(\"Undefined chart type: \" + chartType);\n\t\treturn;\n\t}\n\n\treturn new chartTypes[chartType](parent, options);\n}\n\nclass Chart {\n\tconstructor(parent, options) {\n\t\treturn getChartByType(options.type, parent, options);\n\t}\n}\n\nexport { Chart, PercentageChart, PieChart, Heatmap, AxisChart };","import * as Charts from './chart';\n\nlet frappe = { };\n\nfrappe.NAME = 'Frappe Charts';\nfrappe.VERSION = '1.6.2';\n\nfrappe = Object.assign({ }, frappe, Charts);\n\nexport default frappe;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/DashboardPage');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/DashboardWidget');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LoadingIndicator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Link');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/abbreviateNumber');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport DashboardWidget from 'flarum/admin/components/DashboardWidget';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Link from 'flarum/common/components/Link';\nimport abbreviateNumber from 'flarum/common/utils/abbreviateNumber';\nexport default class MiniStatisticsWidget extends DashboardWidget {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"entities\", ['users', 'discussions', 'posts']);\n _defineProperty(this, \"lifetimeData\", void 0);\n _defineProperty(this, \"loadingLifetime\", true);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.loadLifetimeData();\n }\n async loadLifetimeData() {\n this.loadingLifetime = true;\n m.redraw();\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'lifetime'\n }\n });\n this.lifetimeData = data;\n this.loadingLifetime = false;\n m.redraw();\n }\n className() {\n return 'StatisticsWidget StatisticsWidget--mini';\n }\n content() {\n return m(\"div\", {\n className: \"StatisticsWidget-table\"\n }, m(\"h4\", {\n className: \"StatisticsWidget-title\"\n }, app.translator.trans('flarum-statistics.admin.statistics.mini_heading')), m(\"div\", {\n className: \"StatisticsWidget-entities\"\n }, m(\"div\", {\n className: \"StatisticsWidget-labels\"\n }, m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, app.translator.trans('flarum-statistics.admin.statistics.total_label'))), this.entities.map(entity => {\n const totalCount = this.loadingLifetime ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getTotalCount(entity);\n return m(\"div\", {\n className: \"StatisticsWidget-entity\"\n }, m(\"h3\", {\n className: \"StatisticsWidget-heading\"\n }, app.translator.trans('flarum-statistics.admin.statistics.' + entity + '_heading')), m(\"div\", {\n className: \"StatisticsWidget-total\",\n title: totalCount\n }, this.loadingLifetime ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(totalCount)));\n })), m(\"div\", {\n className: \"StatisticsWidget-viewFull\"\n }, m(Link, {\n href: app.route('extension', {\n id: 'flarum-statistics'\n })\n }, app.translator.trans('flarum-statistics.admin.statistics.view_full'))));\n }\n getTotalCount(entity) {\n return this.lifetimeData[entity];\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/MiniStatisticsWidget', MiniStatisticsWidget);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/SelectDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Button');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/extractText');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Placeholder');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Icon');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/classList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/generateElementId');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormModal');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport generateElementId from 'flarum/common/utils/generateElementId';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Button from 'flarum/common/components/Button';\nimport dayjs from 'dayjs';\nimport dayjsUtc from 'dayjs/plugin/utc';\ndayjs.extend(dayjsUtc);\nexport default class StatisticsWidgetDateSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n /* @ts-expect-error core typings don't allow us to set the type of the state attr :( */\n _defineProperty(this, \"state\", {\n inputs: {\n startDateVal: dayjs().format('YYYY-MM-DD'),\n endDateVal: dayjs().format('YYYY-MM-DD')\n },\n ids: {\n startDate: generateElementId(),\n endDate: generateElementId()\n }\n });\n }\n oninit(vnode) {\n super.oninit(vnode);\n if (this.attrs.value) {\n this.state.inputs = {\n startDateVal: dayjs.utc(this.attrs.value.start * 1000).format('YYYY-MM-DD'),\n endDateVal: dayjs.utc(this.attrs.value.end * 1000).format('YYYY-MM-DD')\n };\n }\n }\n className() {\n return 'StatisticsWidgetDateSelectionModal Modal--small';\n }\n title() {\n return app.translator.trans('flarum-statistics.admin.date_selection_modal.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, this.items().toArray());\n }\n items() {\n const items = new ItemList();\n items.add('intro', m(\"p\", null, app.translator.trans('flarum-statistics.admin.date_selection_modal.description')), 100);\n items.add('date_start', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", {\n htmlFor: this.state.ids.startDate\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.start_date')), m(\"input\", {\n type: \"date\",\n id: this.state.ids.startDate,\n value: this.state.inputs.startDateVal,\n onchange: this.updateState('startDateVal'),\n className: \"FormControl\"\n })), 90);\n items.add('date_end', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", {\n htmlFor: this.state.ids.endDate\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.end_date')), m(\"input\", {\n type: \"date\",\n id: this.state.ids.endDate,\n value: this.state.inputs.endDateVal,\n onchange: this.updateState('endDateVal'),\n className: \"FormControl\"\n })), 80);\n items.add('submit', m(Button, {\n className: \"Button Button--primary\",\n type: \"submit\"\n }, app.translator.trans('flarum-statistics.admin.date_selection_modal.submit_button')), 0);\n return items;\n }\n updateState(field) {\n return e => {\n this.state.inputs[field] = e.currentTarget.value;\n };\n }\n submitData() {\n // We force 'zulu' time (UTC)\n return {\n start: Math.floor(+dayjs.utc(this.state.inputs.startDateVal + 'Z') / 1000),\n // Ensures that the end date is the end of the day\n end: Math.floor(+dayjs.utc(this.state.inputs.endDateVal + 'Z').hour(23).minute(59).second(59).millisecond(999) / 1000)\n };\n }\n onsubmit(e) {\n e.preventDefault();\n const data = this.submitData();\n if (data.end < data.start) {\n this.alertAttrs = {\n type: 'error',\n controls: app.translator.trans('flarum-statistics.admin.date_selection_modal.errors.end_before_start')\n };\n return;\n }\n this.attrs.onModalSubmit(data);\n this.hide();\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsWidgetDateSelectionModal', StatisticsWidgetDateSelectionModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport SelectDropdown from 'flarum/common/components/SelectDropdown';\nimport Button from 'flarum/common/components/Button';\nimport abbreviateNumber from 'flarum/common/utils/abbreviateNumber';\nimport extractText from 'flarum/common/utils/extractText';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport Placeholder from 'flarum/common/components/Placeholder';\nimport Icon from 'flarum/common/components/Icon';\nimport classList from 'flarum/common/utils/classList';\nimport DashboardWidget from 'flarum/admin/components/DashboardWidget';\nimport StatisticsWidgetDateSelectionModal from './StatisticsWidgetDateSelectionModal';\nimport dayjs from 'dayjs';\nimport dayjsUtc from 'dayjs/plugin/utc';\nimport dayjsLocalizedFormat from 'dayjs/plugin/localizedFormat';\n// @ts-expect-error No typings available\nimport { Chart } from 'frappe-charts';\ndayjs.extend(dayjsUtc);\ndayjs.extend(dayjsLocalizedFormat);\nexport default class StatisticsWidget extends DashboardWidget {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"entities\", ['users', 'discussions', 'posts']);\n _defineProperty(this, \"periods\", void 0);\n _defineProperty(this, \"chart\", void 0);\n _defineProperty(this, \"customPeriod\", null);\n _defineProperty(this, \"timedData\", {});\n _defineProperty(this, \"lifetimeData\", void 0);\n _defineProperty(this, \"customPeriodData\", {});\n _defineProperty(this, \"noData\", false);\n _defineProperty(this, \"loadingLifetime\", true);\n _defineProperty(this, \"loadingTimed\", this.entities.reduce((acc, curr) => {\n acc[curr] = 'unloaded';\n return acc;\n }, {}));\n _defineProperty(this, \"loadingCustom\", this.entities.reduce((acc, curr) => {\n acc[curr] = 'unloaded';\n return acc;\n }, {}));\n _defineProperty(this, \"selectedEntity\", 'users');\n _defineProperty(this, \"selectedPeriod\", void 0);\n _defineProperty(this, \"chartEntity\", void 0);\n _defineProperty(this, \"chartPeriod\", void 0);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.loadLifetimeData();\n }\n async loadLifetimeData() {\n this.loadingLifetime = true;\n m.redraw();\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'lifetime'\n }\n });\n this.lifetimeData = data;\n this.loadingLifetime = false;\n m.redraw();\n }\n async loadTimedData(model) {\n this.loadingTimed[model] = 'loading';\n m.redraw();\n try {\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'timed',\n model\n }\n });\n this.timedData[model] = data;\n this.loadingTimed[model] = 'loaded';\n\n // Create a Date object which represents the start of the day.\n let todayDate = new Date();\n todayDate.setUTCHours(0, 0, 0, 0);\n const today = todayDate.getTime() / 1000;\n this.periods = {\n today: {\n start: today,\n end: today + 86400,\n step: 3600\n },\n last_7_days: {\n start: today - 86400 * 7,\n end: today,\n step: 86400\n },\n previous_7_days: {\n start: today - 86400 * 14,\n end: today - 86400 * 7,\n step: 86400\n },\n last_28_days: {\n start: today - 86400 * 28,\n end: today,\n step: 86400\n },\n previous_28_days: {\n start: today - 86400 * 28 * 2,\n end: today - 86400 * 28,\n step: 86400\n },\n last_12_months: {\n start: today - 86400 * 364,\n end: today,\n step: 86400 * 7\n }\n };\n this.selectedPeriod = 'last_7_days';\n } catch (e) {\n console.error(e);\n this.loadingTimed[model] = 'fail';\n }\n m.redraw();\n }\n async loadCustomRangeData(model) {\n this.loadingCustom[model] = 'loading';\n m.redraw();\n\n // We clone so we can check that the same period is still selected\n // once the HTTP request is complete and the data is to be displayed\n const range = {\n ...this.customPeriod\n };\n try {\n const data = await app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/statistics',\n params: {\n period: 'custom',\n model,\n dateRange: {\n start: range.start,\n end: range.end\n }\n }\n });\n if (JSON.stringify(range) !== JSON.stringify(this.customPeriod)) {\n // The range this method was called with is no longer the selected.\n // Bail out here.\n return;\n }\n this.customPeriodData[model] = data;\n this.loadingCustom[model] = 'loaded';\n m.redraw();\n } catch (e) {\n if (JSON.stringify(range) !== JSON.stringify(this.customPeriod)) {\n // The range this method was called with is no longer the selected.\n // Bail out here.\n return;\n }\n console.error(e);\n this.loadingCustom[model] = 'fail';\n }\n }\n className() {\n return 'StatisticsWidget';\n }\n content() {\n var _this$customPeriod, _this$customPeriod2;\n const loadingSelectedEntity = (this.selectedPeriod === 'custom' ? this.loadingCustom : this.loadingTimed)[this.selectedEntity] !== 'loaded';\n const thisPeriod = loadingSelectedEntity ? null : this.selectedPeriod === 'custom' ? {\n start: (_this$customPeriod = this.customPeriod) == null ? void 0 : _this$customPeriod.end,\n end: (_this$customPeriod2 = this.customPeriod) == null ? void 0 : _this$customPeriod2.end,\n step: 86400\n } : this.periods[this.selectedPeriod];\n if (this.selectedPeriod === 'custom') {\n if (!this.customPeriodData[this.selectedEntity] && this.loadingCustom[this.selectedEntity] === 'unloaded') {\n this.loadCustomRangeData(this.selectedEntity);\n }\n } else {\n if (!this.timedData[this.selectedEntity] && this.loadingTimed[this.selectedEntity] === 'unloaded') {\n this.loadTimedData(this.selectedEntity);\n }\n }\n return m(\"div\", {\n className: \"StatisticsWidget-table\"\n }, m(\"div\", {\n className: \"StatisticsWidget-entities\"\n }, m(\"div\", {\n className: \"StatisticsWidget-labels\"\n }, m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, app.translator.trans('flarum-statistics.admin.statistics.total_label')), m(\"div\", {\n className: \"StatisticsWidget-label\"\n }, loadingSelectedEntity ? m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }) : m(SelectDropdown, {\n disabled: loadingSelectedEntity,\n buttonClassName: \"Button Button--text\",\n caretIcon: \"fas fa-caret-down\"\n }, Object.keys(this.periods).map(period => m(Button, {\n key: period,\n active: period === this.selectedPeriod,\n onclick: this.changePeriod.bind(this, period),\n icon: period === this.selectedPeriod ? 'fas fa-check' : true\n }, app.translator.trans(\"flarum-statistics.admin.statistics.\".concat(period, \"_label\")))).concat([m(Button, {\n key: \"custom\",\n active: this.selectedPeriod === 'custom',\n onclick: () => {\n const attrs = {\n onModalSubmit: dates => {\n if (JSON.stringify(dates) === JSON.stringify(this.customPeriod)) {\n // If same period is selected, don't reload data\n return;\n }\n this.customPeriodData = {};\n Object.keys(this.loadingCustom).forEach(k => this.loadingCustom[k] = 'unloaded');\n this.customPeriod = dates;\n this.changePeriod('custom');\n }\n };\n\n // If we have a custom period set already,\n // let's prefill the modal with it\n if (this.customPeriod) {\n attrs.value = this.customPeriod;\n }\n app.modal.show(StatisticsWidgetDateSelectionModal, attrs);\n },\n icon: this.selectedPeriod === 'custom' ? 'fas fa-check' : true\n }, this.selectedPeriod === 'custom' ? extractText(app.translator.trans(\"flarum-statistics.admin.statistics.custom_label_specified\", {\n fromDate: dayjs.utc(this.customPeriod.start * 1000).format('ll'),\n toDate: dayjs.utc(this.customPeriod.end * 1000).format('ll')\n })) : app.translator.trans(\"flarum-statistics.admin.statistics.custom_label\"))])))), this.entities.map(entity => {\n const totalCount = this.loadingLifetime ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getTotalCount(entity);\n const thisPeriodCount = loadingSelectedEntity ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getPeriodCount(entity, thisPeriod);\n const lastPeriodCount = this.selectedPeriod === 'custom' ? null : loadingSelectedEntity ? app.translator.trans('flarum-statistics.admin.statistics.loading') : this.getPeriodCount(entity, this.getLastPeriod(thisPeriod));\n const periodChange = loadingSelectedEntity || lastPeriodCount === 0 || lastPeriodCount === null ? 0 : (thisPeriodCount - lastPeriodCount) / lastPeriodCount * 100;\n return m(\"button\", {\n className: classList('Button--ua-reset StatisticsWidget-entity', {\n active: this.selectedEntity === entity\n }),\n onclick: this.changeEntity.bind(this, entity)\n }, m(\"h3\", {\n className: \"StatisticsWidget-heading\"\n }, app.translator.trans('flarum-statistics.admin.statistics.' + entity + '_heading')), m(\"div\", {\n className: \"StatisticsWidget-total\",\n title: totalCount\n }, this.loadingLifetime ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(totalCount)), m(\"div\", {\n className: \"StatisticsWidget-period\",\n title: thisPeriodCount\n }, loadingSelectedEntity ? m(LoadingIndicator, {\n display: \"inline\"\n }) : abbreviateNumber(thisPeriodCount), periodChange !== 0 && m('[', null, ' ', m(\"span\", {\n className: 'StatisticsWidget-change StatisticsWidget-change--' + (periodChange > 0 ? 'up' : 'down')\n }, m(Icon, {\n name: 'fas fa-arrow-' + (periodChange > 0 ? 'up' : 'down')\n }), Math.abs(periodChange).toFixed(1), \"%\"))));\n })), m('[', null, loadingSelectedEntity ? m(\"div\", {\n key: \"loading\",\n className: \"StatisticsWidget-chart\",\n \"data-loading\": \"true\"\n }, m(LoadingIndicator, {\n size: \"large\"\n })) : m(\"div\", {\n key: \"loaded\",\n className: \"StatisticsWidget-chart\",\n \"data-loading\": \"false\",\n oncreate: this.drawChart.bind(this),\n onupdate: this.drawChart.bind(this)\n })), this.noData && m(Placeholder, {\n text: app.translator.trans(\"flarum-statistics.admin.statistics.no_data\")\n }), !this.noData && !!this.chart && m(Button, {\n className: \"StatisticsWidget-chartExport Button\",\n icon: \"fas fa-file-export\",\n onclick: () => {\n this.chart.export();\n }\n }, app.translator.trans('flarum-statistics.admin.statistics.export_chart_button')));\n }\n drawChart(vnode) {\n var _this$customPeriod3, _this$customPeriod4;\n if (this.chart && this.chartEntity === this.selectedEntity && this.chartPeriod === this.selectedPeriod) {\n return;\n }\n const period = this.selectedPeriod === 'custom' ? {\n start: (_this$customPeriod3 = this.customPeriod) == null ? void 0 : _this$customPeriod3.start,\n end: (_this$customPeriod4 = this.customPeriod) == null ? void 0 : _this$customPeriod4.end,\n step: 86400\n } : this.periods[this.selectedPeriod];\n const periodLength = period.end - period.start;\n const labels = [];\n const thisPeriod = [];\n const lastPeriod = [];\n for (let i = period.start; i < period.end; i += period.step) {\n let label;\n if (period.step < 86400) {\n label = dayjs.unix(i).utc().format('h A');\n } else {\n label = dayjs.unix(i).utc().format('D MMM');\n if (period.step > 86400) {\n label += ' - ' + dayjs.unix(i + period.step - 1).utc().format('D MMM');\n }\n }\n labels.push(label);\n thisPeriod.push(this.getPeriodCount(this.selectedEntity, {\n start: i,\n end: i + period.step\n }));\n lastPeriod.push(this.getPeriodCount(this.selectedEntity, {\n start: i - periodLength,\n end: i - periodLength\n }));\n }\n if (thisPeriod.length === 0) {\n this.noData = true;\n m.redraw();\n return;\n } else {\n this.noData = false;\n m.redraw();\n }\n const datasets = [{\n name: extractText(app.translator.trans('flarum-statistics.admin.statistics.current_period')),\n values: thisPeriod\n }, {\n name: extractText(app.translator.trans('flarum-statistics.admin.statistics.previous_period')),\n values: lastPeriod\n }];\n const data = {\n labels,\n datasets\n };\n\n // If the dom element no longer exists, recreate the chart\n // https://stackoverflow.com/a/2620373/11091039\n if (!this.chart || !(document.compareDocumentPosition(this.chart.parent) & 16)) {\n this.chart = new Chart(vnode.dom, {\n data,\n type: 'line',\n height: 280,\n axisOptions: {\n xAxisMode: 'tick',\n yAxisMode: 'span',\n xIsSeries: true\n },\n lineOptions: {\n hideDots: 1,\n regionFill: 1\n },\n colors: [app.forum.attribute('themePrimaryColor'), 'black']\n });\n } else {\n this.chart.update(data);\n }\n this.chartEntity = this.selectedEntity;\n this.chartPeriod = this.selectedPeriod;\n }\n changeEntity(entity) {\n this.selectedEntity = entity;\n }\n changePeriod(period) {\n this.selectedPeriod = period;\n }\n getTotalCount(entity) {\n return this.lifetimeData[entity];\n }\n getPeriodCount(entity, period) {\n const timed = (this.selectedPeriod === 'custom' ? this.customPeriodData : this.timedData)[entity];\n let count = 0;\n for (const t in timed) {\n const time = parseInt(t);\n if (time >= period.start && time < period.end) {\n count += timed[time];\n }\n }\n return count;\n }\n getLastPeriod(thisPeriod) {\n return {\n start: thisPeriod.start - (thisPeriod.end - thisPeriod.start),\n end: thisPeriod.start\n };\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsWidget', StatisticsWidget);","import ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport StatisticsWidget from './StatisticsWidget';\nexport default class StatisticsPage extends ExtensionPage {\n content() {\n return m(\"div\", {\n className: \"StatisticsPage\"\n }, m(\"div\", {\n className: \"container\"\n }, m(StatisticsWidget, null)));\n }\n}\nflarum.reg.add('flarum-statistics', 'admin/components/StatisticsPage', StatisticsPage);","import Extend from 'flarum/common/extenders';\nimport StatisticsPage from './components/StatisticsPage';\nexport default [new Extend.Admin().page(StatisticsPage)];","import app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport DashboardPage from 'flarum/admin/components/DashboardPage';\nimport MiniStatisticsWidget from './components/MiniStatisticsWidget';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-statistics', () => {\n extend(DashboardPage.prototype, 'availableWidgets', function (widgets) {\n widgets.add('statistics', m(MiniStatisticsWidget, null), 20);\n });\n});"],"names":["module","exports","e","n","r","i","s","u","a","o","f","h","c","d","l","$","y","M","name","weekdays","split","months","ordinal","t","m","String","length","Array","join","v","z","utcOffset","Math","abs","floor","date","year","month","clone","add","ceil","p","w","D","ms","Q","toLowerCase","replace","g","_","S","args","arguments","O","locale","$L","utc","$u","x","$x","$offset","this","parse","prototype","$d","Date","NaN","test","match","substring","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","toString","isSame","startOf","endOf","isAfter","isBefore","$g","set","unix","valueOf","getTime","toDate","apply","slice","$locale","weekStart","$set","min","daysInMonth","get","Number","round","subtract","format","invalidDate","meridiem","YY","YYYY","MM","MMM","monthsShort","MMMM","DD","dd","weekdaysMin","ddd","weekdaysShort","dddd","H","HH","hh","A","mm","ss","SSS","Z","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","T","forEach","extend","$i","isDayjs","en","Ls","LTS","LT","L","LL","LLL","LLLL","formats","toUpperCase","call","local","getUTCFullYear","getUTCMonth","getUTCDate","getUTCDay","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","$localOffset","isUTC","document","querySelector","getBoundingClientRect","top","documentElement","scrollTop","body","left","scrollLeft","offsetParent","bottom","window","innerHeight","clientHeight","right","innerWidth","clientWidth","titleHeight","margins","paddings","legendHeight","parseFloat","toFixed","fill","concat","sin","Zt","cos","isNaN","isFinite","Ft","isArray","b","log10","pow","k","push","sqrt","angle","atan2","PI","reduce","ie","parseInt","createElementNS","appendChild","parentNode","insertBefore","Object","keys","map","style","textContent","setAttribute","inside","id","x1","x2","y1","y2","offset","N","className","transform","styles","stroke","j","width","height","rx","Y","fontSize","re","dy","le","textAnchor","innerHTML","B","oe","ae","V","lineType","shortenNumbers","ve","tt","pe","it","zeroLine","Vt","nodeName","childNodes","ce","getAttribute","st","rt","cloneNode","attributeName","from","to","begin","dur","values","keySplines","ge","keyTimes","calcMode","type","ot","webkitTransform","msTransform","mozTransform","oTransform","lt","Ut","replaceChild","ut","removeChild","setTimeout","fe","ct","classList","create","me","firstChild","dt","setMinutes","pt","ft","vt","xt","we","ke","gt","xe","mt","yt","Ae","bt","kt","setDate","wt","Le","filter","includes","assign","constants","getData","Te","At","mantissa","exponent","Pt","Tt","Lt","unshift","max","reverse","Ot","Mt","indexOf","Ct","Dt","scaleMultiplier","Et","_t","labels","datasets","chartType","Xt","yRegions","end","start","zt","yMarkers","value","label","insertAt","head","getElementsByTagName","createElement","styleSheet","cssText","createTextNode","Symbol","iterator","constructor","Ht","Promise","resolve","then","done","reject","next","key","arg","_invoke","return","asyncIterator","throw","TypeError","It","enumerable","configurable","writable","defineProperty","Rt","Function","getOwnPropertyDescriptor","getPrototypeOf","Yt","setPrototypeOf","__proto__","Bt","ReferenceError","Gt","baseHeight","titleFontSize","Jt","Kt","$t","Qt","bar","line","pie","percentage","heatmap","donut","te","parent","colors","titleName","titleValue","listValues","titleValueFirst","setup","makeTooltip","calcPosition","container","hideTip","title","dataPointList","addEventListener","index","formatted","offsetWidth","offsetHeight","valueFirst","refresh","opacity","ee","blue","violet","red","orange","yellow","green","purple","magenta","black","grey","exec","ne","se","ue","dot","heat_square","he","attributes","specified","nodeValue","de","ease","linear","easein","easeout","easeinout","ye","HTMLElement","Error","rawChartArgs","realData","prepareData","data","prepareFirstData","validateColors","config","showTooltip","showLegend","isNavigable","animate","truncateLegends","measures","JSON","stringify","setMeasures","argHeight","state","options","initTimeout","overlays","configure","P","console","warn","boundDrawFn","draw","ResizeObserver","resizeObserver","observe","disconnect","removeEventListener","makeContainer","updateWidth","independentWidth","tip","bindTooltip","calc","makeChartArea","setupComponents","components","drawArea","render","update","renderLegend","setupNavigation","baseWidth","getComputedStyle","paddingLeft","paddingRight","svg","C","svgDefs","titleEL","legendArea","updateTipOffset","Map","error","make","updateNav","makeOverlay","bindUnits","bindOverlay","keyActions","onEnterKey","bind","onLeftArrow","onUpArrow","onRightArrow","onDownArrow","event","keyCode","Blob","URL","createObjectURL","href","download","click","revokeObjectURL","ht","be","formatTooltipY","tooltipOptions","maxSlices","maxLegendPoints","sliceTotals","sort","grandTotal","center","legendTotals","cx","cy","dx","R","Pe","layerClass","layerTransform","makeElements","animateElements","store","layer","oldData","donutSlices","sliceStrings","strokeWidth","transition","pieSlices","percentageBars","xPositions","F","widths","barHeight","barDepth","yAxis","positions","pos","mode","U","xAxis","G","calcLabels","labelPos","q","position","X","startPos","endPos","et","heatDomain","colWidth","rowHeight","squareSize","radius","xTranslate","serializedSubDomains","cols","yyyyMmDd","dataValue","barGraph","unitType","units","yPositions","minHeight","J","barWidth","color","offsets","barsWidth","lineGraph","paths","hideLine","spline","heatline","path","regionFill","region","hideDots","K","valuesOverPoints","at","nt","Oe","barOptions","depth","target","formattedLabels","setValues","showTip","Me","mouseMove","mouseLeave","hoverRadio","startAngle","clockWise","slicesProperties","startPosition","endPosition","E","total","endAngle","calTranslateByAngle","pageX","pageY","formatted_labels","curActiveSliceIndex","curActiveSlice","hoverSlice","Ce","countLabel","startSubDomain","startSubDomainIndex","discreteDomains","noOfWeeks","setFullYear","dataPoints","firstWeekStart","distribution","St","domainConfigs","getDomains","getDomainConfig","getCol","getSubDomainConfig","De","lineOptions","axisOptions","xAxisMode","yAxisMode","xIsSeries","shortenYAxisNumbers","formatTooltipX","calcXPositions","calcYAxisParameters","getAllYValues","makeDataByIndex","datasetLength","unitWidth","xOffset","calcDatasetPoints","calcYExtremes","calcYRegions","cumulativeYs","cumulativeYPos","stacked","yExtremes","Wt","spaceRatio","dotSize","dataUnitComponents","dataByIndex","yPos","formattedLabel","xPos","yExtreme","mapTooltipXPosition","Nt","I","overlayGuides","overlay","currentIndex","updateOverlay","setCurrentDataPoint","createEvent","initEvent","dispatchEvent","getDataPoint","splice","Ne","W","Se","_e","freeze","Chart","jt","PercentageChart","PieChart","Heatmap","AxisChart","ze","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","obj","prop","hasOwnProperty","toStringTag","flarum","reg","_typeof","_defineProperty","input","hint","prim","toPrimitive","res","toPropertyKey","MiniStatisticsWidget","super","oncreate","vnode","loadLifetimeData","async","loadingLifetime","redraw","method","url","params","period","lifetimeData","content","entities","entity","totalCount","getTotalCount","display","StatisticsWidgetDateSelectionModal","inputs","startDateVal","endDateVal","ids","startDate","endDate","oninit","attrs","items","toArray","htmlFor","onchange","updateState","field","currentTarget","submitData","hour","minute","second","millisecond","onsubmit","preventDefault","alertAttrs","controls","onModalSubmit","hide","StatisticsWidget","acc","curr","model","loadingTimed","timedData","todayDate","setUTCHours","today","periods","step","last_7_days","previous_7_days","last_28_days","previous_28_days","last_12_months","selectedPeriod","loadingCustom","range","customPeriod","dateRange","customPeriodData","_this$customPeriod","_this$customPeriod2","loadingSelectedEntity","selectedEntity","thisPeriod","loadCustomRangeData","loadTimedData","size","disabled","buttonClassName","caretIcon","active","onclick","changePeriod","icon","dates","fromDate","thisPeriodCount","getPeriodCount","lastPeriodCount","getLastPeriod","periodChange","changeEntity","drawChart","onupdate","noData","text","chart","export","_this$customPeriod3","_this$customPeriod4","chartEntity","chartPeriod","periodLength","lastPeriod","compareDocumentPosition","dom","timed","count","time","StatisticsPage","page","widgets"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/sticky/js/dist/admin.js b/extensions/sticky/js/dist/admin.js index 057987cb6..e30861036 100644 --- a/extensions/sticky/js/dist/admin.js +++ b/extensions/sticky/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var e={n:r=>{var t=r&&r.__esModule?()=>r.default:()=>r;return e.d(t,{a:t}),t},d:(r,t)=>{for(var s in t)e.o(t,s)&&!e.o(r,s)&&Object.defineProperty(r,s,{enumerable:!0,get:t[s]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};(()=>{"use strict";e.r(r),e.d(r,{extend:()=>l});const t=flarum.reg.get("core","admin/app");var s=e.n(t);const a=flarum.reg.get("core","common/extenders");var o=e.n(a);const i=flarum.reg.get("core","common/query/IGambit"),n=flarum.reg.get("core","common/app");var c=e.n(n);class m extends i.BooleanGambit{key(){return c().translator.trans("flarum-sticky.lib.gambits.discussions.sticky.key",{},!0)}filterKey(){return"sticky"}}flarum.reg.add("flarum-sticky","common/query/discussions/StickyGambit",m);const l=[(new(o().Search)).gambit("discussions",m)];s().initializers.add("flarum-sticky",(()=>{s().extensionData.for("flarum-sticky").registerPermission({icon:"fas fa-thumbtack",label:s().translator.trans("flarum-sticky.admin.permissions.sticky_discussions_label"),permission:"discussion.sticky"},"moderate",95)}))})(),module.exports=r})(); +(()=>{var e={n:r=>{var t=r&&r.__esModule?()=>r.default:()=>r;return e.d(t,{a:t}),t},d:(r,t)=>{for(var s in t)e.o(t,s)&&!e.o(r,s)&&Object.defineProperty(r,s,{enumerable:!0,get:t[s]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};(()=>{"use strict";e.r(r),e.d(r,{extend:()=>l});const t=flarum.reg.get("core","admin/app");var s=e.n(t);const a=flarum.reg.get("core","common/extenders");var o=e.n(a);const i=flarum.reg.get("core","common/query/IGambit"),n=flarum.reg.get("core","common/app");var c=e.n(n);class m extends i.BooleanGambit{key(){return c().translator.trans("flarum-sticky.lib.gambits.discussions.sticky.key",{},!0)}filterKey(){return"sticky"}}flarum.reg.add("flarum-sticky","common/query/discussions/StickyGambit",m);const l=[(new(o().Search)).gambit("discussions",m),(new(o().Admin)).permission((()=>({icon:"fas fa-thumbtack",label:s().translator.trans("flarum-sticky.admin.permissions.sticky_discussions_label"),permission:"discussion.sticky"})),"moderate",95)];s().initializers.add("flarum-sticky",(()=>{}))})(),module.exports=r})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/sticky/js/dist/admin.js.map b/extensions/sticky/js/dist/admin.js.map index 62f8d5482..097c84e6b 100644 --- a/extensions/sticky/js/dist/admin.js.map +++ b/extensions/sticky/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,wBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,c,aCE7C,MAAMW,UAAqB,EAAAC,cACxCjB,MACE,OAAO,qBAAqB,mDAAoD,CAAC,GAAG,EACtF,CACAkB,YACE,MAAO,QACT,EAEFJ,OAAOC,IAAII,IAAI,gBAAiB,wCAAyCH,GCRzE,UAAgB,IAAI,aACnBI,OAAO,cAAeJ,ICDvB,qBAAqB,iBAAiB,KACpC,sBAAsB,iBAAiBK,mBAAmB,CACxDC,KAAM,mBACNC,MAAO,qBAAqB,4DAC5BC,WAAY,qBACX,WAAY,GAAG,G","sources":["webpack://@flarum/sticky/webpack/bootstrap","webpack://@flarum/sticky/webpack/runtime/compat get default export","webpack://@flarum/sticky/webpack/runtime/define property getters","webpack://@flarum/sticky/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/sticky/webpack/runtime/make namespace object","webpack://@flarum/sticky/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/sticky/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/sticky/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/sticky/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/sticky/./src/common/query/discussions/StickyGambit.ts","webpack://@flarum/sticky/./src/common/extend.ts","webpack://@flarum/sticky/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/app');","import { BooleanGambit } from 'flarum/common/query/IGambit';\nimport app from 'flarum/common/app';\nexport default class StickyGambit extends BooleanGambit {\n key() {\n return app.translator.trans('flarum-sticky.lib.gambits.discussions.sticky.key', {}, true);\n }\n filterKey() {\n return 'sticky';\n }\n}\nflarum.reg.add('flarum-sticky', 'common/query/discussions/StickyGambit', StickyGambit);","import Extend from 'flarum/common/extenders';\nimport StickyGambit from './query/discussions/StickyGambit';\nexport default [new Extend.Search() //\n.gambit('discussions', StickyGambit)];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-sticky', () => {\n app.extensionData.for('flarum-sticky').registerPermission({\n icon: 'fas fa-thumbtack',\n label: app.translator.trans('flarum-sticky.admin.permissions.sticky_discussions_label'),\n permission: 'discussion.sticky'\n }, 'moderate', 95);\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","StickyGambit","BooleanGambit","filterKey","add","gambit","registerPermission","icon","label","permission"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,wBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,c,aCE7C,MAAMW,UAAqB,EAAAC,cACxCjB,MACE,OAAO,qBAAqB,mDAAoD,CAAC,GAAG,EACtF,CACAkB,YACE,MAAO,QACT,EAEFJ,OAAOC,IAAII,IAAI,gBAAiB,wCAAyCH,GCRzE,MCCA,IDDgB,IAAI,aACnBI,OAAO,cAAeJ,ICAU,IAAI,YAAeK,YAAW,KAAM,CACnEC,KAAM,mBACNC,MAAO,qBAAqB,4DAC5BF,WAAY,uBACV,WAAY,KCLhB,qBAAqB,iBAAiB,Q","sources":["webpack://@flarum/sticky/webpack/bootstrap","webpack://@flarum/sticky/webpack/runtime/compat get default export","webpack://@flarum/sticky/webpack/runtime/define property getters","webpack://@flarum/sticky/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/sticky/webpack/runtime/make namespace object","webpack://@flarum/sticky/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/sticky/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/sticky/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/sticky/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/sticky/./src/common/query/discussions/StickyGambit.ts","webpack://@flarum/sticky/./src/common/extend.ts","webpack://@flarum/sticky/./src/admin/extend.tsx","webpack://@flarum/sticky/./src/admin/index.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/app');","import { BooleanGambit } from 'flarum/common/query/IGambit';\nimport app from 'flarum/common/app';\nexport default class StickyGambit extends BooleanGambit {\n key() {\n return app.translator.trans('flarum-sticky.lib.gambits.discussions.sticky.key', {}, true);\n }\n filterKey() {\n return 'sticky';\n }\n}\nflarum.reg.add('flarum-sticky', 'common/query/discussions/StickyGambit', StickyGambit);","import Extend from 'flarum/common/extenders';\nimport StickyGambit from './query/discussions/StickyGambit';\nexport default [new Extend.Search() //\n.gambit('discussions', StickyGambit)];","import Extend from 'flarum/common/extenders';\nimport app from 'flarum/admin/app';\nimport commonExtend from '../common/extend';\nexport default [...commonExtend, new Extend.Admin().permission(() => ({\n icon: 'fas fa-thumbtack',\n label: app.translator.trans('flarum-sticky.admin.permissions.sticky_discussions_label'),\n permission: 'discussion.sticky'\n}), 'moderate', 95)];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-sticky', () => {\n // ...\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","StickyGambit","BooleanGambit","filterKey","add","gambit","permission","icon","label"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/suspend/js/dist/admin.js b/extensions/suspend/js/dist/admin.js index b3dcff170..cbc9d3ae1 100644 --- a/extensions/suspend/js/dist/admin.js +++ b/extensions/suspend/js/dist/admin.js @@ -1,2 +1,2 @@ -(()=>{var e={n:r=>{var s=r&&r.__esModule?()=>r.default:()=>r;return e.d(s,{a:s}),s},d:(r,s)=>{for(var n in s)e.o(s,n)&&!e.o(r,n)&&Object.defineProperty(r,n,{enumerable:!0,get:s[n]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};(()=>{"use strict";e.r(r),e.d(r,{extend:()=>c});const s=flarum.reg.get("core","admin/app");var n=e.n(s);const a=flarum.reg.get("core","common/extenders");var t=e.n(a);const o=flarum.reg.get("core","common/app");var u=e.n(o);const d=flarum.reg.get("core","common/query/IGambit");class m extends d.BooleanGambit{key(){return u().translator.trans("flarum-suspend.lib.gambits.users.suspended.key",{},!0)}filterKey(){return"suspended"}enabled(){return!!u().session.user&&u().forum.attribute("canSuspendUsers")}}flarum.reg.add("flarum-suspend","common/query/users/SuspendedGambit",m);const l=flarum.reg.get("core","common/models/User");var i=e.n(l);const c=[(new(t().Search)).gambit("users",m),new(t().Model)(i()).attribute("canSuspend")];n().initializers.add("flarum-suspend",(()=>{n().extensionData.for("flarum-suspend").registerPermission({icon:"fas fa-ban",label:n().translator.trans("flarum-suspend.admin.permissions.suspend_users_label"),permission:"user.suspend"},"moderate")}))})(),module.exports=r})(); +(()=>{var e={n:r=>{var s=r&&r.__esModule?()=>r.default:()=>r;return e.d(s,{a:s}),s},d:(r,s)=>{for(var n in s)e.o(s,n)&&!e.o(r,n)&&Object.defineProperty(r,n,{enumerable:!0,get:s[n]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};(()=>{"use strict";e.r(r),e.d(r,{extend:()=>c});const s=flarum.reg.get("core","admin/app");var n=e.n(s);const a=flarum.reg.get("core","common/extenders");var t=e.n(a);const o=flarum.reg.get("core","common/app");var u=e.n(o);const d=flarum.reg.get("core","common/query/IGambit");class m extends d.BooleanGambit{key(){return u().translator.trans("flarum-suspend.lib.gambits.users.suspended.key",{},!0)}filterKey(){return"suspended"}enabled(){return!!u().session.user&&u().forum.attribute("canSuspendUsers")}}flarum.reg.add("flarum-suspend","common/query/users/SuspendedGambit",m);const l=flarum.reg.get("core","common/models/User");var i=e.n(l);const c=[(new(t().Search)).gambit("users",m),new(t().Model)(i()).attribute("canSuspend"),(new(t().Admin)).permission((()=>({icon:"fas fa-ban",label:n().translator.trans("flarum-suspend.admin.permissions.suspend_users_label"),permission:"user.suspend"})),"moderate")];n().initializers.add("flarum-suspend",(()=>{}))})(),module.exports=r})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/suspend/js/dist/admin.js.map b/extensions/suspend/js/dist/admin.js.map index 47cb547a4..5857cbaed 100644 --- a/extensions/suspend/js/dist/admin.js.map +++ b/extensions/suspend/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,c,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,wBCE7C,MAAMW,UAAwB,EAAAC,cAC3CjB,MACE,OAAO,qBAAqB,iDAAkD,CAAC,GAAG,EACpF,CACAkB,YACE,MAAO,WACT,CACAC,UACE,QAAS,kBAAoB,oBAAoB,kBACnD,EAEFL,OAAOC,IAAIK,IAAI,iBAAkB,qCAAsCJ,GCbvE,MAAM,EAA+BF,OAAOC,IAAIV,IAAI,OAAQ,sB,aCK5D,UAAgB,IAAI,aAAgBgB,OAAO,QAASL,GAAkB,IAAI,WAAa,KAAMM,UAAU,eCHvG,qBAAqB,kBAAkB,KACrC,sBAAsB,kBAAkBC,mBAAmB,CACzDC,KAAM,aACNC,MAAO,qBAAqB,wDAC5BC,WAAY,gBACX,WAAW,G","sources":["webpack://@flarum/suspend/webpack/bootstrap","webpack://@flarum/suspend/webpack/runtime/compat get default export","webpack://@flarum/suspend/webpack/runtime/define property getters","webpack://@flarum/suspend/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/suspend/webpack/runtime/make namespace object","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/suspend/./src/common/query/users/SuspendedGambit.ts","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/models/User')\"","webpack://@flarum/suspend/./src/common/extend.ts","webpack://@flarum/suspend/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import app from 'flarum/common/app';\nimport { BooleanGambit } from 'flarum/common/query/IGambit';\nexport default class SuspendedGambit extends BooleanGambit {\n key() {\n return app.translator.trans('flarum-suspend.lib.gambits.users.suspended.key', {}, true);\n }\n filterKey() {\n return 'suspended';\n }\n enabled() {\n return !!app.session.user && app.forum.attribute('canSuspendUsers');\n }\n}\nflarum.reg.add('flarum-suspend', 'common/query/users/SuspendedGambit', SuspendedGambit);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/User');","import Extend from 'flarum/common/extenders';\nimport SuspendedGambit from './query/users/SuspendedGambit';\nimport User from 'flarum/common/models/User';\n\n// prettier-ignore\nexport default [new Extend.Search().gambit('users', SuspendedGambit), new Extend.Model(User).attribute('canSuspend')];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-suspend', () => {\n app.extensionData.for('flarum-suspend').registerPermission({\n icon: 'fas fa-ban',\n label: app.translator.trans('flarum-suspend.admin.permissions.suspend_users_label'),\n permission: 'user.suspend'\n }, 'moderate');\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","SuspendedGambit","BooleanGambit","filterKey","enabled","add","gambit","attribute","registerPermission","icon","label","permission"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,qDCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,oB,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,c,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,wBCE7C,MAAMW,UAAwB,EAAAC,cAC3CjB,MACE,OAAO,qBAAqB,iDAAkD,CAAC,GAAG,EACpF,CACAkB,YACE,MAAO,WACT,CACAC,UACE,QAAS,kBAAoB,oBAAoB,kBACnD,EAEFL,OAAOC,IAAIK,IAAI,iBAAkB,qCAAsCJ,GCbvE,MAAM,EAA+BF,OAAOC,IAAIV,IAAI,OAAQ,sB,aCK5D,MCFA,IDEgB,IAAI,aAAgBgB,OAAO,QAASL,GAAkB,IAAI,WAAa,KAAMM,UAAU,eCFtE,IAAI,YAAeC,YAAW,KAAM,CACnEC,KAAM,aACNC,MAAO,qBAAqB,wDAC5BF,WAAY,kBACV,aCLJ,qBAAqB,kBAAkB,Q","sources":["webpack://@flarum/suspend/webpack/bootstrap","webpack://@flarum/suspend/webpack/runtime/compat get default export","webpack://@flarum/suspend/webpack/runtime/define property getters","webpack://@flarum/suspend/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/suspend/webpack/runtime/make namespace object","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/suspend/./src/common/query/users/SuspendedGambit.ts","webpack://@flarum/suspend/external root \"flarum.reg.get('core', 'common/models/User')\"","webpack://@flarum/suspend/./src/common/extend.ts","webpack://@flarum/suspend/./src/admin/extend.tsx","webpack://@flarum/suspend/./src/admin/index.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import app from 'flarum/common/app';\nimport { BooleanGambit } from 'flarum/common/query/IGambit';\nexport default class SuspendedGambit extends BooleanGambit {\n key() {\n return app.translator.trans('flarum-suspend.lib.gambits.users.suspended.key', {}, true);\n }\n filterKey() {\n return 'suspended';\n }\n enabled() {\n return !!app.session.user && app.forum.attribute('canSuspendUsers');\n }\n}\nflarum.reg.add('flarum-suspend', 'common/query/users/SuspendedGambit', SuspendedGambit);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/User');","import Extend from 'flarum/common/extenders';\nimport SuspendedGambit from './query/users/SuspendedGambit';\nimport User from 'flarum/common/models/User';\n\n// prettier-ignore\nexport default [new Extend.Search().gambit('users', SuspendedGambit), new Extend.Model(User).attribute('canSuspend')];","import Extend from 'flarum/common/extenders';\nimport app from 'flarum/admin/app';\nimport commonExtend from '../common/extend';\nexport default [...commonExtend, new Extend.Admin().permission(() => ({\n icon: 'fas fa-ban',\n label: app.translator.trans('flarum-suspend.admin.permissions.suspend_users_label'),\n permission: 'user.suspend'\n}), 'moderate')];","import app from 'flarum/admin/app';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-suspend', () => {\n // ...\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","SuspendedGambit","BooleanGambit","filterKey","enabled","add","gambit","attribute","permission","icon","label"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/tags/js/dist-typings/admin/addTagPermission.d.ts b/extensions/tags/js/dist-typings/admin/addTagPermission.d.ts deleted file mode 100644 index f77c13ef1..000000000 --- a/extensions/tags/js/dist-typings/admin/addTagPermission.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function _default(): void; diff --git a/extensions/tags/js/dist-typings/admin/admin.d.ts b/extensions/tags/js/dist-typings/admin/admin.d.ts index 4c69ad42a..8765e8c9e 100644 --- a/extensions/tags/js/dist-typings/admin/admin.d.ts +++ b/extensions/tags/js/dist-typings/admin/admin.d.ts @@ -3,5 +3,4 @@ import './components/TagsPage'; import './components/EditTagModal'; import './addTagsHomePageOption'; import './addTagChangePermission'; -import './addTagPermission'; import './addTagsPermissionScope'; diff --git a/extensions/tags/js/dist-typings/admin/extend.d.ts b/extensions/tags/js/dist-typings/admin/extend.d.ts new file mode 100644 index 000000000..f83ce3204 --- /dev/null +++ b/extensions/tags/js/dist-typings/admin/extend.d.ts @@ -0,0 +1,2 @@ +declare const _default: any[]; +export default _default; diff --git a/extensions/tags/js/dist-typings/admin/index.d.ts b/extensions/tags/js/dist-typings/admin/index.d.ts index 8280128ee..ec4e17358 100644 --- a/extensions/tags/js/dist-typings/admin/index.d.ts +++ b/extensions/tags/js/dist-typings/admin/index.d.ts @@ -1,2 +1,2 @@ -export { default as extend } from '../common/extend'; +export { default as extend } from './extend'; import './admin'; diff --git a/extensions/tags/js/dist/admin.js b/extensions/tags/js/dist/admin.js index 4bdb22bd8..16ad18e32 100644 --- a/extensions/tags/js/dist/admin.js +++ b/extensions/tags/js/dist/admin.js @@ -1,3 +1,3 @@ /*! For license information please see admin.js.LICENSE.txt */ -(()=>{var t,e,n={396:(t,e,n)=>{"use strict";n.d(e,{l:()=>_n});const o=flarum.reg.get("core","admin/app");var a=n.n(o);const r=flarum.reg.get("core","common/extend"),i=flarum.reg.get("core","admin/components/PermissionGrid");var s=n.n(i);const l=flarum.reg.get("core","admin/components/PermissionDropdown");var c=n.n(l);const u=flarum.reg.get("core","common/components/Dropdown");var d=n.n(u),g=n(645),h=n.n(g),p=n(149),f=n.n(p),v=n(924),b=n(974),y=n(648);function w(){app.extensionData.for("flarum-tags").registerPermission({icon:"fas fa-tag",label:app.translator.trans("flarum-tags.admin.permissions.tag_discussions_label"),permission:"discussion.tag"},"moderate",95).registerPermission({icon:"fas fa-tags",label:app.translator.trans("flarum-tags.admin.permissions.bypass_tag_counts_label"),permission:"bypassTagCounts"},"start",89)}const _=flarum.reg.get("core","admin/components/BasicsPage");var T=n.n(_);function S(){(0,r.extend)(T().prototype,"homePageItems",(t=>{t.add("tags",{path:"/tags",label:app.translator.trans("flarum-tags.admin.basics.tags_label")})}))}const E=flarum.reg.get("core","admin/components/SettingDropdown");var D=n.n(E),C=n(905),x=n(433),N=n.n(x),P=(n(780),n(836)),O=n.n(P);function I(t,e){void 0===e&&(e={});const n=[],{link:o,...a}=e;return a.className=O()("TagsLabel",a.className),t?(0,y.Z)(t).forEach((e=>{(e||1===t.length)&&n.push((0,v.Z)(e,{link:o}))})):n.push((0,v.Z)()),m("span",a,n)}flarum.reg.add("flarum-tags","common/helpers/tagsLabel",I);class M extends(N()){constructor(){super(...arguments),(0,C.Z)(this,"tags",[]),(0,C.Z)(this,"loaded",!1)}view(){const t=JSON.parse(this.attrs.settingValue()||"[]");return this.loaded||a().tagList.load(["parent"]).then((e=>{this.tags=e.filter((e=>t.includes(e.id()))),this.loaded=!0,m.redraw()})),m("div",{className:"Form-group SelectTagsSettingComponent"},m("label",null,this.attrs.label),this.attrs.help&&m("p",{className:"helpText"},this.attrs.help),this.loaded?m(h(),{className:"Button Button--text",onclick:()=>a().modal.show((()=>n.e(162).then(n.bind(n,610))),{selectedTags:this.tags,onsubmit:t=>{this.tags=t,this.attrs.settingValue(JSON.stringify(t.map((t=>t.id()))))},...this.attrs.options})},this.tags.length?I(this.tags):m("span",{className:"TagLabel untagged"},a().translator.trans("flarum-tags.admin.settings.button_text"))):m(f(),{size:"small",display:"inline"}))}}flarum.reg.add("flarum-tags","admin/components/SelectTagsSettingComponent",M),flarum.reg.addChunkModule("162","610","flarum-tags","common/components/TagSelectionModal"),flarum.reg.addChunkModule("162","610","flarum-tags","forum/components/ToggleButton");const k=flarum.reg.get("core","common/components/FormGroup");var A=n.n(k);function F(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function L(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}function j(t){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(t)}var H=j(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),Z=j(/Edge/i),G=j(/firefox/i),W=j(/safari/i)&&!j(/chrome/i)&&!j(/android/i),q=j(/iP(ad|od|hone)/i),z=j(/chrome/i)&&j(/android/i),V={capture:!1,passive:!1};function U(t,e,n){t.addEventListener(e,n,!H&&V)}function K(t,e,n){t.removeEventListener(e,n,!H&&V)}function J(t,e){if(e){if(">"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function Q(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function tt(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&J(t,e):J(t,e))||o&&t===n)return t;if(t===n)break}while(t=Q(t))}return null}var et,nt=/\s+/g;function ot(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(nt," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(nt," ")}}function at(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function rt(t,e){var n="";if("string"==typeof t)n=t;else do{var o=at(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var a=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return a&&new a(n)}function it(t,e,n){if(t){var o=t.getElementsByTagName(e),a=0,r=o.length;if(n)for(;a=r:a<=r))return o;if(o===st())break;o=ht(o,!1)}return!1}function ut(t,e,n,o){for(var a=0,r=0,i=t.children;r2&&void 0!==arguments[2]?arguments[2]:{},o=n.evt,a=Y(n,St);Tt.pluginEvent.bind(fe)(t,e,L({dragEl:Ct,parentEl:xt,ghostEl:Nt,rootEl:Pt,nextEl:Ot,lastDownEl:It,cloneEl:Mt,cloneHidden:kt,dragStarted:qt,putSortable:Xt,activeSortable:fe.active,originalEvent:o,oldIndex:At,oldDraggableIndex:Lt,newIndex:Ft,newDraggableIndex:Bt,hideGhostForTarget:me,unhideGhostForTarget:ge,cloneNowHidden:function(){kt=!0},cloneNowShown:function(){kt=!1},dispatchSortableEvent:function(t){Dt({sortable:e,name:t,originalEvent:o})}},a))};function Dt(t){!function(t){var e=t.sortable,n=t.rootEl,o=t.name,a=t.targetEl,r=t.cloneEl,i=t.toEl,s=t.fromEl,l=t.oldIndex,c=t.newIndex,u=t.oldDraggableIndex,d=t.newDraggableIndex,m=t.originalEvent,g=t.putSortable,h=t.extraEventProperties;if(e=e||n&&n[yt]){var p,f=e.options,v="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||H||Z?(p=document.createEvent("Event")).initEvent(o,!0,!0):p=new CustomEvent(o,{bubbles:!0,cancelable:!0}),p.to=i||n,p.from=s||n,p.item=a||n,p.clone=r,p.oldIndex=l,p.newIndex=c,p.oldDraggableIndex=u,p.newDraggableIndex=d,p.originalEvent=m,p.pullMode=g?g.lastPutMode:void 0;var b=L(L({},h),Tt.getEventProperties(o,e));for(var y in b)p[y]=b[y];n&&n.dispatchEvent(p),f[v]&&f[v].call(e,p)}}(L({putSortable:Xt,cloneEl:Mt,targetEl:Ct,rootEl:Pt,oldIndex:At,oldDraggableIndex:Lt,newIndex:Ft,newDraggableIndex:Bt},t))}var Ct,xt,Nt,Pt,Ot,It,Mt,kt,At,Ft,Lt,Bt,Rt,Xt,Yt,jt,Ht,Zt,Gt,Wt,qt,zt,Vt,Ut,$t,Kt=!1,Jt=!1,Qt=[],te=!1,ee=!1,ne=[],oe=!1,ae=[],re="undefined"!=typeof document,ie=q,se=Z||H?"cssFloat":"float",le=re&&!z&&!q&&"draggable"in document.createElement("div"),ce=function(){if(re){if(H)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),ue=function(t,e){var n=at(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),a=ut(t,0,e),r=ut(t,1,e),i=a&&at(a),s=r&&at(r),l=i&&parseInt(i.marginLeft)+parseInt(i.marginRight)+lt(a).width,c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+lt(r).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(a&&i.float&&"none"!==i.float){var u="left"===i.float?"left":"right";return!r||"both"!==s.clear&&s.clear!==u?"horizontal":"vertical"}return a&&("block"===i.display||"flex"===i.display||"table"===i.display||"grid"===i.display||l>=o&&"none"===n[se]||r&&"none"===n[se]&&l+c>o)?"vertical":"horizontal"},de=function(t){function e(t,n){return function(o,a,r,i){var s=o.options.group.name&&a.options.group.name&&o.options.group.name===a.options.group.name;if(null==t&&(n||s))return!0;if(null==t||!1===t)return!1;if(n&&"clone"===t)return t;if("function"==typeof t)return e(t(o,a,r,i),n)(o,a,r,i);var l=(n?o:a).options.group.name;return!0===t||"string"==typeof t&&t===l||t.join&&t.indexOf(l)>-1}}var n={},o=t.group;o&&"object"==B(o)||(o={name:o}),n.name=o.name,n.checkPull=e(o.pull,!0),n.checkPut=e(o.put),n.revertClone=o.revertClone,t.group=n},me=function(){!ce&&Nt&&at(Nt,"display","none")},ge=function(){!ce&&Nt&&at(Nt,"display","")};re&&!z&&document.addEventListener("click",(function(t){if(Jt)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),Jt=!1,!1}),!0);var he=function(t){if(Ct){t=t.touches?t.touches[0]:t;var e=(a=t.clientX,r=t.clientY,Qt.some((function(t){var e=t[yt].options.emptyInsertThreshold;if(e&&!dt(t)){var n=lt(t),o=a>=n.left-e&&a<=n.right+e,s=r>=n.top-e&&r<=n.bottom+e;return o&&s?i=t:void 0}})),i);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[yt]._onDragOver(n)}}var a,r,i},pe=function(t){Ct&&Ct.parentNode[yt]._isOutsideThisEl(t.target)};function fe(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=X({},e),t[yt]=this;var n,o,a={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return ue(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==fe.supportPointer&&"PointerEvent"in window&&!W,emptyInsertThreshold:5};for(var r in Tt.initializePlugins(this,t,a),a)!(r in e)&&(e[r]=a[r]);for(var i in de(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&le,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?U(t,"pointerdown",this._onTapStart):(U(t,"mousedown",this._onTapStart),U(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(U(t,"dragover",this),U(t,"dragenter",this)),Qt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),X(this,(o=[],{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach((function(t){if("none"!==at(t,"display")&&t!==fe.ghost){o.push({target:t,rect:lt(t)});var e=L({},o[o.length-1].rect);if(t.thisAnimationDuration){var n=rt(t,!0);n&&(e.top-=n.f,e.left-=n.e)}t.fromRect=e}}))},addAnimationState:function(t){o.push(t)},removeAnimationState:function(t){o.splice(function(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var o in e)if(e.hasOwnProperty(o)&&e[o]===t[n][o])return Number(n);return-1}(o,{target:t}),1)},animateAll:function(t){var e=this;if(!this.options.animation)return clearTimeout(n),void("function"==typeof t&&t());var a=!1,r=0;o.forEach((function(t){var n=0,o=t.target,i=o.fromRect,s=lt(o),l=o.prevFromRect,c=o.prevToRect,u=t.rect,d=rt(o,!0);d&&(s.top-=d.f,s.left-=d.e),o.toRect=s,o.thisAnimationDuration&&pt(l,s)&&!pt(i,s)&&(u.top-s.top)/(u.left-s.left)==(i.top-s.top)/(i.left-s.left)&&(n=function(t,e,n,o){return Math.sqrt(Math.pow(e.top-t.top,2)+Math.pow(e.left-t.left,2))/Math.sqrt(Math.pow(e.top-n.top,2)+Math.pow(e.left-n.left,2))*o.animation}(u,l,c,e.options)),pt(s,i)||(o.prevFromRect=i,o.prevToRect=s,n||(n=e.options.animation),e.animate(o,u,s,n)),n&&(a=!0,r=Math.max(r,n),clearTimeout(o.animationResetTimer),o.animationResetTimer=setTimeout((function(){o.animationTime=0,o.prevFromRect=null,o.fromRect=null,o.prevToRect=null,o.thisAnimationDuration=null}),n),o.thisAnimationDuration=n)})),clearTimeout(n),a?n=setTimeout((function(){"function"==typeof t&&t()}),r):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){if(o){at(t,"transition",""),at(t,"transform","");var a=rt(this.el),r=a&&a.a,i=a&&a.d,s=(e.left-n.left)/(r||1),l=(e.top-n.top)/(i||1);t.animatingX=!!s,t.animatingY=!!l,at(t,"transform","translate3d("+s+"px,"+l+"px,0)"),this.forRepaintDummy=function(t){return t.offsetWidth}(t),at(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),at(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout((function(){at(t,"transition",""),at(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1}),o)}}}))}function ve(t,e,n,o,a,r,i,s){var l,c,u=t[yt],d=u.options.onMove;return!window.CustomEvent||H||Z?(l=document.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=e,l.from=t,l.dragged=n,l.draggedRect=o,l.related=a||e,l.relatedRect=r||lt(e),l.willInsertAfter=s,l.originalEvent=i,t.dispatchEvent(l),d&&(c=d.call(u,l,i)),c}function be(t){t.draggable=!1}function ye(){oe=!1}function we(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function _e(t){return setTimeout(t,0)}function Te(t){return clearTimeout(t)}fe.prototype={constructor:fe,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(zt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,Ct):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,o=this.options,a=o.preventOnFilter,r=t.type,i=t.touches&&t.touches[0]||t.pointerType&&"touch"===t.pointerType&&t,s=(i||t).target,l=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||s,c=o.filter;if(function(t){ae.length=0;for(var e=t.getElementsByTagName("input"),n=e.length;n--;){var o=e[n];o.checked&&ae.push(o)}}(n),!Ct&&!(/mousedown|pointerdown/.test(r)&&0!==t.button||o.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!W||!s||"SELECT"!==s.tagName.toUpperCase())&&!((s=tt(s,o.draggable,n,!1))&&s.animated||It===s)){if(At=mt(s),Lt=mt(s,o.draggable),"function"==typeof c){if(c.call(this,t,s,this))return Dt({sortable:e,rootEl:l,name:"filter",targetEl:s,toEl:n,fromEl:n}),Et("filter",e,{evt:t}),void(a&&t.cancelable&&t.preventDefault())}else if(c&&(c=c.split(",").some((function(o){if(o=tt(l,o.trim(),n,!1))return Dt({sortable:e,rootEl:o,name:"filter",targetEl:s,fromEl:n,toEl:n}),Et("filter",e,{evt:t}),!0}))))return void(a&&t.cancelable&&t.preventDefault());o.handle&&!tt(l,o.handle,n,!1)||this._prepareDragStart(t,i,s)}}},_prepareDragStart:function(t,e,n){var o,a=this,r=a.el,i=a.options,s=r.ownerDocument;if(n&&!Ct&&n.parentNode===r){var l=lt(n);if(Pt=r,xt=(Ct=n).parentNode,Ot=Ct.nextSibling,It=n,Rt=i.group,fe.dragged=Ct,Yt={target:Ct,clientX:(e||t).clientX,clientY:(e||t).clientY},Gt=Yt.clientX-l.left,Wt=Yt.clientY-l.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,Ct.style["will-change"]="all",o=function(){Et("delayEnded",a,{evt:t}),fe.eventCanceled?a._onDrop():(a._disableDelayedDragEvents(),!G&&a.nativeDraggable&&(Ct.draggable=!0),a._triggerDragStart(t,e),Dt({sortable:a,name:"choose",originalEvent:t}),ot(Ct,i.chosenClass,!0))},i.ignore.split(",").forEach((function(t){it(Ct,t.trim(),be)})),U(s,"dragover",he),U(s,"mousemove",he),U(s,"touchmove",he),U(s,"mouseup",a._onDrop),U(s,"touchend",a._onDrop),U(s,"touchcancel",a._onDrop),G&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Ct.draggable=!0),Et("delayStart",this,{evt:t}),!i.delay||i.delayOnTouchOnly&&!e||this.nativeDraggable&&(Z||H))o();else{if(fe.eventCanceled)return void this._onDrop();U(s,"mouseup",a._disableDelayedDrag),U(s,"touchend",a._disableDelayedDrag),U(s,"touchcancel",a._disableDelayedDrag),U(s,"mousemove",a._delayedDragTouchMoveHandler),U(s,"touchmove",a._delayedDragTouchMoveHandler),i.supportPointer&&U(s,"pointermove",a._delayedDragTouchMoveHandler),a._dragStartTimer=setTimeout(o,i.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Ct&&be(Ct),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;K(t,"mouseup",this._disableDelayedDrag),K(t,"touchend",this._disableDelayedDrag),K(t,"touchcancel",this._disableDelayedDrag),K(t,"mousemove",this._delayedDragTouchMoveHandler),K(t,"touchmove",this._delayedDragTouchMoveHandler),K(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?U(document,"pointermove",this._onTouchMove):U(document,e?"touchmove":"mousemove",this._onTouchMove):(U(Ct,"dragend",this),U(Pt,"dragstart",this._onDragStart));try{document.selection?_e((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(Kt=!1,Pt&&Ct){Et("dragStarted",this,{evt:e}),this.nativeDraggable&&U(document,"dragover",pe);var n=this.options;!t&&ot(Ct,n.dragClass,!1),ot(Ct,n.ghostClass,!0),fe.active=this,t&&this._appendGhost(),Dt({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(jt){this._lastX=jt.clientX,this._lastY=jt.clientY,me();for(var t=document.elementFromPoint(jt.clientX,jt.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(jt.clientX,jt.clientY))!==e;)e=t;if(Ct.parentNode[yt]._isOutsideThisEl(t),e)do{if(e[yt]&&e[yt]._onDragOver({clientX:jt.clientX,clientY:jt.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break;t=e}while(e=e.parentNode);ge()}},_onTouchMove:function(t){if(Yt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,a=t.touches?t.touches[0]:t,r=Nt&&rt(Nt,!0),i=Nt&&r&&r.a,s=Nt&&r&&r.d,l=ie&&$t&>($t),c=(a.clientX-Yt.clientX+o.x)/(i||1)+(l?l[0]-ne[0]:0)/(i||1),u=(a.clientY-Yt.clientY+o.y)/(s||1)+(l?l[1]-ne[1]:0)/(s||1);if(!fe.active&&!Kt){if(n&&Math.max(Math.abs(a.clientX-this._lastX),Math.abs(a.clientY-this._lastY))o.right+10||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+10}(t,a,this)&&!p.animated){if(p===Ct)return I(!1);if(p&&r===t.target&&(i=p),i&&(n=lt(i)),!1!==ve(Pt,r,Ct,e,i,n,t,!!i))return O(),p&&p.nextSibling?r.insertBefore(Ct,p.nextSibling):r.appendChild(Ct),xt=r,M(),I(!0)}else if(p&&function(t,e,n){var o=lt(ut(n.el,0,n.options,!0));return e?t.clientXu+c*r/2:ld-Ut)return-Vt}else if(l>u+c*(1-a)/2&&ld-c*r/2)?l>u+c/2?1:-1:0}(t,i,n,a,_?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,ee,zt===i),0!==v){var D=mt(Ct);do{D-=v,y=xt.children[D]}while(y&&("none"===at(y,"display")||y===Nt))}if(0===v||y===i)return I(!1);zt=i,Vt=v;var C=i.nextElementSibling,x=!1,N=ve(Pt,r,Ct,e,i,n,t,x=1===v);if(!1!==N)return 1!==N&&-1!==N||(x=1===N),oe=!0,setTimeout(ye,30),O(),x&&!C?r.appendChild(Ct):i.parentNode.insertBefore(Ct,x?C:i),S&&vt(S,0,E-S.scrollTop),xt=Ct.parentNode,void 0===b||ee||(Ut=Math.abs(b-lt(i)[T])),M(),I(!0)}if(r.contains(Ct))return I(!1)}return!1}function P(s,l){Et(s,g,L({evt:t,isOwner:u,axis:a?"vertical":"horizontal",revert:o,dragRect:e,targetRect:n,canSort:d,fromSortable:m,target:i,completed:I,onMove:function(n,o){return ve(Pt,r,Ct,e,n,lt(n),t,o)},changed:M},l))}function O(){P("dragOverAnimationCapture"),g.captureAnimationState(),g!==m&&m.captureAnimationState()}function I(e){return P("dragOverCompleted",{insertion:e}),e&&(u?c._hideClone():c._showClone(g),g!==m&&(ot(Ct,Xt?Xt.options.ghostClass:c.options.ghostClass,!1),ot(Ct,s.ghostClass,!0)),Xt!==g&&g!==fe.active?Xt=g:g===fe.active&&Xt&&(Xt=null),m===g&&(g._ignoreWhileAnimating=i),g.animateAll((function(){P("dragOverAnimationComplete"),g._ignoreWhileAnimating=null})),g!==m&&(m.animateAll(),m._ignoreWhileAnimating=null)),(i===Ct&&!Ct.animated||i===r&&!i.animated)&&(zt=null),s.dragoverBubble||t.rootEl||i===document||(Ct.parentNode[yt]._isOutsideThisEl(t.target),!e&&he(t)),!s.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),h=!0}function M(){Ft=mt(Ct),Bt=mt(Ct,s.draggable),Dt({sortable:g,name:"change",toEl:r,newIndex:Ft,newDraggableIndex:Bt,originalEvent:t})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){K(document,"mousemove",this._onTouchMove),K(document,"touchmove",this._onTouchMove),K(document,"pointermove",this._onTouchMove),K(document,"dragover",he),K(document,"mousemove",he),K(document,"touchmove",he)},_offUpEvents:function(){var t=this.el.ownerDocument;K(t,"mouseup",this._onDrop),K(t,"touchend",this._onDrop),K(t,"pointerup",this._onDrop),K(t,"touchcancel",this._onDrop),K(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;Ft=mt(Ct),Bt=mt(Ct,n.draggable),Et("drop",this,{evt:t}),xt=Ct&&Ct.parentNode,Ft=mt(Ct),Bt=mt(Ct,n.draggable),fe.eventCanceled||(Kt=!1,ee=!1,te=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Te(this.cloneId),Te(this._dragStartId),this.nativeDraggable&&(K(document,"drop",this),K(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),W&&at(document.body,"user-select",""),at(Ct,"transform",""),t&&(qt&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),Nt&&Nt.parentNode&&Nt.parentNode.removeChild(Nt),(Pt===xt||Xt&&"clone"!==Xt.lastPutMode)&&Mt&&Mt.parentNode&&Mt.parentNode.removeChild(Mt),Ct&&(this.nativeDraggable&&K(Ct,"dragend",this),be(Ct),Ct.style["will-change"]="",qt&&!Kt&&ot(Ct,Xt?Xt.options.ghostClass:this.options.ghostClass,!1),ot(Ct,this.options.chosenClass,!1),Dt({sortable:this,name:"unchoose",toEl:xt,newIndex:null,newDraggableIndex:null,originalEvent:t}),Pt!==xt?(Ft>=0&&(Dt({rootEl:xt,name:"add",toEl:xt,fromEl:Pt,originalEvent:t}),Dt({sortable:this,name:"remove",toEl:xt,originalEvent:t}),Dt({rootEl:xt,name:"sort",toEl:xt,fromEl:Pt,originalEvent:t}),Dt({sortable:this,name:"sort",toEl:xt,originalEvent:t})),Xt&&Xt.save()):Ft!==At&&Ft>=0&&(Dt({sortable:this,name:"update",toEl:xt,originalEvent:t}),Dt({sortable:this,name:"sort",toEl:xt,originalEvent:t})),fe.active&&(null!=Ft&&-1!==Ft||(Ft=At,Bt=Lt),Dt({sortable:this,name:"end",toEl:xt,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){Et("nulling",this),Pt=Ct=xt=Nt=Ot=Mt=It=kt=Yt=jt=qt=Ft=Bt=At=Lt=zt=Vt=Xt=Rt=fe.dragged=fe.ghost=fe.clone=fe.active=null,ae.forEach((function(t){t.checked=!0})),ae.length=Ht=Zt=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":Ct&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move"),t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,a=n.length,r=this.options;o{const e=t.target;this.name(e.value),this.slug((0,tn.slug)(e.value))}})),50),t.add("slug",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.slug_label")),m("input",{className:"FormControl",bidi:this.slug})),40),t.add("description",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.description_label")),m("textarea",{className:"FormControl",bidi:this.description})),30),t.add("color",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.color_label")),m(Ke(),{className:"FormControl",placeholder:"#aaaaaa",bidi:this.color})),20),t.add("icon",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.icon_label")),m("div",{className:"helpText"},a().translator.trans("flarum-tags.admin.edit_tag.icon_text",{a:m("a",{href:"https://fontawesome.com/icons?m=free",tabindex:"-1"})})),m("input",{className:"FormControl",placeholder:"fas fa-bolt",bidi:this.icon})),10),t.add("hidden",m("div",{className:"Form-group"},m("div",null,m("label",{className:"checkbox"},m("input",{type:"checkbox",bidi:this.isHidden}),a().translator.trans("flarum-tags.admin.edit_tag.hide_label")))),10),t.add("submit",m("div",{className:"Form-group Form-controls"},m(h(),{type:"submit",className:"Button Button--primary EditTagModal-save",loading:this.loading},a().translator.trans("flarum-tags.admin.edit_tag.submit_button")),this.tag.exists&&m("button",{type:"button",className:"Button EditTagModal-delete",onclick:this.delete.bind(this)},a().translator.trans("flarum-tags.admin.edit_tag.delete_tag_button"))),-10),t}submitData(){return{name:this.name(),slug:this.slug(),description:this.description(),color:this.color(),icon:this.icon(),isHidden:this.isHidden(),isPrimary:this.isPrimary()}}onsubmit(t){t.preventDefault(),this.loading=!0,this.tag.save(this.submitData()).then((()=>this.hide()),(()=>this.loading=!1))}delete(){if(confirm(an()(a().translator.trans("flarum-tags.admin.edit_tag.delete_tag_confirmation")))){const t=a().store.all("tags").filter((t=>t.parent()===this.tag));this.tag.delete().then((()=>{t.forEach((t=>t.pushData({attributes:{isChild:!1}}))),m.redraw()})),this.hide()}}}function sn(t){return m("li",{"data-id":t.id(),style:{color:t.color()}},m("div",{className:"TagListItem-info"},(0,b.Z)(t),m("span",{className:"TagListItem-name"},t.name()),m(h(),{className:"Button Button--link",icon:"fas fa-pencil-alt",onclick:()=>a().modal.show(rn,{model:t})})),!t.isChild()&&null!==t.position()&&m("ol",{className:"TagListItem-children TagList"},(0,y.Z)(a().store.all("tags")).filter((e=>e.parent()===t)).map(sn)))}flarum.reg.add("flarum-tags","admin/components/EditTagModal",rn);class ln extends(Xe()){oninit(t){super.oninit(t),this.forcedRefreshKey=0,this.loading=!0,a().tagList.load(["parent"]).then((()=>{this.loading=!1,m.redraw()}))}content(){if(this.loading)return m(f(),null);const t=this.setting("flarum-tags.min_primary_tags",0),e=this.setting("flarum-tags.max_primary_tags",0),n=this.setting("flarum-tags.min_secondary_tags",0),o=this.setting("flarum-tags.max_secondary_tags",0),r=(0,y.Z)(a().store.all("tags").filter((t=>!t.parent())));return m("div",{className:"TagsContent"},m("div",{className:"TagsContent-list"},m("div",{className:"container",key:this.forcedRefreshKey,oncreate:this.onListOnCreate.bind(this)},m(We(),null,m(ze(),{className:"TagGroup",label:a().translator.trans("flarum-tags.admin.tags.primary_heading")},m("ol",{className:"TagList TagList--primary"},r.filter((t=>null!==t.position()&&!t.isChild())).map(sn)),m(h(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>a().modal.show(rn,{primary:!0})},a().translator.trans("flarum-tags.admin.tags.create_primary_tag_button"))),m(ze(),{className:"TagGroup TagGroup--secondary",label:a().translator.trans("flarum-tags.admin.tags.secondary_heading")},m("ul",{className:"TagList"},r.filter((t=>null===t.position())).sort(((t,e)=>t.name().localeCompare(e.name()))).map(sn)),m(h(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>a().modal.show(rn,{primary:!1})},a().translator.trans("flarum-tags.admin.tags.create_secondary_tag_button"))),m(ze(),{label:a().translator.trans("flarum-tags.admin.tags.settings_heading")},m(Ze(),null,m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.tag_settings.required_primary_heading")),m("div",{className:"helpText"},a().translator.trans("flarum-tags.admin.tag_settings.required_primary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:t(),oninput:je()("value",this.setMinTags.bind(this,t,e))}),a().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:t(),bidi:e}))),m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.tag_settings.required_secondary_heading")),m("div",{className:"helpText"},a().translator.trans("flarum-tags.admin.tag_settings.required_secondary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:n(),oninput:je()("value",this.setMinTags.bind(this,n,o))}),a().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:n(),bidi:o}))),m("div",{className:"Form-group Form-controls"},this.submitButton())))),m("div",{className:"TagsContent-footer"},m("p",null,a().translator.trans("flarum-tags.admin.tags.about_tags_text"))))))}onListOnCreate(t){this.$(".TagList").get().map((t=>{Be.create(t,{group:"tags",delay:50,delayOnTouchOnly:!0,touchStartThreshold:5,animation:150,swapThreshold:.65,dragClass:"sortable-dragging",ghostClass:"sortable-placeholder",onSort:t=>this.onSortUpdate(t)})}))}setMinTags(t,e,n){t(n),e(Math.max(n,e()))}onSortUpdate(t){t.from instanceof HTMLOListElement&&t.to instanceof HTMLUListElement&&a().store.getById("tags",t.item.getAttribute("data-id")).pushData({attributes:{position:null,isChild:!1},relationships:{parent:null}});const e=this.$(".TagList--primary > li").map((function(){return{id:$(this).data("id"),children:$(this).find("li").map((function(){return $(this).data("id")})).get()}})).get();e.forEach(((t,e)=>{const n=a().store.getById("tags",t.id);n.pushData({attributes:{position:e,isChild:!1},relationships:{parent:null}}),t.children.forEach(((t,e)=>{a().store.getById("tags",t).pushData({attributes:{position:e,isChild:!0},relationships:{parent:n}})}))})),a().request({url:a().forum.attribute("apiUrl")+"/tags/order",method:"POST",body:{order:e}}),this.forcedRefreshKey++,m.redraw()}}flarum.reg.add("flarum-tags","admin/components/TagsPage",ln);var cn=n(351),un=n.n(cn);class dn{constructor(){(0,C.Z)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(un().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),null!=this.loadedIncludes||(this.loadedIncludes=new Set),un().store.find("tags",{include:t.join(",")}).then((e=>{const n=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),n}))}}flarum.reg.add("flarum-tags","common/states/TagListState",dn);const mn=flarum.reg.get("core","common/extenders");var gn=n.n(mn);const hn=flarum.reg.get("core","common/utils/computed");var pn=n.n(hn);const fn=flarum.reg.get("core","common/Model");var vn=n.n(fn);class bn extends(vn()){name(){return vn().attribute("name").call(this)}slug(){return vn().attribute("slug").call(this)}description(){return vn().attribute("description").call(this)}color(){return vn().attribute("color").call(this)}backgroundUrl(){return vn().attribute("backgroundUrl").call(this)}backgroundMode(){return vn().attribute("backgroundMode").call(this)}icon(){return vn().attribute("icon").call(this)}position(){return vn().attribute("position").call(this)}parent(){return vn().hasOne("parent").call(this)}children(){return vn().hasMany("children").call(this)}defaultSort(){return vn().attribute("defaultSort").call(this)}isChild(){return vn().attribute("isChild").call(this)}isHidden(){return vn().attribute("isHidden").call(this)}isPrimary(){return vn().attribute("isPrimary").call(this)}discussionCount(){return vn().attribute("discussionCount").call(this)}lastPostedAt(){return vn().attribute("lastPostedAt",vn().transformDate).call(this)}lastPostedDiscussion(){return vn().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return vn().attribute("isRestricted").call(this)}canStartDiscussion(){return vn().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return vn().attribute("canAddToDiscussion").call(this)}isPrimaryParent(){return pn()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",bn);const yn=flarum.reg.get("core","common/query/IGambit");class wn extends yn.KeyValueGambit{constructor(){super(...arguments),(0,C.Z)(this,"predicates",!0)}key(){return un().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return un().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let n=[];return Array.isArray(t)?(n=t.map((t=>this.fromFilter(t.toString(),e))),n.join(" ")):"".concat(e?"-":"").concat(this.key(),":").concat(this.filterValueToGambitValue(t))}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",wn);const _n=[(new(gn().Store)).add("tags",bn),(new(gn().Search)).gambit("discussions",wn)];a().initializers.add("flarum-tags",(t=>{t.tagList=new dn,t.extensionData.for("flarum-tags").registerPage(ln),(0,r.extend)(s().prototype,"oninit",(function(){this.loading=!0})),(0,r.extend)(s().prototype,"oncreate",(function(){a().tagList.load().then((()=>{this.loading=!1,m.redraw()}))})),(0,r.override)(s().prototype,"view",(function(t,e){return this.loading?m(f(),null):t(e)})),(0,r.override)(a(),"getRequiredPermissions",((t,e)=>{const n=e.match(/^tag\d+\./);return n?t(e.substr(n[0].length)).map((t=>n[0]+t)):t(e)})),(0,r.extend)(s().prototype,"scopeItems",(t=>{(0,y.Z)(a().store.all("tags")).filter((t=>t.isRestricted())).forEach((e=>t.add("tag"+e.id(),{label:(0,v.Z)(e),onremove:()=>e.save({isRestricted:!1}),render:t=>"setting"in t?null:"viewForum"===t.permission||"startDiscussion"===t.permission||t.permission.startsWith("discussion.")&&!1!==t.tagScoped||t.tagScoped?m(c(),{permission:"tag".concat(e.id(),".").concat(t.permission),allowGuest:t.allowGuest}):null})))})),(0,r.extend)(s().prototype,"scopeControlItems",(t=>{const e=(0,y.Z)(a().store.all("tags").filter((t=>!t.isRestricted())));e.length&&t.add("tag",m(d(),{className:"Dropdown--restrictByTag",buttonClassName:"Button Button--text",label:a().translator.trans("flarum-tags.admin.permissions.restrict_by_tag_heading"),icon:"fas fa-plus",caretIcon:null},e.map((t=>m(h(),{icon:!0,onclick:()=>t.save({isRestricted:!0})},[(0,b.Z)(t,{className:"Button-icon"})," ",t.name()])))))})),w(),S(),(0,r.extend)(s().prototype,"startItems",(t=>{t.add("allowTagChange",{icon:"fas fa-tag",label:a().translator.trans("flarum-tags.admin.permissions.allow_edit_tags_label"),setting:()=>{const t=parseInt(a().data.settings.allow_tag_change,10);return m(D(),{defaultLabel:t?a().translator.trans("core.admin.permissions_controls.allow_some_minutes_button",{count:t}):a().translator.trans("core.admin.permissions_controls.allow_indefinitely_button"),key:"allow_tag_change",options:[{value:"-1",label:a().translator.trans("core.admin.permissions_controls.allow_indefinitely_button")},{value:"10",label:a().translator.trans("core.admin.permissions_controls.allow_ten_minutes_button")},{value:"reply",label:a().translator.trans("core.admin.permissions_controls.allow_until_reply_button")}]})}},90)})),(0,r.extend)(A().prototype,"customFieldComponents",(function(t){t.add("flarum-tags.select-tags",(t=>m(M,Object.assign({},t,{settingValue:t.bidi}))))}))}))},974:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var o=n(836),a=n.n(o);function r(t,e,n){void 0===e&&(e={}),void 0===n&&(n={});const o=t&&t.icon(),{useColor:r=!0}=n;return e.className=a()([e.className,"icon text-colored",o?t.icon():"TagIcon"]),t&&r?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),o?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",r)},924:(t,e,n)=>{"use strict";n.d(e,{Z:()=>g});var o=n(780),a=n.n(o),r=n(678),i=n.n(r),s=n(836),l=n.n(s),c=n(679),u=n.n(c),d=n(974);function g(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const n=a()(e,"link"),o=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const o=t.color();o&&(e.style["--tag-bg"]=o,e.className=l()(e.className,"colored",u()(o))),n&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(n?i():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.Z)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},o)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",g)},270:()=>{},648:(t,e,n)=>{"use strict";function o(t){return t.slice(0).sort(((t,e)=>{const n=t.position(),o=e.position();if(null===n&&null===o)return e.discussionCount()-t.discussionCount();if(null===o)return-1;if(null===n)return 1;const a=t.parent(),r=e.parent();return a===r?n-o:a&&r?a.position()-r.position():a?a===e?1:a.position()-o:r?r===t?-1:n-r.position():0}))}n.d(e,{Z:()=>o}),flarum.reg.add("flarum-tags","common/utils/sortTags",o)},433:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},351:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},645:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},44:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},678:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},149:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},291:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},679:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},657:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},636:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},836:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},780:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},596:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},905:(t,e,n)=>{"use strict";function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function a(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var a=n.call(t,e);if("object"!==o(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===o(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n.d(e,{Z:()=>a})}},o={};function a(t){var e=o[t];if(void 0!==e)return e.exports;var r=o[t]={exports:{}};return n[t](r,r.exports,a),r.exports}a.m=n,a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,n)=>(a.f[n](t,e),e)),[])),a.u=t=>"common/components/TagSelectionModal.js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",a.l=(n,o,r,i)=>{if(t[n])t[n].push(o);else{var s,l;if(void 0!==r)for(var c=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(g);var a=t[n];if(delete t[n],s.parentNode&&s.parentNode.removeChild(s),a&&a.forEach((t=>t(o))),e)return e(o)},g=setTimeout(m.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=m.bind(null,s.onerror),s.onload=m.bind(null,s.onload),l&&document.head.appendChild(s)}},a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t})(),a.f.compat=(t,e)=>{const n=a.l;a.l=flarum.reg.loadChunk.bind(flarum.reg,n)},(()=>{var t={328:0};a.f.j=(e,n)=>{var o=a.o(t,e)?t[e]:void 0;if(0!==o)if(o)n.push(o[2]);else{var r=new Promise(((n,a)=>o=t[e]=[n,a]));n.push(o[2]=r);var i=a.p+a.u(e),s=new Error;a.l(i,(n=>{if(a.o(t,e)&&(0!==(o=t[e])&&(t[e]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",s.name="ChunkLoadError",s.type=r,s.request=i,o[1](s)}}),"chunk-"+e,e)}};var e=(e,n)=>{var o,r,[i,s,l]=n,c=0;if(i.some((e=>0!==t[e]))){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);l&&l(a)}for(e&&e(n);c{"use strict";a.r(r),a.d(r,{extend:()=>n.l});var t=a(270),e={};for(const n in t)"default"!==n&&(e[n]=()=>t[n]);a.d(r,e);var n=a(396)})(),module.exports=r})(); +(()=>{var t,e,n={681:(t,e,n)=>{"use strict";n.d(e,{l:()=>_n});const o=flarum.reg.get("core","admin/app");var a=n.n(o);const r=flarum.reg.get("core","common/extend"),i=flarum.reg.get("core","admin/components/PermissionGrid");var s=n.n(i);const l=flarum.reg.get("core","admin/components/PermissionDropdown");var c=n.n(l);const u=flarum.reg.get("core","common/components/Dropdown");var d=n.n(u),h=n(645),g=n.n(h),p=n(149),f=n.n(p),v=n(924),b=n(974),y=n(648);const w=flarum.reg.get("core","admin/components/BasicsPage");var _=n.n(w);function T(){(0,r.extend)(_(),"homePageItems",(t=>{t.add("tags",{path:"/tags",label:app.translator.trans("flarum-tags.admin.basics.tags_label")})}))}const S=flarum.reg.get("core","admin/components/SettingDropdown");var E=n.n(S),D=n(905),C=n(433),x=n.n(C),N=(n(780),n(836)),O=n.n(N);function P(t,e){void 0===e&&(e={});const n=[],{link:o,...a}=e;return a.className=O()("TagsLabel",a.className),t?(0,y.Z)(t).forEach((e=>{(e||1===t.length)&&n.push((0,v.Z)(e,{link:o}))})):n.push((0,v.Z)()),m("span",a,n)}flarum.reg.add("flarum-tags","common/helpers/tagsLabel",P);class I extends(x()){constructor(){super(...arguments),(0,D.Z)(this,"tags",[]),(0,D.Z)(this,"loaded",!1)}view(){const t=JSON.parse(this.attrs.settingValue()||"[]");return this.loaded||a().tagList.load(["parent"]).then((e=>{this.tags=e.filter((e=>t.includes(e.id()))),this.loaded=!0,m.redraw()})),m("div",{className:"Form-group SelectTagsSettingComponent"},m("label",null,this.attrs.label),this.attrs.help&&m("p",{className:"helpText"},this.attrs.help),this.loaded?m(g(),{className:"Button Button--text",onclick:()=>a().modal.show((()=>n.e(162).then(n.bind(n,610))),{selectedTags:this.tags,onsubmit:t=>{this.tags=t,this.attrs.settingValue(JSON.stringify(t.map((t=>t.id()))))},...this.attrs.options})},this.tags.length?P(this.tags):m("span",{className:"TagLabel untagged"},a().translator.trans("flarum-tags.admin.settings.button_text"))):m(f(),{size:"small",display:"inline"}))}}flarum.reg.add("flarum-tags","admin/components/SelectTagsSettingComponent",I),flarum.reg.addChunkModule("162","610","flarum-tags","common/components/TagSelectionModal"),flarum.reg.addChunkModule("162","610","flarum-tags","forum/components/ToggleButton");const M=flarum.reg.get("core","common/components/FormGroup");var k=n.n(M),A=n(351),F=n.n(A);class L{constructor(){(0,D.Z)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(F().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),null!=this.loadedIncludes||(this.loadedIncludes=new Set),F().store.find("tags",{include:t.join(",")}).then((e=>{const n=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),n}))}}flarum.reg.add("flarum-tags","common/states/TagListState",L);const B=flarum.reg.get("core","common/extenders");var R=n.n(B);const X=flarum.reg.get("core","common/utils/computed");var Y=n.n(X);const j=flarum.reg.get("core","common/Model");var H=n.n(j);class Z extends(H()){name(){return H().attribute("name").call(this)}slug(){return H().attribute("slug").call(this)}description(){return H().attribute("description").call(this)}color(){return H().attribute("color").call(this)}backgroundUrl(){return H().attribute("backgroundUrl").call(this)}backgroundMode(){return H().attribute("backgroundMode").call(this)}icon(){return H().attribute("icon").call(this)}position(){return H().attribute("position").call(this)}parent(){return H().hasOne("parent").call(this)}children(){return H().hasMany("children").call(this)}defaultSort(){return H().attribute("defaultSort").call(this)}isChild(){return H().attribute("isChild").call(this)}isHidden(){return H().attribute("isHidden").call(this)}isPrimary(){return H().attribute("isPrimary").call(this)}discussionCount(){return H().attribute("discussionCount").call(this)}lastPostedAt(){return H().attribute("lastPostedAt",H().transformDate).call(this)}lastPostedDiscussion(){return H().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return H().attribute("isRestricted").call(this)}canStartDiscussion(){return H().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return H().attribute("canAddToDiscussion").call(this)}isPrimaryParent(){return Y()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",Z);const G=flarum.reg.get("core","common/query/IGambit");class W extends G.KeyValueGambit{constructor(){super(...arguments),(0,D.Z)(this,"predicates",!0)}key(){return F().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return F().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let n=[];return Array.isArray(t)?(n=t.map((t=>this.fromFilter(t.toString(),e))),n.join(" ")):"".concat(e?"-":"").concat(this.key(),":").concat(this.filterValueToGambitValue(t))}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",W);const q=[(new(R().Store)).add("tags",Z),(new(R().Search)).gambit("discussions",W)];function z(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function V(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}function tt(t){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(t)}var et=tt(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),nt=tt(/Edge/i),ot=tt(/firefox/i),at=tt(/safari/i)&&!tt(/chrome/i)&&!tt(/android/i),rt=tt(/iP(ad|od|hone)/i),it=tt(/chrome/i)&&tt(/android/i),st={capture:!1,passive:!1};function lt(t,e,n){t.addEventListener(e,n,!et&&st)}function ct(t,e,n){t.removeEventListener(e,n,!et&&st)}function ut(t,e){if(e){if(">"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function dt(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function mt(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&ut(t,e):ut(t,e))||o&&t===n)return t;if(t===n)break}while(t=dt(t))}return null}var ht,gt=/\s+/g;function pt(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(gt," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(gt," ")}}function ft(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function vt(t,e){var n="";if("string"==typeof t)n=t;else do{var o=ft(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var a=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return a&&new a(n)}function bt(t,e,n){if(t){var o=t.getElementsByTagName(e),a=0,r=o.length;if(n)for(;a=r:a<=r))return o;if(o===yt())break;o=Ct(o,!1)}return!1}function Tt(t,e,n,o){for(var a=0,r=0,i=t.children;r2&&void 0!==arguments[2]?arguments[2]:{},o=n.evt,a=Q(n,Ft);At.pluginEvent.bind(Ne)(t,e,V({dragEl:Rt,parentEl:Xt,ghostEl:Yt,rootEl:jt,nextEl:Ht,lastDownEl:Zt,cloneEl:Gt,cloneHidden:Wt,dragStarted:ae,putSortable:Kt,activeSortable:Ne.active,originalEvent:o,oldIndex:qt,oldDraggableIndex:Vt,newIndex:zt,newDraggableIndex:Ut,hideGhostForTarget:Ee,unhideGhostForTarget:De,cloneNowHidden:function(){Wt=!0},cloneNowShown:function(){Wt=!1},dispatchSortableEvent:function(t){Bt({sortable:e,name:t,originalEvent:o})}},a))};function Bt(t){!function(t){var e=t.sortable,n=t.rootEl,o=t.name,a=t.targetEl,r=t.cloneEl,i=t.toEl,s=t.fromEl,l=t.oldIndex,c=t.newIndex,u=t.oldDraggableIndex,d=t.newDraggableIndex,m=t.originalEvent,h=t.putSortable,g=t.extraEventProperties;if(e=e||n&&n[It]){var p,f=e.options,v="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||et||nt?(p=document.createEvent("Event")).initEvent(o,!0,!0):p=new CustomEvent(o,{bubbles:!0,cancelable:!0}),p.to=i||n,p.from=s||n,p.item=a||n,p.clone=r,p.oldIndex=l,p.newIndex=c,p.oldDraggableIndex=u,p.newDraggableIndex=d,p.originalEvent=m,p.pullMode=h?h.lastPutMode:void 0;var b=V(V({},g),At.getEventProperties(o,e));for(var y in b)p[y]=b[y];n&&n.dispatchEvent(p),f[v]&&f[v].call(e,p)}}(V({putSortable:Kt,cloneEl:Gt,targetEl:Rt,rootEl:jt,oldIndex:qt,oldDraggableIndex:Vt,newIndex:zt,newDraggableIndex:Ut},t))}var Rt,Xt,Yt,jt,Ht,Zt,Gt,Wt,qt,zt,Vt,Ut,$t,Kt,Jt,Qt,te,ee,ne,oe,ae,re,ie,se,le,ce=!1,ue=!1,de=[],me=!1,he=!1,ge=[],pe=!1,fe=[],ve="undefined"!=typeof document,be=rt,ye=nt||et?"cssFloat":"float",we=ve&&!it&&!rt&&"draggable"in document.createElement("div"),_e=function(){if(ve){if(et)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),Te=function(t,e){var n=ft(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),a=Tt(t,0,e),r=Tt(t,1,e),i=a&&ft(a),s=r&&ft(r),l=i&&parseInt(i.marginLeft)+parseInt(i.marginRight)+wt(a).width,c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+wt(r).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(a&&i.float&&"none"!==i.float){var u="left"===i.float?"left":"right";return!r||"both"!==s.clear&&s.clear!==u?"horizontal":"vertical"}return a&&("block"===i.display||"flex"===i.display||"table"===i.display||"grid"===i.display||l>=o&&"none"===n[ye]||r&&"none"===n[ye]&&l+c>o)?"vertical":"horizontal"},Se=function(t){function e(t,n){return function(o,a,r,i){var s=o.options.group.name&&a.options.group.name&&o.options.group.name===a.options.group.name;if(null==t&&(n||s))return!0;if(null==t||!1===t)return!1;if(n&&"clone"===t)return t;if("function"==typeof t)return e(t(o,a,r,i),n)(o,a,r,i);var l=(n?o:a).options.group.name;return!0===t||"string"==typeof t&&t===l||t.join&&t.indexOf(l)>-1}}var n={},o=t.group;o&&"object"==U(o)||(o={name:o}),n.name=o.name,n.checkPull=e(o.pull,!0),n.checkPut=e(o.put),n.revertClone=o.revertClone,t.group=n},Ee=function(){!_e&&Yt&&ft(Yt,"display","none")},De=function(){!_e&&Yt&&ft(Yt,"display","")};ve&&!it&&document.addEventListener("click",(function(t){if(ue)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),ue=!1,!1}),!0);var Ce=function(t){if(Rt){t=t.touches?t.touches[0]:t;var e=(a=t.clientX,r=t.clientY,de.some((function(t){var e=t[It].options.emptyInsertThreshold;if(e&&!St(t)){var n=wt(t),o=a>=n.left-e&&a<=n.right+e,s=r>=n.top-e&&r<=n.bottom+e;return o&&s?i=t:void 0}})),i);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[It]._onDragOver(n)}}var a,r,i},xe=function(t){Rt&&Rt.parentNode[It]._isOutsideThisEl(t.target)};function Ne(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=J({},e),t[It]=this;var n,o,a={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Te(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Ne.supportPointer&&"PointerEvent"in window&&!at,emptyInsertThreshold:5};for(var r in At.initializePlugins(this,t,a),a)!(r in e)&&(e[r]=a[r]);for(var i in Se(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&we,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?lt(t,"pointerdown",this._onTapStart):(lt(t,"mousedown",this._onTapStart),lt(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(lt(t,"dragover",this),lt(t,"dragenter",this)),de.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),J(this,(o=[],{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach((function(t){if("none"!==ft(t,"display")&&t!==Ne.ghost){o.push({target:t,rect:wt(t)});var e=V({},o[o.length-1].rect);if(t.thisAnimationDuration){var n=vt(t,!0);n&&(e.top-=n.f,e.left-=n.e)}t.fromRect=e}}))},addAnimationState:function(t){o.push(t)},removeAnimationState:function(t){o.splice(function(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var o in e)if(e.hasOwnProperty(o)&&e[o]===t[n][o])return Number(n);return-1}(o,{target:t}),1)},animateAll:function(t){var e=this;if(!this.options.animation)return clearTimeout(n),void("function"==typeof t&&t());var a=!1,r=0;o.forEach((function(t){var n=0,o=t.target,i=o.fromRect,s=wt(o),l=o.prevFromRect,c=o.prevToRect,u=t.rect,d=vt(o,!0);d&&(s.top-=d.f,s.left-=d.e),o.toRect=s,o.thisAnimationDuration&&xt(l,s)&&!xt(i,s)&&(u.top-s.top)/(u.left-s.left)==(i.top-s.top)/(i.left-s.left)&&(n=function(t,e,n,o){return Math.sqrt(Math.pow(e.top-t.top,2)+Math.pow(e.left-t.left,2))/Math.sqrt(Math.pow(e.top-n.top,2)+Math.pow(e.left-n.left,2))*o.animation}(u,l,c,e.options)),xt(s,i)||(o.prevFromRect=i,o.prevToRect=s,n||(n=e.options.animation),e.animate(o,u,s,n)),n&&(a=!0,r=Math.max(r,n),clearTimeout(o.animationResetTimer),o.animationResetTimer=setTimeout((function(){o.animationTime=0,o.prevFromRect=null,o.fromRect=null,o.prevToRect=null,o.thisAnimationDuration=null}),n),o.thisAnimationDuration=n)})),clearTimeout(n),a?n=setTimeout((function(){"function"==typeof t&&t()}),r):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){if(o){ft(t,"transition",""),ft(t,"transform","");var a=vt(this.el),r=a&&a.a,i=a&&a.d,s=(e.left-n.left)/(r||1),l=(e.top-n.top)/(i||1);t.animatingX=!!s,t.animatingY=!!l,ft(t,"transform","translate3d("+s+"px,"+l+"px,0)"),this.forRepaintDummy=function(t){return t.offsetWidth}(t),ft(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),ft(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout((function(){ft(t,"transition",""),ft(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1}),o)}}}))}function Oe(t,e,n,o,a,r,i,s){var l,c,u=t[It],d=u.options.onMove;return!window.CustomEvent||et||nt?(l=document.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=e,l.from=t,l.dragged=n,l.draggedRect=o,l.related=a||e,l.relatedRect=r||wt(e),l.willInsertAfter=s,l.originalEvent=i,t.dispatchEvent(l),d&&(c=d.call(u,l,i)),c}function Pe(t){t.draggable=!1}function Ie(){pe=!1}function Me(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function ke(t){return setTimeout(t,0)}function Ae(t){return clearTimeout(t)}Ne.prototype={constructor:Ne,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(re=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,Rt):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,o=this.options,a=o.preventOnFilter,r=t.type,i=t.touches&&t.touches[0]||t.pointerType&&"touch"===t.pointerType&&t,s=(i||t).target,l=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||s,c=o.filter;if(function(t){fe.length=0;for(var e=t.getElementsByTagName("input"),n=e.length;n--;){var o=e[n];o.checked&&fe.push(o)}}(n),!Rt&&!(/mousedown|pointerdown/.test(r)&&0!==t.button||o.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!at||!s||"SELECT"!==s.tagName.toUpperCase())&&!((s=mt(s,o.draggable,n,!1))&&s.animated||Zt===s)){if(qt=Et(s),Vt=Et(s,o.draggable),"function"==typeof c){if(c.call(this,t,s,this))return Bt({sortable:e,rootEl:l,name:"filter",targetEl:s,toEl:n,fromEl:n}),Lt("filter",e,{evt:t}),void(a&&t.cancelable&&t.preventDefault())}else if(c&&(c=c.split(",").some((function(o){if(o=mt(l,o.trim(),n,!1))return Bt({sortable:e,rootEl:o,name:"filter",targetEl:s,fromEl:n,toEl:n}),Lt("filter",e,{evt:t}),!0}))))return void(a&&t.cancelable&&t.preventDefault());o.handle&&!mt(l,o.handle,n,!1)||this._prepareDragStart(t,i,s)}}},_prepareDragStart:function(t,e,n){var o,a=this,r=a.el,i=a.options,s=r.ownerDocument;if(n&&!Rt&&n.parentNode===r){var l=wt(n);if(jt=r,Xt=(Rt=n).parentNode,Ht=Rt.nextSibling,Zt=n,$t=i.group,Ne.dragged=Rt,Jt={target:Rt,clientX:(e||t).clientX,clientY:(e||t).clientY},ne=Jt.clientX-l.left,oe=Jt.clientY-l.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,Rt.style["will-change"]="all",o=function(){Lt("delayEnded",a,{evt:t}),Ne.eventCanceled?a._onDrop():(a._disableDelayedDragEvents(),!ot&&a.nativeDraggable&&(Rt.draggable=!0),a._triggerDragStart(t,e),Bt({sortable:a,name:"choose",originalEvent:t}),pt(Rt,i.chosenClass,!0))},i.ignore.split(",").forEach((function(t){bt(Rt,t.trim(),Pe)})),lt(s,"dragover",Ce),lt(s,"mousemove",Ce),lt(s,"touchmove",Ce),lt(s,"mouseup",a._onDrop),lt(s,"touchend",a._onDrop),lt(s,"touchcancel",a._onDrop),ot&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Rt.draggable=!0),Lt("delayStart",this,{evt:t}),!i.delay||i.delayOnTouchOnly&&!e||this.nativeDraggable&&(nt||et))o();else{if(Ne.eventCanceled)return void this._onDrop();lt(s,"mouseup",a._disableDelayedDrag),lt(s,"touchend",a._disableDelayedDrag),lt(s,"touchcancel",a._disableDelayedDrag),lt(s,"mousemove",a._delayedDragTouchMoveHandler),lt(s,"touchmove",a._delayedDragTouchMoveHandler),i.supportPointer&<(s,"pointermove",a._delayedDragTouchMoveHandler),a._dragStartTimer=setTimeout(o,i.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Rt&&Pe(Rt),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;ct(t,"mouseup",this._disableDelayedDrag),ct(t,"touchend",this._disableDelayedDrag),ct(t,"touchcancel",this._disableDelayedDrag),ct(t,"mousemove",this._delayedDragTouchMoveHandler),ct(t,"touchmove",this._delayedDragTouchMoveHandler),ct(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?lt(document,"pointermove",this._onTouchMove):lt(document,e?"touchmove":"mousemove",this._onTouchMove):(lt(Rt,"dragend",this),lt(jt,"dragstart",this._onDragStart));try{document.selection?ke((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(ce=!1,jt&&Rt){Lt("dragStarted",this,{evt:e}),this.nativeDraggable&<(document,"dragover",xe);var n=this.options;!t&&pt(Rt,n.dragClass,!1),pt(Rt,n.ghostClass,!0),Ne.active=this,t&&this._appendGhost(),Bt({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(Qt){this._lastX=Qt.clientX,this._lastY=Qt.clientY,Ee();for(var t=document.elementFromPoint(Qt.clientX,Qt.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(Qt.clientX,Qt.clientY))!==e;)e=t;if(Rt.parentNode[It]._isOutsideThisEl(t),e)do{if(e[It]&&e[It]._onDragOver({clientX:Qt.clientX,clientY:Qt.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break;t=e}while(e=e.parentNode);De()}},_onTouchMove:function(t){if(Jt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,a=t.touches?t.touches[0]:t,r=Yt&&vt(Yt,!0),i=Yt&&r&&r.a,s=Yt&&r&&r.d,l=be&&le&&Dt(le),c=(a.clientX-Jt.clientX+o.x)/(i||1)+(l?l[0]-ge[0]:0)/(i||1),u=(a.clientY-Jt.clientY+o.y)/(s||1)+(l?l[1]-ge[1]:0)/(s||1);if(!Ne.active&&!ce){if(n&&Math.max(Math.abs(a.clientX-this._lastX),Math.abs(a.clientY-this._lastY))o.right+10||t.clientX<=o.right&&t.clientY>o.bottom&&t.clientX>=o.left:t.clientX>o.right&&t.clientY>o.top||t.clientX<=o.right&&t.clientY>o.bottom+10}(t,a,this)&&!p.animated){if(p===Rt)return I(!1);if(p&&r===t.target&&(i=p),i&&(n=wt(i)),!1!==Oe(jt,r,Rt,e,i,n,t,!!i))return P(),p&&p.nextSibling?r.insertBefore(Rt,p.nextSibling):r.appendChild(Rt),Xt=r,M(),I(!0)}else if(p&&function(t,e,n){var o=wt(Tt(n.el,0,n.options,!0));return e?t.clientXu+c*r/2:ld-se)return-ie}else if(l>u+c*(1-a)/2&&ld-c*r/2)?l>u+c/2?1:-1:0}(t,i,n,a,_?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,he,re===i),0!==v){var D=Et(Rt);do{D-=v,y=Xt.children[D]}while(y&&("none"===ft(y,"display")||y===Yt))}if(0===v||y===i)return I(!1);re=i,ie=v;var C=i.nextElementSibling,x=!1,N=Oe(jt,r,Rt,e,i,n,t,x=1===v);if(!1!==N)return 1!==N&&-1!==N||(x=1===N),pe=!0,setTimeout(Ie,30),P(),x&&!C?r.appendChild(Rt):i.parentNode.insertBefore(Rt,x?C:i),S&&Ot(S,0,E-S.scrollTop),Xt=Rt.parentNode,void 0===b||he||(se=Math.abs(b-wt(i)[T])),M(),I(!0)}if(r.contains(Rt))return I(!1)}return!1}function O(s,l){Lt(s,h,V({evt:t,isOwner:u,axis:a?"vertical":"horizontal",revert:o,dragRect:e,targetRect:n,canSort:d,fromSortable:m,target:i,completed:I,onMove:function(n,o){return Oe(jt,r,Rt,e,n,wt(n),t,o)},changed:M},l))}function P(){O("dragOverAnimationCapture"),h.captureAnimationState(),h!==m&&m.captureAnimationState()}function I(e){return O("dragOverCompleted",{insertion:e}),e&&(u?c._hideClone():c._showClone(h),h!==m&&(pt(Rt,Kt?Kt.options.ghostClass:c.options.ghostClass,!1),pt(Rt,s.ghostClass,!0)),Kt!==h&&h!==Ne.active?Kt=h:h===Ne.active&&Kt&&(Kt=null),m===h&&(h._ignoreWhileAnimating=i),h.animateAll((function(){O("dragOverAnimationComplete"),h._ignoreWhileAnimating=null})),h!==m&&(m.animateAll(),m._ignoreWhileAnimating=null)),(i===Rt&&!Rt.animated||i===r&&!i.animated)&&(re=null),s.dragoverBubble||t.rootEl||i===document||(Rt.parentNode[It]._isOutsideThisEl(t.target),!e&&Ce(t)),!s.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),g=!0}function M(){zt=Et(Rt),Ut=Et(Rt,s.draggable),Bt({sortable:h,name:"change",toEl:r,newIndex:zt,newDraggableIndex:Ut,originalEvent:t})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){ct(document,"mousemove",this._onTouchMove),ct(document,"touchmove",this._onTouchMove),ct(document,"pointermove",this._onTouchMove),ct(document,"dragover",Ce),ct(document,"mousemove",Ce),ct(document,"touchmove",Ce)},_offUpEvents:function(){var t=this.el.ownerDocument;ct(t,"mouseup",this._onDrop),ct(t,"touchend",this._onDrop),ct(t,"pointerup",this._onDrop),ct(t,"touchcancel",this._onDrop),ct(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;zt=Et(Rt),Ut=Et(Rt,n.draggable),Lt("drop",this,{evt:t}),Xt=Rt&&Rt.parentNode,zt=Et(Rt),Ut=Et(Rt,n.draggable),Ne.eventCanceled||(ce=!1,he=!1,me=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),Ae(this.cloneId),Ae(this._dragStartId),this.nativeDraggable&&(ct(document,"drop",this),ct(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),at&&ft(document.body,"user-select",""),ft(Rt,"transform",""),t&&(ae&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),Yt&&Yt.parentNode&&Yt.parentNode.removeChild(Yt),(jt===Xt||Kt&&"clone"!==Kt.lastPutMode)&&Gt&&Gt.parentNode&&Gt.parentNode.removeChild(Gt),Rt&&(this.nativeDraggable&&ct(Rt,"dragend",this),Pe(Rt),Rt.style["will-change"]="",ae&&!ce&&pt(Rt,Kt?Kt.options.ghostClass:this.options.ghostClass,!1),pt(Rt,this.options.chosenClass,!1),Bt({sortable:this,name:"unchoose",toEl:Xt,newIndex:null,newDraggableIndex:null,originalEvent:t}),jt!==Xt?(zt>=0&&(Bt({rootEl:Xt,name:"add",toEl:Xt,fromEl:jt,originalEvent:t}),Bt({sortable:this,name:"remove",toEl:Xt,originalEvent:t}),Bt({rootEl:Xt,name:"sort",toEl:Xt,fromEl:jt,originalEvent:t}),Bt({sortable:this,name:"sort",toEl:Xt,originalEvent:t})),Kt&&Kt.save()):zt!==qt&&zt>=0&&(Bt({sortable:this,name:"update",toEl:Xt,originalEvent:t}),Bt({sortable:this,name:"sort",toEl:Xt,originalEvent:t})),Ne.active&&(null!=zt&&-1!==zt||(zt=qt,Ut=Vt),Bt({sortable:this,name:"end",toEl:Xt,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){Lt("nulling",this),jt=Rt=Xt=Yt=Ht=Gt=Zt=Wt=Jt=Qt=ae=zt=Ut=qt=Vt=re=ie=Kt=$t=Ne.dragged=Ne.ghost=Ne.clone=Ne.active=null,fe.forEach((function(t){t.checked=!0})),fe.length=te=ee=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":Rt&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move"),t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,a=n.length,r=this.options;o{const e=t.target;this.name(e.value),this.slug((0,hn.slug)(e.value))}})),50),t.add("slug",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.slug_label")),m("input",{className:"FormControl",bidi:this.slug})),40),t.add("description",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.description_label")),m("textarea",{className:"FormControl",bidi:this.description})),30),t.add("color",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.color_label")),m(un(),{className:"FormControl",placeholder:"#aaaaaa",bidi:this.color})),20),t.add("icon",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.icon_label")),m("div",{className:"helpText"},a().translator.trans("flarum-tags.admin.edit_tag.icon_text",{a:m("a",{href:"https://fontawesome.com/icons?m=free",tabindex:"-1"})})),m("input",{className:"FormControl",placeholder:"fas fa-bolt",bidi:this.icon})),10),t.add("hidden",m("div",{className:"Form-group"},m("div",null,m("label",{className:"checkbox"},m("input",{type:"checkbox",bidi:this.isHidden}),a().translator.trans("flarum-tags.admin.edit_tag.hide_label")))),10),t.add("submit",m("div",{className:"Form-group Form-controls"},m(g(),{type:"submit",className:"Button Button--primary EditTagModal-save",loading:this.loading},a().translator.trans("flarum-tags.admin.edit_tag.submit_button")),this.tag.exists&&m("button",{type:"button",className:"Button EditTagModal-delete",onclick:this.delete.bind(this)},a().translator.trans("flarum-tags.admin.edit_tag.delete_tag_button"))),-10),t}submitData(){return{name:this.name(),slug:this.slug(),description:this.description(),color:this.color(),icon:this.icon(),isHidden:this.isHidden(),isPrimary:this.isPrimary()}}onsubmit(t){t.preventDefault(),this.loading=!0,this.tag.save(this.submitData()).then((()=>this.hide()),(()=>this.loading=!1))}delete(){if(confirm(vn()(a().translator.trans("flarum-tags.admin.edit_tag.delete_tag_confirmation")))){const t=a().store.all("tags").filter((t=>t.parent()===this.tag));this.tag.delete().then((()=>{t.forEach((t=>t.pushData({attributes:{isChild:!1}}))),m.redraw()})),this.hide()}}}function yn(t){return m("li",{"data-id":t.id(),style:{color:t.color()}},m("div",{className:"TagListItem-info"},(0,b.Z)(t),m("span",{className:"TagListItem-name"},t.name()),m(g(),{className:"Button Button--link",icon:"fas fa-pencil-alt",onclick:()=>a().modal.show(bn,{model:t})})),!t.isChild()&&null!==t.position()&&m("ol",{className:"TagListItem-children TagList"},(0,y.Z)(a().store.all("tags")).filter((e=>e.parent()===t)).map(yn)))}flarum.reg.add("flarum-tags","admin/components/EditTagModal",bn);class wn extends(Ke()){oninit(t){super.oninit(t),this.forcedRefreshKey=0,this.loading=!0,a().tagList.load(["parent"]).then((()=>{this.loading=!1,m.redraw()}))}content(){if(this.loading)return m(f(),null);const t=this.setting("flarum-tags.min_primary_tags",0),e=this.setting("flarum-tags.max_primary_tags",0),n=this.setting("flarum-tags.min_secondary_tags",0),o=this.setting("flarum-tags.max_secondary_tags",0),r=(0,y.Z)(a().store.all("tags").filter((t=>!t.parent())));return m("div",{className:"TagsContent"},m("div",{className:"TagsContent-list"},m("div",{className:"container",key:this.forcedRefreshKey,oncreate:this.onListOnCreate.bind(this)},m(on(),null,m(rn(),{className:"TagGroup",label:a().translator.trans("flarum-tags.admin.tags.primary_heading")},m("ol",{className:"TagList TagList--primary"},r.filter((t=>null!==t.position()&&!t.isChild())).map(yn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>a().modal.show(bn,{primary:!0})},a().translator.trans("flarum-tags.admin.tags.create_primary_tag_button"))),m(rn(),{className:"TagGroup TagGroup--secondary",label:a().translator.trans("flarum-tags.admin.tags.secondary_heading")},m("ul",{className:"TagList"},r.filter((t=>null===t.position())).sort(((t,e)=>t.name().localeCompare(e.name()))).map(yn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>a().modal.show(bn,{primary:!1})},a().translator.trans("flarum-tags.admin.tags.create_secondary_tag_button"))),m(rn(),{label:a().translator.trans("flarum-tags.admin.tags.settings_heading")},m(en(),null,m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.tag_settings.required_primary_heading")),m("div",{className:"helpText"},a().translator.trans("flarum-tags.admin.tag_settings.required_primary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:t(),oninput:Qe()("value",this.setMinTags.bind(this,t,e))}),a().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:t(),bidi:e}))),m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.tag_settings.required_secondary_heading")),m("div",{className:"helpText"},a().translator.trans("flarum-tags.admin.tag_settings.required_secondary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:n(),oninput:Qe()("value",this.setMinTags.bind(this,n,o))}),a().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:n(),bidi:o}))),m("div",{className:"Form-group Form-controls"},this.submitButton())))),m("div",{className:"TagsContent-footer"},m("p",null,a().translator.trans("flarum-tags.admin.tags.about_tags_text"))))))}onListOnCreate(t){this.$(".TagList").get().map((t=>{Ue.create(t,{group:"tags",delay:50,delayOnTouchOnly:!0,touchStartThreshold:5,animation:150,swapThreshold:.65,dragClass:"sortable-dragging",ghostClass:"sortable-placeholder",onSort:t=>this.onSortUpdate(t)})}))}setMinTags(t,e,n){t(n),e(Math.max(n,e()))}onSortUpdate(t){t.from instanceof HTMLOListElement&&t.to instanceof HTMLUListElement&&a().store.getById("tags",t.item.getAttribute("data-id")).pushData({attributes:{position:null,isChild:!1},relationships:{parent:null}});const e=this.$(".TagList--primary > li").map((function(){return{id:$(this).data("id"),children:$(this).find("li").map((function(){return $(this).data("id")})).get()}})).get();e.forEach(((t,e)=>{const n=a().store.getById("tags",t.id);n.pushData({attributes:{position:e,isChild:!1},relationships:{parent:null}}),t.children.forEach(((t,e)=>{a().store.getById("tags",t).pushData({attributes:{position:e,isChild:!0},relationships:{parent:n}})}))})),a().request({url:a().forum.attribute("apiUrl")+"/tags/order",method:"POST",body:{order:e}}),this.forcedRefreshKey++,m.redraw()}}flarum.reg.add("flarum-tags","admin/components/TagsPage",wn);const _n=[...q,(new(R().Admin)).page(wn).permission((()=>({icon:"fas fa-tag",label:a().translator.trans("flarum-tags.admin.permissions.tag_discussions_label"),permission:"discussion.tag"})),"moderate",95).permission((()=>({icon:"fas fa-tags",label:a().translator.trans("flarum-tags.admin.permissions.bypass_tag_counts_label"),permission:"bypassTagCounts"})),"start",89)];a().initializers.add("flarum-tags",(t=>{t.tagList=new L,(0,r.extend)(s().prototype,"oninit",(function(){this.loading=!0})),(0,r.extend)(s().prototype,"oncreate",(function(){a().tagList.load().then((()=>{this.loading=!1,m.redraw()}))})),(0,r.override)(s().prototype,"view",(function(t,e){return this.loading?m(f(),null):t(e)})),(0,r.override)(a(),"getRequiredPermissions",((t,e)=>{const n=e.match(/^tag\d+\./);return n?t(e.substr(n[0].length)).map((t=>n[0]+t)):t(e)})),(0,r.extend)(s().prototype,"scopeItems",(t=>{(0,y.Z)(a().store.all("tags")).filter((t=>t.isRestricted())).forEach((e=>t.add("tag"+e.id(),{label:(0,v.Z)(e),onremove:()=>e.save({isRestricted:!1}),render:t=>"setting"in t?null:"viewForum"===t.permission||"startDiscussion"===t.permission||t.permission.startsWith("discussion.")&&!1!==t.tagScoped||t.tagScoped?m(c(),{permission:"tag".concat(e.id(),".").concat(t.permission),allowGuest:t.allowGuest}):null})))})),(0,r.extend)(s().prototype,"scopeControlItems",(t=>{const e=(0,y.Z)(a().store.all("tags").filter((t=>!t.isRestricted())));e.length&&t.add("tag",m(d(),{className:"Dropdown--restrictByTag",buttonClassName:"Button Button--text",label:a().translator.trans("flarum-tags.admin.permissions.restrict_by_tag_heading"),icon:"fas fa-plus",caretIcon:null},e.map((t=>m(g(),{icon:!0,onclick:()=>t.save({isRestricted:!0})},[(0,b.Z)(t,{className:"Button-icon"})," ",t.name()])))))})),T(),(0,r.extend)(s().prototype,"startItems",(t=>{t.add("allowTagChange",{icon:"fas fa-tag",label:a().translator.trans("flarum-tags.admin.permissions.allow_edit_tags_label"),setting:()=>{const t=parseInt(a().data.settings.allow_tag_change,10);return m(E(),{defaultLabel:t?a().translator.trans("core.admin.permissions_controls.allow_some_minutes_button",{count:t}):a().translator.trans("core.admin.permissions_controls.allow_indefinitely_button"),key:"allow_tag_change",options:[{value:"-1",label:a().translator.trans("core.admin.permissions_controls.allow_indefinitely_button")},{value:"10",label:a().translator.trans("core.admin.permissions_controls.allow_ten_minutes_button")},{value:"reply",label:a().translator.trans("core.admin.permissions_controls.allow_until_reply_button")}]})}},90)})),(0,r.extend)(k().prototype,"customFieldComponents",(function(t){t.add("flarum-tags.select-tags",(t=>m(I,Object.assign({},t,{settingValue:t.bidi}))))}))}))},974:(t,e,n)=>{"use strict";n.d(e,{Z:()=>r});var o=n(836),a=n.n(o);function r(t,e,n){void 0===e&&(e={}),void 0===n&&(n={});const o=t&&t.icon(),{useColor:r=!0}=n;return e.className=a()([e.className,"icon text-colored",o?t.icon():"TagIcon"]),t&&r?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),o?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",r)},924:(t,e,n)=>{"use strict";n.d(e,{Z:()=>h});var o=n(780),a=n.n(o),r=n(678),i=n.n(r),s=n(836),l=n.n(s),c=n(679),u=n.n(c),d=n(974);function h(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const n=a()(e,"link"),o=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const o=t.color();o&&(e.style["--tag-bg"]=o,e.className=l()(e.className,"colored",u()(o))),n&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(n?i():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.Z)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},o)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",h)},270:()=>{},648:(t,e,n)=>{"use strict";function o(t){return t.slice(0).sort(((t,e)=>{const n=t.position(),o=e.position();if(null===n&&null===o)return e.discussionCount()-t.discussionCount();if(null===o)return-1;if(null===n)return 1;const a=t.parent(),r=e.parent();return a===r?n-o:a&&r?a.position()-r.position():a?a===e?1:a.position()-o:r?r===t?-1:n-r.position():0}))}n.d(e,{Z:()=>o}),flarum.reg.add("flarum-tags","common/utils/sortTags",o)},433:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},351:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},645:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},44:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},678:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},149:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},291:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},679:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},657:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},636:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},836:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},780:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},596:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},905:(t,e,n)=>{"use strict";function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function a(t,e,n){return(e=function(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var a=n.call(t,e);if("object"!==o(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t,"string");return"symbol"===o(e)?e:String(e)}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n.d(e,{Z:()=>a})}},o={};function a(t){var e=o[t];if(void 0!==e)return e.exports;var r=o[t]={exports:{}};return n[t](r,r.exports,a),r.exports}a.m=n,a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,n)=>(a.f[n](t,e),e)),[])),a.u=t=>"common/components/TagSelectionModal.js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",a.l=(n,o,r,i)=>{if(t[n])t[n].push(o);else{var s,l;if(void 0!==r)for(var c=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(h);var a=t[n];if(delete t[n],s.parentNode&&s.parentNode.removeChild(s),a&&a.forEach((t=>t(o))),e)return e(o)},h=setTimeout(m.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=m.bind(null,s.onerror),s.onload=m.bind(null,s.onload),l&&document.head.appendChild(s)}},a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t})(),a.f.compat=(t,e)=>{const n=a.l;a.l=flarum.reg.loadChunk.bind(flarum.reg,n)},(()=>{var t={328:0};a.f.j=(e,n)=>{var o=a.o(t,e)?t[e]:void 0;if(0!==o)if(o)n.push(o[2]);else{var r=new Promise(((n,a)=>o=t[e]=[n,a]));n.push(o[2]=r);var i=a.p+a.u(e),s=new Error;a.l(i,(n=>{if(a.o(t,e)&&(0!==(o=t[e])&&(t[e]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",s.name="ChunkLoadError",s.type=r,s.request=i,o[1](s)}}),"chunk-"+e,e)}};var e=(e,n)=>{var o,r,[i,s,l]=n,c=0;if(i.some((e=>0!==t[e]))){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);l&&l(a)}for(e&&e(n);c{"use strict";a.r(r),a.d(r,{extend:()=>n.l});var t=a(270),e={};for(const n in t)"default"!==n&&(e[n]=()=>t[n]);a.d(r,e);var n=a(681)})(),module.exports=r})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/tags/js/dist/admin.js.map b/extensions/tags/js/dist/admin.js.map index 98af02fcb..07dec9ded 100644 --- a/extensions/tags/js/dist/admin.js.map +++ b/extensions/tags/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionGrid')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionDropdown')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Dropdown')\"","webpack://@flarum/tags/./src/admin/addTagPermission.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/BasicsPage')\"","webpack://@flarum/tags/./src/admin/addTagsHomePageOption.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/SettingDropdown')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/./src/admin/components/SelectTagsSettingComponent.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormGroup')\"","webpack://@flarum/tags/../../../node_modules/sortablejs/modular/sortable.esm.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/withAttr')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/FormSectionGroup')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/FormSection')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/ColorPreviewInput')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/string')\"","webpack://@flarum/tags/./src/admin/components/EditTagModal.tsx","webpack://@flarum/tags/./src/admin/components/TagsPage.js","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/./src/admin/index.ts","webpack://@flarum/tags/./src/admin/addTagsPermissionScope.tsx","webpack://@flarum/tags/./src/admin/addTagChangePermission.js","webpack://@flarum/tags/./src/admin/addTagSelectionSettingComponent.tsx","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionGrid');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Dropdown');","export default function () {\n app.extensionData.for('flarum-tags').registerPermission({\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.tag_discussions_label'),\n permission: 'discussion.tag'\n }, 'moderate', 95).registerPermission({\n icon: 'fas fa-tags',\n label: app.translator.trans('flarum-tags.admin.permissions.bypass_tag_counts_label'),\n permission: 'bypassTagCounts'\n }, 'start', 89);\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/BasicsPage');","import { extend } from 'flarum/common/extend';\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\nexport default function () {\n extend(BasicsPage.prototype, 'homePageItems', items => {\n items.add('tags', {\n path: '/tags',\n label: app.translator.trans('flarum-tags.admin.basics.tags_label')\n });\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/SettingDropdown');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class SelectTagsSettingComponent extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", []);\n _defineProperty(this, \"loaded\", false);\n }\n view() {\n const value = JSON.parse(this.attrs.settingValue() || '[]');\n if (!this.loaded) {\n app.tagList.load(['parent']).then(tags => {\n this.tags = tags.filter(tag => value.includes(tag.id()));\n this.loaded = true;\n m.redraw();\n });\n }\n return m(\"div\", {\n className: \"Form-group SelectTagsSettingComponent\"\n }, m(\"label\", null, this.attrs.label), this.attrs.help && m(\"p\", {\n className: \"helpText\"\n }, this.attrs.help), !this.loaded ? m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }) : m(Button, {\n className: \"Button Button--text\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'common/components/TagSelectionModal', webpackMode: 'lazy-once' */ '../../common/components/TagSelectionModal'), {\n selectedTags: this.tags,\n onsubmit: tags => {\n this.tags = tags;\n this.attrs.settingValue(JSON.stringify(tags.map(tag => tag.id())));\n },\n ...this.attrs.options\n })\n }, !!this.tags.length ? tagsLabel(this.tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.admin.settings.button_text'))));\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/SelectTagsSettingComponent', SelectTagsSettingComponent);flarum.reg.addChunkModule('162', '610', 'flarum-tags', 'common/components/TagSelectionModal');\nflarum.reg.addChunkModule('162', '610', 'flarum-tags', 'forum/components/ToggleButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormGroup');","/**!\n * Sortable 1.15.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // if there is a last element, it is the target\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n\n if (firstChild === dragEl) {\n return completed(false);\n }\n\n target = firstChild;\n targetRect = getRect(target);\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var rect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var spacer = 10;\n return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n folding = false; // Do not \"unfold\" after around dragEl if reverted\n\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/FormSectionGroup');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/FormSection');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/ColorPreviewInput');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/string');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Button from 'flarum/common/components/Button';\nimport ColorPreviewInput from 'flarum/common/components/ColorPreviewInput';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport { slug } from 'flarum/common/utils/string';\nimport Stream from 'flarum/common/utils/Stream';\nimport extractText from 'flarum/common/utils/extractText';\nimport Form from 'flarum/common/components/Form';\nimport tagLabel from '../../common/helpers/tagLabel';\n/**\n * The `EditTagModal` component shows a modal dialog which allows the user\n * to create or edit a tag.\n */\nexport default class EditTagModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tag\", void 0);\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"slug\", void 0);\n _defineProperty(this, \"description\", void 0);\n _defineProperty(this, \"color\", void 0);\n _defineProperty(this, \"icon\", void 0);\n _defineProperty(this, \"isHidden\", void 0);\n _defineProperty(this, \"isPrimary\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.tag = this.attrs.model || app.store.createRecord('tags');\n this.name = Stream(this.tag.name() || '');\n this.slug = Stream(this.tag.slug() || '');\n this.description = Stream(this.tag.description() || '');\n this.color = Stream(this.tag.color() || '');\n this.icon = Stream(this.tag.icon() || '');\n this.isHidden = Stream(this.tag.isHidden() || false);\n this.isPrimary = Stream(this.attrs.primary || false);\n }\n className() {\n return 'EditTagModal Modal--small';\n }\n title() {\n return this.name() ? tagLabel(app.store.createRecord('tags', {\n attributes: this.submitData()\n })) : app.translator.trans('flarum-tags.admin.edit_tag.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, null, this.fields().toArray()));\n }\n fields() {\n const items = new ItemList();\n items.add('name', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.name_label')), m(\"input\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-tags.admin.edit_tag.name_placeholder'),\n value: this.name(),\n oninput: e => {\n const target = e.target;\n this.name(target.value);\n this.slug(slug(target.value));\n }\n })), 50);\n items.add('slug', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.slug_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.slug\n })), 40);\n items.add('description', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.description_label')), m(\"textarea\", {\n className: \"FormControl\",\n bidi: this.description\n })), 30);\n items.add('color', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.color_label')), m(ColorPreviewInput, {\n className: \"FormControl\",\n placeholder: \"#aaaaaa\",\n bidi: this.color\n })), 20);\n items.add('icon', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.icon_label')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.edit_tag.icon_text', {\n a: m(\"a\", {\n href: \"https://fontawesome.com/icons?m=free\",\n tabindex: \"-1\"\n })\n })), m(\"input\", {\n className: \"FormControl\",\n placeholder: \"fas fa-bolt\",\n bidi: this.icon\n })), 10);\n items.add('hidden', m(\"div\", {\n className: \"Form-group\"\n }, m(\"div\", null, m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"checkbox\",\n bidi: this.isHidden\n }), app.translator.trans('flarum-tags.admin.edit_tag.hide_label')))), 10);\n items.add('submit', m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary EditTagModal-save\",\n loading: this.loading\n }, app.translator.trans('flarum-tags.admin.edit_tag.submit_button')), this.tag.exists && m(\"button\", {\n type: \"button\",\n className: \"Button EditTagModal-delete\",\n onclick: this.delete.bind(this)\n }, app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_button'))), -10);\n return items;\n }\n submitData() {\n return {\n name: this.name(),\n slug: this.slug(),\n description: this.description(),\n color: this.color(),\n icon: this.icon(),\n isHidden: this.isHidden(),\n isPrimary: this.isPrimary()\n };\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n\n // Errors aren't passed to the modal onerror handler here.\n // This is done for better error visibility on smaller screen heights.\n this.tag.save(this.submitData()).then(() => this.hide(), () => this.loading = false);\n }\n delete() {\n if (confirm(extractText(app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_confirmation')))) {\n const children = app.store.all('tags').filter(tag => tag.parent() === this.tag);\n this.tag.delete().then(() => {\n children.forEach(tag => tag.pushData({\n attributes: {\n isChild: false\n }\n }));\n m.redraw();\n });\n this.hide();\n }\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/EditTagModal', EditTagModal);","import sortable from 'sortablejs';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport withAttr from 'flarum/common/utils/withAttr';\nimport Form from 'flarum/common/components/Form';\nimport FormSectionGroup from 'flarum/admin/components/FormSectionGroup';\nimport FormSection from 'flarum/admin/components/FormSection';\nimport EditTagModal from './EditTagModal';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport sortTags from '../../common/utils/sortTags';\nfunction tagItem(tag) {\n return m(\"li\", {\n \"data-id\": tag.id(),\n style: {\n color: tag.color()\n }\n }, m(\"div\", {\n className: \"TagListItem-info\"\n }, tagIcon(tag), m(\"span\", {\n className: \"TagListItem-name\"\n }, tag.name()), m(Button, {\n className: \"Button Button--link\",\n icon: \"fas fa-pencil-alt\",\n onclick: () => app.modal.show(EditTagModal, {\n model: tag\n })\n })), !tag.isChild() && tag.position() !== null && m(\"ol\", {\n className: \"TagListItem-children TagList\"\n }, sortTags(app.store.all('tags')).filter(child => child.parent() === tag).map(tagItem)));\n}\nexport default class TagsPage extends ExtensionPage {\n oninit(vnode) {\n super.oninit(vnode);\n\n // A regular redraw won't work here, because sortable has mucked around\n // with the DOM which will confuse Mithril's diffing algorithm. Instead\n // we force a full reconstruction of the DOM by changing the key, which\n // makes mithril completely re-render the component on redraw.\n this.forcedRefreshKey = 0;\n this.loading = true;\n app.tagList.load(['parent']).then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n content() {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n const minPrimaryTags = this.setting('flarum-tags.min_primary_tags', 0);\n const maxPrimaryTags = this.setting('flarum-tags.max_primary_tags', 0);\n const minSecondaryTags = this.setting('flarum-tags.min_secondary_tags', 0);\n const maxSecondaryTags = this.setting('flarum-tags.max_secondary_tags', 0);\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.parent()));\n return m(\"div\", {\n className: \"TagsContent\"\n }, m(\"div\", {\n className: \"TagsContent-list\"\n }, m(\"div\", {\n className: \"container\",\n key: this.forcedRefreshKey,\n oncreate: this.onListOnCreate.bind(this)\n }, m(FormSectionGroup, null, m(FormSection, {\n className: \"TagGroup\",\n label: app.translator.trans('flarum-tags.admin.tags.primary_heading')\n }, m(\"ol\", {\n className: \"TagList TagList--primary\"\n }, tags.filter(tag => tag.position() !== null && !tag.isChild()).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: true\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_primary_tag_button'))), m(FormSection, {\n className: \"TagGroup TagGroup--secondary\",\n label: app.translator.trans('flarum-tags.admin.tags.secondary_heading')\n }, m(\"ul\", {\n className: \"TagList\"\n }, tags.filter(tag => tag.position() === null).sort((a, b) => a.name().localeCompare(b.name())).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: false\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_secondary_tag_button'))), m(FormSection, {\n label: app.translator.trans('flarum-tags.admin.tags.settings_heading')\n }, m(Form, null, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minPrimaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minPrimaryTags, maxPrimaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minPrimaryTags(),\n bidi: maxPrimaryTags\n }))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minSecondaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minSecondaryTags, maxSecondaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minSecondaryTags(),\n bidi: maxSecondaryTags\n }))), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, this.submitButton())))), m(\"div\", {\n className: \"TagsContent-footer\"\n }, m(\"p\", null, app.translator.trans('flarum-tags.admin.tags.about_tags_text'))))));\n }\n onListOnCreate(vnode) {\n this.$('.TagList').get().map(e => {\n sortable.create(e, {\n group: 'tags',\n delay: 50,\n delayOnTouchOnly: true,\n touchStartThreshold: 5,\n animation: 150,\n swapThreshold: 0.65,\n dragClass: 'sortable-dragging',\n ghostClass: 'sortable-placeholder',\n onSort: e => this.onSortUpdate(e)\n });\n });\n }\n setMinTags(minTags, maxTags, value) {\n minTags(value);\n maxTags(Math.max(value, maxTags()));\n }\n onSortUpdate(e) {\n // If we've moved a tag from 'primary' to 'secondary', then we'll update\n // its attributes in our local store so that when we redraw the change\n // will be made.\n if (e.from instanceof HTMLOListElement && e.to instanceof HTMLUListElement) {\n app.store.getById('tags', e.item.getAttribute('data-id')).pushData({\n attributes: {\n position: null,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n }\n\n // Construct an array of primary tag IDs and their children, in the same\n // order that they have been arranged in.\n const order = this.$('.TagList--primary > li').map(function () {\n return {\n id: $(this).data('id'),\n children: $(this).find('li').map(function () {\n return $(this).data('id');\n }).get()\n };\n }).get();\n\n // Now that we have an accurate representation of the order which the\n // primary tags are in, we will update the tag attributes in our local\n // store to reflect this order.\n order.forEach((tag, i) => {\n const parent = app.store.getById('tags', tag.id);\n parent.pushData({\n attributes: {\n position: i,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n tag.children.forEach((child, j) => {\n app.store.getById('tags', child).pushData({\n attributes: {\n position: j,\n isChild: true\n },\n relationships: {\n parent\n }\n });\n });\n });\n app.request({\n url: app.forum.attribute('apiUrl') + '/tags/order',\n method: 'POST',\n body: {\n order\n }\n });\n this.forcedRefreshKey++;\n m.redraw();\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/TagsPage', TagsPage);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n var _this$loadedIncludes;\n if (includes === void 0) {\n includes = [];\n }\n (_this$loadedIncludes = this.loadedIncludes) != null ? _this$loadedIncludes : this.loadedIncludes = new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n isPrimary() {\n return Model.attribute('isPrimary').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimaryParent() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return \"\".concat(negate ? '-' : '').concat(this.key(), \":\").concat(this.filterValueToGambitValue(value));\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","import app from 'flarum/admin/app';\nimport addTagsPermissionScope from './addTagsPermissionScope';\nimport addTagPermission from './addTagPermission';\nimport addTagsHomePageOption from './addTagsHomePageOption';\nimport addTagChangePermission from './addTagChangePermission';\nimport addTagSelectionSettingComponent from './addTagSelectionSettingComponent';\nimport TagsPage from './components/TagsPage';\nimport TagListState from '../common/states/TagListState';\nexport { default as extend } from '../common/extend';\napp.initializers.add('flarum-tags', app => {\n app.tagList = new TagListState();\n app.extensionData.for('flarum-tags').registerPage(TagsPage);\n addTagsPermissionScope();\n addTagPermission();\n addTagsHomePageOption();\n addTagChangePermission();\n addTagSelectionSettingComponent();\n});\nimport './admin';","import app from 'flarum/admin/app';\nimport { extend, override } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport PermissionDropdown from 'flarum/admin/components/PermissionDropdown';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagLabel from '../common/helpers/tagLabel';\nimport tagIcon from '../common/helpers/tagIcon';\nimport sortTags from '../common/utils/sortTags';\nexport default function () {\n extend(PermissionGrid.prototype, 'oninit', function () {\n this.loading = true;\n });\n extend(PermissionGrid.prototype, 'oncreate', function () {\n app.tagList.load().then(() => {\n this.loading = false;\n m.redraw();\n });\n });\n override(PermissionGrid.prototype, 'view', function (original, vnode) {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n return original(vnode);\n });\n override(app, 'getRequiredPermissions', (original, permission) => {\n const tagPrefix = permission.match(/^tag\\d+\\./);\n if (tagPrefix) {\n const globalPermission = permission.substr(tagPrefix[0].length);\n const required = original(globalPermission);\n return required.map(required => tagPrefix[0] + required);\n }\n return original(permission);\n });\n extend(PermissionGrid.prototype, 'scopeItems', items => {\n sortTags(app.store.all('tags')).filter(tag => tag.isRestricted()).forEach(tag => items.add('tag' + tag.id(), {\n label: tagLabel(tag),\n onremove: () => tag.save({\n isRestricted: false\n }),\n render: item => {\n if ('setting' in item) return null;\n if (item.permission === 'viewForum' || item.permission === 'startDiscussion' || item.permission.startsWith('discussion.') && item.tagScoped !== false || item.tagScoped) {\n return m(PermissionDropdown, {\n permission: \"tag\".concat(tag.id(), \".\").concat(item.permission),\n allowGuest: item.allowGuest\n });\n }\n return null;\n }\n }));\n });\n extend(PermissionGrid.prototype, 'scopeControlItems', items => {\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.isRestricted()));\n if (tags.length) {\n items.add('tag', m(Dropdown, {\n className: \"Dropdown--restrictByTag\",\n buttonClassName: \"Button Button--text\",\n label: app.translator.trans('flarum-tags.admin.permissions.restrict_by_tag_heading'),\n icon: \"fas fa-plus\",\n caretIcon: null\n }, tags.map(tag => m(Button, {\n icon: true,\n onclick: () => tag.save({\n isRestricted: true\n })\n }, [tagIcon(tag, {\n className: 'Button-icon'\n }), ' ', tag.name()]))));\n }\n });\n}","import app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport SettingDropdown from 'flarum/admin/components/SettingDropdown';\nexport default function () {\n extend(PermissionGrid.prototype, 'startItems', items => {\n items.add('allowTagChange', {\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.allow_edit_tags_label'),\n setting: () => {\n const minutes = parseInt(app.data.settings.allow_tag_change, 10);\n return m(SettingDropdown, {\n defaultLabel: minutes ? app.translator.trans('core.admin.permissions_controls.allow_some_minutes_button', {\n count: minutes\n }) : app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button'),\n key: \"allow_tag_change\",\n options: [{\n value: '-1',\n label: app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button')\n }, {\n value: '10',\n label: app.translator.trans('core.admin.permissions_controls.allow_ten_minutes_button')\n }, {\n value: 'reply',\n label: app.translator.trans('core.admin.permissions_controls.allow_until_reply_button')\n }]\n });\n }\n }, 90);\n });\n}","import { extend } from 'flarum/common/extend';\nimport SelectTagsSettingComponent from './components/SelectTagsSettingComponent';\nimport FormGroup from 'flarum/common/components/FormGroup';\nexport default function () {\n extend(FormGroup.prototype, 'customFieldComponents', function (items) {\n items.add('flarum-tags.select-tags', attrs => {\n return m(SelectTagsSettingComponent, Object.assign({}, attrs, {\n settingValue: attrs.bidi\n }));\n });\n });\n}","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"common/components/TagSelectionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t328: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","flarum","reg","get","app","extensionData","for","registerPermission","icon","label","translator","trans","permission","extend","items","add","path","tagsLabel","tags","attrs","children","link","otherAttrs","className","sortTags","forEach","tag","length","push","tagLabel","m","SelectTagsSettingComponent","constructor","super","arguments","this","view","value","JSON","parse","settingValue","loaded","then","filter","includes","id","redraw","help","onclick","selectedTags","onsubmit","stringify","map","options","size","display","addChunkModule","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread2","target","i","source","key","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","iterator","prototype","configurable","writable","_extends","assign","hasOwnProperty","call","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","userAgent","pattern","window","navigator","match","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","on","el","event","fn","addEventListener","off","removeEventListener","matches","selector","substring","msMatchesSelector","webkitMatchesSelector","_","getParentOrHost","host","document","nodeType","parentNode","closest","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","name","state","classList","replace","css","prop","val","style","defaultView","getComputedStyle","currentStyle","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","find","tagName","list","getElementsByTagName","n","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","getBoundingClientRect","elRect","top","left","bottom","right","height","width","innerHeight","innerWidth","containerRect","parseInt","elMatrix","scaleX","a","scaleY","d","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","index","nodeName","toUpperCase","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","body","isRectEqual","rect1","rect2","Math","round","throttle","callback","ms","args","_this","setTimeout","scrollBy","x","y","Polymer","$","jQuery","Zepto","dom","cloneNode","expando","Date","getTime","plugins","defaults","initializeByDefault","PluginManager","mount","plugin","option","p","pluginName","concat","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_excluded","_ref","undefined","originalEvent","data","bind","dragEl","parentEl","ghostEl","rootEl","nextEl","lastDownEl","cloneEl","cloneHidden","dragStarted","moved","putSortable","activeSortable","active","oldIndex","oldDraggableIndex","newIndex","newDraggableIndex","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","targetEl","toEl","fromEl","extraEventProperties","onName","charAt","substr","CustomEvent","createEvent","initEvent","bubbles","cancelable","to","from","item","pullMode","lastPutMode","allEventProperties","dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","split","touchingSideChild2","clear","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","join","originalGroup","checkPull","checkPut","put","revertClone","preventDefault","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","some","threshold","emptyInsertThreshold","rect","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","toString","animationCallbackId","animationStates","sort","disabled","store","handle","test","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","animation","easing","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","Number","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","captureAnimationState","slice","child","fromRect","thisAnimationDuration","childMatrix","f","e","addAnimationState","removeAnimationState","splice","arr","indexOfObject","animateAll","clearTimeout","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","pow","calculateRealTime","animate","max","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","offsetWidth","repaint","animated","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","str","src","href","sum","charCodeAt","_nextTick","_cancelNextTick","contains","_getDirection","type","touch","pointerType","originalTarget","shadowRoot","composedPath","root","inputs","idx","checked","_saveInputCheckedState","button","isContentEditable","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","err","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","b","c","cssMatrix","appendChild","removeAttribute","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","_ghostIsLast","changed","_ghostIsFirst","firstChild","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","removeChild","save","handleEvent","dropEffect","_globalDragOver","toArray","order","getAttribute","useAnimation","set","destroy","Array","querySelectorAll","utils","is","dst","nextTick","cancelNextTick","detectDirection","element","_len","_key","create","version","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref2","_ref3","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","EditTagModal","oninit","vnode","model","slug","description","color","isHidden","isPrimary","primary","title","attributes","submitData","content","fields","placeholder","oninput","bidi","tabindex","loading","exists","delete","hide","confirm","pushData","isChild","tagItem","tagIcon","position","TagsPage","forcedRefreshKey","minPrimaryTags","setting","maxPrimaryTags","minSecondaryTags","maxSecondaryTags","oncreate","onListOnCreate","localeCompare","min","setMinTags","submitButton","onSort","onSortUpdate","minTags","maxTags","HTMLOListElement","HTMLUListElement","relationships","j","url","method","TagListState","async","loadedIncludes","query","unloadedIncludes","include","has","Promise","resolve","Set","isArray","Tag","backgroundUrl","backgroundMode","defaultSort","discussionCount","lastPostedAt","lastPostedDiscussion","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimaryParent","TagGambit","KeyValueGambit","hint","filterKey","gambitValueToFilterValue","fromFilter","negate","gambits","filterValueToGambitValue","gambit","tagList","registerPage","override","original","tagPrefix","required","onremove","render","startsWith","tagScoped","allowGuest","buttonClassName","caretIcon","addTagPermission","addTagsHomePageOption","minutes","defaultLabel","count","settings","hasIcon","useColor","tagText","route","aPos","bPos","aParent","bParent","module","exports","arg","input","prim","toPrimitive","res","TypeError","String","toPropertyKey","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","o","chunkId","all","reduce","promises","u","g","globalThis","Function","l","done","script","needAttach","scripts","s","charset","timeout","nc","setAttribute","onScriptComplete","prev","onerror","onload","doneFns","head","r","toStringTag","scriptUrl","importScripts","location","currentScript","Error","compat","originalLoadChunk","loadChunk","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionGrid')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionDropdown')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Dropdown')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/BasicsPage')\"","webpack://@flarum/tags/./src/admin/addTagsHomePageOption.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/SettingDropdown')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/./src/admin/components/SelectTagsSettingComponent.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormGroup')\"","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/../../../node_modules/sortablejs/modular/sortable.esm.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/withAttr')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/FormSectionGroup')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/FormSection')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/ColorPreviewInput')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/string')\"","webpack://@flarum/tags/./src/admin/components/EditTagModal.tsx","webpack://@flarum/tags/./src/admin/components/TagsPage.js","webpack://@flarum/tags/./src/admin/extend.tsx","webpack://@flarum/tags/./src/admin/index.ts","webpack://@flarum/tags/./src/admin/addTagsPermissionScope.tsx","webpack://@flarum/tags/./src/admin/addTagChangePermission.js","webpack://@flarum/tags/./src/admin/addTagSelectionSettingComponent.tsx","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../js-packages/webpack-config/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionGrid');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Dropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/BasicsPage');","import { extend } from 'flarum/common/extend';\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\nexport default function () {\n extend(BasicsPage, 'homePageItems', items => {\n items.add('tags', {\n path: '/tags',\n label: app.translator.trans('flarum-tags.admin.basics.tags_label')\n });\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/SettingDropdown');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class SelectTagsSettingComponent extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", []);\n _defineProperty(this, \"loaded\", false);\n }\n view() {\n const value = JSON.parse(this.attrs.settingValue() || '[]');\n if (!this.loaded) {\n app.tagList.load(['parent']).then(tags => {\n this.tags = tags.filter(tag => value.includes(tag.id()));\n this.loaded = true;\n m.redraw();\n });\n }\n return m(\"div\", {\n className: \"Form-group SelectTagsSettingComponent\"\n }, m(\"label\", null, this.attrs.label), this.attrs.help && m(\"p\", {\n className: \"helpText\"\n }, this.attrs.help), !this.loaded ? m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }) : m(Button, {\n className: \"Button Button--text\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'common/components/TagSelectionModal', webpackMode: 'lazy-once' */ '../../common/components/TagSelectionModal'), {\n selectedTags: this.tags,\n onsubmit: tags => {\n this.tags = tags;\n this.attrs.settingValue(JSON.stringify(tags.map(tag => tag.id())));\n },\n ...this.attrs.options\n })\n }, !!this.tags.length ? tagsLabel(this.tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.admin.settings.button_text'))));\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/SelectTagsSettingComponent', SelectTagsSettingComponent);flarum.reg.addChunkModule('162', '610', 'flarum-tags', 'common/components/TagSelectionModal');\nflarum.reg.addChunkModule('162', '610', 'flarum-tags', 'forum/components/ToggleButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormGroup');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n var _this$loadedIncludes;\n if (includes === void 0) {\n includes = [];\n }\n (_this$loadedIncludes = this.loadedIncludes) != null ? _this$loadedIncludes : this.loadedIncludes = new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n isPrimary() {\n return Model.attribute('isPrimary').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimaryParent() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return \"\".concat(negate ? '-' : '').concat(this.key(), \":\").concat(this.filterValueToGambitValue(value));\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","/**!\n * Sortable 1.15.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\n\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\n\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\n\nfunction matches(\n/**HTMLElement*/\nel,\n/**String*/\nselector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n\n return false;\n}\n\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\n\nfunction closest(\n/**HTMLElement*/\nel,\n/**String*/\nselector,\n/**HTMLElement*/\nctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n\n return null;\n}\n\nvar R_SPACE = /\\s+/g;\n\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\n\nfunction css(el, prop, val) {\n var style = el && el.style;\n\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\n\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n\n } while (!selfOnly && (el = el.parentNode));\n }\n\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n\n return matrixFn && new matrixFn(appliedTransforms);\n}\n\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n\n return list;\n }\n\n return [];\n}\n\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n/**\n * Returns the \"bounding client rect\" of given element\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\n * @param {[HTMLElement]} container The parent the element will be placed in\n * @return {Object} The boundingClientRect of el, with specified adjustments\n */\n\n\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode; // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect(); // Set relative to edges of padding box of container\n\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n\n } while (container = container.parentNode);\n }\n }\n\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n/**\n * Checks if a side of an element is scrolled past a side of its parents\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\n */\n\n\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n /* jshint boss:true */\n\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n\n return false;\n}\n/**\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\n * and non-draggable elements\n * @param {HTMLElement} el The parent element\n * @param {Number} childNum The index of the child\n * @param {Object} options Parent Sortable's options\n * @return {HTMLElement} The child at index childNum, or null if not found\n */\n\n\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n\n currentChild++;\n }\n\n i++;\n }\n\n return null;\n}\n/**\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\n * @param {HTMLElement} el Parent element\n * @param {selector} selector Any other elements that should be ignored\n * @return {HTMLElement} The last child, ignoring ghostEl\n */\n\n\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n\n return last || null;\n}\n/**\n * Returns the index of an element within its parent for a selected set of\n * elements\n * @param {HTMLElement} el\n * @param {selector} selector\n * @return {number}\n */\n\n\nfunction index(el, selector) {\n var index = 0;\n\n if (!el || !el.parentNode) {\n return -1;\n }\n /* jshint boss:true */\n\n\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n\n return index;\n}\n/**\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\n * The value is returned in real pixels.\n * @param {HTMLElement} el\n * @return {Array} Offsets in the format of [left, top]\n */\n\n\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n\n return [offsetLeft, offsetTop];\n}\n/**\n * Returns the index of the object within the given array\n * @param {Array} arr Array that may or may not hold the object\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\n * @return {Number} The index of the object in the array, or -1\n */\n\n\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n\n return -1;\n}\n\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n\n } while (elem = elem.parentNode);\n\n return getWindowScrollingElement();\n}\n\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst;\n}\n\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\n\nvar _throttleTimeout;\n\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\n\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\n\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\n\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\n\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\n\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\n\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect); // If animating: compensate for current animation\n\n\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n\n target.toRect = toRect;\n\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n } // if fromRect != toRect: animate\n\n\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n\n if (!time) {\n time = _this.options.animation;\n }\n\n _this.animate(target, animatingRect, toRect, time);\n }\n\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\n\nfunction repaint(target) {\n return target.offsetWidth;\n}\n\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n\n this.eventCanceled = false;\n\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return; // Fire global events if it exists in this sortable\n\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n } // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n\n\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized; // Add default options from plugin\n\n _extends(defaults, initialized.defaults);\n });\n\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return; // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\n\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\n\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\n\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\nghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n_silent = false,\n savedInputChecked = [];\n/** @const */\n\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\nsupportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return; // false when <= IE11\n\n if (IE11OrLess) {\n return false;\n }\n\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n}(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n},\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n},\n\n/**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n_detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n},\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n\n var group = {};\n var originalGroup = options.group;\n\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n},\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n},\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n}; // #1184 fix - Prevent click event on fallback if dragged but item not changed position\n\n\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\n\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n\n if (nearest) {\n // Create imitation event\n var event = {};\n\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n\n nearest[expando]._onDragOver(event);\n }\n }\n};\n\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\n\n\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n\n this.el = el; // root element\n\n this.options = options = _extends({}, options); // Export instance\n\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults); // Set default options\n\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n\n _prepareGroup(options); // Bind all private methods\n\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n } // Setup drag mode\n\n\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n } // Bind events\n\n\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n\n sortables.push(this.el); // Restore sorting\n\n options.store && options.store.get && this.sort(options.store.get(this) || []); // Add animation state manager\n\n _extends(this, AnimationStateManager());\n}\n\nSortable.prototype =\n/** @lends Sortable.prototype */\n{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart(\n /** Event|TouchEvent */\n evt) {\n if (!evt.cancelable) return;\n\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n\n _saveInputCheckedState(el); // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n\n\n if (dragEl) {\n return;\n }\n\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n } // cancel dnd if original target is content editable\n\n\n if (originalTarget.isContentEditable) {\n return;\n } // Safari ignores further event handling after mousedown\n\n\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n\n target = closest(target, options.draggable, el, false);\n\n if (target && target.animated) {\n return;\n }\n\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n } // Get the index of the dragged element within its parent\n\n\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable); // Check filter\n\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n } // Prepare `dragstart`\n\n\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart(\n /** Event */\n evt,\n /** Touch */\n touch,\n /** HTMLElement */\n target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n _this._onDrop();\n\n return;\n } // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n\n\n _this._disableDelayedDragEvents();\n\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n } // Bind the events: dragstart/dragend\n\n\n _this._triggerDragStart(evt, touch); // Drag start event\n\n\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n }); // Chosen item\n\n\n toggleClass(dragEl, options.chosenClass, true);\n }; // Disable \"draggable\"\n\n\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop); // Make dragEl draggable (must be before delay for FireFox)\n\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n\n pluginEvent('delayStart', this, {\n evt: evt\n }); // Delay is impossible for native DnD in Edge or IE\n\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n } // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n\n\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(\n /** TouchEvent|PointerEvent **/\n e) {\n var touch = e.touches ? e.touches[0] : e;\n\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart(\n /** Event */\n evt,\n /** Touch */\n touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n\n awaitingDragStarted = false;\n\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n\n var options = this.options; // Apply effect\n\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost(); // Drag start event\n\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n\n _hideGhostForTarget();\n\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n\n target = parent; // store last element\n }\n /* jshint boss:true */\n while (parent = parent.parentNode);\n }\n\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove(\n /**TouchEvent*/\n evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1); // only set the status to dragging, when we are actually dragging\n\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n\n this._onDragStart(evt, true);\n }\n\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options; // Position absolutely\n\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl); // Set transform-origin\n\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart(\n /**Event*/\n evt,\n /**boolean*/\n fallback) {\n var _this = this;\n\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n\n if (Sortable.eventCanceled) {\n this._onDrop();\n\n return;\n }\n\n pluginEvent('setupClone', this);\n\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n\n this._hideClone();\n\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n } // #1143: IFrame support workaround\n\n\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n\n _this._hideClone();\n\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true); // Set proper drop events\n\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n\n on(document, 'drop', _this); // #1276 fix:\n\n css(dragEl, 'transform', 'translateZ(0)');\n }\n\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver(\n /**Event*/\n evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n\n if (_silent) return;\n\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n } // Capture animation state\n\n\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n\n _this.captureAnimationState();\n\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n } // Return invocation when dragEl is inserted (or completed)\n\n\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n } // Animation\n\n\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n } // Null lastTarget if it is not inside a previously swapped element\n\n\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n } // no bubbling and not fallback\n\n\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target); // Do not detect for empty insert if already inserted\n\n\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n } // Call when dragEl has been inserted\n\n\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n\n ignoreNextClick = false;\n\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n\n if (revert) {\n parentEl = rootEl; // actualization\n\n capture();\n\n this._hideClone();\n\n dragOverEvent('revert');\n\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n\n return completed(true);\n }\n\n var elLastChild = lastChild(el, options.draggable);\n\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // if there is a last element, it is the target\n\n\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n\n if (target) {\n targetRect = getRect(target);\n }\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n\n if (firstChild === dragEl) {\n return completed(false);\n }\n\n target = firstChild;\n targetRect = getRect(target);\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n } // If dragEl is already beside target: Do not insert\n\n\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n } // Undo chrome's scroll adjustment (has no effect on other browsers)\n\n\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n\n parentEl = dragEl.parentNode; // actualization\n // must be done before animation\n\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n\n changed();\n return completed(true);\n }\n }\n\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop(\n /**Event*/\n evt) {\n var el = this.el,\n options = this.options; // Get the index of the dragged element within its parent\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode; // Get again after plugin event\n\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n\n if (Sortable.eventCanceled) {\n this._nulling();\n\n return;\n }\n\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n\n _cancelNextTick(this.cloneId);\n\n _cancelNextTick(this._dragStartId); // Unbind events\n\n\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n\n this._offMoveEvents();\n\n this._offUpEvents();\n\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n\n css(dragEl, 'transform', '');\n\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n\n _disableDraggable(dragEl);\n\n dragEl.style['will-change'] = ''; // Remove classes\n // ghostClass is added in dragStarted\n\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n\n toggleClass(dragEl, this.options.chosenClass, false); // Drag stop event\n\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n }); // Remove event\n\n\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n }); // drag from one list and drop into another\n\n\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n }); // Save sorting\n\n\n this.save();\n }\n }\n }\n\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent(\n /**Event*/\n evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n\n break;\n\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n\n _globalDragOver(evt);\n }\n\n break;\n\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n\n for (; i < n; i++) {\n el = children[i];\n\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n\n return order;\n },\n\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n } // Remove draggable attributes\n\n\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n\n this._onDrop();\n\n this._disableDelayedDragEvents();\n\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n\n return;\n }\n\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return; // show clone at dragEl or original position\n\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\n\nfunction _globalDragOver(\n/**Event*/\nevt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n\n evt.cancelable && evt.preventDefault();\n}\n\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal; // Support for new CustomEvent feature\n\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n\n return retVal;\n}\n\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\n\nfunction _unsilent() {\n _silent = false;\n}\n\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var rect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var spacer = 10;\n return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;\n}\n\nfunction _ghostIsLast(evt, vertical, sortable) {\n var rect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var spacer = 10;\n return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;\n}\n\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n\n invert = invert || invertSwap;\n\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n\n return 0;\n}\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\n\n\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\n\n\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n\n while (i--) {\n sum += str.charCodeAt(i);\n }\n\n return sum.toString(36);\n}\n\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\n\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\n\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n} // Fixed #973:\n\n\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n} // Export utils\n\n\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\n\nSortable.get = function (element) {\n return element[expando];\n};\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\n\n\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\n\n\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n}; // Export\n\n\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\n\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n }; // Bind all private methods\n\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt; // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback); // Listener for pointer element change\n\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval(); // Detect for pointer elem change, emulating native DnD behaviour\n\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\n\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\n\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\n\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn; // New scroll root, set scrollEl\n\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n\n var layersOut = 0;\n var currentParent = scrollEl;\n\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n\n }\n\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\n\nfunction Revert() {}\n\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n\n this.sortable.animateAll();\n\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\n\nfunction Remove() {}\n\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\n\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\n\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\nmultiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\nfolding = false,\n // Folding any other time\ndragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\n\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n\n dataTransfer.setData('Text', data);\n }\n };\n }\n\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n\n sortable._hideClone();\n\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n }); // Sort multi-drag elements\n\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n sortable.captureAnimationState();\n\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n } // Remove all auxiliary multidrag items from el, if sorting enabled\n\n\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n\n initialFolding = false; // If leaving sort:false root, or already folding - Fold to new location\n\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute); // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n } // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n\n\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n\n activeSortable._showClone(sortable); // Unfold animation for clones if showing from hidden\n\n\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children; // Multi-drag selection\n\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n }); // Modifier activated, select from last to dragEl\n\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n } // Multi-drag drop\n\n\n if (dragStarted && this.isMultiDrag) {\n folding = false; // Do not \"unfold\" after around dragEl if reverted\n\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect; // Prepare unfold animation\n\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n } // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n\n\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n\n multiDragIndex++;\n }); // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n\n if (update) {\n dispatchSortableEvent('update');\n }\n }\n } // Must be done after capturing individual rects (scroll bar)\n\n\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n\n multiDragSortable = toSortable;\n } // Remove clones if necessary\n\n\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return; // Only deselect if selection is in this sortable\n\n if (multiDragSortable !== this.sortable) return; // Only deselect if target is not item in this sortable\n\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return; // Only deselect if left click\n\n if (evt && evt.button !== 0) return;\n\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n\n multiDragSortable = sortable;\n }\n\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n }); // multiDragElements will already be sorted if folding\n\n var newIndex;\n\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n\n return key;\n }\n }\n });\n}\n\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\n\n\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\n\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/FormSectionGroup');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/FormSection');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/ColorPreviewInput');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/string');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Button from 'flarum/common/components/Button';\nimport ColorPreviewInput from 'flarum/common/components/ColorPreviewInput';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport { slug } from 'flarum/common/utils/string';\nimport Stream from 'flarum/common/utils/Stream';\nimport extractText from 'flarum/common/utils/extractText';\nimport Form from 'flarum/common/components/Form';\nimport tagLabel from '../../common/helpers/tagLabel';\n/**\n * The `EditTagModal` component shows a modal dialog which allows the user\n * to create or edit a tag.\n */\nexport default class EditTagModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tag\", void 0);\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"slug\", void 0);\n _defineProperty(this, \"description\", void 0);\n _defineProperty(this, \"color\", void 0);\n _defineProperty(this, \"icon\", void 0);\n _defineProperty(this, \"isHidden\", void 0);\n _defineProperty(this, \"isPrimary\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.tag = this.attrs.model || app.store.createRecord('tags');\n this.name = Stream(this.tag.name() || '');\n this.slug = Stream(this.tag.slug() || '');\n this.description = Stream(this.tag.description() || '');\n this.color = Stream(this.tag.color() || '');\n this.icon = Stream(this.tag.icon() || '');\n this.isHidden = Stream(this.tag.isHidden() || false);\n this.isPrimary = Stream(this.attrs.primary || false);\n }\n className() {\n return 'EditTagModal Modal--small';\n }\n title() {\n return this.name() ? tagLabel(app.store.createRecord('tags', {\n attributes: this.submitData()\n })) : app.translator.trans('flarum-tags.admin.edit_tag.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, null, this.fields().toArray()));\n }\n fields() {\n const items = new ItemList();\n items.add('name', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.name_label')), m(\"input\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-tags.admin.edit_tag.name_placeholder'),\n value: this.name(),\n oninput: e => {\n const target = e.target;\n this.name(target.value);\n this.slug(slug(target.value));\n }\n })), 50);\n items.add('slug', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.slug_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.slug\n })), 40);\n items.add('description', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.description_label')), m(\"textarea\", {\n className: \"FormControl\",\n bidi: this.description\n })), 30);\n items.add('color', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.color_label')), m(ColorPreviewInput, {\n className: \"FormControl\",\n placeholder: \"#aaaaaa\",\n bidi: this.color\n })), 20);\n items.add('icon', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.icon_label')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.edit_tag.icon_text', {\n a: m(\"a\", {\n href: \"https://fontawesome.com/icons?m=free\",\n tabindex: \"-1\"\n })\n })), m(\"input\", {\n className: \"FormControl\",\n placeholder: \"fas fa-bolt\",\n bidi: this.icon\n })), 10);\n items.add('hidden', m(\"div\", {\n className: \"Form-group\"\n }, m(\"div\", null, m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"checkbox\",\n bidi: this.isHidden\n }), app.translator.trans('flarum-tags.admin.edit_tag.hide_label')))), 10);\n items.add('submit', m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary EditTagModal-save\",\n loading: this.loading\n }, app.translator.trans('flarum-tags.admin.edit_tag.submit_button')), this.tag.exists && m(\"button\", {\n type: \"button\",\n className: \"Button EditTagModal-delete\",\n onclick: this.delete.bind(this)\n }, app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_button'))), -10);\n return items;\n }\n submitData() {\n return {\n name: this.name(),\n slug: this.slug(),\n description: this.description(),\n color: this.color(),\n icon: this.icon(),\n isHidden: this.isHidden(),\n isPrimary: this.isPrimary()\n };\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n\n // Errors aren't passed to the modal onerror handler here.\n // This is done for better error visibility on smaller screen heights.\n this.tag.save(this.submitData()).then(() => this.hide(), () => this.loading = false);\n }\n delete() {\n if (confirm(extractText(app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_confirmation')))) {\n const children = app.store.all('tags').filter(tag => tag.parent() === this.tag);\n this.tag.delete().then(() => {\n children.forEach(tag => tag.pushData({\n attributes: {\n isChild: false\n }\n }));\n m.redraw();\n });\n this.hide();\n }\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/EditTagModal', EditTagModal);","import sortable from 'sortablejs';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport withAttr from 'flarum/common/utils/withAttr';\nimport Form from 'flarum/common/components/Form';\nimport FormSectionGroup from 'flarum/admin/components/FormSectionGroup';\nimport FormSection from 'flarum/admin/components/FormSection';\nimport EditTagModal from './EditTagModal';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport sortTags from '../../common/utils/sortTags';\nfunction tagItem(tag) {\n return m(\"li\", {\n \"data-id\": tag.id(),\n style: {\n color: tag.color()\n }\n }, m(\"div\", {\n className: \"TagListItem-info\"\n }, tagIcon(tag), m(\"span\", {\n className: \"TagListItem-name\"\n }, tag.name()), m(Button, {\n className: \"Button Button--link\",\n icon: \"fas fa-pencil-alt\",\n onclick: () => app.modal.show(EditTagModal, {\n model: tag\n })\n })), !tag.isChild() && tag.position() !== null && m(\"ol\", {\n className: \"TagListItem-children TagList\"\n }, sortTags(app.store.all('tags')).filter(child => child.parent() === tag).map(tagItem)));\n}\nexport default class TagsPage extends ExtensionPage {\n oninit(vnode) {\n super.oninit(vnode);\n\n // A regular redraw won't work here, because sortable has mucked around\n // with the DOM which will confuse Mithril's diffing algorithm. Instead\n // we force a full reconstruction of the DOM by changing the key, which\n // makes mithril completely re-render the component on redraw.\n this.forcedRefreshKey = 0;\n this.loading = true;\n app.tagList.load(['parent']).then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n content() {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n const minPrimaryTags = this.setting('flarum-tags.min_primary_tags', 0);\n const maxPrimaryTags = this.setting('flarum-tags.max_primary_tags', 0);\n const minSecondaryTags = this.setting('flarum-tags.min_secondary_tags', 0);\n const maxSecondaryTags = this.setting('flarum-tags.max_secondary_tags', 0);\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.parent()));\n return m(\"div\", {\n className: \"TagsContent\"\n }, m(\"div\", {\n className: \"TagsContent-list\"\n }, m(\"div\", {\n className: \"container\",\n key: this.forcedRefreshKey,\n oncreate: this.onListOnCreate.bind(this)\n }, m(FormSectionGroup, null, m(FormSection, {\n className: \"TagGroup\",\n label: app.translator.trans('flarum-tags.admin.tags.primary_heading')\n }, m(\"ol\", {\n className: \"TagList TagList--primary\"\n }, tags.filter(tag => tag.position() !== null && !tag.isChild()).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: true\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_primary_tag_button'))), m(FormSection, {\n className: \"TagGroup TagGroup--secondary\",\n label: app.translator.trans('flarum-tags.admin.tags.secondary_heading')\n }, m(\"ul\", {\n className: \"TagList\"\n }, tags.filter(tag => tag.position() === null).sort((a, b) => a.name().localeCompare(b.name())).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: false\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_secondary_tag_button'))), m(FormSection, {\n label: app.translator.trans('flarum-tags.admin.tags.settings_heading')\n }, m(Form, null, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minPrimaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minPrimaryTags, maxPrimaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minPrimaryTags(),\n bidi: maxPrimaryTags\n }))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minSecondaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minSecondaryTags, maxSecondaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minSecondaryTags(),\n bidi: maxSecondaryTags\n }))), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, this.submitButton())))), m(\"div\", {\n className: \"TagsContent-footer\"\n }, m(\"p\", null, app.translator.trans('flarum-tags.admin.tags.about_tags_text'))))));\n }\n onListOnCreate(vnode) {\n this.$('.TagList').get().map(e => {\n sortable.create(e, {\n group: 'tags',\n delay: 50,\n delayOnTouchOnly: true,\n touchStartThreshold: 5,\n animation: 150,\n swapThreshold: 0.65,\n dragClass: 'sortable-dragging',\n ghostClass: 'sortable-placeholder',\n onSort: e => this.onSortUpdate(e)\n });\n });\n }\n setMinTags(minTags, maxTags, value) {\n minTags(value);\n maxTags(Math.max(value, maxTags()));\n }\n onSortUpdate(e) {\n // If we've moved a tag from 'primary' to 'secondary', then we'll update\n // its attributes in our local store so that when we redraw the change\n // will be made.\n if (e.from instanceof HTMLOListElement && e.to instanceof HTMLUListElement) {\n app.store.getById('tags', e.item.getAttribute('data-id')).pushData({\n attributes: {\n position: null,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n }\n\n // Construct an array of primary tag IDs and their children, in the same\n // order that they have been arranged in.\n const order = this.$('.TagList--primary > li').map(function () {\n return {\n id: $(this).data('id'),\n children: $(this).find('li').map(function () {\n return $(this).data('id');\n }).get()\n };\n }).get();\n\n // Now that we have an accurate representation of the order which the\n // primary tags are in, we will update the tag attributes in our local\n // store to reflect this order.\n order.forEach((tag, i) => {\n const parent = app.store.getById('tags', tag.id);\n parent.pushData({\n attributes: {\n position: i,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n tag.children.forEach((child, j) => {\n app.store.getById('tags', child).pushData({\n attributes: {\n position: j,\n isChild: true\n },\n relationships: {\n parent\n }\n });\n });\n });\n app.request({\n url: app.forum.attribute('apiUrl') + '/tags/order',\n method: 'POST',\n body: {\n order\n }\n });\n this.forcedRefreshKey++;\n m.redraw();\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/TagsPage', TagsPage);","import Extend from 'flarum/common/extenders';\nimport commonExtend from '../common/extend';\nimport app from 'flarum/admin/app';\nimport TagsPage from './components/TagsPage';\nexport default [...commonExtend, new Extend.Admin().page(TagsPage).permission(() => ({\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.tag_discussions_label'),\n permission: 'discussion.tag'\n}), 'moderate', 95).permission(() => ({\n icon: 'fas fa-tags',\n label: app.translator.trans('flarum-tags.admin.permissions.bypass_tag_counts_label'),\n permission: 'bypassTagCounts'\n}), 'start', 89)];","import app from 'flarum/admin/app';\nimport addTagsPermissionScope from './addTagsPermissionScope';\nimport addTagsHomePageOption from './addTagsHomePageOption';\nimport addTagChangePermission from './addTagChangePermission';\nimport addTagSelectionSettingComponent from './addTagSelectionSettingComponent';\nimport TagListState from '../common/states/TagListState';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-tags', app => {\n app.tagList = new TagListState();\n addTagsPermissionScope();\n addTagsHomePageOption();\n addTagChangePermission();\n addTagSelectionSettingComponent();\n});\nimport './admin';","import app from 'flarum/admin/app';\nimport { extend, override } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport PermissionDropdown from 'flarum/admin/components/PermissionDropdown';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagLabel from '../common/helpers/tagLabel';\nimport tagIcon from '../common/helpers/tagIcon';\nimport sortTags from '../common/utils/sortTags';\nexport default function () {\n extend(PermissionGrid.prototype, 'oninit', function () {\n this.loading = true;\n });\n extend(PermissionGrid.prototype, 'oncreate', function () {\n app.tagList.load().then(() => {\n this.loading = false;\n m.redraw();\n });\n });\n override(PermissionGrid.prototype, 'view', function (original, vnode) {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n return original(vnode);\n });\n override(app, 'getRequiredPermissions', (original, permission) => {\n const tagPrefix = permission.match(/^tag\\d+\\./);\n if (tagPrefix) {\n const globalPermission = permission.substr(tagPrefix[0].length);\n const required = original(globalPermission);\n return required.map(required => tagPrefix[0] + required);\n }\n return original(permission);\n });\n extend(PermissionGrid.prototype, 'scopeItems', items => {\n sortTags(app.store.all('tags')).filter(tag => tag.isRestricted()).forEach(tag => items.add('tag' + tag.id(), {\n label: tagLabel(tag),\n onremove: () => tag.save({\n isRestricted: false\n }),\n render: item => {\n if ('setting' in item) return null;\n if (item.permission === 'viewForum' || item.permission === 'startDiscussion' || item.permission.startsWith('discussion.') && item.tagScoped !== false || item.tagScoped) {\n return m(PermissionDropdown, {\n permission: \"tag\".concat(tag.id(), \".\").concat(item.permission),\n allowGuest: item.allowGuest\n });\n }\n return null;\n }\n }));\n });\n extend(PermissionGrid.prototype, 'scopeControlItems', items => {\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.isRestricted()));\n if (tags.length) {\n items.add('tag', m(Dropdown, {\n className: \"Dropdown--restrictByTag\",\n buttonClassName: \"Button Button--text\",\n label: app.translator.trans('flarum-tags.admin.permissions.restrict_by_tag_heading'),\n icon: \"fas fa-plus\",\n caretIcon: null\n }, tags.map(tag => m(Button, {\n icon: true,\n onclick: () => tag.save({\n isRestricted: true\n })\n }, [tagIcon(tag, {\n className: 'Button-icon'\n }), ' ', tag.name()]))));\n }\n });\n}","import app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport SettingDropdown from 'flarum/admin/components/SettingDropdown';\nexport default function () {\n extend(PermissionGrid.prototype, 'startItems', items => {\n items.add('allowTagChange', {\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.allow_edit_tags_label'),\n setting: () => {\n const minutes = parseInt(app.data.settings.allow_tag_change, 10);\n return m(SettingDropdown, {\n defaultLabel: minutes ? app.translator.trans('core.admin.permissions_controls.allow_some_minutes_button', {\n count: minutes\n }) : app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button'),\n key: \"allow_tag_change\",\n options: [{\n value: '-1',\n label: app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button')\n }, {\n value: '10',\n label: app.translator.trans('core.admin.permissions_controls.allow_ten_minutes_button')\n }, {\n value: 'reply',\n label: app.translator.trans('core.admin.permissions_controls.allow_until_reply_button')\n }]\n });\n }\n }, 90);\n });\n}","import { extend } from 'flarum/common/extend';\nimport SelectTagsSettingComponent from './components/SelectTagsSettingComponent';\nimport FormGroup from 'flarum/common/components/FormGroup';\nexport default function () {\n extend(FormGroup.prototype, 'customFieldComponents', function (items) {\n items.add('flarum-tags.select-tags', attrs => {\n return m(SelectTagsSettingComponent, Object.assign({}, attrs, {\n settingValue: attrs.bidi\n }));\n });\n });\n}","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"common/components/TagSelectionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t328: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","flarum","reg","get","extend","items","add","path","label","app","translator","trans","tagsLabel","tags","attrs","children","link","otherAttrs","className","sortTags","forEach","tag","length","push","tagLabel","m","SelectTagsSettingComponent","constructor","super","arguments","this","view","value","JSON","parse","settingValue","loaded","then","filter","includes","id","redraw","help","onclick","selectedTags","onsubmit","stringify","map","options","size","display","addChunkModule","TagListState","async","loadedIncludes","query","unloadedIncludes","include","has","Promise","resolve","Set","join","val","Array","isArray","Tag","name","call","slug","description","color","backgroundUrl","backgroundMode","icon","position","parent","defaultSort","isChild","isHidden","isPrimary","discussionCount","lastPostedAt","lastPostedDiscussion","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimaryParent","TagGambit","KeyValueGambit","key","hint","filterKey","gambitValueToFilterValue","fromFilter","negate","gambits","toString","concat","filterValueToGambitValue","gambit","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread2","target","i","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","iterator","prototype","configurable","writable","_extends","assign","hasOwnProperty","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","userAgent","pattern","window","navigator","match","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","on","el","event","fn","addEventListener","off","removeEventListener","matches","selector","substring","msMatchesSelector","webkitMatchesSelector","_","getParentOrHost","host","document","nodeType","parentNode","closest","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","state","classList","replace","css","prop","style","defaultView","getComputedStyle","currentStyle","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","find","tagName","list","getElementsByTagName","n","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","getBoundingClientRect","elRect","top","left","bottom","right","height","width","innerHeight","innerWidth","containerRect","parseInt","elMatrix","scaleX","a","scaleY","d","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","index","nodeName","toUpperCase","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","body","isRectEqual","rect1","rect2","Math","round","throttle","callback","ms","args","_this","setTimeout","scrollBy","x","y","Polymer","$","jQuery","Zepto","dom","cloneNode","expando","Date","getTime","plugins","defaults","initializeByDefault","PluginManager","mount","plugin","option","p","pluginName","pluginEvent","eventName","sortable","evt","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_excluded","_ref","undefined","originalEvent","data","bind","dragEl","parentEl","ghostEl","rootEl","nextEl","lastDownEl","cloneEl","cloneHidden","dragStarted","moved","putSortable","activeSortable","active","oldIndex","oldDraggableIndex","newIndex","newDraggableIndex","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","targetEl","toEl","fromEl","extraEventProperties","onName","charAt","substr","CustomEvent","createEvent","initEvent","bubbles","cancelable","to","from","item","pullMode","lastPutMode","allEventProperties","dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","split","touchingSideChild2","clear","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","originalGroup","checkPull","checkPut","put","revertClone","preventDefault","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","some","threshold","emptyInsertThreshold","rect","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","animationCallbackId","animationStates","sort","disabled","store","handle","test","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","animation","easing","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","Number","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","captureAnimationState","slice","child","fromRect","thisAnimationDuration","childMatrix","f","e","addAnimationState","removeAnimationState","splice","arr","indexOfObject","animateAll","clearTimeout","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","pow","calculateRealTime","animate","max","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","offsetWidth","repaint","animated","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","str","src","href","sum","charCodeAt","_nextTick","_cancelNextTick","contains","_getDirection","type","touch","pointerType","originalTarget","shadowRoot","composedPath","root","inputs","idx","checked","_saveInputCheckedState","button","isContentEditable","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","err","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","b","c","cssMatrix","appendChild","removeAttribute","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","_ghostIsLast","changed","_ghostIsFirst","firstChild","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","removeChild","save","handleEvent","dropEffect","_globalDragOver","toArray","order","getAttribute","useAnimation","set","destroy","querySelectorAll","utils","is","dst","nextTick","cancelNextTick","detectDirection","element","_len","_key","create","version","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref2","_ref3","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","EditTagModal","oninit","vnode","model","primary","title","attributes","submitData","content","fields","placeholder","oninput","bidi","tabindex","loading","exists","delete","hide","confirm","pushData","tagItem","tagIcon","TagsPage","forcedRefreshKey","minPrimaryTags","setting","maxPrimaryTags","minSecondaryTags","maxSecondaryTags","oncreate","onListOnCreate","localeCompare","min","setMinTags","submitButton","onSort","onSortUpdate","minTags","maxTags","HTMLOListElement","HTMLUListElement","relationships","j","url","method","page","permission","tagList","override","original","tagPrefix","required","onremove","render","startsWith","tagScoped","allowGuest","buttonClassName","caretIcon","addTagsHomePageOption","minutes","defaultLabel","count","settings","hasIcon","useColor","tagText","route","aPos","bPos","aParent","bParent","module","exports","arg","input","prim","toPrimitive","res","TypeError","String","toPropertyKey","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","o","chunkId","all","reduce","promises","u","g","globalThis","Function","l","done","script","needAttach","scripts","s","charset","timeout","nc","setAttribute","onScriptComplete","prev","onerror","onload","doneFns","head","r","toStringTag","scriptUrl","importScripts","location","currentScript","Error","compat","originalLoadChunk","loadChunk","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file diff --git a/framework/core/js/dist-typings/admin/AdminApplication.d.ts b/framework/core/js/dist-typings/admin/AdminApplication.d.ts index d4e92574b..7c59c235a 100644 --- a/framework/core/js/dist-typings/admin/AdminApplication.d.ts +++ b/framework/core/js/dist-typings/admin/AdminApplication.d.ts @@ -1,9 +1,10 @@ import { AdminRoutes } from './routes'; import Application, { ApplicationData } from '../common/Application'; -import ExtensionData from './utils/ExtensionData'; +import AdminRegistry from './utils/AdminRegistry'; import IHistory from '../common/IHistory'; import SearchManager from '../common/SearchManager'; import SearchState from '../common/states/SearchState'; +import GeneralSearchIndex from './states/GeneralSearchIndex'; export declare type Extension = { id: string; name: string; @@ -27,6 +28,7 @@ export declare type Extension = { extra: { 'flarum-extension': { title: string; + category?: string; 'database-support'?: string[]; }; }; @@ -59,7 +61,13 @@ export interface AdminApplicationData extends ApplicationData { sessionDriver: string; } export default class AdminApplication extends Application { - extensionData: ExtensionData; + /** + * Stores the available settings, permissions, and custom pages of the app. + * Allows the global search to find these items. + * + * @internal + */ + registry: AdminRegistry; extensionCategories: { feature: number; theme: number; @@ -67,6 +75,11 @@ export default class AdminApplication extends Application { }; history: IHistory; search: SearchManager; + /** + * Custom settings and custom permissions do not go through the registry. + * The general index is used to manually add these items to be picked up by the search. + */ + generalIndex: GeneralSearchIndex; /** * Settings are serialized to the admin dashboard as strings. * Additional encoding/decoding is possible, but must take @@ -77,6 +90,7 @@ export default class AdminApplication extends Application { data: AdminApplicationData; route: typeof Application.prototype.route & AdminRoutes; constructor(); + protected beforeMount(): void; /** * @inheritdoc */ diff --git a/framework/core/js/dist-typings/admin/admin.d.ts b/framework/core/js/dist-typings/admin/admin.d.ts index 36d3cb49f..ee597a1a8 100644 --- a/framework/core/js/dist-typings/admin/admin.d.ts +++ b/framework/core/js/dist-typings/admin/admin.d.ts @@ -1,6 +1,6 @@ import '../common/common'; import './utils/saveSettings'; -import './utils/ExtensionData'; +import './utils/AdminRegistry'; import './utils/isExtensionEnabled'; import './utils/getCategorizedExtensions'; import './components/SettingDropdown'; diff --git a/framework/core/js/dist-typings/admin/components/AdminPage.d.ts b/framework/core/js/dist-typings/admin/components/AdminPage.d.ts index 7ede89eef..18f7fe80a 100644 --- a/framework/core/js/dist-typings/admin/components/AdminPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/AdminPage.d.ts @@ -113,5 +113,5 @@ export default abstract class AdminPage; - modelLocale(): Record; + static modelLocale(): Record; } diff --git a/framework/core/js/dist-typings/admin/components/AdvancedPage.d.ts b/framework/core/js/dist-typings/admin/components/AdvancedPage.d.ts index e9c7def09..1e9050bc4 100644 --- a/framework/core/js/dist-typings/admin/components/AdvancedPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/AdvancedPage.d.ts @@ -1,4 +1,4 @@ -/// +/// import AdminPage from './AdminPage'; import type { IPageAttrs } from '../../common/components/Page'; import type Mithril from 'mithril'; @@ -19,4 +19,5 @@ export default class AdvancedPage e searchDrivers(): JSX.Element; maintenance(): JSX.Element; pgsqlSettings(): JSX.Element; + static register(): void; } diff --git a/framework/core/js/dist-typings/admin/components/AppearancePage.d.ts b/framework/core/js/dist-typings/admin/components/AppearancePage.d.ts index 4bafeb45d..64820117c 100644 --- a/framework/core/js/dist-typings/admin/components/AppearancePage.d.ts +++ b/framework/core/js/dist-typings/admin/components/AppearancePage.d.ts @@ -1,4 +1,4 @@ -/// +/// import AdminPage from './AdminPage'; import ItemList from '../../common/utils/ItemList'; import type Mithril from 'mithril'; @@ -12,4 +12,5 @@ export default class AppearancePage extends AdminPage { content(): JSX.Element; colorItems(): ItemList; onsaved(): void; + static register(): void; } diff --git a/framework/core/js/dist-typings/admin/components/BasicsPage.d.ts b/framework/core/js/dist-typings/admin/components/BasicsPage.d.ts index 8f412acce..264da0430 100644 --- a/framework/core/js/dist-typings/admin/components/BasicsPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/BasicsPage.d.ts @@ -1,4 +1,4 @@ -/// +/// import ItemList from '../../common/utils/ItemList'; import AdminPage from './AdminPage'; import type { IPageAttrs } from '../../common/components/Page'; @@ -12,9 +12,6 @@ export declare type DriverLocale = { slug: Record>; }; export default class BasicsPage extends AdminPage { - localeOptions: Record; - displayNameOptions: Record; - slugDriverOptions: Record>; oninit(vnode: Mithril.Vnode): void; headerInfo(): { className: string; @@ -27,6 +24,7 @@ export default class BasicsPage ext * Build a list of options for the default homepage. Each option must be an * object with `path` and `label` properties. */ - homePageItems(): ItemList; - driverLocale(): DriverLocale; + static homePageItems(): ItemList; + static driverLocale(): DriverLocale; + static register(): void; } diff --git a/framework/core/js/dist-typings/admin/components/CreateUserModal.d.ts b/framework/core/js/dist-typings/admin/components/CreateUserModal.d.ts index 2d6510aff..473dfc5b1 100644 --- a/framework/core/js/dist-typings/admin/components/CreateUserModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/CreateUserModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import ItemList from '../../common/utils/ItemList'; import Stream from '../../common/utils/Stream'; diff --git a/framework/core/js/dist-typings/admin/components/DashboardPage.d.ts b/framework/core/js/dist-typings/admin/components/DashboardPage.d.ts index b94e449d6..c7090dd71 100644 --- a/framework/core/js/dist-typings/admin/components/DashboardPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/DashboardPage.d.ts @@ -1,4 +1,4 @@ -/// +/// import ItemList from '../../common/utils/ItemList'; import AdminPage from './AdminPage'; import type { Children } from 'mithril'; diff --git a/framework/core/js/dist-typings/admin/components/EditCustomCssModal.d.ts b/framework/core/js/dist-typings/admin/components/EditCustomCssModal.d.ts index 782786cd4..ec92bfc34 100644 --- a/framework/core/js/dist-typings/admin/components/EditCustomCssModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/EditCustomCssModal.d.ts @@ -1,4 +1,4 @@ -/// +/// /// import SettingsModal from './SettingsModal'; export default class EditCustomCssModal extends SettingsModal { diff --git a/framework/core/js/dist-typings/admin/components/EditCustomFooterModal.d.ts b/framework/core/js/dist-typings/admin/components/EditCustomFooterModal.d.ts index b2d35c06e..45122c515 100644 --- a/framework/core/js/dist-typings/admin/components/EditCustomFooterModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/EditCustomFooterModal.d.ts @@ -1,4 +1,4 @@ -/// +/// /// import SettingsModal from './SettingsModal'; export default class EditCustomFooterModal extends SettingsModal { diff --git a/framework/core/js/dist-typings/admin/components/EditCustomHeaderModal.d.ts b/framework/core/js/dist-typings/admin/components/EditCustomHeaderModal.d.ts index da83c1674..bac737dd0 100644 --- a/framework/core/js/dist-typings/admin/components/EditCustomHeaderModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/EditCustomHeaderModal.d.ts @@ -1,4 +1,4 @@ -/// +/// /// import SettingsModal from './SettingsModal'; export default class EditCustomHeaderModal extends SettingsModal { diff --git a/framework/core/js/dist-typings/admin/components/GeneralSearchSource.d.ts b/framework/core/js/dist-typings/admin/components/GeneralSearchSource.d.ts new file mode 100644 index 000000000..063e23e81 --- /dev/null +++ b/framework/core/js/dist-typings/admin/components/GeneralSearchSource.d.ts @@ -0,0 +1,37 @@ +import type Mithril from 'mithril'; +import type { SearchSource } from './Search'; +import { GeneralIndexData } from '../states/GeneralSearchIndex'; +import { ExtensionConfig } from '../utils/AdminRegistry'; +export declare class GeneralSearchResult { + id: string; + category: string; + icon: { + name: string; + [key: string]: any; + }; + tree: string[]; + link: string; + help?: string | undefined; + constructor(id: string, category: string, icon: { + name: string; + [key: string]: any; + }, tree: string[], link: string, help?: string | undefined); +} +/** + * Finds and displays settings, permissions and installed extensions (i.e. general search results) in the search dropdown. + */ +export default class GeneralSearchSource implements SearchSource { + protected results: Map; + resource: string; + title(): string; + isCached(query: string): boolean; + search(query: string, limit: number): Promise; + protected lookup(data: GeneralIndexData | { + [key: string]: ExtensionConfig | undefined; + }, query: string): GeneralSearchResult[]; + protected itemHasQuery(item: string, query: string): boolean; + view(query: string): Array; + customGrouping(): boolean; + fullPage(query: string): null; + gotoItem(id: string): string | null; +} diff --git a/framework/core/js/dist-typings/admin/components/HeaderSecondary.d.ts b/framework/core/js/dist-typings/admin/components/HeaderSecondary.d.ts index bc9a8bc07..fbe024a0c 100644 --- a/framework/core/js/dist-typings/admin/components/HeaderSecondary.d.ts +++ b/framework/core/js/dist-typings/admin/components/HeaderSecondary.d.ts @@ -1,15 +1,13 @@ +import Component from '../../common/Component'; +import ItemList from '../../common/utils/ItemList'; +import type Mithril from 'mithril'; /** * The `HeaderSecondary` component displays secondary header controls. */ -export default class HeaderSecondary extends Component { - constructor(); +export default class HeaderSecondary extends Component { view(): JSX.Element; /** * Build an item list for the controls. - * - * @return {ItemList} */ - items(): ItemList; + items(): ItemList; } -import Component from "../../common/Component"; -import ItemList from "../../common/utils/ItemList"; diff --git a/framework/core/js/dist-typings/admin/components/LoadingModal.d.ts b/framework/core/js/dist-typings/admin/components/LoadingModal.d.ts index 5891f479a..a3a69c2fb 100644 --- a/framework/core/js/dist-typings/admin/components/LoadingModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/LoadingModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; export interface ILoadingModalAttrs extends IInternalModalAttrs { } diff --git a/framework/core/js/dist-typings/admin/components/MailPage.d.ts b/framework/core/js/dist-typings/admin/components/MailPage.d.ts index ea9906e42..9c1198e88 100644 --- a/framework/core/js/dist-typings/admin/components/MailPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/MailPage.d.ts @@ -1,4 +1,4 @@ -/// +/// import AdminPage from './AdminPage'; import type { IPageAttrs } from '../../common/components/Page'; import type { AlertIdentifier } from '../../common/states/AlertManagerState'; @@ -34,4 +34,5 @@ export default class MailPage exten mailSettingItems(): ItemList; sendTestEmail(): void; saveSettings(e: SaveSubmitEvent): Promise; + static register(): void; } diff --git a/framework/core/js/dist-typings/admin/components/PermissionGrid.d.ts b/framework/core/js/dist-typings/admin/components/PermissionGrid.d.ts index e11fa8f17..d6faa8a69 100644 --- a/framework/core/js/dist-typings/admin/components/PermissionGrid.d.ts +++ b/framework/core/js/dist-typings/admin/components/PermissionGrid.d.ts @@ -2,9 +2,11 @@ import Component, { ComponentAttrs } from '../../common/Component'; import ItemList from '../../common/utils/ItemList'; import type Mithril from 'mithril'; export interface PermissionConfig { - permission: string; + permission?: string; icon: string; label: Mithril.Children; + id?: string; + setting?: () => Mithril.Children; allowGuest?: boolean; } export interface PermissionSetting { diff --git a/framework/core/js/dist-typings/admin/components/PermissionsPage.d.ts b/framework/core/js/dist-typings/admin/components/PermissionsPage.d.ts index c4405c9de..ff15efaa5 100644 --- a/framework/core/js/dist-typings/admin/components/PermissionsPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/PermissionsPage.d.ts @@ -1,4 +1,4 @@ -/// +/// /// import AdminPage from './AdminPage'; export default class PermissionsPage extends AdminPage { @@ -9,4 +9,9 @@ export default class PermissionsPage extends AdminPage { description: import("@askvortsov/rich-icu-message-formatter").NestedStringArray; }; content(): JSX.Element; + static register(): void; + static registerViewPermissions(): void; + static registerStartPermissions(): void; + static registerReplyPermissions(): void; + static registerModeratePermissions(): void; } diff --git a/framework/core/js/dist-typings/admin/components/ReadmeModal.d.ts b/framework/core/js/dist-typings/admin/components/ReadmeModal.d.ts index c56fbfe41..b754111f5 100644 --- a/framework/core/js/dist-typings/admin/components/ReadmeModal.d.ts +++ b/framework/core/js/dist-typings/admin/components/ReadmeModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import Modal, { IInternalModalAttrs } from '../../common/components/Modal'; import ExtensionReadme from '../models/ExtensionReadme'; import type Mithril from 'mithril'; diff --git a/framework/core/js/dist-typings/admin/components/Search.d.ts b/framework/core/js/dist-typings/admin/components/Search.d.ts new file mode 100644 index 000000000..be05b7aa4 --- /dev/null +++ b/framework/core/js/dist-typings/admin/components/Search.d.ts @@ -0,0 +1,8 @@ +import ItemList from '../../common/utils/ItemList'; +import AbstractSearch, { type SearchAttrs, type SearchSource as BaseSearchSource } from '../../common/components/AbstractSearch'; +export interface SearchSource extends BaseSearchSource { +} +export default class Search extends AbstractSearch { + static initAttrs(attrs: SearchAttrs): void; + sourceItems(): ItemList; +} diff --git a/framework/core/js/dist-typings/admin/components/UserListPage.d.ts b/framework/core/js/dist-typings/admin/components/UserListPage.d.ts index 4bfb7c614..9e7d0a9b5 100644 --- a/framework/core/js/dist-typings/admin/components/UserListPage.d.ts +++ b/framework/core/js/dist-typings/admin/components/UserListPage.d.ts @@ -1,4 +1,4 @@ -/// +/// import Mithril from 'mithril'; import type User from '../../common/models/User'; import type { IPageAttrs } from '../../common/components/Page'; diff --git a/framework/core/js/dist-typings/admin/states/GeneralSearchIndex.d.ts b/framework/core/js/dist-typings/admin/states/GeneralSearchIndex.d.ts new file mode 100644 index 000000000..fcd3fb423 --- /dev/null +++ b/framework/core/js/dist-typings/admin/states/GeneralSearchIndex.d.ts @@ -0,0 +1,27 @@ +export declare type GeneralIndexItem = { + id: string; + tree?: string[]; + label: string; + help?: string; + link?: string; + visible?: () => boolean; +}; +export declare type GeneralIndexData = Record>; +export declare type GeneralIndexGroup = { + label: string; + icon: { + name: string; + [key: string]: any; + }; + link: string; +}; +export default class GeneralSearchIndex { + protected currentId: string; + protected data: GeneralIndexData; + protected groups: Record; + group(id: string, data: GeneralIndexGroup): this; + for(id: string): this; + add(type: 'settings' | 'permissions', items: GeneralIndexItem[]): void; + getData(): GeneralIndexData; + getGroup(id: string): null | GeneralIndexGroup; +} diff --git a/framework/core/js/dist-typings/admin/utils/ExtensionData.d.ts b/framework/core/js/dist-typings/admin/utils/AdminRegistry.d.ts similarity index 84% rename from framework/core/js/dist-typings/admin/utils/ExtensionData.d.ts rename to framework/core/js/dist-typings/admin/utils/AdminRegistry.d.ts index c1abfe45b..f9646ebd1 100644 --- a/framework/core/js/dist-typings/admin/utils/ExtensionData.d.ts +++ b/framework/core/js/dist-typings/admin/utils/AdminRegistry.d.ts @@ -2,13 +2,13 @@ import type Mithril from 'mithril'; import ItemList from '../../common/utils/ItemList'; import { SettingsComponentOptions } from '../components/AdminPage'; import ExtensionPage, { ExtensionPageAttrs } from '../components/ExtensionPage'; -import { PermissionConfig, PermissionType } from '../components/PermissionGrid'; -declare type SettingConfigInput = SettingsComponentOptions | (() => Mithril.Children); -declare type SettingConfigInternal = SettingsComponentOptions | ((() => Mithril.Children) & { +import type { PermissionConfig, PermissionType } from '../components/PermissionGrid'; +export declare type SettingConfigInput = SettingsComponentOptions | (() => Mithril.Children); +export declare type SettingConfigInternal = SettingsComponentOptions | ((() => Mithril.Children) & { setting: string; }); export declare type CustomExtensionPage = new () => ExtensionPage; -declare type ExtensionConfig = { +export declare type ExtensionConfig = { settings?: ItemList; permissions?: { view?: ItemList; @@ -30,13 +30,13 @@ declare type InnerDataActiveExtension = { [key: string]: ExtensionConfig; }; }; -export default class ExtensionData { +export default class AdminRegistry { protected state: InnerDataActiveExtension | InnerDataNoActiveExtension; /** * This function simply takes the extension id * * @example - * app.extensionData.for('flarum-tags') + * app.registry.for('flarum-tags') * * flarum/flags -> flarum-flags | acme/extension -> acme-extension */ @@ -79,7 +79,7 @@ export default class ExtensionData { /** * Get an ItemList of all extensions' registered permissions */ - getAllExtensionPermissions(type: PermissionType): ItemList; + getAllPermissions(type: PermissionType): ItemList; /** * Get a singular extension's registered permissions */ @@ -92,5 +92,10 @@ export default class ExtensionData { * Returns an extension's custom page component if it exists. */ getPage(extension: string): CustomExtensionPage | undefined; + getData(): { + [key: string]: ExtensionConfig; + } | { + [key: string]: ExtensionConfig | undefined; + }; } export {}; diff --git a/framework/core/js/dist-typings/common/Application.d.ts b/framework/core/js/dist-typings/common/Application.d.ts index 36fe373a0..eb942d088 100644 --- a/framework/core/js/dist-typings/common/Application.d.ts +++ b/framework/core/js/dist-typings/common/Application.d.ts @@ -205,7 +205,9 @@ export default class Application { private requestErrorAlert; initialRoute: string; load(payload: Application['data']): void; + protected initialize(): CallableFunction[]; boot(): void; + protected beforeMount(): void; bootExtensions(extensions: Record): void; diff --git a/framework/core/js/dist-typings/common/components/AbstractSearch.d.ts b/framework/core/js/dist-typings/common/components/AbstractSearch.d.ts new file mode 100644 index 000000000..4f7817228 --- /dev/null +++ b/framework/core/js/dist-typings/common/components/AbstractSearch.d.ts @@ -0,0 +1,75 @@ +import Component, { ComponentAttrs } from '../Component'; +import SearchState from '../states/SearchState'; +import ItemList from '../utils/ItemList'; +import type Mithril from 'mithril'; +export interface SearchAttrs extends ComponentAttrs { + /** The type of alert this is. Will be used to give the alert a class name of `Alert--{type}`. */ + state: SearchState; + label: string; + a11yRoleLabel: string; +} +/** + * The `SearchSource` interface defines a section of search results in the + * search dropdown. + * + * Search sources should be registered with the `Search` component class + * by extending the `sourceItems` method. When the user types a + * query, each search source will be prompted to load search results via the + * `search` method. When the dropdown is redrawn, it will be constructed by + * putting together the output from the `view` method of each source. + */ +export interface SearchSource { + /** + * The resource type that this search source is responsible for. + */ + resource: string; + /** + * Get the title for this search source. + */ + title(): string; + /** + * Check if a query has been cached for this search source. + */ + isCached(query: string): boolean; + /** + * Make a request to get results for the given query. + * The results will be updated internally in the search source, not exposed. + */ + search(query: string, limit: number): Promise; + /** + * Get an array of virtual
        • s that list the search results for the given + * query. + */ + view(query: string): Array; + /** + * Whether the search results view uses custom grouping of the results. + * Prevents the `Search Preview` default group from display. + */ + customGrouping(): boolean; + /** + * Get a list item for the full search results page. + */ + fullPage(query: string): Mithril.Vnode | null; + /** + * Get to the result item page. Only called if each list item has a data-id. + */ + gotoItem(id: string): string | null; +} +/** + * The `Search` component displays a primary search input at the top of the frontend (forum or admin). + * When clicked, it opens an advanced search modal with results from various sources. + * + * Must be extended and the abstract methods implemented per-frontend. + */ +export default abstract class AbstractSearch extends Component { + /** + * The instance of `SearchState` for this component. + */ + protected searchState: SearchState; + oninit(vnode: Mithril.Vnode): void; + view(): JSX.Element; + /** + * A list of search sources that can be used to query for search results. + */ + abstract sourceItems(): ItemList; +} diff --git a/framework/core/js/dist-typings/common/components/EditUserModal.d.ts b/framework/core/js/dist-typings/common/components/EditUserModal.d.ts index dbf7c6911..77fbee2ab 100644 --- a/framework/core/js/dist-typings/common/components/EditUserModal.d.ts +++ b/framework/core/js/dist-typings/common/components/EditUserModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import ItemList from '../utils/ItemList'; import Stream from '../utils/Stream'; diff --git a/framework/core/js/dist-typings/common/components/FormGroup.d.ts b/framework/core/js/dist-typings/common/components/FormGroup.d.ts index 4b7015ef5..c1a7b0ceb 100644 --- a/framework/core/js/dist-typings/common/components/FormGroup.d.ts +++ b/framework/core/js/dist-typings/common/components/FormGroup.d.ts @@ -30,9 +30,11 @@ export interface HTMLInputFieldComponentOptions extends CommonFieldOptions { } declare const BooleanSettingTypes: readonly ["bool", "checkbox", "switch", "boolean"]; declare const SelectSettingTypes: readonly ["select", "dropdown", "selectdropdown"]; +declare const RadioSettingTypes: readonly ["radio"]; declare const TextareaSettingTypes: readonly ["textarea"]; declare const ColorPreviewSettingType: "color-preview"; declare const ImageUploadSettingType: "image-upload"; +declare const StackedFormControlType: "stacked-text"; /** * Valid options for the setting component builder to generate a Switch. */ @@ -43,7 +45,7 @@ export interface SwitchFieldComponentOptions extends CommonFieldOptions { * Valid options for the setting component builder to generate a Select dropdown. */ export interface SelectFieldComponentOptions extends CommonFieldOptions { - type: typeof SelectSettingTypes[number]; + type: typeof SelectSettingTypes[number] | typeof RadioSettingTypes[number]; /** * Map of values to their labels */ @@ -71,6 +73,13 @@ export interface ColorPreviewFieldComponentOptions extends CommonFieldOptions { export interface ImageUploadFieldComponentOptions extends CommonFieldOptions, IUploadImageButtonAttrs { type: typeof ImageUploadSettingType; } +export interface StackedFormControlFieldComponentOptions extends CommonFieldOptions { + type: typeof StackedFormControlType; + textArea: { + setting: string; + [key: string]: unknown; + }; +} export interface CustomFieldComponentOptions extends CommonFieldOptions { type: string; [key: string]: unknown; @@ -78,9 +87,10 @@ export interface CustomFieldComponentOptions extends CommonFieldOptions { /** * All valid options for the setting component builder. */ -export declare type FieldComponentOptions = HTMLInputFieldComponentOptions | SwitchFieldComponentOptions | SelectFieldComponentOptions | TextareaFieldComponentOptions | ColorPreviewFieldComponentOptions | ImageUploadFieldComponentOptions | CustomFieldComponentOptions; +export declare type FieldComponentOptions = HTMLInputFieldComponentOptions | SwitchFieldComponentOptions | SelectFieldComponentOptions | TextareaFieldComponentOptions | ColorPreviewFieldComponentOptions | ImageUploadFieldComponentOptions | StackedFormControlFieldComponentOptions | CustomFieldComponentOptions; export declare type IFormGroupAttrs = ComponentAttrs & FieldComponentOptions & { stream?: Stream; + getSetting?: (key: string) => Stream; }; /** * Builds a field component based on the provided attributes. diff --git a/framework/core/js/dist-typings/forum/components/SearchModal.d.ts b/framework/core/js/dist-typings/common/components/SearchModal.d.ts similarity index 85% rename from framework/core/js/dist-typings/forum/components/SearchModal.d.ts rename to framework/core/js/dist-typings/common/components/SearchModal.d.ts index 4ed6da19a..cc5035666 100644 --- a/framework/core/js/dist-typings/forum/components/SearchModal.d.ts +++ b/framework/core/js/dist-typings/common/components/SearchModal.d.ts @@ -1,12 +1,12 @@ -import type { IFormModalAttrs } from '../../common/components/FormModal'; -import FormModal from '../../common/components/FormModal'; +import type { IFormModalAttrs } from './FormModal'; +import FormModal from './FormModal'; import type Mithril from 'mithril'; -import type SearchState from '../../common/states/SearchState'; -import KeyboardNavigatable from '../../common/utils/KeyboardNavigatable'; -import Stream from '../../common/utils/Stream'; -import type { SearchSource } from './Search'; -import ItemList from '../../common/utils/ItemList'; -import GambitsAutocomplete from '../../common/utils/GambitsAutocomplete'; +import type SearchState from '../states/SearchState'; +import KeyboardNavigatable from '../utils/KeyboardNavigatable'; +import Stream from '../utils/Stream'; +import ItemList from '../utils/ItemList'; +import GambitsAutocomplete from '../utils/GambitsAutocomplete'; +import type { SearchSource } from './AbstractSearch'; export interface ISearchModalAttrs extends IFormModalAttrs { onchange: (value: string) => void; searchState: SearchState; diff --git a/framework/core/js/dist-typings/common/extenders/Admin.d.ts b/framework/core/js/dist-typings/common/extenders/Admin.d.ts new file mode 100644 index 000000000..19403c7a0 --- /dev/null +++ b/framework/core/js/dist-typings/common/extenders/Admin.d.ts @@ -0,0 +1,35 @@ +import IExtender, { IExtensionModule } from './IExtender'; +import type AdminApplication from '../../admin/AdminApplication'; +import type { CustomExtensionPage, SettingConfigInternal } from '../../admin/utils/AdminRegistry'; +import type { PermissionConfig, PermissionType } from '../../admin/components/PermissionGrid'; +import Mithril from 'mithril'; +export default class Admin implements IExtender { + protected settings: { + setting?: () => SettingConfigInternal; + customSetting?: () => Mithril.Children; + priority: number; + }[]; + protected permissions: { + permission: () => PermissionConfig; + type: PermissionType; + priority: number; + }[]; + protected customPage: CustomExtensionPage | null; + /** + * Register a setting to be shown on the extension's settings page. + */ + setting(setting: () => SettingConfigInternal, priority?: number): this; + /** + * Register a custom setting to be shown on the extension's settings page. + */ + customSetting(setting: () => Mithril.Children, priority?: number): this; + /** + * Register a permission to be shown on the extension's permissions page. + */ + permission(permission: () => PermissionConfig, type: PermissionType, priority?: number): this; + /** + * Register a custom page to be shown in the admin interface. + */ + page(page: CustomExtensionPage): this; + extend(app: AdminApplication, extension: IExtensionModule): void; +} diff --git a/framework/core/js/dist-typings/common/extenders/Notification.d.ts b/framework/core/js/dist-typings/common/extenders/Notification.d.ts index 51a3a3553..a612c7a22 100644 --- a/framework/core/js/dist-typings/common/extenders/Notification.d.ts +++ b/framework/core/js/dist-typings/common/extenders/Notification.d.ts @@ -1,7 +1,7 @@ import IExtender, { IExtensionModule } from './IExtender'; -import type Application from '../Application'; +import type ForumApplication from '../../forum/ForumApplication'; import type { NewComponent } from '../Application'; -export default class Notification implements IExtender { +export default class Notification implements IExtender { private notificationComponents; /** * Register a new notification component type. @@ -10,5 +10,5 @@ export default class Notification implements IExtender { * @param component The component class to render the notification. */ add(name: string, component: NewComponent): Notification; - extend(app: Application, extension: IExtensionModule): void; + extend(app: ForumApplication, extension: IExtensionModule): void; } diff --git a/framework/core/js/dist-typings/common/extenders/PostTypes.d.ts b/framework/core/js/dist-typings/common/extenders/PostTypes.d.ts index 4a76d7318..9c8f68c08 100644 --- a/framework/core/js/dist-typings/common/extenders/PostTypes.d.ts +++ b/framework/core/js/dist-typings/common/extenders/PostTypes.d.ts @@ -1,6 +1,6 @@ import IExtender, { IExtensionModule } from './IExtender'; -import Application from '../Application'; -export default class PostTypes implements IExtender { +import type ForumApplication from '../../forum/ForumApplication'; +export default class PostTypes implements IExtender { private postComponents; /** * Register a new post component type. @@ -10,5 +10,5 @@ export default class PostTypes implements IExtender { * @param component The component class to render the post. */ add(name: string, component: any): PostTypes; - extend(app: Application, extension: IExtensionModule): void; + extend(app: ForumApplication, extension: IExtensionModule): void; } diff --git a/framework/core/js/dist-typings/common/extenders/index.d.ts b/framework/core/js/dist-typings/common/extenders/index.d.ts index cbafbf493..99aedcdb6 100644 --- a/framework/core/js/dist-typings/common/extenders/index.d.ts +++ b/framework/core/js/dist-typings/common/extenders/index.d.ts @@ -5,6 +5,7 @@ import Store from './Store'; import Search from './Search'; import Notification from './Notification'; import ThemeMode from './ThemeMode'; +import Admin from './Admin'; declare const extenders: { Model: typeof Model; PostTypes: typeof PostTypes; @@ -13,5 +14,6 @@ declare const extenders: { Search: typeof Search; Notification: typeof Notification; ThemeMode: typeof ThemeMode; + Admin: typeof Admin; }; export default extenders; diff --git a/framework/core/js/dist-typings/forum/components/ChangeEmailModal.d.ts b/framework/core/js/dist-typings/forum/components/ChangeEmailModal.d.ts index e431140fb..a491173a7 100644 --- a/framework/core/js/dist-typings/forum/components/ChangeEmailModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/ChangeEmailModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Stream from '../../common/utils/Stream'; import type Mithril from 'mithril'; diff --git a/framework/core/js/dist-typings/forum/components/ChangePasswordModal.d.ts b/framework/core/js/dist-typings/forum/components/ChangePasswordModal.d.ts index cd9f5868f..786ab12d8 100644 --- a/framework/core/js/dist-typings/forum/components/ChangePasswordModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/ChangePasswordModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Mithril from 'mithril'; import ItemList from '../../common/utils/ItemList'; diff --git a/framework/core/js/dist-typings/forum/components/DiscussionRenamedNotification.d.ts b/framework/core/js/dist-typings/forum/components/DiscussionRenamedNotification.d.ts index bda60b203..c8d770298 100644 --- a/framework/core/js/dist-typings/forum/components/DiscussionRenamedNotification.d.ts +++ b/framework/core/js/dist-typings/forum/components/DiscussionRenamedNotification.d.ts @@ -1,4 +1,4 @@ -/// +/// import Notification from './Notification'; /** * The `DiscussionRenamedNotification` component displays a notification which diff --git a/framework/core/js/dist-typings/forum/components/DiscussionsSearchSource.d.ts b/framework/core/js/dist-typings/forum/components/DiscussionsSearchSource.d.ts index 23925aa81..48575b359 100644 --- a/framework/core/js/dist-typings/forum/components/DiscussionsSearchSource.d.ts +++ b/framework/core/js/dist-typings/forum/components/DiscussionsSearchSource.d.ts @@ -12,6 +12,7 @@ export default class DiscussionsSearchSource implements SearchSource { isCached(query: string): boolean; search(query: string, limit: number): Promise; view(query: string): Array; + customGrouping(): boolean; fullPage(query: string): Mithril.Vnode; gotoItem(id: string): string | null; } diff --git a/framework/core/js/dist-typings/forum/components/ForgotPasswordModal.d.ts b/framework/core/js/dist-typings/forum/components/ForgotPasswordModal.d.ts index 6b52d4605..046ea49d0 100644 --- a/framework/core/js/dist-typings/forum/components/ForgotPasswordModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/ForgotPasswordModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Stream from '../../common/utils/Stream'; import Mithril from 'mithril'; diff --git a/framework/core/js/dist-typings/forum/components/LogInModal.d.ts b/framework/core/js/dist-typings/forum/components/LogInModal.d.ts index d91a5ca47..61b906d89 100644 --- a/framework/core/js/dist-typings/forum/components/LogInModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/LogInModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import ItemList from '../../common/utils/ItemList'; import Stream from '../../common/utils/Stream'; diff --git a/framework/core/js/dist-typings/forum/components/PostsSearchSource.d.ts b/framework/core/js/dist-typings/forum/components/PostsSearchSource.d.ts index 4bfbc6772..d7d456563 100644 --- a/framework/core/js/dist-typings/forum/components/PostsSearchSource.d.ts +++ b/framework/core/js/dist-typings/forum/components/PostsSearchSource.d.ts @@ -12,6 +12,7 @@ export default class PostsSearchSource implements SearchSource { isCached(query: string): boolean; search(query: string, limit: number): Promise; view(query: string): Array; + customGrouping(): boolean; fullPage(query: string): Mithril.Vnode; gotoItem(id: string): string | null; } diff --git a/framework/core/js/dist-typings/forum/components/RenameDiscussionModal.d.ts b/framework/core/js/dist-typings/forum/components/RenameDiscussionModal.d.ts index 0869e51d6..3fe029482 100644 --- a/framework/core/js/dist-typings/forum/components/RenameDiscussionModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/RenameDiscussionModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import Stream from '../../common/utils/Stream'; import Mithril from 'mithril'; diff --git a/framework/core/js/dist-typings/forum/components/Search.d.ts b/framework/core/js/dist-typings/forum/components/Search.d.ts index 89f1e4ccc..be05b7aa4 100644 --- a/framework/core/js/dist-typings/forum/components/Search.d.ts +++ b/framework/core/js/dist-typings/forum/components/Search.d.ts @@ -1,74 +1,8 @@ -import Component, { ComponentAttrs } from '../../common/Component'; -import SearchState from '../../common/states/SearchState'; -import type Mithril from 'mithril'; import ItemList from '../../common/utils/ItemList'; -export interface SearchAttrs extends ComponentAttrs { - /** The type of alert this is. Will be used to give the alert a class name of `Alert--{type}`. */ - state: SearchState; +import AbstractSearch, { type SearchAttrs, type SearchSource as BaseSearchSource } from '../../common/components/AbstractSearch'; +export interface SearchSource extends BaseSearchSource { } -/** - * The `SearchSource` interface defines a section of search results in the - * search dropdown. - * - * Search sources should be registered with the `Search` component class - * by extending the `sourceItems` method. When the user types a - * query, each search source will be prompted to load search results via the - * `search` method. When the dropdown is redrawn, it will be constructed by - * putting together the output from the `view` method of each source. - */ -export interface SearchSource { - /** - * The resource type that this search source is responsible for. - */ - resource: string; - /** - * Get the title for this search source. - */ - title(): string; - /** - * Check if a query has been cached for this search source. - */ - isCached(query: string): boolean; - /** - * Make a request to get results for the given query. - * The results will be updated internally in the search source, not exposed. - */ - search(query: string, limit: number): Promise; - /** - * Get an array of virtual
        • s that list the search results for the given - * query. - */ - view(query: string): Array; - /** - * Get a list item for the full search results page. - */ - fullPage(query: string): Mithril.Vnode | null; - /** - * Get to the result item page. Only called if each list item has a data-id. - */ - gotoItem(id: string): string | null; -} -/** - * The `Search` component displays a menu of as-you-type results from a variety - * of sources. - * - * The search box will be 'activated' if the app's search state's - * getInitialSearch() value is a truthy value. If this is the case, an 'x' - * button will be shown next to the search field, and clicking it will clear the search. - * - * ATTRS: - * - * - state: SearchState instance. - */ -export default class Search extends Component { - /** - * The instance of `SearchState` for this component. - */ - protected searchState: SearchState; - oninit(vnode: Mithril.Vnode): void; - view(): JSX.Element; - /** - * A list of search sources that can be used to query for search results. - */ +export default class Search extends AbstractSearch { + static initAttrs(attrs: SearchAttrs): void; sourceItems(): ItemList; } diff --git a/framework/core/js/dist-typings/forum/components/SignUpModal.d.ts b/framework/core/js/dist-typings/forum/components/SignUpModal.d.ts index 4e0c8b978..660d0c5fb 100644 --- a/framework/core/js/dist-typings/forum/components/SignUpModal.d.ts +++ b/framework/core/js/dist-typings/forum/components/SignUpModal.d.ts @@ -1,4 +1,4 @@ -/// +/// import FormModal, { IFormModalAttrs } from '../../common/components/FormModal'; import ItemList from '../../common/utils/ItemList'; import Stream from '../../common/utils/Stream'; diff --git a/framework/core/js/dist-typings/forum/components/UsersSearchSource.d.ts b/framework/core/js/dist-typings/forum/components/UsersSearchSource.d.ts index fe51a7504..1e3c52a34 100644 --- a/framework/core/js/dist-typings/forum/components/UsersSearchSource.d.ts +++ b/framework/core/js/dist-typings/forum/components/UsersSearchSource.d.ts @@ -12,6 +12,7 @@ export default class UsersSearchSource implements SearchSource { isCached(query: string): boolean; search(query: string, limit: number): Promise; view(query: string): Array; + customGrouping(): boolean; fullPage(query: string): null; gotoItem(id: string): string | null; } diff --git a/framework/core/js/dist/admin.js b/framework/core/js/dist/admin.js index 8a6ee7614..a2efce2bc 100644 --- a/framework/core/js/dist/admin.js +++ b/framework/core/js/dist/admin.js @@ -1,3 +1,3 @@ /*! For license information please see admin.js.LICENSE.txt */ -(()=>{var t,e,n={1207:(t,e,n)=>{"use strict";n.d(e,{J:()=>B,Z:()=>R});var r=n(7905),s=n(7465),o=n(4041),a=n(8312),i=n(7224),l=n(8588),c=n(406),u=n(4153);function d(t){return Array.isArray(t.data)}class h{constructor(t){(0,r.Z)(this,"data",{}),(0,r.Z)(this,"models",void 0),this.models=t}pushPayload(t){t.included&&t.included.map(this.pushObject.bind(this));const e=t.data instanceof Array?t.data.map((t=>this.pushObject(t))):this.pushObject(t.data);return e.payload=t,e}pushObject(t){if(!this.models[t.type])return setTimeout((()=>{throw new Error("Pushing object of type `".concat(t.type,"` not allowed, as type not yet registered in the store."))})),null;const e=this.data[t.type]=this.data[t.type]||{},n=e[t.id],r=n?n.pushData(t):this.createRecord(t.type,t);return e[t.id]=r,r.exists=!0,r}async find(t,e,n,r){var o,a;void 0===n&&(n={}),void 0===r&&(r={});let i=n,l=s.Z.forum.attribute("apiUrl")+"/"+t;return e instanceof Array?l+="?filter[id]="+e.join(","):"object"==typeof e?i=e:e&&(l+="/"+e),"filter"in i&&null!=(o=i)&&null!=(a=o.filter)&&a.q&&(i.filter=s.Z.search.gambits.apply(t,i.filter)),s.Z.request({method:"GET",url:l,params:i,...r}).then((t=>(d(t),this.pushPayload(t))))}getById(t,e){var n,r;return null==(n=this.data)||null==(r=n[t])?void 0:r[e]}getBy(t,e,n){return this.all(t).filter((t=>t[e]()===n))[0]}all(t){const e=this.data[t];return e?Object.values(e):[]}remove(t){delete this.data[t.data.type][t.id()]}createRecord(t,e){return void 0===e&&(e={}),e.type=e.type||t,new this.models[t](e,this)}}flarum.reg.add("core","common/Store",h);class p{constructor(t,e){(0,r.Z)(this,"user",void 0),(0,r.Z)(this,"csrfToken",void 0),this.user=t,this.csrfToken=e}login(t,e){return void 0===e&&(e={}),s.Z.request({method:"POST",url:"".concat(s.Z.forum.attribute("baseUrl"),"/login"),body:t,...e})}logout(){window.location.href="".concat(s.Z.forum.attribute("baseUrl"),"/logout?token=").concat(this.csrfToken)}}flarum.reg.add("core","common/Session",p);var f=n(6786),g=n(1552),v=n(7569),b=n(4430),y=n(6386),w=n(4718),Z=n(9423);function x(){$("[data-humantime]").each((function(){const t=$(this),e=(0,Z.Z)(t.attr("datetime"));t.html(e)}))}function N(){setInterval(x,1e4)}flarum.reg.add("core","common/utils/liveHumanTimes",N);var C=n(8134),k=n(3813),_=n(7498),S=n(6322),E=n(4125),T=n(7645),A=n(5788),P=n(5104),M=n(5123),D=n(5278);function I(t,e,n){var r,o;console.group("%c".concat(e),"background-color: #d83e3e; color: #ffffff; font-weight: bold;"),console.error(n),console.groupEnd(),null!=(r=s.Z.session)&&null!=(o=r.user)&&o.isAdmin()&&s.Z.alerts.show({type:"error"},"".concat(t))}flarum.reg.add("core","common/helpers/fireApplicationError",I);var L=n(9175);class O extends L.Z{token(){return L.Z.attribute("token").call(this)}userId(){return L.Z.attribute("userId").call(this)}title(){return L.Z.attribute("title").call(this)}type(){return L.Z.attribute("type").call(this)}createdAt(){return L.Z.attribute("createdAt",L.Z.transformDate).call(this)}lastActivityAt(){return L.Z.attribute("lastActivityAt",L.Z.transformDate).call(this)}lastIpAddress(){return L.Z.attribute("lastIpAddress").call(this)}device(){return L.Z.attribute("device").call(this)}isCurrent(){return L.Z.attribute("isCurrent").call(this)}isSessionToken(){return L.Z.attribute("isSessionToken").call(this)}}flarum.reg.add("core","common/models/AccessToken",O);var j=n(8394);let B=function(t){return t.NO_MAINTENANCE="none",t.HIGH_MAINTENANCE="high",t.LOW_MAINTENANCE="low",t.SAFE_MODE="safe",t}({});class R{constructor(){(0,r.Z)(this,"forum",void 0),(0,r.Z)(this,"routes",{}),(0,r.Z)(this,"initializers",new o.Z),(0,r.Z)(this,"session",void 0),(0,r.Z)(this,"translator",new u.Z),(0,r.Z)(this,"store",new h({"access-tokens":O,forums:k.Z,users:_.Z,discussions:S.Z,posts:E.Z,groups:T.Z,notifications:A.Z})),(0,r.Z)(this,"search",void 0),(0,r.Z)(this,"cache",{}),(0,r.Z)(this,"booted",!1),(0,r.Z)(this,"current",new P.Z(null)),(0,r.Z)(this,"previous",new P.Z(null)),(0,r.Z)(this,"modal",new M.Z),(0,r.Z)(this,"alerts",new D.Z),(0,r.Z)(this,"drawer",void 0),(0,r.Z)(this,"history",null),(0,r.Z)(this,"pane",null),(0,r.Z)(this,"data",void 0),(0,r.Z)(this,"allowUserColorScheme",void 0),(0,r.Z)(this,"_title",""),(0,r.Z)(this,"_titleCount",0),(0,r.Z)(this,"requestErrorAlert",null),(0,r.Z)(this,"initialRoute",void 0)}set title(t){this._title=t}get title(){return this._title}set titleCount(t){this._titleCount=t}get titleCount(){return this._titleCount}load(t){this.data=t,this.translator.setLocale(t.locale)}boot(){var t;const e=[];this.initializers.toArray().forEach((t=>{try{t(this)}catch(n){const r=t.itemName.includes("/")?t.itemName.replace(/(\/flarum-ext-)|(\/flarum-)/g,"-"):t.itemName;e.push((()=>I((0,g.Z)(s.Z.translator.trans("core.lib.error.extension_initialiation_failed_message",{extension:r})),"".concat(r," failed to initialize"),n)))}})),this.store.pushPayload({data:this.data.resources}),this.forum=this.store.getById("forums","1"),this.session=new p(null!=(t=this.store.getById("users",String(this.data.session.userId)))?t:null,this.data.session.csrfToken),this.mount(),this.initialRoute=window.location.href,e.forEach((t=>t()))}bootExtensions(t){Object.keys(t).forEach((e=>{const n=t[e];if(!n.extend)return;const r=n.extend.flat(1/0);for(const t of r)t.extend(this,{name:e,exports:n})}))}mount(t){void 0===t&&(t=""),m.mount(document.getElementById("modal"),{view:()=>m(i.Z,{state:this.modal})}),m.mount(document.getElementById("alerts"),{view:()=>m(l.Z,{state:this.alerts})}),this.drawer=new v.Z,m.route(document.getElementById("content"),t+"/",(0,b.Z)(this.routes,t));const e=document.getElementById("app"),n=document.querySelector(".App-header"),r=new w.Z((t=>{const r=e.getBoundingClientRect().top+document.body.scrollTop;e.classList.toggle("affix",t>=r),e.classList.toggle("scrolled",t>r),n.classList.toggle("navbar-fixed-top",t>=r)}));r.start(),r.update(),document.body.classList.add("ontouchstart"in window?"touch":"no-touch"),this.initColorScheme(),N()}initColorScheme(t){var e,n,r;void 0===t&&(t=null),null!=t||(t=null!=(e=document.documentElement.getAttribute("data-theme"))?e:"auto"),this.allowUserColorScheme="auto"===t;const s=null==(n=this.session.user)||null==(r=n.preferences())?void 0:r.colorScheme;let o;this.allowUserColorScheme&&(o=s),o||(o=t),this.setColorScheme(o),this.allowUserColorScheme&&this.watchSystemColorSchemePreference((()=>{this.initColorScheme(t)}))}getSystemColorSchemePreference(){let t=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";return window.matchMedia("(prefers-contrast: more)").matches&&(t+="-hc"),t}watchSystemColorSchemePreference(t){window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",t),window.matchMedia("(prefers-contrast: more)").addEventListener("change",t)}setColorScheme(t){t===j.e.Auto&&(t=this.getSystemColorSchemePreference()),document.documentElement.setAttribute("data-theme",t)}setColoredHeader(t){document.documentElement.setAttribute("data-colored-header",t?"true":"false")}preloadedApiDocument(){if(this.data.apiDocument&&window.location.href===this.initialRoute){const t=(d(this.data.apiDocument),this.store.pushPayload(this.data.apiDocument));return this.data.apiDocument=null,t}return null}screen(){return getComputedStyle(document.documentElement).getPropertyValue("--flarum-screen")}setTitle(t){this.title=t,this.updateTitle()}setTitleCount(t){this.titleCount=t,this.updateTitle()}updateTitle(){const t=this.titleCount?"(".concat(this.titleCount,") "):"",e=m.route.get()===this.forum.attribute("basePath")+"/",n={pageTitle:this.title,forumName:this.forum.attribute("title"),pageNumber:1};let r=e||!this.title?(0,g.Z)(s.Z.translator.trans("core.lib.meta_titles.without_page_title",n)):(0,g.Z)(s.Z.translator.trans("core.lib.meta_titles.with_page_title",n));r=t+r;const o=new DOMParser;document.title=o.parseFromString(r,"text/html").body.innerText}transformRequestOptions(t){const{background:e,deserialize:n,modifyText:r,...o}={...t},a={background:null==e||e,deserialize:null!=n?n:t=>t,...o};if((0,C.l)(a,"config",((t,e)=>{e.setRequestHeader("X-CSRF-Token",this.session.csrfToken)})),a.method&&!["GET","POST"].includes(a.method)){const t=a.method;(0,C.l)(a,"config",((e,n)=>{n.setRequestHeader("X-HTTP-Method-Override",t)})),a.method="POST"}return a.extract=t=>{let e;e=r?r(t.responseText):t.responseText;const n=t.status;if(n<200||n>299)throw new y.Z(n,"".concat(e),a,t);if(t.getResponseHeader){const e=t.getResponseHeader("X-CSRF-Token");e&&(s.Z.session.csrfToken=e)}try{return""===e?null:JSON.parse(e)}catch(n){throw new y.Z(500,"".concat(e),a,t)}},a}request(t){const e=this.transformRequestOptions(t);return this.requestErrorAlert&&this.alerts.dismiss(this.requestErrorAlert),m.request(e).catch((e=>this.requestErrorCatch(e,t.errorHandler)))}requestErrorCatch(t,e){var n,r,o,i,l,c,u;const d=null!=(n=null==(r=t.response)||null==(o=r.errors)?void 0:o.map((t=>{var e;return decodeURI(null!=(e=t.detail)?e:"")})))?n:[];let h;switch(t.status){case 422:h=d.map((t=>[t,m("br",null)])).flat().slice(0,-1);break;case 401:case 403:h=s.Z.translator.trans("core.lib.error.permission_denied_message");break;case 404:case 410:h=s.Z.translator.trans("core.lib.error.not_found_message");break;case 413:h=s.Z.translator.trans("core.lib.error.payload_too_large_message");break;case 429:h=s.Z.translator.trans("core.lib.error.rate_limit_exceeded_message");break;default:h="db_error"===(null==(i=t.response)||null==(l=i.errors)||null==(c=l[0])?void 0:c.code)&&null!=(u=s.Z.session.user)&&u.isAdmin()?s.Z.translator.trans("core.lib.error.db_error_message"):this.requestWasCrossOrigin(t)?s.Z.translator.trans("core.lib.error.generic_cross_origin_message"):s.Z.translator.trans("core.lib.error.generic_message")}const p=s.Z.forum.attribute("debug");return t.alert={type:"error",content:h,controls:p&&[m(a.Z,{className:"Button Button--link",onclick:this.showDebug.bind(this,t,d)},s.Z.translator.trans("core.lib.debug_button"))]},e?e(t):this.requestErrorDefaultHandler(t,p,d),Promise.reject(t)}requestWasCrossOrigin(t){return new URL(t.options.url,document.baseURI).origin!==window.location.origin}requestErrorDefaultHandler(t,e,n){if(!(t instanceof y.Z))throw t;if(e&&t.xhr){const{method:e,url:r}=t.options,{status:s=""}=t.xhr;console.group("".concat(e," ").concat(r," ").concat(s)),n.length?console.error(...n):console.error(t),console.groupEnd()}500===t.status&&e?s.Z.modal.show(c.Z,{error:t,formattedError:n}):t.alert&&(this.requestErrorAlert=this.alerts.show(t.alert,t.alert.content))}showDebug(t,e){null!==this.requestErrorAlert&&this.alerts.dismiss(this.requestErrorAlert),this.modal.show(c.Z,{error:t,formattedError:e})}route(t,e){void 0===e&&(e={});const n=this.routes[t];if(!n)throw new Error("Route '".concat(t,"' does not exist"));const r=n.path.replace(/:([^\/]+)/g,((t,n)=>"".concat((0,f.Z)(e,n))));for(const t in e)e.hasOwnProperty(t)&&!e[t]&&delete e[t];const s=m.buildQueryString(e);return(""===m.route.prefix?this.forum.attribute("basePath"):"")+r+(s?"?"+s:"")}}flarum.reg.add("core","common/Application",R)},2190:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7905);class s{constructor(){(0,r.Z)(this,"element",void 0),(0,r.Z)(this,"attrs",void 0),(0,r.Z)(this,"state",void 0)}oninit(t){this.setAttrs(t.attrs)}oncreate(t){this.element=t.dom}onbeforeupdate(t){this.setAttrs(t.attrs)}onupdate(t){}onbeforeremove(t){}onremove(t){}$(t){const e=$(this.element);return t?e.find(t):e}static component(t,e){void 0===t&&(t={}),void 0===e&&(e=null);const n={...t};return m(this,n,e)}setAttrs(t){if(void 0===t&&(t={}),this.constructor.initAttrs(t),t){if("children"in t)throw new Error("[".concat(this.constructor.name,'] The "children" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute'));if("tag"in t)throw new Error("[".concat(this.constructor.name,'] You cannot use the "tag" attribute name with Mithril 2.'))}this.attrs=t}static initAttrs(t){}}flarum.reg.add("core","common/Component",s)},9175:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(7905),s=n(7465);class o{constructor(t,e){void 0===t&&(t={}),void 0===e&&(e=s.Z.store),(0,r.Z)(this,"data",{}),(0,r.Z)(this,"freshness",new Date),(0,r.Z)(this,"exists",!1),(0,r.Z)(this,"store",void 0),this.data=t,this.store=e}id(){return"id"in this.data?this.data.id:void 0}attribute(t){var e,n;return null==(e=this.data)||null==(n=e.attributes)?void 0:n[t]}pushData(t){if("id"in t&&(this.data.id=t.id),"type"in t&&(this.data.type=t.type),"attributes"in t){var e;(e=this.data).attributes||(e.attributes={});for(const e in t.attributes){const n=t.attributes[e];n&&n instanceof o&&delete t.attributes[e]}Object.assign(this.data.attributes,t.attributes)}if("relationships"in t){var n;const e=null!=(n=this.data.relationships)?n:{};for(const n in t.relationships){const r=t.relationships[n];if(null===r){delete e[n],delete t.relationships[n];continue}let s;s=r instanceof o?{data:o.getIdentifier(r)}:r instanceof Array?{data:r.map(o.getIdentifier)}:r,t.relationships[n]=s,e[n]=s}this.data.relationships=e}return this.freshness=new Date,this}pushAttributes(t){this.pushData({attributes:t})}save(t,e){void 0===e&&(e={});const n={type:this.data.type,attributes:t};if("id"in this.data&&(n.id=this.data.id),t.relationships){n.relationships={};for(const e in t.relationships){const r=t.relationships[e];null!==r&&(n.relationships[e]={data:r instanceof Array?r.map(o.getIdentifier):o.getIdentifier(r)})}delete t.relationships}const r=this.copyData();this.pushData(n);const a={data:n,meta:e.meta||void 0};return s.Z.request({method:this.exists?"PATCH":"POST",url:s.Z.forum.attribute("apiUrl")+this.apiEndpoint(),body:a,...e}).then((t=>this.store.pushPayload(t)),(t=>{throw this.pushData(r),m.redraw(),t}))}delete(t,e){return void 0===t&&(t={}),void 0===e&&(e={}),this.exists?s.Z.request({method:"DELETE",url:s.Z.forum.attribute("apiUrl")+this.apiEndpoint(),body:t,...e}).then((()=>{this.exists=!1,this.store.remove(this)})):Promise.resolve()}apiEndpoint(){return"/"+this.data.type+("id"in this.data?"/"+this.data.id:"")}copyData(){return JSON.parse(JSON.stringify(this.data))}rawRelationship(t){var e,n;return null==(e=this.data.relationships)||null==(n=e[t])?void 0:n.data}static attribute(t,e){return function(){return e?e(this.attribute(t)):this.attribute(t)}}static hasOne(t){return function(){var e,n;const r=null==(e=this.data.relationships)||null==(n=e[t])?void 0:n.data;if(r&&r instanceof Array)throw new Error("Relationship ".concat(t," on model ").concat(this.data.type," is plural, so the hasOne method cannot be used to access it."));return!!r&&this.store.getById(r.type,r.id)}}static hasMany(t){return function(){var e,n;const r=null==(e=this.data.relationships)||null==(n=e[t])?void 0:n.data;if(r&&!(r instanceof Array))throw new Error("Relationship ".concat(t," on model ").concat(this.data.type," is singular, so the hasMany method cannot be used to access it."));return!!r&&r.map((t=>this.store.getById(t.type,t.id)))}}static transformDate(t){return null!=t?new Date(t):t}static getIdentifier(t){return t&&t.data&&"id"in t.data?{type:t.data.type,id:t.data.id}:null}}flarum.reg.add("core","common/Model",o)},4773:(t,e,n)=>{"use strict";n.d(e,{Z:()=>p});var r=n(7905),s=n(7465),o=n(1586);class a extends o.y3{key(){return s.Z.translator.trans("core.lib.gambits.discussions.author.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.discussions.author.hint",{},!0)}filterKey(){return"author"}}flarum.reg.add("core","common/query/discussions/AuthorGambit",a);class i extends o.y3{key(){return s.Z.translator.trans("core.lib.gambits.discussions.created.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.discussions.created.hint",{},!0)}valuePattern(){return"(\\d{4}\\-\\d\\d\\-\\d\\d(?:\\.\\.(\\d{4}\\-\\d\\d\\-\\d\\d))?)"}filterKey(){return"created"}}flarum.reg.add("core","common/query/discussions/CreatedGambit",i);class l extends o.gD{key(){return s.Z.translator.trans("core.lib.gambits.discussions.hidden.key",{},!0)}filterKey(){return"hidden"}enabled(){return!!s.Z.session.user}}flarum.reg.add("core","common/query/discussions/HiddenGambit",l);class c extends o.gD{key(){return s.Z.translator.trans("core.lib.gambits.discussions.unread.key",{},!0)}filterKey(){return"unread"}enabled(){return!!s.Z.session.user}}flarum.reg.add("core","common/query/discussions/UnreadGambit",c);class u extends o.y3{key(){return s.Z.translator.trans("core.lib.gambits.users.email.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.users.email.hint",{},!0)}filterKey(){return"email"}enabled(){return!(!s.Z.session.user||!s.Z.forum.attribute("canEditUserCredentials"))}}flarum.reg.add("core","common/query/users/EmailGambit",u);class d extends o.y3{key(){return s.Z.translator.trans("core.lib.gambits.users.group.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.users.group.hint",{},!0)}filterKey(){return"group"}}flarum.reg.add("core","common/query/users/GroupGambit",d);class m extends o.y3{key(){return s.Z.translator.trans("core.lib.gambits.posts.discussion.key",{},!0)}hint(){return s.Z.translator.trans("core.lib.gambits.posts.discussion.hint",{},!0)}filterKey(){return"discussion"}}flarum.reg.add("core","common/query/discussions/DiscussionGambit",m);class h{constructor(){(0,r.Z)(this,"gambits",{discussions:[a,i,l,c],posts:[a,m],users:[u,d]})}apply(t,e){return e.q=this.match(t,e.q,((t,n,r)=>{const s=t.toFilter(n,r);Object.keys(s).forEach((n=>{n in e&&t.predicates&&Array.isArray(s[n])?e[n]=e[n].concat(s[n]):e[n]=s[n]}))})),e}match(t,e,n){const r=this.for(t).filter((t=>t.enabled()));if(0===r.length)return e;const s=e.split(" ");for(const t of r)for(const r of s){const s=new RegExp("^(-?)".concat(t.pattern(),"$"),"i");let o=r.match(s);if(o){const s="-"===o[1];o.splice(1,1),n(t,o,s,r),e=e.replace(r,"")}}return e.trim().replace(/\s+/g," ")}from(t,e,n){const r=this.for(t);return 0===r.length||Object.keys(n).forEach((t=>{for(const s of r){const r="-"===t[0];r&&(t=t.substring(1)),s.filterKey()===t&&(e+=" ".concat(s.fromFilter(n[t],r)))}})),e}for(t){return(this.gambits[t]||[]).map((t=>new t))}}flarum.reg.add("core","common/GambitManager",h);class p{constructor(t){(0,r.Z)(this,"state",void 0),(0,r.Z)(this,"gambits",new h),this.state=t}}(0,r.Z)(p,"MIN_SEARCH_LEN",3),flarum.reg.add("core","common/SearchManager",p)},4153:(t,e,n)=>{"use strict";n.d(e,{Z:()=>V});var r,s=n(7905),o=n(6880),a=n.n(o),i=n(6353),l=n.n(i),c=n(2512),u=n.n(c),d=n(8328),h=n.n(d),p=n(9939),f=n.n(p),g=n(1627),v=n.n(g),b=n(871),y=n.n(b);function w(t){return t.reduce((function(t,e){return t.concat(Array.isArray(e)?w(e):e)}),[])}function Z(t){var e={};return function(){for(var n=arguments.length,r=new Array(n),s=0;s3&&void 0!==arguments[3]?arguments[3]:[];if(!t)return r;if(1===n)return r.push(t),r;var s=t.indexOf(e);if(-1===s)return r.push(t),r;var o=t.substring(0,s).trim(),a=t.substring(s+e.length+1).trim();return r.push(o),k(a,e,n-1,r)}function _(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function S(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,s=arguments.length>3?arguments[3]:void 0,o=arguments.length>4?arguments[4]:void 0,a=x(e),i=a.args,l=a.cases,c=parseInt(t);i.forEach((function(t){t.startsWith("offset:")&&(c-=parseInt(t.slice("offset:".length)))}));var u=[];if("PluralRules"in Intl){void 0!==r&&r.resolvedOptions().locale===n||(r=new Intl.PluralRules(n));var d=r.select(c);d!==T&&u.push(d)}1===c&&u.push("one"),u.push("=".concat(c),T);for(var m=0;m1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0,s=x(e),o=s.cases;return t in o?r(o[t],n):M in o?r(o.other,n):t}function I(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],s=[],o=function(r,o,a,i,l,c){if(o)return{break:!0};var u=L(t,a,i,l);if(!u)return s;var d=u.segmentIndex===i,m=t[u.segmentIndex],h=[];if(d)h.push(r.slice(l+1,u.segmentStart));else{h.push(r.slice(l+1));for(var p=i+1;p"===i[m]){var h=i.slice(c+1+l,m),p=s(i,l,h,a,m,c);if(p.exit)return;if(p.newSegmentIndex&&(a=p.newSegmentIndex),p.processedSegment&&(d=!0),p.break)break;l=!1,c=null,u=!1}else u&&(o=i[m],!/[a-zA-Z-_]/.test(o))&&(l=!1,c=null,u=!1);else c=m,u=!0,"/"===i[m+1]&&(l=!0,m++);d||r.push(i)}else r.push(i)}}function j(t){return Object.keys(t).reduce((function(e,n){return e[n]=R(t[n]),e}),{})}function B(t){return"string"!=typeof t?t:t.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,"&")}function R(t){return"string"==typeof t||t instanceof String?t.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'"):Array.isArray(t)?t.map(R):t}function H(t,e,n){return"<".concat(t,">").concat(B(n),"")}var $=function(t){h()(s,t);var e,n,r=(e=s,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,r=v()(e);if(n){var s=v()(this).constructor;t=Reflect.construct(r,arguments,s)}else t=r.apply(this,arguments);return f()(this,t)});function s(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return l()(this,s),(e=r.call(this,t,n)).richHandler=o||H,e}return u()(s,[{key:"rich",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=j(e),r=w(this.process(t,n)),s=Math.random().toString(36)+Math.random().toString(36)+Math.random().toString(36),o=Object.fromEntries(Object.entries(e).map((function(t){var e=a()(t,2),n=e[0];return e[1],[n,s]}))),i=w(this.process(t,o)),l=I(i,o,(function(){return s})),c=l.map((function(t,e){return t===s?null:e})).filter((function(t){return null!==t}));return I(r,n,this.richHandler,c)}}]),s}(function(){function t(e){var n=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};l()(this,t),y()(this,"format",Z((function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return w(n.process(t,e)).join("")}))),this.locale=e,this.typeHandlers=r}return u()(t,[{key:"process",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)return[];var n=t.indexOf("{");if(-1!==n){var r=N(t,n);if(-1===r)throw new Error('Unbalanced curly braces in string: "'.concat(t,'"'));var s=t.substring(n,r+1);if(s){var o=[],i=t.substring(0,n);i&&o.push(i);var l=C(s),c=a()(l,3),u=c[0],d=c[1],m=c[2],h=e[u];null==h&&(h="");var p=d&&this.typeHandlers[d];o.push(p?p(h,m,this.locale,e,this.process.bind(this)):h);var f=t.substring(r+1);return f&&o.push(this.process(f,e)),o}}return[t]}}]),t}());function F(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function q(t){for(var e=1;e{"use strict";n.d(e,{Z:()=>o});const r=window,s=new Proxy({},{get:(t,e)=>Reflect.get(r.app,e,r.app),set:(t,e,n)=>Reflect.set(r.app,e,n,r.app)}),o=s;flarum.reg.add("core","common/app",s)},3817:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(2190),s=n(8312),o=n(1268),a=n(6786),i=n(3344),l=n(7465),c=n(9133);class u extends r.Z{view(t){const e=Object.assign({},this.attrs),n=(0,a.Z)(e,"type");e.className=(0,i.Z)("Alert","Alert--".concat(n),e.className);const r=(0,a.Z)(e,"title"),u=(0,a.Z)(e,"icon"),d=(0,a.Z)(e,"content")||t.children,h=(0,a.Z)(e,"controls")||[],p=(0,a.Z)(e,"dismissible"),f=(0,a.Z)(e,"ondismiss"),g=[];return(p||void 0===p)&&g.push(m(s.Z,{"aria-label":l.Z.translator.trans("core.lib.alert.dismiss_a11y_label"),icon:"fas fa-times",className:"Button Button--link Button--icon Alert-dismiss",onclick:f})),m("div",e,m("div",{className:(0,i.Z)("Alert-container",e.containerClassName)},!!r&&m("div",{className:"Alert-title"},!!u&&m("span",{className:"Alert-title-icon"},m(c.Z,{name:u})),m("span",{className:"Alert-title-text"},r)),m("span",{className:"Alert-body"},d),m("ul",{className:"Alert-controls"},(0,o.Z)(h.concat(g)))))}}flarum.reg.add("core","common/components/Alert",u)},8588:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(2190);class s extends r.Z{oninit(t){super.oninit(t),this.state=this.attrs.state}view(){const t=this.state.getActiveAlerts();return m("div",{className:"AlertManager"},Object.keys(t).map(Number).map((e=>{const n=t[e],r="error"===n.attrs.type;return m("div",{className:"AlertManager-alert",role:"alert","aria-live":r?"assertive":"polite"},m(n.componentClass,Object.assign({},n.attrs,{ondismiss:this.state.dismiss.bind(this.state,e)}),n.children))})))}}flarum.reg.add("core","common/components/AlertManager",s)},7323:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(3344),s=n(2190);class o extends s.Z{view(t){const{user:e,...n}=t.attrs;n.className=(0,r.Z)("Avatar",n.className),null!=n.loading||(n.loading="lazy");let s="";const o="undefined"===n.title||n.title;if(o||delete n.title,e){const t=e.displayName()||"?",r=e.avatarUrl();if(o&&(n.title=n.title||t),r)return m("img",Object.assign({},n,{src:r,alt:""}));s=t.charAt(0).toUpperCase(),n.style={"--avatar-bg":e.color()}}return m("span",n,s)}}flarum.reg.add("core","common/components/Avatar",o)},3804:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(6439),s=n(2190),o=n(3344),a=n(9215),i=n(9133);class l extends s.Z{view(){const{type:t,icon:e,label:n,color:s,style:l={},...c}=this.attrs,u=(0,o.Z)("Badge",[t&&"Badge--".concat(t)],c.className,(0,a.Z)(s)),d=e?m(i.Z,{name:e,className:"Badge-icon"}):m.trust(" "),h={...l,"--badge-bg":s},p={...c,className:u,style:h},f=m("div",p,d);return n?m(r.Z,{text:n},f):f}}flarum.reg.add("core","common/components/Badge",l)},8312:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(2190),s=n(7465);function o(){s.Z.forum.attribute("debug")&&console.warn(...arguments)}flarum.reg.add("core","common/helpers/fireDebugWarning",o);var a=n(3344),i=n(1552),l=n(5226),c=n(9133);class u extends r.Z{view(t){let{type:e,"aria-label":n,icon:r,disabled:s,loading:o,className:l,class:c,...u}=this.attrs;e||(e="button"),"object"==typeof n&&(n=(0,i.Z)(n)),(s||o)&&delete u.onclick,l=(0,a.Z)(c,l,{hasIcon:r,disabled:s||o,loading:o});const d={disabled:s,className:l,type:e,"aria-label":n,...u};return m("button",d,this.getButtonContent(t.children))}oncreate(t){var e,n;super.oncreate(t);const{"aria-label":r}=this.attrs;this.view!==u.prototype.view||r||(0,i.Z)(t.children)||null!=(e=this.element)&&null!=(n=e.getAttribute)&&n.call(e,"aria-label")||o('[Flarum Accessibility Warning] Button has no content and no accessible label. This means that screen-readers will not be able to interpret its meaning and just read "Button". Consider providing accessible text via the `aria-label` attribute. https://web.dev/button-name',this.element)}getButtonContent(t){const e=this.attrs.icon;return[e&&m(c.Z,{name:e,className:"Button-icon"}),t&&m("span",{className:"Button-label"},t),this.attrs.loading&&m(l.Z,{size:"small",display:"inline"})]}}flarum.reg.add("core","common/components/Button",u)},7298:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(2190),s=n(5226),o=n(3344),a=n(7669),i=n(9133);class l extends r.Z{view(t){const e=(0,o.Z)(["Checkbox",this.attrs.state?"on":"off",this.attrs.className,this.attrs.loading&&"loading",this.attrs.disabled&&"disabled"]);return m("label",{className:e},m("input",{type:"checkbox",checked:this.attrs.state,disabled:this.attrs.disabled,onchange:(0,a.Z)("checked",this.onchange.bind(this))}),m("div",{className:"Checkbox-display","aria-hidden":"true"},this.getDisplay()),t.children)}getDisplay(){return this.attrs.loading?m(s.Z,{display:"unset",size:"small"}):m(i.Z,{name:this.attrs.state?"fas fa-check":"fas fa-times"})}onchange(t){this.attrs.onchange&&this.attrs.onchange(t,this)}}flarum.reg.add("core","common/components/Checkbox",l)},344:(t,e,n)=>{"use strict";n.d(e,{Z:()=>u});var r=n(7905),s=n(7465),o=n(2190),a=n(1268),i=n(1552),l=n(6439),c=n(9133);class u extends o.Z{constructor(){super(...arguments),(0,r.Z)(this,"showing",!1)}static initAttrs(t){t.className||(t.className=""),t.buttonClassName||(t.buttonClassName=""),t.menuClassName||(t.menuClassName=""),t.label||(t.label=""),null!=t.caretIcon||(t.caretIcon="fas fa-caret-down"),t.accessibleToggleLabel||(t.accessibleToggleLabel=(0,i.Z)(s.Z.translator.trans("core.lib.dropdown.toggle_dropdown_accessible_label")))}view(t){const e=t.children?(0,a.Z)(t.children):[],n=!this.attrs.lazyDraw||this.showing;return m("div",{className:"ButtonGroup Dropdown dropdown "+this.attrs.className+" itemCount"+e.length+(this.showing?" open":"")},this.getButton(t.children),n&&this.getMenu(e))}oncreate(t){super.oncreate(t),this.$().on("shown.bs.dropdown",(()=>{var t,e,n,r,s,o,a,i,l,c,u;const{lazyDraw:d,onshow:h}=this.attrs;this.showing=!0,d&&m.redraw.sync(),"function"==typeof h&&h(),d||m.redraw();const p=this.$(".Dropdown-menu"),f=p.hasClass("Dropdown-menu--right"),g=null!=(t=null==(e=p.offset())?void 0:e.top)?t:0,v=null!=(n=p.height())?n:0,b=null!=(r=$(window).scrollTop())?r:0,y=null!=(s=$(window).height())?s:0;p.removeClass("Dropdown-menu--top Dropdown-menu--right"),p.toggleClass("Dropdown-menu--top",g+v>b+y),((null==(o=p.offset())?void 0:o.top)||0)<0&&p.removeClass("Dropdown-menu--top");const w=null!=(a=null==(i=p.offset())?void 0:i.left)?a:0,Z=null!=(l=p.width())?l:0,x=null!=(c=$(window).scrollLeft())?c:0,N=null!=(u=$(window).width())?u:0;p.toggleClass("Dropdown-menu--right",f||w+Z>x+N)})),this.$().on("hidden.bs.dropdown",(()=>{this.showing=!1,this.attrs.onhide&&this.attrs.onhide(),m.redraw()}))}getButton(t){let e=m("button",Object.assign({className:"Dropdown-toggle "+this.attrs.buttonClassName,"aria-haspopup":"menu","aria-label":this.attrs.accessibleToggleLabel,"data-toggle":"dropdown",onclick:this.attrs.onclick},this.attrs.buttonAttrs),this.getButtonContent(t));return this.attrs.tooltip&&(e=m(l.Z,{text:this.attrs.tooltip,position:"bottom"},e)),e}getButtonContent(t){return[this.attrs.icon?m(c.Z,{name:this.attrs.icon,className:"Button-icon"}):"",m("span",{className:"Button-label"},this.attrs.label),this.attrs.caretIcon?m(c.Z,{name:this.attrs.caretIcon,className:"Button-caret"}):""]}getMenu(t){return m("ul",{className:"Dropdown-menu dropdown-menu "+this.attrs.menuClassName},t)}}flarum.reg.add("core","common/components/Dropdown",u)},8034:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(2190),s=n(3344);class o extends r.Z{view(t){return m("div",{className:(0,s.Z)("FieldSet",this.attrs.className),role:"group","aria-label":this.attrs.label,"aria-disabled":!1},m("label",{className:"FieldSet-label","aria-hidden":"true"},this.attrs.label),this.attrs.description?m("div",{className:"FieldSet-description helpText"},this.attrs.description):null,m("div",{className:"FieldSet-items"},t.children))}}flarum.reg.add("core","common/components/FieldSet",o)},6352:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(2190),s=n(3344);class o extends r.Z{view(t){const{label:e,description:n,className:r,...o}=t.attrs;return m("div",Object.assign({className:(0,s.Z)("Form",r)},o),m("div",{className:"Form-header"},e&&m("label",null,e),n&&m("p",{className:"helpText"},n)),m("div",{className:"Form-body"},t.children))}}flarum.reg.add("core","common/components/Form",o)},899:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7108);class s extends r.Z{wrapper(t){return m("form",{onsubmit:this.onsubmit.bind(this)},t)}onsubmit(t){}onready(){this.$().find("input, select, textarea").first().trigger("focus").trigger("select")}onerror(t){var e;this.alertAttrs=t.alert,m.redraw(),422===t.status&&null!=(e=t.response)&&e.errors?this.$("form [name="+t.response.errors[0].source.pointer.replace("/data/attributes/","")+"]").trigger("select"):this.onready()}}flarum.reg.add("core","common/components/FormModal",s)},6697:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(3804);class s extends r.Z{static initAttrs(t){super.initAttrs(t),t.group&&(t.icon=t.group.icon()||"",t.color=t.group.color()||"",t.label=void 0===t.label?t.group.nameSingular():t.label,t.type="group--"+t.group.id(),delete t.group)}}flarum.reg.add("core","common/components/GroupBadge",s)},9133:(t,e,n)=>{"use strict";n.d(e,{Z:()=>o});var r=n(3344),s=n(2190);class o extends s.Z{view(t){const{name:e,...n}=t.attrs;return n.className=(0,r.Z)("icon",e,n.className),m("i",Object.assign({"aria-hidden":"true"},n))}}flarum.reg.add("core","common/components/Icon",o)},3986:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(2190),s=n(9133),o=n(3344);class a extends r.Z{view(t){const{icon:e,className:n,...r}=t.attrs;return m("div",Object.assign({className:(0,o.Z)("InfoTile",n)},r),this.icon(),m("div",{className:"InfoTile-text"},t.children))}icon(){return this.attrs.iconElement?this.attrs.iconElement:this.attrs.icon?m(s.Z,{name:(0,o.Z)(this.attrs.icon,"InfoTile-icon")}):null}}flarum.reg.add("core","common/components/InfoTile",a)},9908:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(6789),s=n(2190),o=n(9133),a=n(5226),i=n(3344),l=n(8312);class c extends s.Z{oninit(t){super.oninit(t)}view(t){var e,n;const{className:s,...c}=this.attrs.inputAttrs||{},u=this.attrs.value||(null==(e=(n=this.attrs).stream)?void 0:e.call(n))||"";return m("div",{className:(0,i.Z)("Input",this.attrs.className,{"Input--withPrefix":this.attrs.prefixIcon,"Input--withClear":this.attrs.clearable})},this.attrs.prefixIcon&&m(o.Z,{name:(0,i.Z)(this.attrs.prefixIcon,"Input-prefix-icon")}),this.input({inputClassName:s,value:u,inputAttrs:c}),this.attrs.loading&&m(a.Z,{size:"small",display:"inline",containerClassName:"Button Button--icon Button--link"}),this.attrs.clearable&&u&&!this.attrs.loading&&m(l.Z,{className:"Input-clear Button Button--icon Button--link",onclick:this.clear.bind(this),"aria-label":this.attrs.clearLabel||r.Z.translator.trans("core.lib.input.clear_button"),type:"button",icon:"fas fa-times-circle"}))}input(t){let{inputClassName:e,value:n,inputAttrs:r}=t;const s={className:(0,i.Z)("FormControl",e),type:this.attrs.type||"text",value:n,oninput:t=>{var e;return null==(e=this.onchange)?void 0:e.call(this,t.target.value)},"aria-label":this.attrs.ariaLabel,placeholder:this.attrs.placeholder,readonly:this.attrs.readonly||void 0,disabled:this.attrs.disabled||void 0,...r};return this.attrs.renderInput?this.attrs.renderInput(s):m("input",s)}onchange(t){var e,n;this.attrs.stream?this.attrs.stream(t):null==(e=(n=this.attrs).onchange)||e.call(n,t)}clear(){this.onchange("")}}flarum.reg.add("core","common/components/Input",c)},5226:(t,e,n)=>{"use strict";n.d(e,{Z:()=>a});var r=n(7465),s=n(2190),o=n(3344);class a extends s.Z{view(){const{display:t="block",size:e="medium",containerClassName:n,className:s,...a}=this.attrs,i=(0,o.Z)("LoadingIndicator",s),l=(0,o.Z)("LoadingIndicator-container","unset"!==t&&"LoadingIndicator-container--".concat(t),e&&"LoadingIndicator-container--".concat(e),n);return m("div",Object.assign({"aria-label":r.Z.translator.trans("core.lib.loading_indicator.accessible_label"),role:"status"},a.containerAttrs,{"data-size":e,className:l}),m("div",Object.assign({"aria-hidden":"true",className:i},a)))}}flarum.reg.add("core","common/components/LoadingIndicator",a)},7108:(t,e,n)=>{"use strict";n.d(e,{Z:()=>c});var r=n(7905),s=n(7465),o=n(2190),a=n(3817),i=n(8312),l=n(3344);class c extends o.Z{constructor(){super(...arguments),(0,r.Z)(this,"loading",!1),(0,r.Z)(this,"alertAttrs",null)}static get dismissibleOptions(){return{viaCloseButton:this.isDismissibleViaCloseButton,viaEscKey:this.isDismissibleViaEscKey,viaBackdropClick:this.isDismissibleViaBackdropClick}}oncreate(t){super.oncreate(t),this.attrs.animateShow((()=>this.onready()))}onbeforeremove(t){if(super.onbeforeremove(t),!this.attrs.state.modal)return new Promise((t=>setTimeout(t,300)))}view(){return this.alertAttrs&&(this.alertAttrs.dismissible=!1),m("div",{className:(0,l.Z)("Modal modal-dialog fade",this.className())},m("div",{className:"Modal-content"},this.dismissibleOptions.viaCloseButton&&m("div",{className:"Modal-close App-backControl"},m(i.Z,{icon:"fas fa-times",onclick:()=>this.hide(),className:"Button Button--icon Button--link","aria-label":s.Z.translator.trans("core.lib.modal.close")})),this.wrapper(this.inner())))}wrapper(t){return m("[",null,t)}inner(){return m("[",null,m("div",{className:"Modal-header"},m("h3",{className:"App-titleControl App-titleControl--text"},this.title())),!!this.alertAttrs&&m("div",{className:"Modal-alert"},m(a.Z,this.alertAttrs)),this.content())}onready(){}hide(){this.attrs.animateHide()}loaded(){this.loading=!1,m.redraw()}get dismissibleOptions(){return this.constructor.dismissibleOptions}}(0,r.Z)(c,"isDismissibleViaCloseButton",!0),(0,r.Z)(c,"isDismissibleViaEscKey",!0),(0,r.Z)(c,"isDismissibleViaBackdropClick",!0),flarum.reg.add("core","common/components/Modal",c)},7224:(t,e,n)=>{"use strict";n.d(e,{Z:()=>w});var r=n(7905),s=n(2190),o=n(7835),a=!1;if("undefined"!=typeof window){var i={get passive(){a=!0}};window.addEventListener("testPassive",null,i),window.removeEventListener("testPassive",null,i)}var l="undefined"!=typeof window&&window.navigator&&window.navigator.platform&&(/iP(ad|hone|od)/.test(window.navigator.platform)||"MacIntel"===window.navigator.platform&&window.navigator.maxTouchPoints>1),c=[],u=!1,d=-1,h=void 0,p=void 0,f=void 0,g=function(t){return c.some((function(e){return!(!e.options.allowTouchMove||!e.options.allowTouchMove(t))}))},v=function(t){var e=t||window.event;return!!g(e.target)||e.touches.length>1||(e.preventDefault&&e.preventDefault(),!1)},b=function(){l&&(c.forEach((function(t){t.targetElement.ontouchstart=null,t.targetElement.ontouchmove=null})),u&&(document.removeEventListener("touchmove",v,a?{passive:!1}:void 0),u=!1),d=-1),l?function(){if(void 0!==p){var t=-parseInt(document.body.style.top,10),e=-parseInt(document.body.style.left,10);document.body.style.position=p.position,document.body.style.top=p.top,document.body.style.left=p.left,window.scrollTo(e,t),p=void 0}}():(void 0!==f&&(document.body.style.paddingRight=f,f=void 0),void 0!==h&&(document.body.style.overflow=h,h=void 0)),c=[]},y=n(5226);class w extends s.Z{constructor(){super(...arguments),(0,r.Z)(this,"focusTrap",void 0),(0,r.Z)(this,"lastSetFocusTrap",void 0),(0,r.Z)(this,"modalClosing",!1),(0,r.Z)(this,"keyUpListener",null)}view(t){return m("[",null,this.attrs.state.modalList.map(((t,e)=>{const n=null==t?void 0:t.componentClass;return m("div",{key:t.key,className:"ModalManager modal","data-modal-key":t.key,"data-modal-number":e,role:"dialog","aria-modal":"true",style:{"--modal-number":e},"aria-hidden":this.attrs.state.modal!==t&&"true"},!!n&&[m(n,Object.assign({key:t.key},t.attrs,{animateShow:this.animateShow.bind(this),animateHide:this.animateHide.bind(this),state:this.attrs.state})),m("div",{key:t.key,className:"ModalManager-invisibleBackdrop",onclick:this.handlePossibleBackdropClick.bind(this)})])})),(this.attrs.state.backdropShown||this.attrs.state.loadingModal)&&m("div",{className:"Modal-backdrop backdrop",ontransitionend:this.onBackdropTransitionEnd.bind(this),"data-showing":!!this.attrs.state.modalList.length||this.attrs.state.loadingModal,style:{"--modal-count":this.attrs.state.modalList.length+Number(this.attrs.state.loadingModal)}},this.attrs.state.loadingModal&&m(y.Z,null)))}oncreate(t){super.oncreate(t),this.keyUpListener=this.handleEscPress.bind(this),document.body.addEventListener("keyup",this.keyUpListener)}onbeforeremove(t){super.onbeforeremove(t),this.keyUpListener&&document.body.removeEventListener("keyup",this.keyUpListener),this.keyUpListener=null}onupdate(t){super.onupdate(t),requestAnimationFrame((()=>{try{var t,e,n,r;if(!this.attrs.state.isModalOpen())return null==(e=document.getElementById("app"))||e.setAttribute("aria-hidden","false"),null==(n=(r=this.focusTrap).deactivate)||n.call(r),void b();null==(t=document.getElementById("app"))||t.setAttribute("aria-hidden","true");const w=this.attrs.state.modal.key;var s,i,m,y;this.focusTrap&&this.lastSetFocusTrap!==w&&(null==(s=(i=this.focusTrap).deactivate)||s.call(i),b()),this.activeDialogElement&&this.lastSetFocusTrap!==w&&(this.focusTrap=(0,o.v)(this.activeDialogElement,{allowOutsideClick:!0}),null==(m=(y=this.focusTrap).activate)||m.call(y),function(t,e){if(t){if(!c.some((function(e){return e.targetElement===t}))){var n={targetElement:t,options:e||{}};c=[].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e=r&&(document.body.style.top=-(e+t))}))}),300)}})):function(t){if(void 0===f){var e=!!t&&!0===t.reserveScrollBarGap,n=window.innerWidth-document.documentElement.clientWidth;if(e&&n>0){var r=parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right"),10);f=document.body.style.paddingRight,document.body.style.paddingRight=r+n+"px"}}void 0===h&&(h=document.body.style.overflow,document.body.style.overflow="hidden")}(e),l&&(t.ontouchstart=function(t){1===t.targetTouches.length&&(d=t.targetTouches[0].clientY)},t.ontouchmove=function(e){1===e.targetTouches.length&&function(t,e){var n=t.targetTouches[0].clientY-d;!g(t.target)&&(e&&0===e.scrollTop&&n>0||function(t){return!!t&&t.scrollHeight-t.scrollTop<=t.clientHeight}(e)&&n<0?v(t):t.stopPropagation())}(e,t)},u||(document.addEventListener("touchmove",v,a?{passive:!1}:void 0),u=!0))}}else console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.")}(this.activeDialogManagerElement,{reserveScrollBarGap:!0})),this.lastSetFocusTrap=w}catch{}}))}get activeDialogElement(){var t;return document.body.querySelector('.ModalManager[data-modal-key="'.concat(null==(t=this.attrs.state.modal)?void 0:t.key,'"] .Modal'))}get activeDialogManagerElement(){var t;return document.body.querySelector('.ModalManager[data-modal-key="'.concat(null==(t=this.attrs.state.modal)?void 0:t.key,'"]'))}animateShow(t){void 0===t&&(t=()=>{}),this.attrs.state.modal&&(this.activeDialogElement.addEventListener("transitionend",(()=>{t()}),{once:!0}),requestAnimationFrame((()=>{this.activeDialogElement.classList.add("in")})))}animateHide(t){void 0===t&&(t=()=>{}),this.modalClosing||(this.modalClosing=!0,this.activeDialogElement.addEventListener("transitionend",(()=>{this.modalClosing=!1,this.attrs.state.close(),t()}),{once:!0}),this.activeDialogElement.classList.remove("in"),this.activeDialogElement.classList.add("out"))}handleEscPress(t){if(!this.attrs.state.modal)return;const e=this.attrs.state.modal.componentClass.dismissibleOptions;"Escape"===t.key&&e.viaEscKey&&(t.preventDefault(),this.animateHide())}handlePossibleBackdropClick(t){this.attrs.state.modal&&this.attrs.state.modal.componentClass.dismissibleOptions.viaBackdropClick&&this.animateHide()}onBackdropTransitionEnd(t){"opacity"===t.propertyName&&null===t.currentTarget.getAttribute("data-showing")&&(this.attrs.state.backdropShown=!1,m.redraw())}}flarum.reg.add("core","common/components/ModalManager",w)},5386:(t,e,n)=>{"use strict";n.d(e,{Z:()=>l});var r=n(7465),s=n(2190),o=n(8312),a=n(2360),i=n(3344);class l extends s.Z{view(){const{history:t,pane:e}=r.Z;return m("div",{className:(0,i.Z)("Navigation ButtonGroup",this.attrs.className),onmouseenter:e&&e.show.bind(e),onmouseleave:e&&e.onmouseleave.bind(e)},null!=t&&t.canGoBack()?[this.getBackButton(),this.getPaneButton()]:this.getDrawerButton())}getBackButton(){const{history:t}=r.Z,e=null==t?void 0:t.getPrevious();return m(a.Z,{className:"Button Navigation-back Button--icon",href:null==t?void 0:t.backUrl(),icon:"fas fa-chevron-left","aria-label":null==e?void 0:e.title,onclick:e=>{e.shiftKey||e.ctrlKey||e.metaKey||2===e.which||(e.preventDefault(),null==t||t.back())}})}getPaneButton(){const{pane:t}=r.Z;return t&&t.active?m(o.Z,{className:(0,i.Z)("Button Button--icon Navigation-pin",{active:t.pinned}),onclick:t.togglePinned.bind(t),icon:"fas fa-thumbtack"}):null}getDrawerButton(){if(!this.attrs.drawer)return null;const{drawer:t}=r.Z,e=r.Z.session.user;return m(o.Z,{className:(0,i.Z)("Button Button--icon Navigation-drawer",{new:null==e?void 0:e.newNotificationCount()}),onclick:e=>{e.stopPropagation(),t.show()},icon:"fas fa-bars","aria-label":r.Z.translator.trans("core.lib.nav.drawer_button")})}}flarum.reg.add("core","common/components/Navigation",l)},4661:(t,e,n)=>{"use strict";n.d(e,{Z:()=>i});var r=n(7905),s=n(7465),o=n(2190),a=n(5104);class i extends o.Z{constructor(){super(...arguments),(0,r.Z)(this,"bodyClass",""),(0,r.Z)(this,"scrollTopOnCreate",!0),(0,r.Z)(this,"useBrowserScrollRestoration",!0)}oninit(t){super.oninit(t),s.Z.previous=s.Z.current,s.Z.current=new a.Z(this.constructor,{routeName:this.attrs.routeName}),s.Z.drawer.hide(),s.Z.modal.close()}oncreate(t){super.oncreate(t),this.bodyClass&&$("#app").addClass(this.bodyClass),this.scrollTopOnCreate&&$(window).scrollTop(0),"scrollRestoration"in history&&(history.scrollRestoration=this.useBrowserScrollRestoration?"auto":"manual")}onremove(t){super.onremove(t),this.bodyClass&&$("#app").removeClass(this.bodyClass)}}flarum.reg.add("core","common/components/Page",i)},406:(t,e,n)=>{"use strict";n.d(e,{Z:()=>s});var r=n(7108);class s extends r.Z{className(){return"RequestErrorModal Modal--large"}title(){return!!this.attrs.error.xhr&&"".concat(this.attrs.error.xhr.status," ").concat(this.attrs.error.xhr.statusText)}content(){var t;const{error:e,formattedError:n}=this.attrs;let r;return r=n.length?n.join("\n\n"):e.response?JSON.stringify(e.response,null,2):e.responseText,null!=(t=r)&&t.includes("