diff --git a/CHANGELOG.md b/CHANGELOG.md index ef21d92..4dabb1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +- 0.3.4 + - Flarum beta 13 compatibility #50 + - Fix ability to sort fields #52 + - Fix users without profile being redirected when "force completion" is enabled #2 - 0.3.3 - UI Improvements - Fix "force profile" not working with subfolder installation diff --git a/README.md b/README.md index 15506b3..fd34bdf 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,6 @@ The user profile generator. Includes: ## Installation -Use [Bazaar](https://discuss.flarum.org/d/5151) or install manually: - ```bash composer require fof/masquerade ``` diff --git a/composer.json b/composer.json index 9e6f630..8aeb147 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ } ], "require": { - "flarum/core": "^0.1.0-beta.8" + "flarum/core": "^0.1.0-beta.12" }, "replace": { "flagrow/masquerade": "*" diff --git a/extend.php b/extend.php index 92ba63b..2732dd4 100644 --- a/extend.php +++ b/extend.php @@ -24,11 +24,12 @@ ->get('/masquerade/profile/{id:[0-9]+}', 'masquerade.api.profile', Api\UserProfileController::class) ->get('/masquerade/configure', 'masquerade.api.configure', Api\UserConfigureController::class) ->post('/masquerade/configure', 'masquerade.api.configure.save', Api\UserConfigureController::class), + (new Extend\Middleware('forum')) + ->add(Middleware\DemandProfileCompletion::class), (new Extend\Locales(__DIR__ . '/resources/locale')), function (Dispatcher $events) { $events->subscribe(Listeners\InjectPermissions::class); $events->subscribe(Listeners\InjectSettings::class); - $events->subscribe(Listeners\DemandProfileCompletion::class); $events->subscribe(Listeners\AddUserGambits::class); $events->subscribe(Listeners\AddUserBioRelationship::class); } diff --git a/js/dist/admin.js b/js/dist/admin.js index 200d9dc..a7e5ca4 100644 --- a/js/dist/admin.js +++ b/js/dist/admin.js @@ -1,2 +1,2180 @@ -module.exports=function(t){var e={};function n(a){if(e[a])return e[a].exports;var i=e[a]={i:a,l:!1,exports:{}};return t[a].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,a){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:a})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(a,i,function(e){return t[e]}.bind(null,i));return a},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=20)}([function(t,e){t.exports=flarum.core.compat.app},function(t,e){t.exports=flarum.core.compat.Model},function(t,e,n){"use strict";function a(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}n.d(e,"a",function(){return a})},function(t,e){t.exports=flarum.core.compat["helpers/icon"]},function(t,e){t.exports=flarum.core.compat.extend},function(t,e){t.exports=flarum.core.compat["components/Button"]},function(t,e){t.exports=flarum.core.compat["utils/mixin"]},,function(t,e,n){"use strict";n.d(e,"a",function(){return s});var a=n(2),i=n(1),o=n.n(i),r=n(6),s=function(t){function e(){return t.apply(this,arguments)||this}return Object(a.a)(e,t),e.prototype.apiEndpoint=function(){return"/masquerade/fields"+(this.exists?"/"+this.data.id:"")},e}(n.n(r)()(o.a,{name:o.a.attribute("name"),description:o.a.attribute("description"),type:o.a.attribute("type"),validation:o.a.attribute("validation"),required:o.a.attribute("required"),prefix:o.a.attribute("prefix"),icon:o.a.attribute("icon"),sort:o.a.attribute("sort"),deleted_at:o.a.attribute("deleted_at",o.a.transformDate),answer:o.a.hasOne("answer"),on_bio:o.a.attribute("on_bio")}))},function(t,e){t.exports=flarum.core.compat["components/Select"]},function(t,e){t.exports=flarum.core.compat.Component},function(t,e){t.exports=flarum.core.compat["components/Switch"]},function(t,e){t.exports=flarum.core.compat["components/PermissionGrid"]},,,,function(t,e){t.exports=flarum.core.compat["components/AdminNav"]},function(t,e){t.exports=flarum.core.compat["components/AdminLinkButton"]},function(t,e){t.exports=flarum.core.compat["utils/saveSettings"]},,function(t,e,n){"use strict";n.r(e);var a=n(4),i=n(0),o=n.n(i),r=n(12),s=n.n(r),u=n(8),d=n(16),l=n.n(d),p=n(17),f=n.n(p),c=n(2),h=n(3),b=n.n(h),v=n(10),g=n.n(v),q=n(9),x=n.n(q),y=n(11),F=n.n(y),w=n(5),O=n.n(w),S=n(18),_=n.n(S),E=function(t){function e(){return t.apply(this,arguments)||this}Object(c.a)(e,t);var n=e.prototype;return n.init=function(){this.newOption=m.prop("")},n.view=function(){var t=this;return m(".Form-group",[m("label",o.a.translator.trans("fof-masquerade.admin.fields.options")),m("table",m("tbody",this.options().map(function(e,n){return m("tr",[m("td",m("input[type=text].FormControl",{oninput:m.withAttr("value",function(e){t.updateOption(n,e)}),value:e})),m("td",m("button.Button",{onclick:function(){t.moveOption(n,-1)}},b()("fas fa-chevron-up"))),m("td",m("button.Button",{onclick:function(){t.moveOption(n,1)}},b()("fas fa-chevron-down"))),m("td",m("button.Button.Button--danger",{onclick:function(){t.deleteOption(n)}},b()("fas fa-close")))])}))),m(".helpText",o.a.translator.trans("fof-masquerade.admin.fields.option-comma-warning")),m("table",m("tbody"),m("tr",[m("td",m("input[type=text].FormControl",{onchange:m.withAttr("value",this.newOption),value:this.newOption(),placeholder:o.a.translator.trans("fof-masquerade.admin.fields.option-new")})),m("td",m("button.Button.Button--primary",{onclick:function(){t.addOption()}},b()("fas fa-plus")))]))])},n.updateRules=function(t){this.props.onchange("in:"+t.join(","))},n.options=function(){var t=this.props.value.split("|"),e=[];return t.forEach(function(t){var n=t.split(":",2);"in"===n[0]&&(e=n[1].split(","))}),e},n.updateOption=function(t,e){var n=this.options();n[t]=e,this.updateRules(n)},n.moveOption=function(t,e){var n=this.options(),a=t+e;if(!(a<0||a>n.length-1)){var i=n.splice(t,1);n.splice(a,0,i[0]),this.updateRules(n)}},n.deleteOption=function(t){var e=this.options();e.splice(t,1),this.updateRules(e)},n.addOption=function(){if(""!==this.newOption()){var t=this.options();t.push(this.newOption()),this.newOption(""),this.updateRules(t)}},e}(g.a),j=function(t){function e(){return t.apply(this,arguments)||this}Object(c.a)(e,t);var n=e.prototype;return n.init=function(){this.resetNew(),this.loading=!1,this.existing=[],this.loadExisting(),this.enforceProfileCompletion=m.prop(1==o.a.data.settings["masquerade.force-profile-completion"])},n.config=function(){var t=this;this.$(".js-sortable-fields").sortable({cancel:""}).on("sortupdate",function(e,n){var a=t.$(".js-sortable-fields > .Field").map(function(){return $(this).data("id")}).get();t.updateSort(a)})},n.view=function(){var t=this;return m(".ProfileConfigurePane",m(".container",[m("h1",o.a.translator.trans("fof-masquerade.admin.title")),m("h2",o.a.translator.trans("fof-masquerade.admin.general-options")),m("form",[m(".Form-group",F.a.component({state:this.enforceProfileCompletion(),onchange:this.updateSetting.bind(this,this.enforceProfileCompletion,"masquerade.force-profile-completion"),children:o.a.translator.trans("fof-masquerade.admin.fields.force-user-to-completion")}))]),m("h2",o.a.translator.trans("fof-masquerade.admin.fields.title")),m("form.js-sortable-fields",this.existing.map(function(e){return t.addField(e)})),m("form",{onsubmit:this.submitAddField.bind(this)},[this.addField(this.new)])]))},n.updateSetting=function(t,e,n){var a;_()(((a={})[e]=n,a)),t(n)},n.addField=function(t){var e=this,n=t.id();return m("fieldset.Field",{"data-id":t.id(),key:t.id()},[m("legend",[n?[O.a.component({className:"Button Button--icon Button--danger",icon:"fas fa-trash",onclick:this.deleteField.bind(this,t)})," "]:null,m("span.Field-toggle",{onclick:function(t){return e.toggleField(t)}},[o.a.translator.trans("fof-masquerade.admin.fields."+(n?"edit":"add"),{field:t.name()})," ",b()("fas fa-caret-down")])]),m(".Field-body",[m(".Form-group",[m("label",o.a.translator.trans("fof-masquerade.admin.fields.name")),m("input.FormControl",{value:t.name(),oninput:m.withAttr("value",this.updateExistingFieldInput.bind(this,"name",t))}),m("span.helpText",o.a.translator.trans("fof-masquerade.admin.fields.name-help"))]),m(".Form-group",[m("label",o.a.translator.trans("fof-masquerade.admin.fields.description")),m("input.FormControl",{value:t.description(),oninput:m.withAttr("value",this.updateExistingFieldInput.bind(this,"description",t))}),m("span.helpText",o.a.translator.trans("fof-masquerade.admin.fields.description-help"))]),m(".Form-group",[m("label",o.a.translator.trans("fof-masquerade.admin.fields.icon")),m("input.FormControl",{value:t.icon(),oninput:m.withAttr("value",this.updateExistingFieldInput.bind(this,"icon",t))}),m("span.helpText",o.a.translator.trans("fof-masquerade.admin.fields.icon-help",{a:m("a",{href:"https://fontawesome.com/icons?m=free",target:"_blank"})}))]),m(".Form-group",F.a.component({state:t.on_bio(),onchange:this.updateExistingFieldInput.bind(this,"on_bio",t),children:o.a.translator.trans("fof-masquerade.admin.fields.on_bio")})),m(".Form-group",F.a.component({state:t.required(),onchange:this.updateExistingFieldInput.bind(this,"required",t),children:o.a.translator.trans("fof-masquerade.admin.fields.required")})),m(".Form-group",[m("label",o.a.translator.trans("fof-masquerade.admin.fields.type")),x.a.component({onchange:function(n){"null"===n&&(n=null),e.updateExistingFieldInput("type",t,n)},options:this.availableTypes(),value:t.type()})]),"select"===t.type()?E.component({onchange:function(n){e.updateExistingFieldInput("validation",t,n)},value:t.validation()}):null,null===t.type()?m(".Form-group",[m("label",o.a.translator.trans("fof-masquerade.admin.fields.validation")),m("input.FormControl",{value:t.validation(),oninput:m.withAttr("value",this.updateExistingFieldInput.bind(this,"validation",t))}),m("span.helpText",o.a.translator.trans("fof-masquerade.admin.fields.validation-help",{a:m("a",{href:"https://laravel.com/docs/5.2/validation#available-validation-rules",target:"_blank"})}))]):null,m(".Form-group",m(".ButtonGroup",[O.a.component({type:"submit",className:"Button Button--primary",children:o.a.translator.trans("fof-masquerade.admin.buttons."+(n?"edit":"add")+"-field"),loading:this.loading,disabled:!this.readyToAdd(t),onclick:this.updateExistingField.bind(this,t)}),n?O.a.component({type:"submit",className:"Button Button--danger",children:o.a.translator.trans("fof-masquerade.admin.buttons.delete-field"),loading:this.loading,onclick:this.deleteField.bind(this,t)}):null]))])])},n.updateExistingFieldInput=function(t,e,n){var a;e.id()?e.pushAttributes(((a={})[t]=n,a)):e[t](n)},n.updateSort=function(t){var e={sort:t};o.a.request({method:"POST",url:o.a.forum.attribute("apiUrl")+"/masquerade/fields/order",data:e}).then(this.requestSuccess.bind(this))},n.toggleField=function(t){$(t.target).parents(".Field").toggleClass("active")},n.deleteField=function(t){o.a.request({method:"DELETE",url:o.a.forum.attribute("apiUrl")+"/masquerade/fields/"+t.id()}).then(this.requestSuccess.bind(this))},n.submitAddField=function(t){t.preventDefault();var e=this.new;o.a.request({method:"POST",url:o.a.forum.attribute("apiUrl")+"/masquerade/fields",data:e}).then(this.requestSuccess.bind(this)),this.resetNew(),m.redraw()},n.updateExistingField=function(t){if(t.id()){var e=t.data;o.a.request({method:"PATCH",url:o.a.forum.attribute("apiUrl")+"/masquerade/fields/"+t.id(),data:e}).then(this.requestSuccess.bind(this))}},n.requestSuccess=function(t){var e=o.a.store.pushPayload(t);e instanceof Array||!e.deleted_at()||o.a.store.remove(e),this.existing=o.a.store.all("masquerade-field"),this.existing.sort(function(t,e){return t.sort()e.sort()?1:0}),this.loading=!1,m.redraw()},n.loadExisting=function(){return this.loading=!0,o.a.request({method:"GET",url:o.a.forum.attribute("apiUrl")+"/masquerade/fields"}).then(this.requestSuccess.bind(this))},n.resetNew=function(){this.new={id:m.prop(),name:m.prop(""),description:m.prop(""),prefix:m.prop(""),icon:m.prop(""),required:m.prop(!1),on_bio:m.prop(!1),type:m.prop(null),validation:m.prop("")}},n.readyToAdd=function(t){return!!t.name()},n.availableTypes=function(){return{url:o.a.translator.trans("fof-masquerade.admin.types.url"),email:o.a.translator.trans("fof-masquerade.admin.types.email"),boolean:o.a.translator.trans("fof-masquerade.admin.types.boolean"),select:o.a.translator.trans("fof-masquerade.admin.types.select"),null:o.a.translator.trans("fof-masquerade.admin.types.advanced")}},e}(g.a),B=function(){app.routes["fof-masquerade-configure-profile"]={path:"/fof/masquerade/configure",component:j.component()},app.extensionSettings["fof-masquerade"]=function(){return m.route(app.route("fof-masquerade-configure-profile"))},Object(a.extend)(l.a.prototype,"items",function(t){t.add("fof-masquerade-configure-profile",f.a.component({href:app.route("fof-masquerade-configure-profile"),icon:"far fa-id-card",children:"Masquerade",description:app.translator.trans("fof-masquerade.admin.menu.description")}))})};o.a.initializers.add("fof-masquerade",function(t){t.store.models["masquerade-field"]=u.a,Object(a.extend)(s.a.prototype,"viewItems",function(e){e.add("masquerade-view-profile",{icon:"far fa-id-card",label:t.translator.trans("fof-masquerade.admin.permissions.view-profile"),permission:"fof.masquerade.view-profile",allowGuest:!0})}),Object(a.extend)(s.a.prototype,"startItems",function(e){e.add("masquerade-have-profile",{icon:"far fa-id-card",label:t.translator.trans("fof-masquerade.admin.permissions.have-profile"),permission:"fof.masquerade.have-profile"})}),B()})}]); +module.exports = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./admin.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./admin.js": +/*!******************!*\ + !*** ./admin.js ***! + \******************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _src_admin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/admin */ "./src/admin/index.js"); +/* empty/unused harmony star reexport */ + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js": +/*!******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***! + \******************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _inheritsLoose; }); +function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; +} + +/***/ }), + +/***/ "./node_modules/html5sortable/dist/html5sortable.es.js": +/*!*************************************************************!*\ + !*** ./node_modules/html5sortable/dist/html5sortable.es.js ***! + \*************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* + * HTML5Sortable package + * https://github.com/lukasoppermann/html5sortable + * + * Maintained by Lukas Oppermann + * + * Released under the MIT license. + */ +/** + * Get or set data on element + * @param {HTMLElement} element + * @param {string} key + * @param {any} value + * @return {*} + */ +function addData(element, key, value) { + if (value === undefined) { + return element && element.h5s && element.h5s.data && element.h5s.data[key]; + } + else { + element.h5s = element.h5s || {}; + element.h5s.data = element.h5s.data || {}; + element.h5s.data[key] = value; + } +} +/** + * Remove data from element + * @param {HTMLElement} element + */ +function removeData(element) { + if (element.h5s) { + delete element.h5s.data; + } +} + +/* eslint-env browser */ +/** + * Filter only wanted nodes + * @param {NodeList|HTMLCollection|Array} nodes + * @param {String} selector + * @returns {Array} + */ +var _filter = (function (nodes, selector) { + if (!(nodes instanceof NodeList || nodes instanceof HTMLCollection || nodes instanceof Array)) { + throw new Error('You must provide a nodeList/HTMLCollection/Array of elements to be filtered.'); + } + if (typeof selector !== 'string') { + return Array.from(nodes); + } + return Array.from(nodes).filter(function (item) { return item.nodeType === 1 && item.matches(selector); }); +}); + +/* eslint-env browser */ +var stores = new Map(); +/** + * Stores data & configurations per Sortable + * @param {Object} config + */ +var Store = /** @class */ (function () { + function Store() { + this._config = new Map(); // eslint-disable-line no-undef + this._placeholder = undefined; // eslint-disable-line no-undef + this._data = new Map(); // eslint-disable-line no-undef + } + Object.defineProperty(Store.prototype, "config", { + /** + * get the configuration map of a class instance + * @method config + * @return {object} + */ + get: function () { + // transform Map to object + var config = {}; + this._config.forEach(function (value, key) { + config[key] = value; + }); + // return object + return config; + }, + /** + * set the configuration of a class instance + * @method config + * @param {object} config object of configurations + */ + set: function (config) { + if (typeof config !== 'object') { + throw new Error('You must provide a valid configuration object to the config setter.'); + } + // combine config with default + var mergedConfig = Object.assign({}, config); + // add config to map + this._config = new Map(Object.entries(mergedConfig)); + }, + enumerable: true, + configurable: true + }); + /** + * set individual configuration of a class instance + * @method setConfig + * @param key valid configuration key + * @param value any value + * @return void + */ + Store.prototype.setConfig = function (key, value) { + if (!this._config.has(key)) { + throw new Error("Trying to set invalid configuration item: " + key); + } + // set config + this._config.set(key, value); + }; + /** + * get an individual configuration of a class instance + * @method getConfig + * @param key valid configuration key + * @return any configuration value + */ + Store.prototype.getConfig = function (key) { + if (!this._config.has(key)) { + throw new Error("Invalid configuration item requested: " + key); + } + return this._config.get(key); + }; + Object.defineProperty(Store.prototype, "placeholder", { + /** + * get the placeholder for a class instance + * @method placeholder + * @return {HTMLElement|null} + */ + get: function () { + return this._placeholder; + }, + /** + * set the placeholder for a class instance + * @method placeholder + * @param {HTMLElement} placeholder + * @return {void} + */ + set: function (placeholder) { + if (!(placeholder instanceof HTMLElement) && placeholder !== null) { + throw new Error('A placeholder must be an html element or null.'); + } + this._placeholder = placeholder; + }, + enumerable: true, + configurable: true + }); + /** + * set an data entry + * @method setData + * @param {string} key + * @param {any} value + * @return {void} + */ + Store.prototype.setData = function (key, value) { + if (typeof key !== 'string') { + throw new Error('The key must be a string.'); + } + this._data.set(key, value); + }; + /** + * get an data entry + * @method getData + * @param {string} key an existing key + * @return {any} + */ + Store.prototype.getData = function (key) { + if (typeof key !== 'string') { + throw new Error('The key must be a string.'); + } + return this._data.get(key); + }; + /** + * delete an data entry + * @method deleteData + * @param {string} key an existing key + * @return {boolean} + */ + Store.prototype.deleteData = function (key) { + if (typeof key !== 'string') { + throw new Error('The key must be a string.'); + } + return this._data.delete(key); + }; + return Store; +}()); +/** + * @param {HTMLElement} sortableElement + * @returns {Class: Store} + */ +var store = (function (sortableElement) { + // if sortableElement is wrong type + if (!(sortableElement instanceof HTMLElement)) { + throw new Error('Please provide a sortable to the store function.'); + } + // create new instance if not avilable + if (!stores.has(sortableElement)) { + stores.set(sortableElement, new Store()); + } + // return instance + return stores.get(sortableElement); +}); + +/** + * @param {Array|HTMLElement} element + * @param {Function} callback + * @param {string} event + */ +function addEventListener(element, eventName, callback) { + if (element instanceof Array) { + for (var i = 0; i < element.length; ++i) { + addEventListener(element[i], eventName, callback); + } + return; + } + element.addEventListener(eventName, callback); + store(element).setData("event" + eventName, callback); +} +/** + * @param {Array|HTMLElement} element + * @param {string} eventName + */ +function removeEventListener(element, eventName) { + if (element instanceof Array) { + for (var i = 0; i < element.length; ++i) { + removeEventListener(element[i], eventName); + } + return; + } + element.removeEventListener(eventName, store(element).getData("event" + eventName)); + store(element).deleteData("event" + eventName); +} + +/** + * @param {Array|HTMLElement} element + * @param {string} attribute + * @param {string} value + */ +function addAttribute(element, attribute, value) { + if (element instanceof Array) { + for (var i = 0; i < element.length; ++i) { + addAttribute(element[i], attribute, value); + } + return; + } + element.setAttribute(attribute, value); +} +/** + * @param {Array|HTMLElement} element + * @param {string} attribute + */ +function removeAttribute(element, attribute) { + if (element instanceof Array) { + for (var i = 0; i < element.length; ++i) { + removeAttribute(element[i], attribute); + } + return; + } + element.removeAttribute(attribute); +} + +/** + * @param {HTMLElement} element + * @returns {Object} + */ +var _offset = (function (element) { + if (!element.parentElement || element.getClientRects().length === 0) { + throw new Error('target element must be part of the dom'); + } + var rect = element.getClientRects()[0]; + return { + left: rect.left + window.pageXOffset, + right: rect.right + window.pageXOffset, + top: rect.top + window.pageYOffset, + bottom: rect.bottom + window.pageYOffset + }; +}); + +/** + * Creates and returns a new debounced version of the passed function which will postpone its execution until after wait milliseconds have elapsed + * @param {Function} func to debounce + * @param {number} time to wait before calling function with latest arguments, 0 - no debounce + * @returns {function} - debounced function + */ +var _debounce = (function (func, wait) { + if (wait === void 0) { wait = 0; } + var timeout; + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + clearTimeout(timeout); + timeout = setTimeout(function () { + func.apply(void 0, args); + }, wait); + }; +}); + +/* eslint-env browser */ +/** + * Get position of the element relatively to its sibling elements + * @param {HTMLElement} element + * @returns {number} + */ +var _index = (function (element, elementList) { + if (!(element instanceof HTMLElement) || !(elementList instanceof NodeList || elementList instanceof HTMLCollection || elementList instanceof Array)) { + throw new Error('You must provide an element and a list of elements.'); + } + return Array.from(elementList).indexOf(element); +}); + +/* eslint-env browser */ +/** + * Test whether element is in DOM + * @param {HTMLElement} element + * @returns {boolean} + */ +var isInDom = (function (element) { + if (!(element instanceof HTMLElement)) { + throw new Error('Element is not a node element.'); + } + return element.parentNode !== null; +}); + +/* eslint-env browser */ +/** + * Insert node before or after target + * @param {HTMLElement} referenceNode - reference element + * @param {HTMLElement} newElement - element to be inserted + * @param {String} position - insert before or after reference element + */ +var insertNode = function (referenceNode, newElement, position) { + if (!(referenceNode instanceof HTMLElement) || !(referenceNode.parentElement instanceof HTMLElement)) { + throw new Error('target and element must be a node'); + } + referenceNode.parentElement.insertBefore(newElement, (position === 'before' ? referenceNode : referenceNode.nextElementSibling)); +}; +/** + * Insert before target + * @param {HTMLElement} target + * @param {HTMLElement} element + */ +var insertBefore = function (target, element) { return insertNode(target, element, 'before'); }; +/** + * Insert after target + * @param {HTMLElement} target + * @param {HTMLElement} element + */ +var insertAfter = function (target, element) { return insertNode(target, element, 'after'); }; + +/* eslint-env browser */ +/** + * Filter only wanted nodes + * @param {HTMLElement} sortableContainer + * @param {Function} customSerializer + * @returns {Array} + */ +var _serialize = (function (sortableContainer, customItemSerializer, customContainerSerializer) { + if (customItemSerializer === void 0) { customItemSerializer = function (serializedItem, sortableContainer) { return serializedItem; }; } + if (customContainerSerializer === void 0) { customContainerSerializer = function (serializedContainer) { return serializedContainer; }; } + // check for valid sortableContainer + if (!(sortableContainer instanceof HTMLElement) || !sortableContainer.isSortable === true) { + throw new Error('You need to provide a sortableContainer to be serialized.'); + } + // check for valid serializers + if (typeof customItemSerializer !== 'function' || typeof customContainerSerializer !== 'function') { + throw new Error('You need to provide a valid serializer for items and the container.'); + } + // get options + var options = addData(sortableContainer, 'opts'); + var item = options.items; + // serialize container + var items = _filter(sortableContainer.children, item); + var serializedItems = items.map(function (item) { + return { + parent: sortableContainer, + node: item, + html: item.outerHTML, + index: _index(item, items) + }; + }); + // serialize container + var container = { + node: sortableContainer, + itemCount: serializedItems.length + }; + return { + container: customContainerSerializer(container), + items: serializedItems.map(function (item) { return customItemSerializer(item, sortableContainer); }) + }; +}); + +/* eslint-env browser */ +/** + * create a placeholder element + * @param {HTMLElement} sortableElement a single sortable + * @param {string|undefined} placeholder a string representing an html element + * @param {string} placeholderClasses a string representing the classes that should be added to the placeholder + */ +var _makePlaceholder = (function (sortableElement, placeholder, placeholderClass) { + var _a; + if (placeholderClass === void 0) { placeholderClass = 'sortable-placeholder'; } + if (!(sortableElement instanceof HTMLElement)) { + throw new Error('You must provide a valid element as a sortable.'); + } + // if placeholder is not an element + if (!(placeholder instanceof HTMLElement) && placeholder !== undefined) { + throw new Error('You must provide a valid element as a placeholder or set ot to undefined.'); + } + // if no placeholder element is given + if (placeholder === undefined) { + if (['UL', 'OL'].includes(sortableElement.tagName)) { + placeholder = document.createElement('li'); + } + else if (['TABLE', 'TBODY'].includes(sortableElement.tagName)) { + placeholder = document.createElement('tr'); + // set colspan to always all rows, otherwise the item can only be dropped in first column + placeholder.innerHTML = ''; + } + else { + placeholder = document.createElement('div'); + } + } + // add classes to placeholder + if (typeof placeholderClass === 'string') { + (_a = placeholder.classList).add.apply(_a, placeholderClass.split(' ')); + } + return placeholder; +}); + +/* eslint-env browser */ +/** + * Get height of an element including padding + * @param {HTMLElement} element an dom element + */ +var _getElementHeight = (function (element) { + if (!(element instanceof HTMLElement)) { + throw new Error('You must provide a valid dom element'); + } + // get calculated style of element + var style = window.getComputedStyle(element); + // pick applicable properties, convert to int and reduce by adding + return ['height', 'padding-top', 'padding-bottom'] + .map(function (key) { + var int = parseInt(style.getPropertyValue(key), 10); + return isNaN(int) ? 0 : int; + }) + .reduce(function (sum, value) { return sum + value; }); +}); + +/* eslint-env browser */ +/** + * Get width of an element including padding + * @param {HTMLElement} element an dom element + */ +var _getElementWidth = (function (element) { + if (!(element instanceof HTMLElement)) { + throw new Error('You must provide a valid dom element'); + } + // get calculated style of element + var style = window.getComputedStyle(element); + // pick applicable properties, convert to int and reduce by adding + return ['width', 'padding-left', 'padding-right'] + .map(function (key) { + var int = parseInt(style.getPropertyValue(key), 10); + return isNaN(int) ? 0 : int; + }) + .reduce(function (sum, value) { return sum + value; }); +}); + +/* eslint-env browser */ +/** + * get handle or return item + * @param {Array} items + * @param {string} selector + */ +var _getHandles = (function (items, selector) { + if (!(items instanceof Array)) { + throw new Error('You must provide a Array of HTMLElements to be filtered.'); + } + if (typeof selector !== 'string') { + return items; + } + return items + // remove items without handle from array + .filter(function (item) { + return item.querySelector(selector) instanceof HTMLElement || + (item.shadowRoot && item.shadowRoot.querySelector(selector) instanceof HTMLElement); + }) + // replace item with handle in array + .map(function (item) { + return item.querySelector(selector) || (item.shadowRoot && item.shadowRoot.querySelector(selector)); + }); +}); + +/** + * @param {Event} event + * @returns {HTMLElement} + */ +var getEventTarget = (function (event) { + return (event.composedPath && event.composedPath()[0]) || event.target; +}); + +/* eslint-env browser */ +/** + * defaultDragImage returns the current item as dragged image + * @param {HTMLElement} draggedElement - the item that the user drags + * @param {object} elementOffset - an object with the offsets top, left, right & bottom + * @param {Event} event - the original drag event object + * @return {object} with element, posX and posY properties + */ +var defaultDragImage = function (draggedElement, elementOffset, event) { + return { + element: draggedElement, + posX: event.pageX - elementOffset.left, + posY: event.pageY - elementOffset.top + }; +}; +/** + * attaches an element as the drag image to an event + * @param {Event} event - the original drag event object + * @param {HTMLElement} draggedElement - the item that the user drags + * @param {Function} customDragImage - function to create a custom dragImage + * @return void + */ +var setDragImage = (function (event, draggedElement, customDragImage) { + // check if event is provided + if (!(event instanceof Event)) { + throw new Error('setDragImage requires a DragEvent as the first argument.'); + } + // check if draggedElement is provided + if (!(draggedElement instanceof HTMLElement)) { + throw new Error('setDragImage requires the dragged element as the second argument.'); + } + // set default function of none provided + if (!customDragImage) { + customDragImage = defaultDragImage; + } + // check if setDragImage method is available + if (event.dataTransfer && event.dataTransfer.setDragImage) { + // get the elements offset + var elementOffset = _offset(draggedElement); + // get the dragImage + var dragImage = customDragImage(draggedElement, elementOffset, event); + // check if custom function returns correct values + if (!(dragImage.element instanceof HTMLElement) || typeof dragImage.posX !== 'number' || typeof dragImage.posY !== 'number') { + throw new Error('The customDragImage function you provided must return and object with the properties element[string], posX[integer], posY[integer].'); + } + // needs to be set for HTML5 drag & drop to work + event.dataTransfer.effectAllowed = 'copyMove'; + // Firefox requires it to use the event target's id for the data + event.dataTransfer.setData('text/plain', getEventTarget(event).id); + // set the drag image on the event + event.dataTransfer.setDragImage(dragImage.element, dragImage.posX, dragImage.posY); + } +}); + +/** + * Check if curList accepts items from destList + * @param {sortable} destination the container an item is move to + * @param {sortable} origin the container an item comes from + */ +var _listsConnected = (function (destination, origin) { + // check if valid sortable + if (destination.isSortable === true) { + var acceptFrom = store(destination).getConfig('acceptFrom'); + // check if acceptFrom is valid + if (acceptFrom !== null && acceptFrom !== false && typeof acceptFrom !== 'string') { + throw new Error('HTML5Sortable: Wrong argument, "acceptFrom" must be "null", "false", or a valid selector string.'); + } + if (acceptFrom !== null) { + return acceptFrom !== false && acceptFrom.split(',').filter(function (sel) { + return sel.length > 0 && origin.matches(sel); + }).length > 0; + } + // drop in same list + if (destination === origin) { + return true; + } + // check if lists are connected with connectWith + if (store(destination).getConfig('connectWith') !== undefined && store(destination).getConfig('connectWith') !== null) { + return store(destination).getConfig('connectWith') === store(origin).getConfig('connectWith'); + } + } + return false; +}); + +/** + * default configurations + */ +var defaultConfiguration = { + items: null, + // deprecated + connectWith: null, + // deprecated + disableIEFix: null, + acceptFrom: null, + copy: false, + placeholder: null, + placeholderClass: 'sortable-placeholder', + draggingClass: 'sortable-dragging', + hoverClass: false, + debounce: 0, + throttleTime: 100, + maxItems: 0, + itemSerializer: undefined, + containerSerializer: undefined, + customDragImage: null, + orientation: 'vertical' +}; + +/** + * make sure a function is only called once within the given amount of time + * @param {Function} fn the function to throttle + * @param {number} threshold time limit for throttling + */ +// must use function to keep this context +function _throttle (fn, threshold) { + var _this = this; + if (threshold === void 0) { threshold = 250; } + // check function + if (typeof fn !== 'function') { + throw new Error('You must provide a function as the first argument for throttle.'); + } + // check threshold + if (typeof threshold !== 'number') { + throw new Error('You must provide a number as the second argument for throttle.'); + } + var lastEventTimestamp = null; + return function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var now = Date.now(); + if (lastEventTimestamp === null || now - lastEventTimestamp >= threshold) { + lastEventTimestamp = now; + fn.apply(_this, args); + } + }; +} + +/* eslint-env browser */ +/** + * enable or disable hoverClass on mouseenter/leave if container Items + * @param {sortable} sortableContainer a valid sortableContainer + * @param {boolean} enable enable or disable event + */ +// export default (sortableContainer: sortable, enable: boolean) => { +var enableHoverClass = (function (sortableContainer, enable) { + if (typeof store(sortableContainer).getConfig('hoverClass') === 'string') { + var hoverClasses_1 = store(sortableContainer).getConfig('hoverClass').split(' '); + // add class on hover + if (enable === true) { + addEventListener(sortableContainer, 'mousemove', _throttle(function (event) { + // check of no mouse button was pressed when mousemove started == no drag + if (event.buttons === 0) { + _filter(sortableContainer.children, store(sortableContainer).getConfig('items')).forEach(function (item) { + var _a, _b; + if (item !== event.target) { + (_a = item.classList).remove.apply(_a, hoverClasses_1); + } + else { + (_b = item.classList).add.apply(_b, hoverClasses_1); + } + }); + } + }, store(sortableContainer).getConfig('throttleTime'))); + // remove class on leave + addEventListener(sortableContainer, 'mouseleave', function () { + _filter(sortableContainer.children, store(sortableContainer).getConfig('items')).forEach(function (item) { + var _a; + (_a = item.classList).remove.apply(_a, hoverClasses_1); + }); + }); + // remove events + } + else { + removeEventListener(sortableContainer, 'mousemove'); + removeEventListener(sortableContainer, 'mouseleave'); + } + } +}); + +/* eslint-env browser */ +/* + * variables global to the plugin + */ +var dragging; +var draggingHeight; +var draggingWidth; +/* + * Keeps track of the initialy selected list, where 'dragstart' event was triggered + * It allows us to move the data in between individual Sortable List instances + */ +// Origin List - data from before any item was changed +var originContainer; +var originIndex; +var originElementIndex; +var originItemsBeforeUpdate; +// Previous Sortable Container - we dispatch as sortenter event when a +// dragged item enters a sortableContainer for the first time +var previousContainer; +// Destination List - data from before any item was changed +var destinationItemsBeforeUpdate; +/** + * remove event handlers from items + * @param {Array|NodeList} items + */ +var _removeItemEvents = function (items) { + removeEventListener(items, 'dragstart'); + removeEventListener(items, 'dragend'); + removeEventListener(items, 'dragover'); + removeEventListener(items, 'dragenter'); + removeEventListener(items, 'drop'); + removeEventListener(items, 'mouseenter'); + removeEventListener(items, 'mouseleave'); +}; +/** + * _getDragging returns the current element to drag or + * a copy of the element. + * Is Copy Active for sortable + * @param {HTMLElement} draggedItem - the item that the user drags + * @param {HTMLElement} sortable a single sortable + */ +var _getDragging = function (draggedItem, sortable) { + var ditem = draggedItem; + if (store(sortable).getConfig('copy') === true) { + ditem = draggedItem.cloneNode(true); + addAttribute(ditem, 'aria-copied', 'true'); + draggedItem.parentElement.appendChild(ditem); + ditem.style.display = 'none'; + ditem.oldDisplay = draggedItem.style.display; + } + return ditem; +}; +/** + * Remove data from sortable + * @param {HTMLElement} sortable a single sortable + */ +var _removeSortableData = function (sortable) { + removeData(sortable); + removeAttribute(sortable, 'aria-dropeffect'); +}; +/** + * Remove data from items + * @param {Array|HTMLElement} items + */ +var _removeItemData = function (items) { + removeAttribute(items, 'aria-grabbed'); + removeAttribute(items, 'aria-copied'); + removeAttribute(items, 'draggable'); + removeAttribute(items, 'role'); +}; +/** + * find sortable from element. travels up parent element until found or null. + * @param {HTMLElement} element a single sortable + * @param {Event} event - the current event. We need to pass it to be able to + * find Sortable whith shadowRoot (document fragment has no parent) + */ +function findSortable(element, event) { + if (event.composedPath) { + return event.composedPath().find(function (el) { return el.isSortable; }); + } + while (element.isSortable !== true) { + element = element.parentElement; + } + return element; +} +/** + * Dragging event is on the sortable element. finds the top child that + * contains the element. + * @param {HTMLElement} sortableElement a single sortable + * @param {HTMLElement} element is that being dragged + */ +function findDragElement(sortableElement, element) { + var options = addData(sortableElement, 'opts'); + var items = _filter(sortableElement.children, options.items); + var itemlist = items.filter(function (ele) { + return ele.contains(element) || (ele.shadowRoot && ele.shadowRoot.contains(element)); + }); + return itemlist.length > 0 ? itemlist[0] : element; +} +/** + * Destroy the sortable + * @param {HTMLElement} sortableElement a single sortable + */ +var _destroySortable = function (sortableElement) { + var opts = addData(sortableElement, 'opts') || {}; + var items = _filter(sortableElement.children, opts.items); + var handles = _getHandles(items, opts.handle); + // remove event handlers & data from sortable + removeEventListener(sortableElement, 'dragover'); + removeEventListener(sortableElement, 'dragenter'); + removeEventListener(sortableElement, 'dragstart'); + removeEventListener(sortableElement, 'dragend'); + removeEventListener(sortableElement, 'drop'); + // remove event data from sortable + _removeSortableData(sortableElement); + // remove event handlers & data from items + removeEventListener(handles, 'mousedown'); + _removeItemEvents(items); + _removeItemData(items); + // clear sortable flag + sortableElement.isSortable = false; +}; +/** + * Enable the sortable + * @param {HTMLElement} sortableElement a single sortable + */ +var _enableSortable = function (sortableElement) { + var opts = addData(sortableElement, 'opts'); + var items = _filter(sortableElement.children, opts.items); + var handles = _getHandles(items, opts.handle); + addAttribute(sortableElement, 'aria-dropeffect', 'move'); + addData(sortableElement, '_disabled', 'false'); + addAttribute(handles, 'draggable', 'true'); + // @todo: remove this fix + // IE FIX for ghost + // can be disabled as it has the side effect that other events + // (e.g. click) will be ignored + if (opts.disableIEFix === false) { + var spanEl = (document || window.document).createElement('span'); + if (typeof spanEl.dragDrop === 'function') { + addEventListener(handles, 'mousedown', function () { + if (items.indexOf(this) !== -1) { + this.dragDrop(); + } + else { + var parent = this.parentElement; + while (items.indexOf(parent) === -1) { + parent = parent.parentElement; + } + parent.dragDrop(); + } + }); + } + } +}; +/** + * Disable the sortable + * @param {HTMLElement} sortableElement a single sortable + */ +var _disableSortable = function (sortableElement) { + var opts = addData(sortableElement, 'opts'); + var items = _filter(sortableElement.children, opts.items); + var handles = _getHandles(items, opts.handle); + addAttribute(sortableElement, 'aria-dropeffect', 'none'); + addData(sortableElement, '_disabled', 'true'); + addAttribute(handles, 'draggable', 'false'); + removeEventListener(handles, 'mousedown'); +}; +/** + * Reload the sortable + * @param {HTMLElement} sortableElement a single sortable + * @description events need to be removed to not be double bound + */ +var _reloadSortable = function (sortableElement) { + var opts = addData(sortableElement, 'opts'); + var items = _filter(sortableElement.children, opts.items); + var handles = _getHandles(items, opts.handle); + addData(sortableElement, '_disabled', 'false'); + // remove event handlers from items + _removeItemEvents(items); + removeEventListener(handles, 'mousedown'); + // remove event handlers from sortable + removeEventListener(sortableElement, 'dragover'); + removeEventListener(sortableElement, 'dragenter'); + removeEventListener(sortableElement, 'drop'); +}; +/** + * Public sortable object + * @param {Array|NodeList} sortableElements + * @param {object|string} options|method + */ +function sortable(sortableElements, options) { + // get method string to see if a method is called + var method = String(options); + options = options || {}; + // check if the user provided a selector instead of an element + if (typeof sortableElements === 'string') { + sortableElements = document.querySelectorAll(sortableElements); + } + // if the user provided an element, return it in an array to keep the return value consistant + if (sortableElements instanceof HTMLElement) { + sortableElements = [sortableElements]; + } + sortableElements = Array.prototype.slice.call(sortableElements); + if (/serialize/.test(method)) { + return sortableElements.map(function (sortableContainer) { + var opts = addData(sortableContainer, 'opts'); + return _serialize(sortableContainer, opts.itemSerializer, opts.containerSerializer); + }); + } + sortableElements.forEach(function (sortableElement) { + if (/enable|disable|destroy/.test(method)) { + return sortable[method](sortableElement); + } + // log deprecation + ['connectWith', 'disableIEFix'].forEach(function (configKey) { + if (Object.prototype.hasOwnProperty.call(options, configKey) && options[configKey] !== null) { + console.warn("HTML5Sortable: You are using the deprecated configuration \"" + configKey + "\". This will be removed in an upcoming version, make sure to migrate to the new options when updating."); + } + }); + // merge options with default options + options = Object.assign({}, defaultConfiguration, store(sortableElement).config, options); + // init data store for sortable + store(sortableElement).config = options; + // set options on sortable + addData(sortableElement, 'opts', options); + // property to define as sortable + sortableElement.isSortable = true; + // reset sortable + _reloadSortable(sortableElement); + // initialize + var listItems = _filter(sortableElement.children, options.items); + // create element if user defined a placeholder element as a string + var customPlaceholder; + if (options.placeholder !== null && options.placeholder !== undefined) { + var tempContainer = document.createElement(sortableElement.tagName); + if (options.placeholder instanceof HTMLElement) { + tempContainer.appendChild(options.placeholder); + } + else { + tempContainer.innerHTML = options.placeholder; + } + customPlaceholder = tempContainer.children[0]; + } + // add placeholder + store(sortableElement).placeholder = _makePlaceholder(sortableElement, customPlaceholder, options.placeholderClass); + addData(sortableElement, 'items', options.items); + if (options.acceptFrom) { + addData(sortableElement, 'acceptFrom', options.acceptFrom); + } + else if (options.connectWith) { + addData(sortableElement, 'connectWith', options.connectWith); + } + _enableSortable(sortableElement); + addAttribute(listItems, 'role', 'option'); + addAttribute(listItems, 'aria-grabbed', 'false'); + // enable hover class + enableHoverClass(sortableElement, true); + /* + Handle drag events on draggable items + Handle is set at the sortableElement level as it will bubble up + from the item + */ + addEventListener(sortableElement, 'dragstart', function (e) { + // ignore dragstart events + var target = getEventTarget(e); + if (target.isSortable === true) { + return; + } + e.stopImmediatePropagation(); + if ((options.handle && !target.matches(options.handle)) || target.getAttribute('draggable') === 'false') { + return; + } + var sortableContainer = findSortable(target, e); + var dragItem = findDragElement(sortableContainer, target); + // grab values + originItemsBeforeUpdate = _filter(sortableContainer.children, options.items); + originIndex = originItemsBeforeUpdate.indexOf(dragItem); + originElementIndex = _index(dragItem, sortableContainer.children); + originContainer = sortableContainer; + // add transparent clone or other ghost to cursor + setDragImage(e, dragItem, options.customDragImage); + // cache selsection & add attr for dragging + draggingHeight = _getElementHeight(dragItem); + draggingWidth = _getElementWidth(dragItem); + dragItem.classList.add(options.draggingClass); + dragging = _getDragging(dragItem, sortableContainer); + addAttribute(dragging, 'aria-grabbed', 'true'); + // dispatch sortstart event on each element in group + sortableContainer.dispatchEvent(new CustomEvent('sortstart', { + detail: { + origin: { + elementIndex: originElementIndex, + index: originIndex, + container: originContainer + }, + item: dragging, + originalTarget: target + } + })); + }); + /* + We are capturing targetSortable before modifications with 'dragenter' event + */ + addEventListener(sortableElement, 'dragenter', function (e) { + var target = getEventTarget(e); + var sortableContainer = findSortable(target, e); + if (sortableContainer && sortableContainer !== previousContainer) { + destinationItemsBeforeUpdate = _filter(sortableContainer.children, addData(sortableContainer, 'items')) + .filter(function (item) { return item !== store(sortableElement).placeholder; }); + sortableContainer.dispatchEvent(new CustomEvent('sortenter', { + detail: { + origin: { + elementIndex: originElementIndex, + index: originIndex, + container: originContainer + }, + destination: { + container: sortableContainer, + itemsBeforeUpdate: destinationItemsBeforeUpdate + }, + item: dragging, + originalTarget: target + } + })); + } + previousContainer = sortableContainer; + }); + /* + * Dragend Event - https://developer.mozilla.org/en-US/docs/Web/Events/dragend + * Fires each time dragEvent end, or ESC pressed + * We are using it to clean up any draggable elements and placeholders + */ + addEventListener(sortableElement, 'dragend', function (e) { + if (!dragging) { + return; + } + dragging.classList.remove(options.draggingClass); + addAttribute(dragging, 'aria-grabbed', 'false'); + if (dragging.getAttribute('aria-copied') === 'true' && addData(dragging, 'dropped') !== 'true') { + dragging.remove(); + } + dragging.style.display = dragging.oldDisplay; + delete dragging.oldDisplay; + var visiblePlaceholder = Array.from(stores.values()).map(function (data) { return data.placeholder; }) + .filter(function (placeholder) { return placeholder instanceof HTMLElement; }) + .filter(isInDom)[0]; + if (visiblePlaceholder) { + visiblePlaceholder.remove(); + } + // dispatch sortstart event on each element in group + sortableElement.dispatchEvent(new CustomEvent('sortstop', { + detail: { + origin: { + elementIndex: originElementIndex, + index: originIndex, + container: originContainer + }, + item: dragging + } + })); + previousContainer = null; + dragging = null; + draggingHeight = null; + draggingWidth = null; + }); + /* + * Drop Event - https://developer.mozilla.org/en-US/docs/Web/Events/drop + * Fires when valid drop target area is hit + */ + addEventListener(sortableElement, 'drop', function (e) { + if (!_listsConnected(sortableElement, dragging.parentElement)) { + return; + } + e.preventDefault(); + e.stopPropagation(); + addData(dragging, 'dropped', 'true'); + // get the one placeholder that is currently visible + var visiblePlaceholder = Array.from(stores.values()).map(function (data) { + return data.placeholder; + }) + // filter only HTMLElements + .filter(function (placeholder) { return placeholder instanceof HTMLElement; }) + // filter only elements in DOM + .filter(isInDom)[0]; + // attach element after placeholder + insertAfter(visiblePlaceholder, dragging); + // remove placeholder from dom + visiblePlaceholder.remove(); + /* + * Fires Custom Event - 'sortstop' + */ + sortableElement.dispatchEvent(new CustomEvent('sortstop', { + detail: { + origin: { + elementIndex: originElementIndex, + index: originIndex, + container: originContainer + }, + item: dragging + } + })); + var placeholder = store(sortableElement).placeholder; + var originItems = _filter(originContainer.children, options.items) + .filter(function (item) { return item !== placeholder; }); + var destinationContainer = this.isSortable === true ? this : this.parentElement; + var destinationItems = _filter(destinationContainer.children, addData(destinationContainer, 'items')) + .filter(function (item) { return item !== placeholder; }); + var destinationElementIndex = _index(dragging, Array.from(dragging.parentElement.children) + .filter(function (item) { return item !== placeholder; })); + var destinationIndex = _index(dragging, destinationItems); + /* + * When a list item changed container lists or index within a list + * Fires Custom Event - 'sortupdate' + */ + if (originElementIndex !== destinationElementIndex || originContainer !== destinationContainer) { + sortableElement.dispatchEvent(new CustomEvent('sortupdate', { + detail: { + origin: { + elementIndex: originElementIndex, + index: originIndex, + container: originContainer, + itemsBeforeUpdate: originItemsBeforeUpdate, + items: originItems + }, + destination: { + index: destinationIndex, + elementIndex: destinationElementIndex, + container: destinationContainer, + itemsBeforeUpdate: destinationItemsBeforeUpdate, + items: destinationItems + }, + item: dragging + } + })); + } + }); + var debouncedDragOverEnter = _debounce(function (sortableElement, element, pageX, pageY) { + if (!dragging) { + return; + } + // set placeholder height if forcePlaceholderSize option is set + if (options.forcePlaceholderSize) { + store(sortableElement).placeholder.style.height = draggingHeight + 'px'; + store(sortableElement).placeholder.style.width = draggingWidth + 'px'; + } + // if element the draggedItem is dragged onto is within the array of all elements in list + // (not only items, but also disabled, etc.) + if (Array.from(sortableElement.children).indexOf(element) > -1) { + var thisHeight = _getElementHeight(element); + var thisWidth = _getElementWidth(element); + var placeholderIndex = _index(store(sortableElement).placeholder, element.parentElement.children); + var thisIndex = _index(element, element.parentElement.children); + // Check if `element` is bigger than the draggable. If it is, we have to define a dead zone to prevent flickering + if (thisHeight > draggingHeight || thisWidth > draggingWidth) { + // Dead zone? + var deadZoneVertical = thisHeight - draggingHeight; + var deadZoneHorizontal = thisWidth - draggingWidth; + var offsetTop = _offset(element).top; + var offsetLeft = _offset(element).left; + if (placeholderIndex < thisIndex && + ((options.orientation === 'vertical' && pageY < offsetTop) || + (options.orientation === 'horizontal' && pageX < offsetLeft))) { + return; + } + if (placeholderIndex > thisIndex && + ((options.orientation === 'vertical' && pageY > offsetTop + thisHeight - deadZoneVertical) || + (options.orientation === 'horizontal' && pageX > offsetLeft + thisWidth - deadZoneHorizontal))) { + return; + } + } + if (dragging.oldDisplay === undefined) { + dragging.oldDisplay = dragging.style.display; + } + if (dragging.style.display !== 'none') { + dragging.style.display = 'none'; + } + // To avoid flicker, determine where to position the placeholder + // based on where the mouse pointer is relative to the elements + // vertical center. + var placeAfter = false; + try { + var elementMiddleVertical = _offset(element).top + element.offsetHeight / 2; + var elementMiddleHorizontal = _offset(element).left + element.offsetWidth / 2; + placeAfter = (options.orientation === 'vertical' && (pageY >= elementMiddleVertical)) || + (options.orientation === 'horizontal' && (pageX >= elementMiddleHorizontal)); + } + catch (e) { + placeAfter = placeholderIndex < thisIndex; + } + if (placeAfter) { + insertAfter(element, store(sortableElement).placeholder); + } + else { + insertBefore(element, store(sortableElement).placeholder); + } + // get placeholders from all stores & remove all but current one + Array.from(stores.values()) + // remove empty values + .filter(function (data) { return data.placeholder !== undefined; }) + // foreach placeholder in array if outside of current sorableContainer -> remove from DOM + .forEach(function (data) { + if (data.placeholder !== store(sortableElement).placeholder) { + data.placeholder.remove(); + } + }); + } + else { + // get all placeholders from store + var placeholders = Array.from(stores.values()) + .filter(function (data) { return data.placeholder !== undefined; }) + .map(function (data) { + return data.placeholder; + }); + // check if element is not in placeholders + if (placeholders.indexOf(element) === -1 && sortableElement === element && !_filter(element.children, options.items).length) { + placeholders.forEach(function (element) { return element.remove(); }); + element.appendChild(store(sortableElement).placeholder); + } + } + }, options.debounce); + // Handle dragover and dragenter events on draggable items + var onDragOverEnter = function (e) { + var element = e.target; + var sortableElement = element.isSortable === true ? element : findSortable(element, e); + element = findDragElement(sortableElement, element); + if (!dragging || !_listsConnected(sortableElement, dragging.parentElement) || addData(sortableElement, '_disabled') === 'true') { + return; + } + var options = addData(sortableElement, 'opts'); + if (parseInt(options.maxItems) && _filter(sortableElement.children, addData(sortableElement, 'items')).length >= parseInt(options.maxItems) && dragging.parentElement !== sortableElement) { + return; + } + e.preventDefault(); + e.stopPropagation(); + e.dataTransfer.dropEffect = store(sortableElement).getConfig('copy') === true ? 'copy' : 'move'; + debouncedDragOverEnter(sortableElement, element, e.pageX, e.pageY); + }; + addEventListener(listItems.concat(sortableElement), 'dragover', onDragOverEnter); + addEventListener(listItems.concat(sortableElement), 'dragenter', onDragOverEnter); + }); + return sortableElements; +} +sortable.destroy = function (sortableElement) { + _destroySortable(sortableElement); +}; +sortable.enable = function (sortableElement) { + _enableSortable(sortableElement); +}; +sortable.disable = function (sortableElement) { + _disableSortable(sortableElement); +}; +/* START.TESTS_ONLY */ +sortable.__testing = { + // add internal methods here for testing purposes + _data: addData, + _removeItemEvents: _removeItemEvents, + _removeItemData: _removeItemData, + _removeSortableData: _removeSortableData +}; + +/* harmony default export */ __webpack_exports__["default"] = (sortable); + + +/***/ }), + +/***/ "./src/admin/addProfileConfigurePane.js": +/*!**********************************************!*\ + !*** ./src/admin/addProfileConfigurePane.js ***! + \**********************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/extend */ "flarum/extend"); +/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_extend__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var flarum_components_AdminNav__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/components/AdminNav */ "flarum/components/AdminNav"); +/* harmony import */ var flarum_components_AdminNav__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_components_AdminNav__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_components_AdminLinkButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/components/AdminLinkButton */ "flarum/components/AdminLinkButton"); +/* harmony import */ var flarum_components_AdminLinkButton__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_components_AdminLinkButton__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _panes_ProfileConfigurePane__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./panes/ProfileConfigurePane */ "./src/admin/panes/ProfileConfigurePane.js"); + + + + +/* harmony default export */ __webpack_exports__["default"] = (function () { + // create the route + app.routes['fof-masquerade-configure-profile'] = { + path: '/fof/masquerade/configure', + component: _panes_ProfileConfigurePane__WEBPACK_IMPORTED_MODULE_3__["default"].component() + }; // bind the route we created to the three dots settings button + + app.extensionSettings['fof-masquerade'] = function () { + return m.route(app.route('fof-masquerade-configure-profile')); + }; + + Object(flarum_extend__WEBPACK_IMPORTED_MODULE_0__["extend"])(flarum_components_AdminNav__WEBPACK_IMPORTED_MODULE_1___default.a.prototype, 'items', function (items) { + // add the Image Upload tab to the admin navigation menu + items.add('fof-masquerade-configure-profile', flarum_components_AdminLinkButton__WEBPACK_IMPORTED_MODULE_2___default.a.component({ + href: app.route('fof-masquerade-configure-profile'), + icon: 'far fa-id-card', + children: 'Masquerade', + description: app.translator.trans('fof-masquerade.admin.menu.description') + })); + }); +}); + +/***/ }), + +/***/ "./src/admin/components/SelectFieldOptionEditor.js": +/*!*********************************************************!*\ + !*** ./src/admin/components/SelectFieldOptionEditor.js ***! + \*********************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return SelectFieldOptionEditor; }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/app */ "flarum/app"); +/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_app__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/Component */ "flarum/Component"); +/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_Component__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/helpers/icon */ "flarum/helpers/icon"); +/* harmony import */ var flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_3__); + + + + +/* global m */ + +var SelectFieldOptionEditor = /*#__PURE__*/function (_Component) { + Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(SelectFieldOptionEditor, _Component); + + function SelectFieldOptionEditor() { + return _Component.apply(this, arguments) || this; + } + + var _proto = SelectFieldOptionEditor.prototype; + + _proto.init = function init() { + this.newOption = m.prop(''); + }; + + _proto.view = function view() { + var _this = this; + + return m('.Form-group', [m('label', flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('fof-masquerade.admin.fields.options')), m('table', m('tbody', this.options().map(function (option, optionIndex) { + return m('tr', [m('td', m('input[type=text].FormControl', { + oninput: m.withAttr('value', function (value) { + _this.updateOption(optionIndex, value); + }), + value: option + })), m('td', m('button.Button', { + onclick: function onclick() { + _this.moveOption(optionIndex, -1); + } + }, flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_3___default()('fas fa-chevron-up'))), m('td', m('button.Button', { + onclick: function onclick() { + _this.moveOption(optionIndex, 1); + } + }, flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_3___default()('fas fa-chevron-down'))), m('td', m('button.Button.Button--danger', { + onclick: function onclick() { + _this.deleteOption(optionIndex); + } + }, flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_3___default()('fas fa-close')))]); + }))), m('.helpText', flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('fof-masquerade.admin.fields.option-comma-warning')), m('table', m('tbody'), m('tr', [m('td', m('input[type=text].FormControl', { + onchange: m.withAttr('value', this.newOption), + value: this.newOption(), + placeholder: flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('fof-masquerade.admin.fields.option-new') + })), m('td', m('button.Button.Button--primary', { + onclick: function onclick() { + _this.addOption(); + } + }, flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_3___default()('fas fa-plus')))]))]); + }; + + _proto.updateRules = function updateRules(options) { + // We ignore other existing rules, they would probably be leftovers from another field type when changing types + this.props.onchange('in:' + options.join(',')); + }; + + _proto.options = function options() { + var rules = this.props.value.split('|'); + var options = []; + rules.forEach(function (rule) { + var parts = rule.split(':', 2); + + if (parts[0] === 'in') { + options = parts[1].split(','); + } + }); + return options; + }; + + _proto.updateOption = function updateOption(index, value) { + var options = this.options(); + options[index] = value; + this.updateRules(options); + }; + + _proto.moveOption = function moveOption(index, moveIndex) { + var options = this.options(); + var newIndex = index + moveIndex; + + if (newIndex < 0 || newIndex > options.length - 1) { + return; + } + + var move = options.splice(index, 1); + options.splice(newIndex, 0, move[0]); + this.updateRules(options); + }; + + _proto.deleteOption = function deleteOption(index) { + var options = this.options(); + options.splice(index, 1); + this.updateRules(options); + }; + + _proto.addOption = function addOption() { + if (this.newOption() === '') { + return; + } + + var options = this.options(); + options.push(this.newOption()); + this.newOption(''); + this.updateRules(options); + }; + + return SelectFieldOptionEditor; +}(flarum_Component__WEBPACK_IMPORTED_MODULE_2___default.a); + + + +/***/ }), + +/***/ "./src/admin/index.js": +/*!****************************!*\ + !*** ./src/admin/index.js ***! + \****************************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/extend */ "flarum/extend"); +/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_extend__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/app */ "flarum/app"); +/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_app__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_components_PermissionGrid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/components/PermissionGrid */ "flarum/components/PermissionGrid"); +/* harmony import */ var flarum_components_PermissionGrid__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_components_PermissionGrid__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _lib_models_Field__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../lib/models/Field */ "./src/lib/models/Field.js"); +/* harmony import */ var _addProfileConfigurePane__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./addProfileConfigurePane */ "./src/admin/addProfileConfigurePane.js"); + + + + + +flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.initializers.add('fof-masquerade', function (app) { + app.store.models['masquerade-field'] = _lib_models_Field__WEBPACK_IMPORTED_MODULE_3__["default"]; // add the permission option for viewing a masquerade profile + + Object(flarum_extend__WEBPACK_IMPORTED_MODULE_0__["extend"])(flarum_components_PermissionGrid__WEBPACK_IMPORTED_MODULE_2___default.a.prototype, 'viewItems', function (items) { + items.add('masquerade-view-profile', { + icon: 'far fa-id-card', + label: app.translator.trans('fof-masquerade.admin.permissions.view-profile'), + permission: 'fof.masquerade.view-profile', + allowGuest: true + }); + }); // add the permission option for creating a masquerade profile + + Object(flarum_extend__WEBPACK_IMPORTED_MODULE_0__["extend"])(flarum_components_PermissionGrid__WEBPACK_IMPORTED_MODULE_2___default.a.prototype, 'startItems', function (items) { + items.add('masquerade-have-profile', { + icon: 'far fa-id-card', + label: app.translator.trans('fof-masquerade.admin.permissions.have-profile'), + permission: 'fof.masquerade.have-profile' + }); + }); + Object(_addProfileConfigurePane__WEBPACK_IMPORTED_MODULE_4__["default"])(); +}); + +/***/ }), + +/***/ "./src/admin/panes/ProfileConfigurePane.js": +/*!*************************************************!*\ + !*** ./src/admin/panes/ProfileConfigurePane.js ***! + \*************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ProfileConfigurePane; }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var html5sortable_dist_html5sortable_es_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! html5sortable/dist/html5sortable.es.js */ "./node_modules/html5sortable/dist/html5sortable.es.js"); +/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/app */ "flarum/app"); +/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_app__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/helpers/icon */ "flarum/helpers/icon"); +/* harmony import */ var flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/Component */ "flarum/Component"); +/* harmony import */ var flarum_Component__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_Component__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var flarum_components_Select__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/components/Select */ "flarum/components/Select"); +/* harmony import */ var flarum_components_Select__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Select__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var flarum_components_Switch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! flarum/components/Switch */ "flarum/components/Switch"); +/* harmony import */ var flarum_components_Switch__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Switch__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! flarum/components/Button */ "flarum/components/Button"); +/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Button__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var flarum_utils_saveSettings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! flarum/utils/saveSettings */ "flarum/utils/saveSettings"); +/* harmony import */ var flarum_utils_saveSettings__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_saveSettings__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var _components_SelectFieldOptionEditor__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../components/SelectFieldOptionEditor */ "./src/admin/components/SelectFieldOptionEditor.js"); + + + + + + + + + + +/* global m */ + +var ProfileConfigurePane = /*#__PURE__*/function (_Component) { + Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ProfileConfigurePane, _Component); + + function ProfileConfigurePane() { + return _Component.apply(this, arguments) || this; + } + + var _proto = ProfileConfigurePane.prototype; + + /** + * Sets up the component. + */ + _proto.init = function init() { + this.resetNew(); + this.loading = false; + this.existing = []; + this.loadExisting(); + this.enforceProfileCompletion = m.prop(flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.data.settings['masquerade.force-profile-completion'] == 1); + } + /** + * Configures the component. + */ + ; + + _proto.config = function config() { + var _this = this; + + Object(html5sortable_dist_html5sortable_es_js__WEBPACK_IMPORTED_MODULE_1__["default"])(this.element.querySelector('.js-sortable-fields'), { + handle: 'legend' + })[0].addEventListener('sortupdate', function () { + var sorting = _this.$('.js-sortable-fields > .Field').map(function () { + return $(this).data('id'); + }).get(); + + _this.updateSort(sorting); + }); + } + /** + * Generates the component view. + * + * @returns {*} + */ + ; + + _proto.view = function view() { + var _this2 = this; + + return m('.ProfileConfigurePane', m('.container', [m('h1', flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.title')), m('h2', flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.general-options')), m('form', [m('.Form-group', flarum_components_Switch__WEBPACK_IMPORTED_MODULE_6___default.a.component({ + state: this.enforceProfileCompletion(), + onchange: this.updateSetting.bind(this, this.enforceProfileCompletion, 'masquerade.force-profile-completion'), + children: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.force-user-to-completion') + }))]), m('h2', flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.title')), m('form.js-sortable-fields', this.existing.map(function (field) { + // Build array of fields to show. + return _this2.addField(field); + })), m('form', { + onsubmit: this.submitAddField.bind(this) + }, [this.addField(this["new"])])])); + } + /** + * Updates setting in database. + * @param prop + * @param setting + * @param value + */ + ; + + _proto.updateSetting = function updateSetting(prop, setting, value) { + var _saveSettings; + + flarum_utils_saveSettings__WEBPACK_IMPORTED_MODULE_8___default()((_saveSettings = {}, _saveSettings[setting] = value, _saveSettings)); + prop(value); + } + /** + * Creates a field in the DOM. + * + * @param field + * @returns {*} + */ + ; + + _proto.addField = function addField(field) { + var _this3 = this; + + var exists = field.id(); + return m('fieldset.Field', { + 'data-id': field.id(), + key: field.id() + }, [m('legend', [exists ? [flarum_components_Button__WEBPACK_IMPORTED_MODULE_7___default.a.component({ + className: 'Button Button--icon Button--danger', + icon: "fas fa-trash", + onclick: this.deleteField.bind(this, field) + }), ' '] : null, m('span.Field-toggle', { + onclick: function onclick(e) { + return _this3.toggleField(e); + } + }, [flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.' + (exists ? 'edit' : 'add'), { + field: field.name() + }), ' ', flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_3___default()('fas fa-caret-down')])]), m('.Field-body', [m('.Form-group', [m('label', flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.name')), m('input.FormControl', { + value: field.name(), + oninput: m.withAttr('value', this.updateExistingFieldInput.bind(this, 'name', field)) + }), m('span.helpText', flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.name-help'))]), m('.Form-group', [m('label', flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.description')), m('input.FormControl', { + value: field.description(), + oninput: m.withAttr('value', this.updateExistingFieldInput.bind(this, 'description', field)) + }), m('span.helpText', flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.description-help'))]), m('.Form-group', [m('label', flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.icon')), m('input.FormControl', { + value: field.icon(), + oninput: m.withAttr('value', this.updateExistingFieldInput.bind(this, 'icon', field)) + }), m('span.helpText', flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.icon-help', { + a: m("a", { + href: "https://fontawesome.com/icons?m=free", + target: "_blank" + }) + }))]), m('.Form-group', flarum_components_Switch__WEBPACK_IMPORTED_MODULE_6___default.a.component({ + state: field.on_bio(), + onchange: this.updateExistingFieldInput.bind(this, 'on_bio', field), + children: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.on_bio') + })), m('.Form-group', flarum_components_Switch__WEBPACK_IMPORTED_MODULE_6___default.a.component({ + state: field.required(), + onchange: this.updateExistingFieldInput.bind(this, 'required', field), + children: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.required') + })), m('.Form-group', [m('label', flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.type')), flarum_components_Select__WEBPACK_IMPORTED_MODULE_5___default.a.component({ + onchange: function onchange(value) { + if (value === 'null') { + value = null; + } + + _this3.updateExistingFieldInput('type', field, value); + }, + options: this.availableTypes(), + value: field.type() + })]), field.type() === 'select' ? _components_SelectFieldOptionEditor__WEBPACK_IMPORTED_MODULE_9__["default"].component({ + onchange: function onchange(value) { + _this3.updateExistingFieldInput('validation', field, value); + }, + value: field.validation() + }) : null, field.type() === null ? m('.Form-group', [m('label', flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.validation')), m('input.FormControl', { + value: field.validation(), + oninput: m.withAttr('value', this.updateExistingFieldInput.bind(this, 'validation', field)) + }), m('span.helpText', flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.fields.validation-help', { + a: m("a", { + href: "https://laravel.com/docs/5.2/validation#available-validation-rules", + target: "_blank" + }) + }))]) : null, m('.Form-group', m('.ButtonGroup', [flarum_components_Button__WEBPACK_IMPORTED_MODULE_7___default.a.component({ + type: 'submit', + className: 'Button Button--primary', + children: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.buttons.' + (exists ? 'edit' : 'add') + '-field'), + loading: this.loading, + disabled: !this.readyToAdd(field), + onclick: this.updateExistingField.bind(this, field) + }), exists ? flarum_components_Button__WEBPACK_IMPORTED_MODULE_7___default.a.component({ + type: 'submit', + className: 'Button Button--danger', + children: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.buttons.delete-field'), + loading: this.loading, + onclick: this.deleteField.bind(this, field) + }) : null]))])]); + }; + + _proto.updateExistingFieldInput = function updateExistingFieldInput(what, field, value) { + var exists = field.id(); + + if (exists) { + var _field$pushAttributes; + + field.pushAttributes((_field$pushAttributes = {}, _field$pushAttributes[what] = value, _field$pushAttributes)); + } else { + field[what](value); + } + } + /** + * Sorts the fields. + * + * @param {Array} sorting + */ + ; + + _proto.updateSort = function updateSort(sorting) { + var data = { + sort: sorting + }; + flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.request({ + method: 'POST', + url: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.forum.attribute('apiUrl') + '/masquerade/fields/order', + data: data + }).then(this.requestSuccess.bind(this)); + } + /** + * Opens and closes field configuration sets. + * + * @param e + */ + ; + + _proto.toggleField = function toggleField(e) { + $(e.target).parents('.Field').toggleClass('active'); + } + /** + * Deletes a field configuration set. + * + * @param field + */ + ; + + _proto.deleteField = function deleteField(field) { + flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.request({ + method: 'DELETE', + url: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.forum.attribute('apiUrl') + '/masquerade/fields/' + field.id() + }).then(this.requestSuccess.bind(this)); + } + /** + * Saves the settings to the database and redraw the page + * + * @param e + */ + ; + + _proto.submitAddField = function submitAddField(e) { + e.preventDefault(); + var data = this["new"]; + flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.request({ + method: 'POST', + url: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.forum.attribute('apiUrl') + '/masquerade/fields', + data: data + }).then(this.requestSuccess.bind(this)); + this.resetNew(); + m.redraw(); + } + /** + * Updates the value of one field. + * + * @param field + */ + ; + + _proto.updateExistingField = function updateExistingField(field) { + if (!field.id()) return; + var data = field.data; + flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.request({ + // We use PATCH and not PUT because the endpoint allows filling only some of the fields + // (even if here we always pass all the attributes) + method: 'PATCH', + url: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.forum.attribute('apiUrl') + '/masquerade/fields/' + field.id(), + data: data + }).then(this.requestSuccess.bind(this)); + } + /** + * Parses result to update DOM. + * + * @param result + */ + ; + + _proto.requestSuccess = function requestSuccess(result) { + var model = flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.store.pushPayload(result); // In case we've updated/deleted one instance delete it if necessary. + + if (!(model instanceof Array) && model.deleted_at()) { + flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.store.remove(model); + } + + this.existing = flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.store.all('masquerade-field'); // Update order in case the store order doesn't reflect the true ordering + + this.existing.sort(function (a, b) { + if (a.sort() < b.sort()) return -1; + if (a.sort() > b.sort()) return 1; + return 0; + }); + this.loading = false; + m.redraw(); + } + /** + * Retrieves list of fields. + */ + ; + + _proto.loadExisting = function loadExisting() { + this.loading = true; + return flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.request({ + method: 'GET', + url: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.forum.attribute('apiUrl') + '/masquerade/fields' + }).then(this.requestSuccess.bind(this)); + } + /** + * Resets the new field. + */ + ; + + _proto.resetNew = function resetNew() { + this["new"] = { + // id() does not hold any value, but it's necessary to keep it because it's called to make the difference + // between the simple object holding the new field's value and the model holding an existing field's value + 'id': m.prop(), + 'name': m.prop(''), + 'description': m.prop(''), + 'prefix': m.prop(''), + 'icon': m.prop(''), + 'required': m.prop(false), + 'on_bio': m.prop(false), + 'type': m.prop(null), + 'validation': m.prop('') + }; + } + /** + * Checks whether creation field is completed. + * + * @returns boolean + */ + ; + + _proto.readyToAdd = function readyToAdd(field) { + if (field.name()) { + return true; + } + + return false; + } + /** + * List of field types availables + * @returns {Array} + */ + ; + + _proto.availableTypes = function availableTypes() { + return { + url: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.types.url'), + email: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.types.email'), + "boolean": flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.types.boolean'), + select: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.types.select'), + text: flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.types.text'), + "null": flarum_app__WEBPACK_IMPORTED_MODULE_2___default.a.translator.trans('fof-masquerade.admin.types.advanced') + }; + }; + + return ProfileConfigurePane; +}(flarum_Component__WEBPACK_IMPORTED_MODULE_4___default.a); + + + +/***/ }), + +/***/ "./src/lib/models/Field.js": +/*!*********************************!*\ + !*** ./src/lib/models/Field.js ***! + \*********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Field; }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/Model */ "flarum/Model"); +/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_Model__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_utils_mixin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/utils/mixin */ "flarum/utils/mixin"); +/* harmony import */ var flarum_utils_mixin__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_mixin__WEBPACK_IMPORTED_MODULE_2__); + + + + +var Field = /*#__PURE__*/function (_mixin) { + Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(Field, _mixin); + + function Field() { + return _mixin.apply(this, arguments) || this; + } + + var _proto = Field.prototype; + + /** + * Construct a path to the API endpoint for this resource. + * + * @return {String} + * @protected + */ + _proto.apiEndpoint = function apiEndpoint() { + return '/masquerade/fields' + (this.exists ? '/' + this.data.id : ''); + }; + + return Field; +}(flarum_utils_mixin__WEBPACK_IMPORTED_MODULE_2___default()(flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a, { + name: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('name'), + description: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('description'), + type: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('type'), + validation: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('validation'), + required: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('required'), + prefix: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('prefix'), + icon: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('icon'), + sort: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('sort'), + deleted_at: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('deleted_at', flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.transformDate), + answer: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.hasOne('answer'), + on_bio: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('on_bio') +})); + + + +/***/ }), + +/***/ "flarum/Component": +/*!**************************************************!*\ + !*** external "flarum.core.compat['Component']" ***! + \**************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['Component']; + +/***/ }), + +/***/ "flarum/Model": +/*!**********************************************!*\ + !*** external "flarum.core.compat['Model']" ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['Model']; + +/***/ }), + +/***/ "flarum/app": +/*!********************************************!*\ + !*** external "flarum.core.compat['app']" ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['app']; + +/***/ }), + +/***/ "flarum/components/AdminLinkButton": +/*!*******************************************************************!*\ + !*** external "flarum.core.compat['components/AdminLinkButton']" ***! + \*******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['components/AdminLinkButton']; + +/***/ }), + +/***/ "flarum/components/AdminNav": +/*!************************************************************!*\ + !*** external "flarum.core.compat['components/AdminNav']" ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['components/AdminNav']; + +/***/ }), + +/***/ "flarum/components/Button": +/*!**********************************************************!*\ + !*** external "flarum.core.compat['components/Button']" ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['components/Button']; + +/***/ }), + +/***/ "flarum/components/PermissionGrid": +/*!******************************************************************!*\ + !*** external "flarum.core.compat['components/PermissionGrid']" ***! + \******************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['components/PermissionGrid']; + +/***/ }), + +/***/ "flarum/components/Select": +/*!**********************************************************!*\ + !*** external "flarum.core.compat['components/Select']" ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['components/Select']; + +/***/ }), + +/***/ "flarum/components/Switch": +/*!**********************************************************!*\ + !*** external "flarum.core.compat['components/Switch']" ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['components/Switch']; + +/***/ }), + +/***/ "flarum/extend": +/*!***********************************************!*\ + !*** external "flarum.core.compat['extend']" ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['extend']; + +/***/ }), + +/***/ "flarum/helpers/icon": +/*!*****************************************************!*\ + !*** external "flarum.core.compat['helpers/icon']" ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['helpers/icon']; + +/***/ }), + +/***/ "flarum/utils/mixin": +/*!****************************************************!*\ + !*** external "flarum.core.compat['utils/mixin']" ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['utils/mixin']; + +/***/ }), + +/***/ "flarum/utils/saveSettings": +/*!***********************************************************!*\ + !*** external "flarum.core.compat['utils/saveSettings']" ***! + \***********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['utils/saveSettings']; + +/***/ }) + +/******/ }); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/js/dist/admin.js.map b/js/dist/admin.js.map index d1d925a..0b546e8 100644 --- a/js/dist/admin.js.map +++ b/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://@fof/masquerade/webpack/bootstrap","webpack://@fof/masquerade/external \"flarum.core.compat['app']\"","webpack://@fof/masquerade/external \"flarum.core.compat['Model']\"","webpack://@fof/masquerade/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@fof/masquerade/external \"flarum.core.compat['helpers/icon']\"","webpack://@fof/masquerade/external \"flarum.core.compat['extend']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/Button']\"","webpack://@fof/masquerade/external \"flarum.core.compat['utils/mixin']\"","webpack://@fof/masquerade/./src/lib/models/Field.js","webpack://@fof/masquerade/external \"flarum.core.compat['components/Select']\"","webpack://@fof/masquerade/external \"flarum.core.compat['Component']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/Switch']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/PermissionGrid']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/AdminNav']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/AdminLinkButton']\"","webpack://@fof/masquerade/external \"flarum.core.compat['utils/saveSettings']\"","webpack://@fof/masquerade/./src/admin/components/SelectFieldOptionEditor.js","webpack://@fof/masquerade/./src/admin/panes/ProfileConfigurePane.js","webpack://@fof/masquerade/./src/admin/addProfileConfigurePane.js","webpack://@fof/masquerade/./src/admin/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","_inheritsLoose","subClass","superClass","constructor","__proto__","__webpack_exports__","Field","apiEndpoint","this","exists","data","id","mixin","Model","attribute","description","type","validation","required","prefix","icon","sort","deleted_at","transformDate","answer","hasOne","on_bio","SelectFieldOptionEditor","init","newOption","prop","view","_this","app","translator","trans","options","map","option","optionIndex","oninput","withAttr","updateOption","onclick","moveOption","deleteOption","onchange","placeholder","addOption","updateRules","props","join","rules","split","forEach","rule","parts","index","moveIndex","newIndex","length","move","splice","push","Component","ProfileConfigurePane","resetNew","loading","existing","loadExisting","enforceProfileCompletion","settings","config","$","sortable","cancel","on","e","ui","sorting","updateSort","_this2","Switch","component","state","updateSetting","children","field","addField","onsubmit","submitAddField","setting","_saveSettings","saveSettings","_this3","data-id","Button","className","deleteField","toggleField","updateExistingFieldInput","a","href","target","Select","availableTypes","disabled","readyToAdd","updateExistingField","what","_field$pushAttributes","pushAttributes","request","method","url","forum","then","requestSuccess","parents","toggleClass","preventDefault","redraw","result","model","store","pushPayload","Array","remove","all","b","email","boolean","select","null","addProfileConfigurePane","routes","path","extensionSettings","route","extend","AdminNav","items","add","AdminLinkButton","initializers","models","PermissionGrid","label","permission","allowGuest"],"mappings":"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","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 20);\n","module.exports = flarum.core.compat['app'];","module.exports = flarum.core.compat['Model'];","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","module.exports = flarum.core.compat['helpers/icon'];","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['components/Button'];","module.exports = flarum.core.compat['utils/mixin'];","import Model from 'flarum/Model';\nimport mixin from 'flarum/utils/mixin';\n\nexport default class Field extends mixin(Model, {\n name: Model.attribute('name'),\n description: Model.attribute('description'),\n type: Model.attribute('type'),\n validation: Model.attribute('validation'),\n required: Model.attribute('required'),\n prefix: Model.attribute('prefix'),\n icon: Model.attribute('icon'),\n sort: Model.attribute('sort'),\n deleted_at: Model.attribute('deleted_at', Model.transformDate),\n answer: Model.hasOne('answer'),\n on_bio: Model.attribute('on_bio')\n}) {\n /**\n * Construct a path to the API endpoint for this resource.\n *\n * @return {String}\n * @protected\n */\n apiEndpoint() {\n return '/masquerade/fields' + (this.exists ? '/' + this.data.id : '');\n }\n}\n","module.exports = flarum.core.compat['components/Select'];","module.exports = flarum.core.compat['Component'];","module.exports = flarum.core.compat['components/Switch'];","module.exports = flarum.core.compat['components/PermissionGrid'];","module.exports = flarum.core.compat['components/AdminNav'];","module.exports = flarum.core.compat['components/AdminLinkButton'];","module.exports = flarum.core.compat['utils/saveSettings'];","import app from 'flarum/app';\nimport Component from 'flarum/Component';\nimport icon from 'flarum/helpers/icon';\n\n/* global m */\n\nexport default class SelectFieldOptionEditor extends Component {\n init() {\n this.newOption = m.prop('');\n }\n\n view() {\n return m('.Form-group', [\n m('label', app.translator.trans('fof-masquerade.admin.fields.options')),\n m('table', m('tbody', this.options().map((option, optionIndex) => m('tr', [\n m('td', m('input[type=text].FormControl', {\n oninput: m.withAttr('value', value => {\n this.updateOption(optionIndex, value);\n }),\n value: option,\n })),\n m('td', m('button.Button', {\n onclick: () => {\n this.moveOption(optionIndex, -1);\n },\n }, icon('fas fa-chevron-up'))),\n m('td', m('button.Button', {\n onclick: () => {\n this.moveOption(optionIndex, 1);\n },\n }, icon('fas fa-chevron-down'))),\n m('td', m('button.Button.Button--danger', {\n onclick: () => {\n this.deleteOption(optionIndex);\n },\n }, icon('fas fa-close'))),\n ])))),\n m('.helpText', app.translator.trans('fof-masquerade.admin.fields.option-comma-warning')),\n m('table', m('tbody'), m('tr', [\n m('td', m('input[type=text].FormControl', {\n onchange: m.withAttr('value', this.newOption),\n value: this.newOption(),\n placeholder: app.translator.trans('fof-masquerade.admin.fields.option-new'),\n })),\n m('td', m('button.Button.Button--primary', {\n onclick: () => {\n this.addOption();\n },\n }, icon('fas fa-plus'))),\n ])),\n ]);\n }\n\n updateRules(options) {\n // We ignore other existing rules, they would probably be leftovers from another field type when changing types\n this.props.onchange('in:' + options.join(','));\n }\n\n options() {\n const rules = this.props.value.split('|');\n\n let options = [];\n\n rules.forEach(rule => {\n const parts = rule.split(':', 2);\n\n if (parts[0] === 'in') {\n options = parts[1].split(',');\n }\n });\n\n return options;\n }\n\n updateOption(index, value) {\n let options = this.options();\n\n options[index] = value;\n\n this.updateRules(options);\n }\n\n moveOption(index, moveIndex) {\n let options = this.options();\n\n const newIndex = index + moveIndex;\n\n if (newIndex < 0 || newIndex > options.length - 1) {\n return;\n }\n\n const move = options.splice(index, 1);\n\n options.splice(newIndex, 0, move[0]);\n\n this.updateRules(options);\n }\n\n deleteOption(index) {\n let options = this.options();\n\n options.splice(index, 1);\n\n this.updateRules(options);\n }\n\n addOption() {\n if (this.newOption() === '') {\n return;\n }\n\n let options = this.options();\n\n options.push(this.newOption());\n\n this.newOption('');\n\n this.updateRules(options);\n }\n}\n","import app from 'flarum/app';\nimport icon from 'flarum/helpers/icon';\nimport Component from 'flarum/Component';\nimport Select from 'flarum/components/Select';\nimport Switch from 'flarum/components/Switch';\nimport Button from 'flarum/components/Button';\nimport saveSettings from 'flarum/utils/saveSettings';\nimport SelectFieldOptionEditor from '../components/SelectFieldOptionEditor';\n\n/* global m */\n\nexport default class ProfileConfigurePane extends Component {\n\n /**\n * Sets up the component.\n */\n init() {\n this.resetNew();\n this.loading = false;\n this.existing = [];\n this.loadExisting();\n this.enforceProfileCompletion = m.prop(app.data.settings['masquerade.force-profile-completion'] == 1);\n }\n\n /**\n * Configures the component.\n */\n config() {\n this.$('.js-sortable-fields')\n .sortable({\n cancel: '',\n })\n .on('sortupdate', (e, ui) => {\n const sorting = this.$('.js-sortable-fields > .Field')\n .map(function () {\n return $(this).data('id');\n })\n .get();\n\n this.updateSort(sorting);\n });\n }\n\n /**\n * Generates the component view.\n *\n * @returns {*}\n */\n view() {\n return m('.ProfileConfigurePane', m('.container', [\n m('h1', app.translator.trans('fof-masquerade.admin.title')),\n m('h2', app.translator.trans('fof-masquerade.admin.general-options')),\n m('form', [\n m('.Form-group', Switch.component({\n state: this.enforceProfileCompletion(),\n onchange: this.updateSetting.bind(this, this.enforceProfileCompletion, 'masquerade.force-profile-completion'),\n children: app.translator.trans('fof-masquerade.admin.fields.force-user-to-completion'),\n })),\n ]),\n m('h2', app.translator.trans('fof-masquerade.admin.fields.title')),\n m('form.js-sortable-fields', this.existing.map(field => {\n // Build array of fields to show.\n return this.addField(field);\n })),\n m('form', {\n onsubmit: this.submitAddField.bind(this),\n }, [\n this.addField(this.new),\n ]),\n ]));\n }\n\n /**\n * Updates setting in database.\n * @param prop\n * @param setting\n * @param value\n */\n updateSetting(prop, setting, value) {\n saveSettings({\n [setting]: value,\n });\n\n prop(value);\n }\n\n /**\n * Creates a field in the DOM.\n *\n * @param field\n * @returns {*}\n */\n addField(field) {\n let exists = field.id();\n\n return m('fieldset.Field', {\n 'data-id': field.id(),\n key: field.id(),\n }, [\n m('legend', [\n exists ? [Button.component({\n className: 'Button Button--icon Button--danger',\n icon: \"fas fa-trash\",\n onclick: this.deleteField.bind(this, field),\n }), ' '] : null,\n m('span.Field-toggle', {\n onclick: (e) => this.toggleField(e),\n }, [\n app.translator.trans('fof-masquerade.admin.fields.' + (exists ? 'edit' : 'add'), {\n field: field.name(),\n }),\n ' ',\n icon('fas fa-caret-down'),\n ]),\n ]),\n m('.Field-body', [\n m('.Form-group', [\n m('label', app.translator.trans('fof-masquerade.admin.fields.name')),\n m('input.FormControl', {\n value: field.name(),\n oninput: m.withAttr('value', this.updateExistingFieldInput.bind(this, 'name', field)),\n }),\n m('span.helpText', app.translator.trans('fof-masquerade.admin.fields.name-help')),\n ]),\n m('.Form-group', [\n m('label', app.translator.trans('fof-masquerade.admin.fields.description')),\n m('input.FormControl', {\n value: field.description(),\n oninput: m.withAttr('value', this.updateExistingFieldInput.bind(this, 'description', field)),\n }),\n m('span.helpText', app.translator.trans('fof-masquerade.admin.fields.description-help')),\n ]),\n m('.Form-group', [\n m('label', app.translator.trans('fof-masquerade.admin.fields.icon')),\n m('input.FormControl', {\n value: field.icon(),\n oninput: m.withAttr('value', this.updateExistingFieldInput.bind(this, 'icon', field)),\n }),\n m('span.helpText', app.translator.trans('fof-masquerade.admin.fields.icon-help', {\n a: ,\n })),\n ]),\n m('.Form-group', Switch.component({\n state: field.on_bio(),\n onchange: this.updateExistingFieldInput.bind(this, 'on_bio', field),\n children: app.translator.trans('fof-masquerade.admin.fields.on_bio'),\n })),\n m('.Form-group', Switch.component({\n state: field.required(),\n onchange: this.updateExistingFieldInput.bind(this, 'required', field),\n children: app.translator.trans('fof-masquerade.admin.fields.required'),\n })),\n m('.Form-group', [\n m('label', app.translator.trans('fof-masquerade.admin.fields.type')),\n Select.component({\n onchange: value => {\n if (value === 'null') {\n value = null;\n }\n\n this.updateExistingFieldInput('type', field, value);\n },\n options: this.availableTypes(),\n value: field.type(),\n }),\n ]),\n (field.type() === 'select' ? SelectFieldOptionEditor.component({\n onchange: value => {\n this.updateExistingFieldInput('validation', field, value);\n },\n value: field.validation(),\n }) : null),\n (field.type() === null ? m('.Form-group', [\n m('label', app.translator.trans('fof-masquerade.admin.fields.validation')),\n m('input.FormControl', {\n value: field.validation(),\n oninput: m.withAttr('value', this.updateExistingFieldInput.bind(this, 'validation', field)),\n }),\n m('span.helpText', app.translator.trans('fof-masquerade.admin.fields.validation-help', {\n a: ,\n })),\n ]) : null),\n m('.Form-group', m('.ButtonGroup', [\n Button.component({\n type: 'submit',\n className: 'Button Button--primary',\n children: app.translator.trans('fof-masquerade.admin.buttons.' + (exists ? 'edit' : 'add') + '-field'),\n loading: this.loading,\n disabled: !this.readyToAdd(field),\n onclick: this.updateExistingField.bind(this, field)\n }),\n (exists ? Button.component({\n type: 'submit',\n className: 'Button Button--danger',\n children: app.translator.trans('fof-masquerade.admin.buttons.delete-field'),\n loading: this.loading,\n onclick: this.deleteField.bind(this, field),\n }) : null),\n ])),\n ]),\n ]);\n }\n\n updateExistingFieldInput(what, field, value) {\n let exists = field.id();\n\n if (exists) {\n field.pushAttributes({\n [what]: value\n })\n } else {\n field[what](value);\n }\n }\n\n /**\n * Sorts the fields.\n *\n * @param {Array} sorting\n */\n updateSort(sorting) {\n let data = {\n sort: sorting\n };\n\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/masquerade/fields/order',\n data\n }).then(\n this.requestSuccess.bind(this)\n );\n }\n\n /**\n * Opens and closes field configuration sets.\n *\n * @param e\n */\n toggleField(e) {\n $(e.target).parents('.Field').toggleClass('active');\n }\n\n /**\n * Deletes a field configuration set.\n *\n * @param field\n */\n deleteField(field) {\n app.request({\n method: 'DELETE',\n url: app.forum.attribute('apiUrl') + '/masquerade/fields/' + field.id(),\n }).then(\n this.requestSuccess.bind(this)\n );\n }\n\n /**\n * Saves the settings to the database and redraw the page\n *\n * @param e\n */\n submitAddField(e) {\n e.preventDefault();\n\n let data = this.new;\n\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/masquerade/fields',\n data,\n }).then(\n this.requestSuccess.bind(this)\n );\n\n this.resetNew();\n\n m.redraw();\n }\n\n /**\n * Updates the value of one field.\n *\n * @param field\n */\n updateExistingField(field) {\n if (!field.id()) return;\n\n let data = field.data;\n\n app.request({\n // We use PATCH and not PUT because the endpoint allows filling only some of the fields\n // (even if here we always pass all the attributes)\n method: 'PATCH',\n url: app.forum.attribute('apiUrl') + '/masquerade/fields/' + field.id(),\n data,\n }).then(\n this.requestSuccess.bind(this)\n );\n }\n\n /**\n * Parses result to update DOM.\n *\n * @param result\n */\n requestSuccess(result) {\n let model = app.store.pushPayload(result);\n\n // In case we've updated/deleted one instance delete it if necessary.\n if (!(model instanceof Array) && model.deleted_at()) {\n app.store.remove(model);\n }\n\n this.existing = app.store.all('masquerade-field');\n\n // Update order in case the store order doesn't reflect the true ordering\n this.existing.sort((a, b) => {\n if (a.sort() < b.sort()) return -1;\n if (a.sort() > b.sort()) return 1;\n return 0;\n });\n\n this.loading = false;\n m.redraw()\n }\n\n /**\n * Retrieves list of fields.\n */\n loadExisting() {\n this.loading = true;\n\n return app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/masquerade/fields',\n }).then(\n this.requestSuccess.bind(this)\n );\n }\n\n /**\n * Resets the new field.\n */\n resetNew() {\n this.new = {\n // id() does not hold any value, but it's necessary to keep it because it's called to make the difference\n // between the simple object holding the new field's value and the model holding an existing field's value\n 'id': m.prop(),\n 'name': m.prop(''),\n 'description': m.prop(''),\n 'prefix': m.prop(''),\n 'icon': m.prop(''),\n 'required': m.prop(false),\n 'on_bio': m.prop(false),\n 'type': m.prop(null),\n 'validation': m.prop(''),\n };\n }\n\n /**\n * Checks whether creation field is completed.\n *\n * @returns boolean\n */\n readyToAdd(field) {\n if (field.name()) {\n return true;\n }\n\n return false;\n }\n\n /**\n * List of field types availables\n * @returns {Array}\n */\n availableTypes() {\n return {\n url: app.translator.trans('fof-masquerade.admin.types.url'),\n email: app.translator.trans('fof-masquerade.admin.types.email'),\n boolean: app.translator.trans('fof-masquerade.admin.types.boolean'),\n select: app.translator.trans('fof-masquerade.admin.types.select'),\n null: app.translator.trans('fof-masquerade.admin.types.advanced'),\n };\n }\n}\n","import {extend} from \"flarum/extend\";\nimport AdminNav from \"flarum/components/AdminNav\";\nimport AdminLinkButton from \"flarum/components/AdminLinkButton\";\nimport ProfileConfigurePane from './panes/ProfileConfigurePane';\n\nexport default function () {\n // create the route\n app.routes['fof-masquerade-configure-profile'] = {path: '/fof/masquerade/configure', component: ProfileConfigurePane.component()};\n\n // bind the route we created to the three dots settings button\n app.extensionSettings['fof-masquerade'] = () => m.route(app.route('fof-masquerade-configure-profile'));\n\n extend(AdminNav.prototype, 'items', items => {\n // add the Image Upload tab to the admin navigation menu\n items.add('fof-masquerade-configure-profile', AdminLinkButton.component({\n href: app.route('fof-masquerade-configure-profile'),\n icon: 'far fa-id-card',\n children: 'Masquerade',\n description: app.translator.trans('fof-masquerade.admin.menu.description')\n }));\n });\n}\n","import {extend} from \"flarum/extend\";\nimport app from \"flarum/app\";\nimport PermissionGrid from \"flarum/components/PermissionGrid\";\nimport Field from \"./../lib/models/Field\";\nimport addProfileConfigurePane from './addProfileConfigurePane';\n\napp.initializers.add('fof-masquerade', app => {\n app.store.models['masquerade-field'] = Field;\n\n // add the permission option for viewing a masquerade profile\n extend(PermissionGrid.prototype, 'viewItems', items => {\n items.add('masquerade-view-profile', {\n icon: 'far fa-id-card',\n label: app.translator.trans('fof-masquerade.admin.permissions.view-profile'),\n permission: 'fof.masquerade.view-profile',\n allowGuest: true\n });\n });\n // add the permission option for creating a masquerade profile\n extend(PermissionGrid.prototype, 'startItems', items => {\n items.add('masquerade-have-profile', {\n icon: 'far fa-id-card',\n label: app.translator.trans('fof-masquerade.admin.permissions.have-profile'),\n permission: 'fof.masquerade.have-profile'\n });\n });\n\n addProfileConfigurePane();\n});\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://@fof/masquerade/webpack/bootstrap","webpack://@fof/masquerade/./admin.js","webpack://@fof/masquerade/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@fof/masquerade/./node_modules/html5sortable/dist/html5sortable.es.js","webpack://@fof/masquerade/./src/admin/addProfileConfigurePane.js","webpack://@fof/masquerade/./src/admin/components/SelectFieldOptionEditor.js","webpack://@fof/masquerade/./src/admin/index.js","webpack://@fof/masquerade/./src/admin/panes/ProfileConfigurePane.js","webpack://@fof/masquerade/./src/lib/models/Field.js","webpack://@fof/masquerade/external \"flarum.core.compat['Component']\"","webpack://@fof/masquerade/external \"flarum.core.compat['Model']\"","webpack://@fof/masquerade/external \"flarum.core.compat['app']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/AdminLinkButton']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/AdminNav']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/Button']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/PermissionGrid']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/Select']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/Switch']\"","webpack://@fof/masquerade/external \"flarum.core.compat['extend']\"","webpack://@fof/masquerade/external \"flarum.core.compat['helpers/icon']\"","webpack://@fof/masquerade/external \"flarum.core.compat['utils/mixin']\"","webpack://@fof/masquerade/external \"flarum.core.compat['utils/saveSettings']\""],"names":["app","routes","path","component","ProfileConfigurePane","extensionSettings","m","route","extend","AdminNav","prototype","items","add","AdminLinkButton","href","icon","children","description","translator","trans","SelectFieldOptionEditor","init","newOption","prop","view","options","map","option","optionIndex","oninput","withAttr","value","updateOption","onclick","moveOption","deleteOption","onchange","placeholder","addOption","updateRules","props","join","rules","split","forEach","rule","parts","index","moveIndex","newIndex","length","move","splice","push","Component","initializers","store","models","Field","PermissionGrid","label","permission","allowGuest","addProfileConfigurePane","resetNew","loading","existing","loadExisting","enforceProfileCompletion","data","settings","config","sortable","element","querySelector","handle","addEventListener","sorting","$","get","updateSort","Switch","state","updateSetting","bind","field","addField","onsubmit","submitAddField","setting","saveSettings","exists","id","key","Button","className","deleteField","e","toggleField","name","updateExistingFieldInput","a","on_bio","required","Select","availableTypes","type","validation","disabled","readyToAdd","updateExistingField","what","pushAttributes","sort","request","method","url","forum","attribute","then","requestSuccess","target","parents","toggleClass","preventDefault","redraw","result","model","pushPayload","Array","deleted_at","remove","all","b","email","select","text","apiEndpoint","mixin","Model","prefix","transformDate","answer","hasOne"],"mappings":";;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;AClFA;AAAA;AAAA,wC;;;;;;;;;;;;ACAA;AAAA;AAAe;AACf;AACA;AACA;AACA,C;;;;;;;;;;;;ACJA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB,WAAW,IAAI;AACf,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,8BAA8B;AACzC,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,sDAAsD,EAAE;AAC7G,CAAC;;AAED;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA,iCAAiC;AACjC,sCAAsC;AACtC,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,mBAAmB,YAAY;AAC/B,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,eAAe,OAAO;AACtB,eAAe,IAAI;AACnB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,WAAW,kBAAkB;AAC7B,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,+BAA+B;AAC1C,WAAW,OAAO;AAClB;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,+BAA+B;AAC1C,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,OAAO;AAClB;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA,0BAA0B,UAAU;AACpC;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,YAAY;AACvB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,YAAY;AACvB;AACA,+CAA+C,8CAA8C;AAC7F;AACA;AACA,WAAW,YAAY;AACvB,WAAW,YAAY;AACvB;AACA,8CAA8C,6CAA6C;;AAE3F;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA,0CAA0C,sEAAsE,uBAAuB,GAAG;AAC1I,+CAA+C,6DAA6D,4BAA4B,GAAG;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,sDAAsD,EAAE;AAC5G;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,iBAAiB;AAC5B,WAAW,OAAO;AAClB;AACA;AACA;AACA,sCAAsC,2CAA2C;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,uCAAuC,oBAAoB,EAAE;AAC7D,CAAC;;AAED;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,uCAAuC,oBAAoB,EAAE;AAC7D,CAAC;;AAED;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,CAAC;;AAED;AACA,WAAW,MAAM;AACjB,aAAa;AACb;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,YAAY;AACvB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,+BAA+B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA,wDAAwD,sBAAsB,EAAE;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,oDAAoD,EAAE;AACnG;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,yBAAyB,EAAE;AACjH,gDAAgD,2CAA2C,EAAE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,gDAAgD,2CAA2C,EAAE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,aAAa;AACb;AACA;AACA,yCAAyC,6BAA6B,EAAE;AACxE;AACA;AACA,yCAAyC,6BAA6B,EAAE;AACxE;AACA,yCAAyC,6BAA6B,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,uCAAuC,EAAE;AACtF;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,6CAA6C,uCAAuC,EAAE;AACtF;AACA;AACA,iBAAiB;AACjB;AACA;AACA,6DAA6D,yBAAyB,EAAE;AACxF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./admin.js\");\n","export * from './src/admin';\n","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","/*\n * HTML5Sortable package\n * https://github.com/lukasoppermann/html5sortable\n *\n * Maintained by Lukas Oppermann \n *\n * Released under the MIT license.\n */\n/**\n * Get or set data on element\n * @param {HTMLElement} element\n * @param {string} key\n * @param {any} value\n * @return {*}\n */\nfunction addData(element, key, value) {\n if (value === undefined) {\n return element && element.h5s && element.h5s.data && element.h5s.data[key];\n }\n else {\n element.h5s = element.h5s || {};\n element.h5s.data = element.h5s.data || {};\n element.h5s.data[key] = value;\n }\n}\n/**\n * Remove data from element\n * @param {HTMLElement} element\n */\nfunction removeData(element) {\n if (element.h5s) {\n delete element.h5s.data;\n }\n}\n\n/* eslint-env browser */\n/**\n * Filter only wanted nodes\n * @param {NodeList|HTMLCollection|Array} nodes\n * @param {String} selector\n * @returns {Array}\n */\nvar _filter = (function (nodes, selector) {\n if (!(nodes instanceof NodeList || nodes instanceof HTMLCollection || nodes instanceof Array)) {\n throw new Error('You must provide a nodeList/HTMLCollection/Array of elements to be filtered.');\n }\n if (typeof selector !== 'string') {\n return Array.from(nodes);\n }\n return Array.from(nodes).filter(function (item) { return item.nodeType === 1 && item.matches(selector); });\n});\n\n/* eslint-env browser */\nvar stores = new Map();\n/**\n * Stores data & configurations per Sortable\n * @param {Object} config\n */\nvar Store = /** @class */ (function () {\n function Store() {\n this._config = new Map(); // eslint-disable-line no-undef\n this._placeholder = undefined; // eslint-disable-line no-undef\n this._data = new Map(); // eslint-disable-line no-undef\n }\n Object.defineProperty(Store.prototype, \"config\", {\n /**\n * get the configuration map of a class instance\n * @method config\n * @return {object}\n */\n get: function () {\n // transform Map to object\n var config = {};\n this._config.forEach(function (value, key) {\n config[key] = value;\n });\n // return object\n return config;\n },\n /**\n * set the configuration of a class instance\n * @method config\n * @param {object} config object of configurations\n */\n set: function (config) {\n if (typeof config !== 'object') {\n throw new Error('You must provide a valid configuration object to the config setter.');\n }\n // combine config with default\n var mergedConfig = Object.assign({}, config);\n // add config to map\n this._config = new Map(Object.entries(mergedConfig));\n },\n enumerable: true,\n configurable: true\n });\n /**\n * set individual configuration of a class instance\n * @method setConfig\n * @param key valid configuration key\n * @param value any value\n * @return void\n */\n Store.prototype.setConfig = function (key, value) {\n if (!this._config.has(key)) {\n throw new Error(\"Trying to set invalid configuration item: \" + key);\n }\n // set config\n this._config.set(key, value);\n };\n /**\n * get an individual configuration of a class instance\n * @method getConfig\n * @param key valid configuration key\n * @return any configuration value\n */\n Store.prototype.getConfig = function (key) {\n if (!this._config.has(key)) {\n throw new Error(\"Invalid configuration item requested: \" + key);\n }\n return this._config.get(key);\n };\n Object.defineProperty(Store.prototype, \"placeholder\", {\n /**\n * get the placeholder for a class instance\n * @method placeholder\n * @return {HTMLElement|null}\n */\n get: function () {\n return this._placeholder;\n },\n /**\n * set the placeholder for a class instance\n * @method placeholder\n * @param {HTMLElement} placeholder\n * @return {void}\n */\n set: function (placeholder) {\n if (!(placeholder instanceof HTMLElement) && placeholder !== null) {\n throw new Error('A placeholder must be an html element or null.');\n }\n this._placeholder = placeholder;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * set an data entry\n * @method setData\n * @param {string} key\n * @param {any} value\n * @return {void}\n */\n Store.prototype.setData = function (key, value) {\n if (typeof key !== 'string') {\n throw new Error('The key must be a string.');\n }\n this._data.set(key, value);\n };\n /**\n * get an data entry\n * @method getData\n * @param {string} key an existing key\n * @return {any}\n */\n Store.prototype.getData = function (key) {\n if (typeof key !== 'string') {\n throw new Error('The key must be a string.');\n }\n return this._data.get(key);\n };\n /**\n * delete an data entry\n * @method deleteData\n * @param {string} key an existing key\n * @return {boolean}\n */\n Store.prototype.deleteData = function (key) {\n if (typeof key !== 'string') {\n throw new Error('The key must be a string.');\n }\n return this._data.delete(key);\n };\n return Store;\n}());\n/**\n * @param {HTMLElement} sortableElement\n * @returns {Class: Store}\n */\nvar store = (function (sortableElement) {\n // if sortableElement is wrong type\n if (!(sortableElement instanceof HTMLElement)) {\n throw new Error('Please provide a sortable to the store function.');\n }\n // create new instance if not avilable\n if (!stores.has(sortableElement)) {\n stores.set(sortableElement, new Store());\n }\n // return instance\n return stores.get(sortableElement);\n});\n\n/**\n * @param {Array|HTMLElement} element\n * @param {Function} callback\n * @param {string} event\n */\nfunction addEventListener(element, eventName, callback) {\n if (element instanceof Array) {\n for (var i = 0; i < element.length; ++i) {\n addEventListener(element[i], eventName, callback);\n }\n return;\n }\n element.addEventListener(eventName, callback);\n store(element).setData(\"event\" + eventName, callback);\n}\n/**\n * @param {Array|HTMLElement} element\n * @param {string} eventName\n */\nfunction removeEventListener(element, eventName) {\n if (element instanceof Array) {\n for (var i = 0; i < element.length; ++i) {\n removeEventListener(element[i], eventName);\n }\n return;\n }\n element.removeEventListener(eventName, store(element).getData(\"event\" + eventName));\n store(element).deleteData(\"event\" + eventName);\n}\n\n/**\n * @param {Array|HTMLElement} element\n * @param {string} attribute\n * @param {string} value\n */\nfunction addAttribute(element, attribute, value) {\n if (element instanceof Array) {\n for (var i = 0; i < element.length; ++i) {\n addAttribute(element[i], attribute, value);\n }\n return;\n }\n element.setAttribute(attribute, value);\n}\n/**\n * @param {Array|HTMLElement} element\n * @param {string} attribute\n */\nfunction removeAttribute(element, attribute) {\n if (element instanceof Array) {\n for (var i = 0; i < element.length; ++i) {\n removeAttribute(element[i], attribute);\n }\n return;\n }\n element.removeAttribute(attribute);\n}\n\n/**\n * @param {HTMLElement} element\n * @returns {Object}\n */\nvar _offset = (function (element) {\n if (!element.parentElement || element.getClientRects().length === 0) {\n throw new Error('target element must be part of the dom');\n }\n var rect = element.getClientRects()[0];\n return {\n left: rect.left + window.pageXOffset,\n right: rect.right + window.pageXOffset,\n top: rect.top + window.pageYOffset,\n bottom: rect.bottom + window.pageYOffset\n };\n});\n\n/**\n * Creates and returns a new debounced version of the passed function which will postpone its execution until after wait milliseconds have elapsed\n * @param {Function} func to debounce\n * @param {number} time to wait before calling function with latest arguments, 0 - no debounce\n * @returns {function} - debounced function\n */\nvar _debounce = (function (func, wait) {\n if (wait === void 0) { wait = 0; }\n var timeout;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n func.apply(void 0, args);\n }, wait);\n };\n});\n\n/* eslint-env browser */\n/**\n * Get position of the element relatively to its sibling elements\n * @param {HTMLElement} element\n * @returns {number}\n */\nvar _index = (function (element, elementList) {\n if (!(element instanceof HTMLElement) || !(elementList instanceof NodeList || elementList instanceof HTMLCollection || elementList instanceof Array)) {\n throw new Error('You must provide an element and a list of elements.');\n }\n return Array.from(elementList).indexOf(element);\n});\n\n/* eslint-env browser */\n/**\n * Test whether element is in DOM\n * @param {HTMLElement} element\n * @returns {boolean}\n */\nvar isInDom = (function (element) {\n if (!(element instanceof HTMLElement)) {\n throw new Error('Element is not a node element.');\n }\n return element.parentNode !== null;\n});\n\n/* eslint-env browser */\n/**\n * Insert node before or after target\n * @param {HTMLElement} referenceNode - reference element\n * @param {HTMLElement} newElement - element to be inserted\n * @param {String} position - insert before or after reference element\n */\nvar insertNode = function (referenceNode, newElement, position) {\n if (!(referenceNode instanceof HTMLElement) || !(referenceNode.parentElement instanceof HTMLElement)) {\n throw new Error('target and element must be a node');\n }\n referenceNode.parentElement.insertBefore(newElement, (position === 'before' ? referenceNode : referenceNode.nextElementSibling));\n};\n/**\n * Insert before target\n * @param {HTMLElement} target\n * @param {HTMLElement} element\n */\nvar insertBefore = function (target, element) { return insertNode(target, element, 'before'); };\n/**\n * Insert after target\n * @param {HTMLElement} target\n * @param {HTMLElement} element\n */\nvar insertAfter = function (target, element) { return insertNode(target, element, 'after'); };\n\n/* eslint-env browser */\n/**\n * Filter only wanted nodes\n * @param {HTMLElement} sortableContainer\n * @param {Function} customSerializer\n * @returns {Array}\n */\nvar _serialize = (function (sortableContainer, customItemSerializer, customContainerSerializer) {\n if (customItemSerializer === void 0) { customItemSerializer = function (serializedItem, sortableContainer) { return serializedItem; }; }\n if (customContainerSerializer === void 0) { customContainerSerializer = function (serializedContainer) { return serializedContainer; }; }\n // check for valid sortableContainer\n if (!(sortableContainer instanceof HTMLElement) || !sortableContainer.isSortable === true) {\n throw new Error('You need to provide a sortableContainer to be serialized.');\n }\n // check for valid serializers\n if (typeof customItemSerializer !== 'function' || typeof customContainerSerializer !== 'function') {\n throw new Error('You need to provide a valid serializer for items and the container.');\n }\n // get options\n var options = addData(sortableContainer, 'opts');\n var item = options.items;\n // serialize container\n var items = _filter(sortableContainer.children, item);\n var serializedItems = items.map(function (item) {\n return {\n parent: sortableContainer,\n node: item,\n html: item.outerHTML,\n index: _index(item, items)\n };\n });\n // serialize container\n var container = {\n node: sortableContainer,\n itemCount: serializedItems.length\n };\n return {\n container: customContainerSerializer(container),\n items: serializedItems.map(function (item) { return customItemSerializer(item, sortableContainer); })\n };\n});\n\n/* eslint-env browser */\n/**\n * create a placeholder element\n * @param {HTMLElement} sortableElement a single sortable\n * @param {string|undefined} placeholder a string representing an html element\n * @param {string} placeholderClasses a string representing the classes that should be added to the placeholder\n */\nvar _makePlaceholder = (function (sortableElement, placeholder, placeholderClass) {\n var _a;\n if (placeholderClass === void 0) { placeholderClass = 'sortable-placeholder'; }\n if (!(sortableElement instanceof HTMLElement)) {\n throw new Error('You must provide a valid element as a sortable.');\n }\n // if placeholder is not an element\n if (!(placeholder instanceof HTMLElement) && placeholder !== undefined) {\n throw new Error('You must provide a valid element as a placeholder or set ot to undefined.');\n }\n // if no placeholder element is given\n if (placeholder === undefined) {\n if (['UL', 'OL'].includes(sortableElement.tagName)) {\n placeholder = document.createElement('li');\n }\n else if (['TABLE', 'TBODY'].includes(sortableElement.tagName)) {\n placeholder = document.createElement('tr');\n // set colspan to always all rows, otherwise the item can only be dropped in first column\n placeholder.innerHTML = '';\n }\n else {\n placeholder = document.createElement('div');\n }\n }\n // add classes to placeholder\n if (typeof placeholderClass === 'string') {\n (_a = placeholder.classList).add.apply(_a, placeholderClass.split(' '));\n }\n return placeholder;\n});\n\n/* eslint-env browser */\n/**\n * Get height of an element including padding\n * @param {HTMLElement} element an dom element\n */\nvar _getElementHeight = (function (element) {\n if (!(element instanceof HTMLElement)) {\n throw new Error('You must provide a valid dom element');\n }\n // get calculated style of element\n var style = window.getComputedStyle(element);\n // pick applicable properties, convert to int and reduce by adding\n return ['height', 'padding-top', 'padding-bottom']\n .map(function (key) {\n var int = parseInt(style.getPropertyValue(key), 10);\n return isNaN(int) ? 0 : int;\n })\n .reduce(function (sum, value) { return sum + value; });\n});\n\n/* eslint-env browser */\n/**\n * Get width of an element including padding\n * @param {HTMLElement} element an dom element\n */\nvar _getElementWidth = (function (element) {\n if (!(element instanceof HTMLElement)) {\n throw new Error('You must provide a valid dom element');\n }\n // get calculated style of element\n var style = window.getComputedStyle(element);\n // pick applicable properties, convert to int and reduce by adding\n return ['width', 'padding-left', 'padding-right']\n .map(function (key) {\n var int = parseInt(style.getPropertyValue(key), 10);\n return isNaN(int) ? 0 : int;\n })\n .reduce(function (sum, value) { return sum + value; });\n});\n\n/* eslint-env browser */\n/**\n * get handle or return item\n * @param {Array} items\n * @param {string} selector\n */\nvar _getHandles = (function (items, selector) {\n if (!(items instanceof Array)) {\n throw new Error('You must provide a Array of HTMLElements to be filtered.');\n }\n if (typeof selector !== 'string') {\n return items;\n }\n return items\n // remove items without handle from array\n .filter(function (item) {\n return item.querySelector(selector) instanceof HTMLElement ||\n (item.shadowRoot && item.shadowRoot.querySelector(selector) instanceof HTMLElement);\n })\n // replace item with handle in array\n .map(function (item) {\n return item.querySelector(selector) || (item.shadowRoot && item.shadowRoot.querySelector(selector));\n });\n});\n\n/**\n * @param {Event} event\n * @returns {HTMLElement}\n */\nvar getEventTarget = (function (event) {\n return (event.composedPath && event.composedPath()[0]) || event.target;\n});\n\n/* eslint-env browser */\n/**\n * defaultDragImage returns the current item as dragged image\n * @param {HTMLElement} draggedElement - the item that the user drags\n * @param {object} elementOffset - an object with the offsets top, left, right & bottom\n * @param {Event} event - the original drag event object\n * @return {object} with element, posX and posY properties\n */\nvar defaultDragImage = function (draggedElement, elementOffset, event) {\n return {\n element: draggedElement,\n posX: event.pageX - elementOffset.left,\n posY: event.pageY - elementOffset.top\n };\n};\n/**\n * attaches an element as the drag image to an event\n * @param {Event} event - the original drag event object\n * @param {HTMLElement} draggedElement - the item that the user drags\n * @param {Function} customDragImage - function to create a custom dragImage\n * @return void\n */\nvar setDragImage = (function (event, draggedElement, customDragImage) {\n // check if event is provided\n if (!(event instanceof Event)) {\n throw new Error('setDragImage requires a DragEvent as the first argument.');\n }\n // check if draggedElement is provided\n if (!(draggedElement instanceof HTMLElement)) {\n throw new Error('setDragImage requires the dragged element as the second argument.');\n }\n // set default function of none provided\n if (!customDragImage) {\n customDragImage = defaultDragImage;\n }\n // check if setDragImage method is available\n if (event.dataTransfer && event.dataTransfer.setDragImage) {\n // get the elements offset\n var elementOffset = _offset(draggedElement);\n // get the dragImage\n var dragImage = customDragImage(draggedElement, elementOffset, event);\n // check if custom function returns correct values\n if (!(dragImage.element instanceof HTMLElement) || typeof dragImage.posX !== 'number' || typeof dragImage.posY !== 'number') {\n throw new Error('The customDragImage function you provided must return and object with the properties element[string], posX[integer], posY[integer].');\n }\n // needs to be set for HTML5 drag & drop to work\n event.dataTransfer.effectAllowed = 'copyMove';\n // Firefox requires it to use the event target's id for the data\n event.dataTransfer.setData('text/plain', getEventTarget(event).id);\n // set the drag image on the event\n event.dataTransfer.setDragImage(dragImage.element, dragImage.posX, dragImage.posY);\n }\n});\n\n/**\n * Check if curList accepts items from destList\n * @param {sortable} destination the container an item is move to\n * @param {sortable} origin the container an item comes from\n */\nvar _listsConnected = (function (destination, origin) {\n // check if valid sortable\n if (destination.isSortable === true) {\n var acceptFrom = store(destination).getConfig('acceptFrom');\n // check if acceptFrom is valid\n if (acceptFrom !== null && acceptFrom !== false && typeof acceptFrom !== 'string') {\n throw new Error('HTML5Sortable: Wrong argument, \"acceptFrom\" must be \"null\", \"false\", or a valid selector string.');\n }\n if (acceptFrom !== null) {\n return acceptFrom !== false && acceptFrom.split(',').filter(function (sel) {\n return sel.length > 0 && origin.matches(sel);\n }).length > 0;\n }\n // drop in same list\n if (destination === origin) {\n return true;\n }\n // check if lists are connected with connectWith\n if (store(destination).getConfig('connectWith') !== undefined && store(destination).getConfig('connectWith') !== null) {\n return store(destination).getConfig('connectWith') === store(origin).getConfig('connectWith');\n }\n }\n return false;\n});\n\n/**\n * default configurations\n */\nvar defaultConfiguration = {\n items: null,\n // deprecated\n connectWith: null,\n // deprecated\n disableIEFix: null,\n acceptFrom: null,\n copy: false,\n placeholder: null,\n placeholderClass: 'sortable-placeholder',\n draggingClass: 'sortable-dragging',\n hoverClass: false,\n debounce: 0,\n throttleTime: 100,\n maxItems: 0,\n itemSerializer: undefined,\n containerSerializer: undefined,\n customDragImage: null,\n orientation: 'vertical'\n};\n\n/**\n * make sure a function is only called once within the given amount of time\n * @param {Function} fn the function to throttle\n * @param {number} threshold time limit for throttling\n */\n// must use function to keep this context\nfunction _throttle (fn, threshold) {\n var _this = this;\n if (threshold === void 0) { threshold = 250; }\n // check function\n if (typeof fn !== 'function') {\n throw new Error('You must provide a function as the first argument for throttle.');\n }\n // check threshold\n if (typeof threshold !== 'number') {\n throw new Error('You must provide a number as the second argument for throttle.');\n }\n var lastEventTimestamp = null;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var now = Date.now();\n if (lastEventTimestamp === null || now - lastEventTimestamp >= threshold) {\n lastEventTimestamp = now;\n fn.apply(_this, args);\n }\n };\n}\n\n/* eslint-env browser */\n/**\n * enable or disable hoverClass on mouseenter/leave if container Items\n * @param {sortable} sortableContainer a valid sortableContainer\n * @param {boolean} enable enable or disable event\n */\n// export default (sortableContainer: sortable, enable: boolean) => {\nvar enableHoverClass = (function (sortableContainer, enable) {\n if (typeof store(sortableContainer).getConfig('hoverClass') === 'string') {\n var hoverClasses_1 = store(sortableContainer).getConfig('hoverClass').split(' ');\n // add class on hover\n if (enable === true) {\n addEventListener(sortableContainer, 'mousemove', _throttle(function (event) {\n // check of no mouse button was pressed when mousemove started == no drag\n if (event.buttons === 0) {\n _filter(sortableContainer.children, store(sortableContainer).getConfig('items')).forEach(function (item) {\n var _a, _b;\n if (item !== event.target) {\n (_a = item.classList).remove.apply(_a, hoverClasses_1);\n }\n else {\n (_b = item.classList).add.apply(_b, hoverClasses_1);\n }\n });\n }\n }, store(sortableContainer).getConfig('throttleTime')));\n // remove class on leave\n addEventListener(sortableContainer, 'mouseleave', function () {\n _filter(sortableContainer.children, store(sortableContainer).getConfig('items')).forEach(function (item) {\n var _a;\n (_a = item.classList).remove.apply(_a, hoverClasses_1);\n });\n });\n // remove events\n }\n else {\n removeEventListener(sortableContainer, 'mousemove');\n removeEventListener(sortableContainer, 'mouseleave');\n }\n }\n});\n\n/* eslint-env browser */\n/*\n * variables global to the plugin\n */\nvar dragging;\nvar draggingHeight;\nvar draggingWidth;\n/*\n * Keeps track of the initialy selected list, where 'dragstart' event was triggered\n * It allows us to move the data in between individual Sortable List instances\n */\n// Origin List - data from before any item was changed\nvar originContainer;\nvar originIndex;\nvar originElementIndex;\nvar originItemsBeforeUpdate;\n// Previous Sortable Container - we dispatch as sortenter event when a\n// dragged item enters a sortableContainer for the first time\nvar previousContainer;\n// Destination List - data from before any item was changed\nvar destinationItemsBeforeUpdate;\n/**\n * remove event handlers from items\n * @param {Array|NodeList} items\n */\nvar _removeItemEvents = function (items) {\n removeEventListener(items, 'dragstart');\n removeEventListener(items, 'dragend');\n removeEventListener(items, 'dragover');\n removeEventListener(items, 'dragenter');\n removeEventListener(items, 'drop');\n removeEventListener(items, 'mouseenter');\n removeEventListener(items, 'mouseleave');\n};\n/**\n * _getDragging returns the current element to drag or\n * a copy of the element.\n * Is Copy Active for sortable\n * @param {HTMLElement} draggedItem - the item that the user drags\n * @param {HTMLElement} sortable a single sortable\n */\nvar _getDragging = function (draggedItem, sortable) {\n var ditem = draggedItem;\n if (store(sortable).getConfig('copy') === true) {\n ditem = draggedItem.cloneNode(true);\n addAttribute(ditem, 'aria-copied', 'true');\n draggedItem.parentElement.appendChild(ditem);\n ditem.style.display = 'none';\n ditem.oldDisplay = draggedItem.style.display;\n }\n return ditem;\n};\n/**\n * Remove data from sortable\n * @param {HTMLElement} sortable a single sortable\n */\nvar _removeSortableData = function (sortable) {\n removeData(sortable);\n removeAttribute(sortable, 'aria-dropeffect');\n};\n/**\n * Remove data from items\n * @param {Array|HTMLElement} items\n */\nvar _removeItemData = function (items) {\n removeAttribute(items, 'aria-grabbed');\n removeAttribute(items, 'aria-copied');\n removeAttribute(items, 'draggable');\n removeAttribute(items, 'role');\n};\n/**\n * find sortable from element. travels up parent element until found or null.\n * @param {HTMLElement} element a single sortable\n * @param {Event} event - the current event. We need to pass it to be able to\n * find Sortable whith shadowRoot (document fragment has no parent)\n */\nfunction findSortable(element, event) {\n if (event.composedPath) {\n return event.composedPath().find(function (el) { return el.isSortable; });\n }\n while (element.isSortable !== true) {\n element = element.parentElement;\n }\n return element;\n}\n/**\n * Dragging event is on the sortable element. finds the top child that\n * contains the element.\n * @param {HTMLElement} sortableElement a single sortable\n * @param {HTMLElement} element is that being dragged\n */\nfunction findDragElement(sortableElement, element) {\n var options = addData(sortableElement, 'opts');\n var items = _filter(sortableElement.children, options.items);\n var itemlist = items.filter(function (ele) {\n return ele.contains(element) || (ele.shadowRoot && ele.shadowRoot.contains(element));\n });\n return itemlist.length > 0 ? itemlist[0] : element;\n}\n/**\n * Destroy the sortable\n * @param {HTMLElement} sortableElement a single sortable\n */\nvar _destroySortable = function (sortableElement) {\n var opts = addData(sortableElement, 'opts') || {};\n var items = _filter(sortableElement.children, opts.items);\n var handles = _getHandles(items, opts.handle);\n // remove event handlers & data from sortable\n removeEventListener(sortableElement, 'dragover');\n removeEventListener(sortableElement, 'dragenter');\n removeEventListener(sortableElement, 'dragstart');\n removeEventListener(sortableElement, 'dragend');\n removeEventListener(sortableElement, 'drop');\n // remove event data from sortable\n _removeSortableData(sortableElement);\n // remove event handlers & data from items\n removeEventListener(handles, 'mousedown');\n _removeItemEvents(items);\n _removeItemData(items);\n // clear sortable flag\n sortableElement.isSortable = false;\n};\n/**\n * Enable the sortable\n * @param {HTMLElement} sortableElement a single sortable\n */\nvar _enableSortable = function (sortableElement) {\n var opts = addData(sortableElement, 'opts');\n var items = _filter(sortableElement.children, opts.items);\n var handles = _getHandles(items, opts.handle);\n addAttribute(sortableElement, 'aria-dropeffect', 'move');\n addData(sortableElement, '_disabled', 'false');\n addAttribute(handles, 'draggable', 'true');\n // @todo: remove this fix\n // IE FIX for ghost\n // can be disabled as it has the side effect that other events\n // (e.g. click) will be ignored\n if (opts.disableIEFix === false) {\n var spanEl = (document || window.document).createElement('span');\n if (typeof spanEl.dragDrop === 'function') {\n addEventListener(handles, 'mousedown', function () {\n if (items.indexOf(this) !== -1) {\n this.dragDrop();\n }\n else {\n var parent = this.parentElement;\n while (items.indexOf(parent) === -1) {\n parent = parent.parentElement;\n }\n parent.dragDrop();\n }\n });\n }\n }\n};\n/**\n * Disable the sortable\n * @param {HTMLElement} sortableElement a single sortable\n */\nvar _disableSortable = function (sortableElement) {\n var opts = addData(sortableElement, 'opts');\n var items = _filter(sortableElement.children, opts.items);\n var handles = _getHandles(items, opts.handle);\n addAttribute(sortableElement, 'aria-dropeffect', 'none');\n addData(sortableElement, '_disabled', 'true');\n addAttribute(handles, 'draggable', 'false');\n removeEventListener(handles, 'mousedown');\n};\n/**\n * Reload the sortable\n * @param {HTMLElement} sortableElement a single sortable\n * @description events need to be removed to not be double bound\n */\nvar _reloadSortable = function (sortableElement) {\n var opts = addData(sortableElement, 'opts');\n var items = _filter(sortableElement.children, opts.items);\n var handles = _getHandles(items, opts.handle);\n addData(sortableElement, '_disabled', 'false');\n // remove event handlers from items\n _removeItemEvents(items);\n removeEventListener(handles, 'mousedown');\n // remove event handlers from sortable\n removeEventListener(sortableElement, 'dragover');\n removeEventListener(sortableElement, 'dragenter');\n removeEventListener(sortableElement, 'drop');\n};\n/**\n * Public sortable object\n * @param {Array|NodeList} sortableElements\n * @param {object|string} options|method\n */\nfunction sortable(sortableElements, options) {\n // get method string to see if a method is called\n var method = String(options);\n options = options || {};\n // check if the user provided a selector instead of an element\n if (typeof sortableElements === 'string') {\n sortableElements = document.querySelectorAll(sortableElements);\n }\n // if the user provided an element, return it in an array to keep the return value consistant\n if (sortableElements instanceof HTMLElement) {\n sortableElements = [sortableElements];\n }\n sortableElements = Array.prototype.slice.call(sortableElements);\n if (/serialize/.test(method)) {\n return sortableElements.map(function (sortableContainer) {\n var opts = addData(sortableContainer, 'opts');\n return _serialize(sortableContainer, opts.itemSerializer, opts.containerSerializer);\n });\n }\n sortableElements.forEach(function (sortableElement) {\n if (/enable|disable|destroy/.test(method)) {\n return sortable[method](sortableElement);\n }\n // log deprecation\n ['connectWith', 'disableIEFix'].forEach(function (configKey) {\n if (Object.prototype.hasOwnProperty.call(options, configKey) && options[configKey] !== null) {\n console.warn(\"HTML5Sortable: You are using the deprecated configuration \\\"\" + configKey + \"\\\". This will be removed in an upcoming version, make sure to migrate to the new options when updating.\");\n }\n });\n // merge options with default options\n options = Object.assign({}, defaultConfiguration, store(sortableElement).config, options);\n // init data store for sortable\n store(sortableElement).config = options;\n // set options on sortable\n addData(sortableElement, 'opts', options);\n // property to define as sortable\n sortableElement.isSortable = true;\n // reset sortable\n _reloadSortable(sortableElement);\n // initialize\n var listItems = _filter(sortableElement.children, options.items);\n // create element if user defined a placeholder element as a string\n var customPlaceholder;\n if (options.placeholder !== null && options.placeholder !== undefined) {\n var tempContainer = document.createElement(sortableElement.tagName);\n if (options.placeholder instanceof HTMLElement) {\n tempContainer.appendChild(options.placeholder);\n }\n else {\n tempContainer.innerHTML = options.placeholder;\n }\n customPlaceholder = tempContainer.children[0];\n }\n // add placeholder\n store(sortableElement).placeholder = _makePlaceholder(sortableElement, customPlaceholder, options.placeholderClass);\n addData(sortableElement, 'items', options.items);\n if (options.acceptFrom) {\n addData(sortableElement, 'acceptFrom', options.acceptFrom);\n }\n else if (options.connectWith) {\n addData(sortableElement, 'connectWith', options.connectWith);\n }\n _enableSortable(sortableElement);\n addAttribute(listItems, 'role', 'option');\n addAttribute(listItems, 'aria-grabbed', 'false');\n // enable hover class\n enableHoverClass(sortableElement, true);\n /*\n Handle drag events on draggable items\n Handle is set at the sortableElement level as it will bubble up\n from the item\n */\n addEventListener(sortableElement, 'dragstart', function (e) {\n // ignore dragstart events\n var target = getEventTarget(e);\n if (target.isSortable === true) {\n return;\n }\n e.stopImmediatePropagation();\n if ((options.handle && !target.matches(options.handle)) || target.getAttribute('draggable') === 'false') {\n return;\n }\n var sortableContainer = findSortable(target, e);\n var dragItem = findDragElement(sortableContainer, target);\n // grab values\n originItemsBeforeUpdate = _filter(sortableContainer.children, options.items);\n originIndex = originItemsBeforeUpdate.indexOf(dragItem);\n originElementIndex = _index(dragItem, sortableContainer.children);\n originContainer = sortableContainer;\n // add transparent clone or other ghost to cursor\n setDragImage(e, dragItem, options.customDragImage);\n // cache selsection & add attr for dragging\n draggingHeight = _getElementHeight(dragItem);\n draggingWidth = _getElementWidth(dragItem);\n dragItem.classList.add(options.draggingClass);\n dragging = _getDragging(dragItem, sortableContainer);\n addAttribute(dragging, 'aria-grabbed', 'true');\n // dispatch sortstart event on each element in group\n sortableContainer.dispatchEvent(new CustomEvent('sortstart', {\n detail: {\n origin: {\n elementIndex: originElementIndex,\n index: originIndex,\n container: originContainer\n },\n item: dragging,\n originalTarget: target\n }\n }));\n });\n /*\n We are capturing targetSortable before modifications with 'dragenter' event\n */\n addEventListener(sortableElement, 'dragenter', function (e) {\n var target = getEventTarget(e);\n var sortableContainer = findSortable(target, e);\n if (sortableContainer && sortableContainer !== previousContainer) {\n destinationItemsBeforeUpdate = _filter(sortableContainer.children, addData(sortableContainer, 'items'))\n .filter(function (item) { return item !== store(sortableElement).placeholder; });\n sortableContainer.dispatchEvent(new CustomEvent('sortenter', {\n detail: {\n origin: {\n elementIndex: originElementIndex,\n index: originIndex,\n container: originContainer\n },\n destination: {\n container: sortableContainer,\n itemsBeforeUpdate: destinationItemsBeforeUpdate\n },\n item: dragging,\n originalTarget: target\n }\n }));\n }\n previousContainer = sortableContainer;\n });\n /*\n * Dragend Event - https://developer.mozilla.org/en-US/docs/Web/Events/dragend\n * Fires each time dragEvent end, or ESC pressed\n * We are using it to clean up any draggable elements and placeholders\n */\n addEventListener(sortableElement, 'dragend', function (e) {\n if (!dragging) {\n return;\n }\n dragging.classList.remove(options.draggingClass);\n addAttribute(dragging, 'aria-grabbed', 'false');\n if (dragging.getAttribute('aria-copied') === 'true' && addData(dragging, 'dropped') !== 'true') {\n dragging.remove();\n }\n dragging.style.display = dragging.oldDisplay;\n delete dragging.oldDisplay;\n var visiblePlaceholder = Array.from(stores.values()).map(function (data) { return data.placeholder; })\n .filter(function (placeholder) { return placeholder instanceof HTMLElement; })\n .filter(isInDom)[0];\n if (visiblePlaceholder) {\n visiblePlaceholder.remove();\n }\n // dispatch sortstart event on each element in group\n sortableElement.dispatchEvent(new CustomEvent('sortstop', {\n detail: {\n origin: {\n elementIndex: originElementIndex,\n index: originIndex,\n container: originContainer\n },\n item: dragging\n }\n }));\n previousContainer = null;\n dragging = null;\n draggingHeight = null;\n draggingWidth = null;\n });\n /*\n * Drop Event - https://developer.mozilla.org/en-US/docs/Web/Events/drop\n * Fires when valid drop target area is hit\n */\n addEventListener(sortableElement, 'drop', function (e) {\n if (!_listsConnected(sortableElement, dragging.parentElement)) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n addData(dragging, 'dropped', 'true');\n // get the one placeholder that is currently visible\n var visiblePlaceholder = Array.from(stores.values()).map(function (data) {\n return data.placeholder;\n })\n // filter only HTMLElements\n .filter(function (placeholder) { return placeholder instanceof HTMLElement; })\n // filter only elements in DOM\n .filter(isInDom)[0];\n // attach element after placeholder\n insertAfter(visiblePlaceholder, dragging);\n // remove placeholder from dom\n visiblePlaceholder.remove();\n /*\n * Fires Custom Event - 'sortstop'\n */\n sortableElement.dispatchEvent(new CustomEvent('sortstop', {\n detail: {\n origin: {\n elementIndex: originElementIndex,\n index: originIndex,\n container: originContainer\n },\n item: dragging\n }\n }));\n var placeholder = store(sortableElement).placeholder;\n var originItems = _filter(originContainer.children, options.items)\n .filter(function (item) { return item !== placeholder; });\n var destinationContainer = this.isSortable === true ? this : this.parentElement;\n var destinationItems = _filter(destinationContainer.children, addData(destinationContainer, 'items'))\n .filter(function (item) { return item !== placeholder; });\n var destinationElementIndex = _index(dragging, Array.from(dragging.parentElement.children)\n .filter(function (item) { return item !== placeholder; }));\n var destinationIndex = _index(dragging, destinationItems);\n /*\n * When a list item changed container lists or index within a list\n * Fires Custom Event - 'sortupdate'\n */\n if (originElementIndex !== destinationElementIndex || originContainer !== destinationContainer) {\n sortableElement.dispatchEvent(new CustomEvent('sortupdate', {\n detail: {\n origin: {\n elementIndex: originElementIndex,\n index: originIndex,\n container: originContainer,\n itemsBeforeUpdate: originItemsBeforeUpdate,\n items: originItems\n },\n destination: {\n index: destinationIndex,\n elementIndex: destinationElementIndex,\n container: destinationContainer,\n itemsBeforeUpdate: destinationItemsBeforeUpdate,\n items: destinationItems\n },\n item: dragging\n }\n }));\n }\n });\n var debouncedDragOverEnter = _debounce(function (sortableElement, element, pageX, pageY) {\n if (!dragging) {\n return;\n }\n // set placeholder height if forcePlaceholderSize option is set\n if (options.forcePlaceholderSize) {\n store(sortableElement).placeholder.style.height = draggingHeight + 'px';\n store(sortableElement).placeholder.style.width = draggingWidth + 'px';\n }\n // if element the draggedItem is dragged onto is within the array of all elements in list\n // (not only items, but also disabled, etc.)\n if (Array.from(sortableElement.children).indexOf(element) > -1) {\n var thisHeight = _getElementHeight(element);\n var thisWidth = _getElementWidth(element);\n var placeholderIndex = _index(store(sortableElement).placeholder, element.parentElement.children);\n var thisIndex = _index(element, element.parentElement.children);\n // Check if `element` is bigger than the draggable. If it is, we have to define a dead zone to prevent flickering\n if (thisHeight > draggingHeight || thisWidth > draggingWidth) {\n // Dead zone?\n var deadZoneVertical = thisHeight - draggingHeight;\n var deadZoneHorizontal = thisWidth - draggingWidth;\n var offsetTop = _offset(element).top;\n var offsetLeft = _offset(element).left;\n if (placeholderIndex < thisIndex &&\n ((options.orientation === 'vertical' && pageY < offsetTop) ||\n (options.orientation === 'horizontal' && pageX < offsetLeft))) {\n return;\n }\n if (placeholderIndex > thisIndex &&\n ((options.orientation === 'vertical' && pageY > offsetTop + thisHeight - deadZoneVertical) ||\n (options.orientation === 'horizontal' && pageX > offsetLeft + thisWidth - deadZoneHorizontal))) {\n return;\n }\n }\n if (dragging.oldDisplay === undefined) {\n dragging.oldDisplay = dragging.style.display;\n }\n if (dragging.style.display !== 'none') {\n dragging.style.display = 'none';\n }\n // To avoid flicker, determine where to position the placeholder\n // based on where the mouse pointer is relative to the elements\n // vertical center.\n var placeAfter = false;\n try {\n var elementMiddleVertical = _offset(element).top + element.offsetHeight / 2;\n var elementMiddleHorizontal = _offset(element).left + element.offsetWidth / 2;\n placeAfter = (options.orientation === 'vertical' && (pageY >= elementMiddleVertical)) ||\n (options.orientation === 'horizontal' && (pageX >= elementMiddleHorizontal));\n }\n catch (e) {\n placeAfter = placeholderIndex < thisIndex;\n }\n if (placeAfter) {\n insertAfter(element, store(sortableElement).placeholder);\n }\n else {\n insertBefore(element, store(sortableElement).placeholder);\n }\n // get placeholders from all stores & remove all but current one\n Array.from(stores.values())\n // remove empty values\n .filter(function (data) { return data.placeholder !== undefined; })\n // foreach placeholder in array if outside of current sorableContainer -> remove from DOM\n .forEach(function (data) {\n if (data.placeholder !== store(sortableElement).placeholder) {\n data.placeholder.remove();\n }\n });\n }\n else {\n // get all placeholders from store\n var placeholders = Array.from(stores.values())\n .filter(function (data) { return data.placeholder !== undefined; })\n .map(function (data) {\n return data.placeholder;\n });\n // check if element is not in placeholders\n if (placeholders.indexOf(element) === -1 && sortableElement === element && !_filter(element.children, options.items).length) {\n placeholders.forEach(function (element) { return element.remove(); });\n element.appendChild(store(sortableElement).placeholder);\n }\n }\n }, options.debounce);\n // Handle dragover and dragenter events on draggable items\n var onDragOverEnter = function (e) {\n var element = e.target;\n var sortableElement = element.isSortable === true ? element : findSortable(element, e);\n element = findDragElement(sortableElement, element);\n if (!dragging || !_listsConnected(sortableElement, dragging.parentElement) || addData(sortableElement, '_disabled') === 'true') {\n return;\n }\n var options = addData(sortableElement, 'opts');\n if (parseInt(options.maxItems) && _filter(sortableElement.children, addData(sortableElement, 'items')).length >= parseInt(options.maxItems) && dragging.parentElement !== sortableElement) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n e.dataTransfer.dropEffect = store(sortableElement).getConfig('copy') === true ? 'copy' : 'move';\n debouncedDragOverEnter(sortableElement, element, e.pageX, e.pageY);\n };\n addEventListener(listItems.concat(sortableElement), 'dragover', onDragOverEnter);\n addEventListener(listItems.concat(sortableElement), 'dragenter', onDragOverEnter);\n });\n return sortableElements;\n}\nsortable.destroy = function (sortableElement) {\n _destroySortable(sortableElement);\n};\nsortable.enable = function (sortableElement) {\n _enableSortable(sortableElement);\n};\nsortable.disable = function (sortableElement) {\n _disableSortable(sortableElement);\n};\n/* START.TESTS_ONLY */\nsortable.__testing = {\n // add internal methods here for testing purposes\n _data: addData,\n _removeItemEvents: _removeItemEvents,\n _removeItemData: _removeItemData,\n _removeSortableData: _removeSortableData\n};\n\nexport default sortable;\n","import {extend} from \"flarum/extend\";\nimport AdminNav from \"flarum/components/AdminNav\";\nimport AdminLinkButton from \"flarum/components/AdminLinkButton\";\nimport ProfileConfigurePane from './panes/ProfileConfigurePane';\n\nexport default function () {\n // create the route\n app.routes['fof-masquerade-configure-profile'] = {path: '/fof/masquerade/configure', component: ProfileConfigurePane.component()};\n\n // bind the route we created to the three dots settings button\n app.extensionSettings['fof-masquerade'] = () => m.route(app.route('fof-masquerade-configure-profile'));\n\n extend(AdminNav.prototype, 'items', items => {\n // add the Image Upload tab to the admin navigation menu\n items.add('fof-masquerade-configure-profile', AdminLinkButton.component({\n href: app.route('fof-masquerade-configure-profile'),\n icon: 'far fa-id-card',\n children: 'Masquerade',\n description: app.translator.trans('fof-masquerade.admin.menu.description')\n }));\n });\n}\n","import app from 'flarum/app';\nimport Component from 'flarum/Component';\nimport icon from 'flarum/helpers/icon';\n\n/* global m */\n\nexport default class SelectFieldOptionEditor extends Component {\n init() {\n this.newOption = m.prop('');\n }\n\n view() {\n return m('.Form-group', [\n m('label', app.translator.trans('fof-masquerade.admin.fields.options')),\n m('table', m('tbody', this.options().map((option, optionIndex) => m('tr', [\n m('td', m('input[type=text].FormControl', {\n oninput: m.withAttr('value', value => {\n this.updateOption(optionIndex, value);\n }),\n value: option,\n })),\n m('td', m('button.Button', {\n onclick: () => {\n this.moveOption(optionIndex, -1);\n },\n }, icon('fas fa-chevron-up'))),\n m('td', m('button.Button', {\n onclick: () => {\n this.moveOption(optionIndex, 1);\n },\n }, icon('fas fa-chevron-down'))),\n m('td', m('button.Button.Button--danger', {\n onclick: () => {\n this.deleteOption(optionIndex);\n },\n }, icon('fas fa-close'))),\n ])))),\n m('.helpText', app.translator.trans('fof-masquerade.admin.fields.option-comma-warning')),\n m('table', m('tbody'), m('tr', [\n m('td', m('input[type=text].FormControl', {\n onchange: m.withAttr('value', this.newOption),\n value: this.newOption(),\n placeholder: app.translator.trans('fof-masquerade.admin.fields.option-new'),\n })),\n m('td', m('button.Button.Button--primary', {\n onclick: () => {\n this.addOption();\n },\n }, icon('fas fa-plus'))),\n ])),\n ]);\n }\n\n updateRules(options) {\n // We ignore other existing rules, they would probably be leftovers from another field type when changing types\n this.props.onchange('in:' + options.join(','));\n }\n\n options() {\n const rules = this.props.value.split('|');\n\n let options = [];\n\n rules.forEach(rule => {\n const parts = rule.split(':', 2);\n\n if (parts[0] === 'in') {\n options = parts[1].split(',');\n }\n });\n\n return options;\n }\n\n updateOption(index, value) {\n let options = this.options();\n\n options[index] = value;\n\n this.updateRules(options);\n }\n\n moveOption(index, moveIndex) {\n let options = this.options();\n\n const newIndex = index + moveIndex;\n\n if (newIndex < 0 || newIndex > options.length - 1) {\n return;\n }\n\n const move = options.splice(index, 1);\n\n options.splice(newIndex, 0, move[0]);\n\n this.updateRules(options);\n }\n\n deleteOption(index) {\n let options = this.options();\n\n options.splice(index, 1);\n\n this.updateRules(options);\n }\n\n addOption() {\n if (this.newOption() === '') {\n return;\n }\n\n let options = this.options();\n\n options.push(this.newOption());\n\n this.newOption('');\n\n this.updateRules(options);\n }\n}\n","import {extend} from \"flarum/extend\";\nimport app from \"flarum/app\";\nimport PermissionGrid from \"flarum/components/PermissionGrid\";\nimport Field from \"./../lib/models/Field\";\nimport addProfileConfigurePane from './addProfileConfigurePane';\n\napp.initializers.add('fof-masquerade', app => {\n app.store.models['masquerade-field'] = Field;\n\n // add the permission option for viewing a masquerade profile\n extend(PermissionGrid.prototype, 'viewItems', items => {\n items.add('masquerade-view-profile', {\n icon: 'far fa-id-card',\n label: app.translator.trans('fof-masquerade.admin.permissions.view-profile'),\n permission: 'fof.masquerade.view-profile',\n allowGuest: true\n });\n });\n // add the permission option for creating a masquerade profile\n extend(PermissionGrid.prototype, 'startItems', items => {\n items.add('masquerade-have-profile', {\n icon: 'far fa-id-card',\n label: app.translator.trans('fof-masquerade.admin.permissions.have-profile'),\n permission: 'fof.masquerade.have-profile'\n });\n });\n\n addProfileConfigurePane();\n});\n","import sortable from 'html5sortable/dist/html5sortable.es.js';\n\nimport app from 'flarum/app';\nimport icon from 'flarum/helpers/icon';\nimport Component from 'flarum/Component';\nimport Select from 'flarum/components/Select';\nimport Switch from 'flarum/components/Switch';\nimport Button from 'flarum/components/Button';\nimport saveSettings from 'flarum/utils/saveSettings';\nimport SelectFieldOptionEditor from '../components/SelectFieldOptionEditor';\n\n/* global m */\n\nexport default class ProfileConfigurePane extends Component {\n\n /**\n * Sets up the component.\n */\n init() {\n this.resetNew();\n this.loading = false;\n this.existing = [];\n this.loadExisting();\n this.enforceProfileCompletion = m.prop(app.data.settings['masquerade.force-profile-completion'] == 1);\n }\n\n /**\n * Configures the component.\n */\n config() {\n sortable(this.element.querySelector('.js-sortable-fields'), {\n handle: 'legend',\n })[0].addEventListener('sortupdate', () => {\n const sorting = this.$('.js-sortable-fields > .Field')\n .map(function () {\n return $(this).data('id');\n })\n .get();\n\n this.updateSort(sorting);\n });\n }\n\n /**\n * Generates the component view.\n *\n * @returns {*}\n */\n view() {\n return m('.ProfileConfigurePane', m('.container', [\n m('h1', app.translator.trans('fof-masquerade.admin.title')),\n m('h2', app.translator.trans('fof-masquerade.admin.general-options')),\n m('form', [\n m('.Form-group', Switch.component({\n state: this.enforceProfileCompletion(),\n onchange: this.updateSetting.bind(this, this.enforceProfileCompletion, 'masquerade.force-profile-completion'),\n children: app.translator.trans('fof-masquerade.admin.fields.force-user-to-completion'),\n })),\n ]),\n m('h2', app.translator.trans('fof-masquerade.admin.fields.title')),\n m('form.js-sortable-fields', this.existing.map(field => {\n // Build array of fields to show.\n return this.addField(field);\n })),\n m('form', {\n onsubmit: this.submitAddField.bind(this),\n }, [\n this.addField(this.new),\n ]),\n ]));\n }\n\n /**\n * Updates setting in database.\n * @param prop\n * @param setting\n * @param value\n */\n updateSetting(prop, setting, value) {\n saveSettings({\n [setting]: value,\n });\n\n prop(value);\n }\n\n /**\n * Creates a field in the DOM.\n *\n * @param field\n * @returns {*}\n */\n addField(field) {\n let exists = field.id();\n\n return m('fieldset.Field', {\n 'data-id': field.id(),\n key: field.id(),\n }, [\n m('legend', [\n exists ? [Button.component({\n className: 'Button Button--icon Button--danger',\n icon: \"fas fa-trash\",\n onclick: this.deleteField.bind(this, field),\n }), ' '] : null,\n m('span.Field-toggle', {\n onclick: (e) => this.toggleField(e),\n }, [\n app.translator.trans('fof-masquerade.admin.fields.' + (exists ? 'edit' : 'add'), {\n field: field.name(),\n }),\n ' ',\n icon('fas fa-caret-down'),\n ]),\n ]),\n m('.Field-body', [\n m('.Form-group', [\n m('label', app.translator.trans('fof-masquerade.admin.fields.name')),\n m('input.FormControl', {\n value: field.name(),\n oninput: m.withAttr('value', this.updateExistingFieldInput.bind(this, 'name', field)),\n }),\n m('span.helpText', app.translator.trans('fof-masquerade.admin.fields.name-help')),\n ]),\n m('.Form-group', [\n m('label', app.translator.trans('fof-masquerade.admin.fields.description')),\n m('input.FormControl', {\n value: field.description(),\n oninput: m.withAttr('value', this.updateExistingFieldInput.bind(this, 'description', field)),\n }),\n m('span.helpText', app.translator.trans('fof-masquerade.admin.fields.description-help')),\n ]),\n m('.Form-group', [\n m('label', app.translator.trans('fof-masquerade.admin.fields.icon')),\n m('input.FormControl', {\n value: field.icon(),\n oninput: m.withAttr('value', this.updateExistingFieldInput.bind(this, 'icon', field)),\n }),\n m('span.helpText', app.translator.trans('fof-masquerade.admin.fields.icon-help', {\n a: ,\n })),\n ]),\n m('.Form-group', Switch.component({\n state: field.on_bio(),\n onchange: this.updateExistingFieldInput.bind(this, 'on_bio', field),\n children: app.translator.trans('fof-masquerade.admin.fields.on_bio'),\n })),\n m('.Form-group', Switch.component({\n state: field.required(),\n onchange: this.updateExistingFieldInput.bind(this, 'required', field),\n children: app.translator.trans('fof-masquerade.admin.fields.required'),\n })),\n m('.Form-group', [\n m('label', app.translator.trans('fof-masquerade.admin.fields.type')),\n Select.component({\n onchange: value => {\n if (value === 'null') {\n value = null;\n }\n\n this.updateExistingFieldInput('type', field, value);\n },\n options: this.availableTypes(),\n value: field.type(),\n }),\n ]),\n (field.type() === 'select' ? SelectFieldOptionEditor.component({\n onchange: value => {\n this.updateExistingFieldInput('validation', field, value);\n },\n value: field.validation(),\n }) : null),\n (field.type() === null ? m('.Form-group', [\n m('label', app.translator.trans('fof-masquerade.admin.fields.validation')),\n m('input.FormControl', {\n value: field.validation(),\n oninput: m.withAttr('value', this.updateExistingFieldInput.bind(this, 'validation', field)),\n }),\n m('span.helpText', app.translator.trans('fof-masquerade.admin.fields.validation-help', {\n a: ,\n })),\n ]) : null),\n m('.Form-group', m('.ButtonGroup', [\n Button.component({\n type: 'submit',\n className: 'Button Button--primary',\n children: app.translator.trans('fof-masquerade.admin.buttons.' + (exists ? 'edit' : 'add') + '-field'),\n loading: this.loading,\n disabled: !this.readyToAdd(field),\n onclick: this.updateExistingField.bind(this, field)\n }),\n (exists ? Button.component({\n type: 'submit',\n className: 'Button Button--danger',\n children: app.translator.trans('fof-masquerade.admin.buttons.delete-field'),\n loading: this.loading,\n onclick: this.deleteField.bind(this, field),\n }) : null),\n ])),\n ]),\n ]);\n }\n\n updateExistingFieldInput(what, field, value) {\n let exists = field.id();\n\n if (exists) {\n field.pushAttributes({\n [what]: value\n })\n } else {\n field[what](value);\n }\n }\n\n /**\n * Sorts the fields.\n *\n * @param {Array} sorting\n */\n updateSort(sorting) {\n let data = {\n sort: sorting\n };\n\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/masquerade/fields/order',\n data\n }).then(\n this.requestSuccess.bind(this)\n );\n }\n\n /**\n * Opens and closes field configuration sets.\n *\n * @param e\n */\n toggleField(e) {\n $(e.target).parents('.Field').toggleClass('active');\n }\n\n /**\n * Deletes a field configuration set.\n *\n * @param field\n */\n deleteField(field) {\n app.request({\n method: 'DELETE',\n url: app.forum.attribute('apiUrl') + '/masquerade/fields/' + field.id(),\n }).then(\n this.requestSuccess.bind(this)\n );\n }\n\n /**\n * Saves the settings to the database and redraw the page\n *\n * @param e\n */\n submitAddField(e) {\n e.preventDefault();\n\n let data = this.new;\n\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/masquerade/fields',\n data,\n }).then(\n this.requestSuccess.bind(this)\n );\n\n this.resetNew();\n\n m.redraw();\n }\n\n /**\n * Updates the value of one field.\n *\n * @param field\n */\n updateExistingField(field) {\n if (!field.id()) return;\n\n let data = field.data;\n\n app.request({\n // We use PATCH and not PUT because the endpoint allows filling only some of the fields\n // (even if here we always pass all the attributes)\n method: 'PATCH',\n url: app.forum.attribute('apiUrl') + '/masquerade/fields/' + field.id(),\n data,\n }).then(\n this.requestSuccess.bind(this)\n );\n }\n\n /**\n * Parses result to update DOM.\n *\n * @param result\n */\n requestSuccess(result) {\n let model = app.store.pushPayload(result);\n\n // In case we've updated/deleted one instance delete it if necessary.\n if (!(model instanceof Array) && model.deleted_at()) {\n app.store.remove(model);\n }\n\n this.existing = app.store.all('masquerade-field');\n\n // Update order in case the store order doesn't reflect the true ordering\n this.existing.sort((a, b) => {\n if (a.sort() < b.sort()) return -1;\n if (a.sort() > b.sort()) return 1;\n return 0;\n });\n\n this.loading = false;\n m.redraw()\n }\n\n /**\n * Retrieves list of fields.\n */\n loadExisting() {\n this.loading = true;\n\n return app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/masquerade/fields',\n }).then(\n this.requestSuccess.bind(this)\n );\n }\n\n /**\n * Resets the new field.\n */\n resetNew() {\n this.new = {\n // id() does not hold any value, but it's necessary to keep it because it's called to make the difference\n // between the simple object holding the new field's value and the model holding an existing field's value\n 'id': m.prop(),\n 'name': m.prop(''),\n 'description': m.prop(''),\n 'prefix': m.prop(''),\n 'icon': m.prop(''),\n 'required': m.prop(false),\n 'on_bio': m.prop(false),\n 'type': m.prop(null),\n 'validation': m.prop(''),\n };\n }\n\n /**\n * Checks whether creation field is completed.\n *\n * @returns boolean\n */\n readyToAdd(field) {\n if (field.name()) {\n return true;\n }\n\n return false;\n }\n\n /**\n * List of field types availables\n * @returns {Array}\n */\n availableTypes() {\n return {\n url: app.translator.trans('fof-masquerade.admin.types.url'),\n email: app.translator.trans('fof-masquerade.admin.types.email'),\n boolean: app.translator.trans('fof-masquerade.admin.types.boolean'),\n select: app.translator.trans('fof-masquerade.admin.types.select'),\n text: app.translator.trans('fof-masquerade.admin.types.text'),\n null: app.translator.trans('fof-masquerade.admin.types.advanced'),\n };\n }\n}\n","import Model from 'flarum/Model';\nimport mixin from 'flarum/utils/mixin';\n\nexport default class Field extends mixin(Model, {\n name: Model.attribute('name'),\n description: Model.attribute('description'),\n type: Model.attribute('type'),\n validation: Model.attribute('validation'),\n required: Model.attribute('required'),\n prefix: Model.attribute('prefix'),\n icon: Model.attribute('icon'),\n sort: Model.attribute('sort'),\n deleted_at: Model.attribute('deleted_at', Model.transformDate),\n answer: Model.hasOne('answer'),\n on_bio: Model.attribute('on_bio')\n}) {\n /**\n * Construct a path to the API endpoint for this resource.\n *\n * @return {String}\n * @protected\n */\n apiEndpoint() {\n return '/masquerade/fields' + (this.exists ? '/' + this.data.id : '');\n }\n}\n","module.exports = flarum.core.compat['Component'];","module.exports = flarum.core.compat['Model'];","module.exports = flarum.core.compat['app'];","module.exports = flarum.core.compat['components/AdminLinkButton'];","module.exports = flarum.core.compat['components/AdminNav'];","module.exports = flarum.core.compat['components/Button'];","module.exports = flarum.core.compat['components/PermissionGrid'];","module.exports = flarum.core.compat['components/Select'];","module.exports = flarum.core.compat['components/Switch'];","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['helpers/icon'];","module.exports = flarum.core.compat['utils/mixin'];","module.exports = flarum.core.compat['utils/saveSettings'];"],"sourceRoot":""} \ No newline at end of file diff --git a/js/dist/forum.js b/js/dist/forum.js index 2a05f99..b2cc7dc 100644 --- a/js/dist/forum.js +++ b/js/dist/forum.js @@ -1,2 +1,1309 @@ -module.exports=function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=19)}([function(t,e){t.exports=flarum.core.compat.app},function(t,e){t.exports=flarum.core.compat.Model},function(t,e,n){"use strict";function r(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}n.d(e,"a",function(){return r})},function(t,e){t.exports=flarum.core.compat["helpers/icon"]},function(t,e){t.exports=flarum.core.compat.extend},function(t,e){t.exports=flarum.core.compat["components/Button"]},function(t,e){t.exports=flarum.core.compat["utils/mixin"]},function(t,e){t.exports=flarum.core.compat["components/UserPage"]},function(t,e,n){"use strict";n.d(e,"a",function(){return s});var r=n(2),i=n(1),o=n.n(i),a=n(6),s=function(t){function e(){return t.apply(this,arguments)||this}return Object(r.a)(e,t),e.prototype.apiEndpoint=function(){return"/masquerade/fields"+(this.exists?"/"+this.data.id:"")},e}(n.n(a)()(o.a,{name:o.a.attribute("name"),description:o.a.attribute("description"),type:o.a.attribute("type"),validation:o.a.attribute("validation"),required:o.a.attribute("required"),prefix:o.a.attribute("prefix"),icon:o.a.attribute("icon"),sort:o.a.attribute("sort"),deleted_at:o.a.attribute("deleted_at",o.a.transformDate),answer:o.a.hasOne("answer"),on_bio:o.a.attribute("on_bio")}))},function(t,e){t.exports=flarum.core.compat["components/Select"]},,,,function(t,e){t.exports=flarum.core.compat["models/User"]},function(t,e){t.exports=flarum.core.compat["components/LinkButton"]},function(t,e){t.exports=flarum.core.compat["components/UserCard"]},,,,function(t,e,n){"use strict";n.r(e);var r=n(4),i=n(0),o=n.n(i),a=n(13),s=n.n(a),u=n(8),l=n(2),f=n(1),p=n.n(f),d=n(6),c=function(t){function e(){return t.apply(this,arguments)||this}return Object(l.a)(e,t),e.prototype.apiEndpoint=function(){return"/masquerade/configure"+(this.exists?"/"+this.data.id:"")},e}(n.n(d)()(p.a,{content:p.a.attribute("content"),field:p.a.hasOne("field"),userId:p.a.attribute("user_id")})),h=n(14),v=n.n(h),b=n(7),y=n.n(b),q=n(5),w=n.n(q),x=n(3),O=n.n(x),_=function(){function t(t){var e=t.field,n=t.set,r=t.value;this.field=e,this.set=n,this.value=r}var e=t.prototype;return e.readAttribute=function(t,e){return"function"==typeof t[e]?t[e]():t[e]},e.validationRules=function(){return this.readAttribute(this.field,"validation").split("|")},e.validationRule=function(t){var e=null;return this.validationRules().forEach(function(n){var r=n.split(":",2);r[0]===t&&(e=r[1])}),e},e.editorField=function(){return m("fieldset.Field",[m("legend",[this.field.icon()?[O()(this.field.icon())," "]:null,this.field.name(),this.field.required()?" *":null]),m(".FormField",[this.field.prefix()?m(".prefix",this.field.prefix()):null,this.editorInput(),this.field.description()?m(".helpText",this.field.description()):null])])},e.editorInput=function(){return m("input",this.editorInputProps())},e.editorInputProps=function(){return{className:"FormControl",oninput:m.withAttr("value",this.set),value:this.value(),required:this.field.required()}},e.answerField=function(){var t=this.readAttribute(this.field,"icon");return m(".Masquerade-Bio-Set",[m("span.Masquerade-Bio-Field",[t?[O()(t)," "]:null,this.readAttribute(this.field,"name")+": "]),m("span.Masquerade-Bio-Answer",this.answerContent())])},e.answerContent=function(){return this.value()},t.isNoOptionSelectedValue=function(t){return null===t||""===t},t}(),g=function(t){function e(){return t.apply(this,arguments)||this}Object(l.a)(e,t);var n=e.prototype;return n.editorInput=function(){var t=this;return this.options().map(function(e){return m("div",m("label",[m("input[type=radio]",{checked:e.selected(t.value()),onclick:function(){t.set(e.key)}})," "+e.label]))})},n.options=function(){var t=[];return this.readAttribute(this.field,"required")||t.push({selected:function(t){return _.isNoOptionSelectedValue(t)},key:null,label:app.translator.trans("fof-masquerade.forum.fields.select.none-optional")}),t.push({selected:function(t){return-1!==["true","1",1,!0,"yes"].indexOf(t)},key:"true",label:app.translator.trans("fof-masquerade.forum.fields.boolean.yes")}),t.push({selected:function(t){return-1!==["false","0",0,!1,"no"].indexOf(t)},key:"false",label:app.translator.trans("fof-masquerade.forum.fields.boolean.no")}),_.isNoOptionSelectedValue(this.value())||-1!==["true","1",1,!0,"yes","false","0",0,!1,"no"].indexOf(this.value())||t.push({selected:function(){return!0},key:this.value(),label:"(invalid) "+this.value()}),t},n.answerContent=function(){return _.isNoOptionSelectedValue(this.value())?"":-1!==[1,"1",!0,"true","yes"].indexOf(this.value())?[O()("far fa-check-square")," ",app.translator.trans("fof-masquerade.forum.fields.boolean.yes")]:[O()("far fa-square")," ",app.translator.trans("fof-masquerade.forum.fields.boolean.no")]},e}(_),F=function(t){function e(){return t.apply(this,arguments)||this}Object(l.a)(e,t);var n=e.prototype;return n.editorInputProps=function(){var e=t.prototype.editorInputProps.call(this);return e.type="email",e.placeholder="you@example.com",e},n.answerContent=function(){var t=this,e=this.value();if(!e)return null;var n=e.split(/@|\./).map(function(t){return t.replace(/(.{2})./g,"$1*")}).join("*");return w.a.component({onclick:function(){return t.mailTo()},className:"Button Button--text",icon:"far fa-envelope",children:n})},n.mailTo=function(){window.location="mailto:"+this.value()},e}(_),P=n(9),j=n.n(P),S=function(t){function e(){return t.apply(this,arguments)||this}Object(l.a)(e,t);var n=e.prototype;return n.editorInput=function(){var t=this;return j.a.component({onchange:function(e){"fof_masquerade_no_option_selected"===e&&(e=null),t.set(e)},value:_.isNoOptionSelectedValue(this.value())?"fof_masquerade_no_option_selected":this.value(),options:this.options()})},n.options=function(){var t={};this.readAttribute(this.field,"required")?_.isNoOptionSelectedValue(this.value())&&(t.fof_masquerade_no_option_selected=app.translator.trans("fof-masquerade.forum.fields.select.none-required")):t.fof_masquerade_no_option_selected=app.translator.trans("fof-masquerade.forum.fields.select.none-optional");var e=this.validationRule("in");return e&&e.split(",").forEach(function(e){t[e]=e}),_.isNoOptionSelectedValue(this.value())||void 0!==t[this.value()]||(t[this.value()]="(invalid) "+this.value()),t},e}(_),I=function(t){function e(){return t.apply(this,arguments)||this}Object(l.a)(e,t);var n=e.prototype;return n.editorInputProps=function(){var e=t.prototype.editorInputProps.call(this);return e.type="url",e.placeholder="https://example.com",e},n.answerContent=function(){var t=this,e=this.value();return e?w.a.component({onclick:function(){return t.to()},className:"Button Button--text",icon:"fas fa-link",children:e.replace(/^https?:\/\//,"")}):null},n.to=function(){window.open().location=this.value()},e}(_),A=function(){function t(){}return t.typeForField=function(t){var e=t.field,n=t.set,r=t.value,i=_,o=this.identify(e);return o&&(i=this.types()[o]),new i({field:e,set:n,value:r})},t.fieldAttribute=function(t,e){return"function"==typeof t[e]?t[e]():t[e]},t.types=function(){return{boolean:g,email:F,select:S,url:I}},t.identify=function(t){var e=this,n=(this.fieldAttribute(t,"validation")||"").split(","),r=null,i=this.fieldAttribute(t,"type");return void 0!==this.types()[i]?i:(n.forEach(function(t){t=t.trim(),void 0!==e.types()[t]&&(r=t)}),r)},t}(),M=function(t){function e(){return t.apply(this,arguments)||this}Object(l.a)(e,t);var n=e.prototype;return n.init=function(){t.prototype.init.call(this),this.loading=!0,this.loadUser(o.a.session.user.username()),this.enforceProfileCompletion=o.a.forum.attribute("masquerade.force-profile-completion")||!1,this.profileCompleted=o.a.forum.attribute("masquerade.profile-completed")||!1,this.fields=[],this.answers={},this.load()},n.content=function(){var t=this;return m("form.ProfileConfigurePane",{onsubmit:this.update.bind(this)},[this.enforceProfileCompletion&&!this.profileCompleted?m(".Alert.Alert--Error",o.a.translator.trans("fof-masquerade.forum.alerts.profile-completion-required")):null,m(".Fields",this.fields.sort(function(t,e){return t.sort()-e.sort()}).map(function(e){return t.answers.hasOwnProperty(e.id())||(t.answers[e.id()]=e.answer()?m.prop(e.answer().content()):m.prop("")),t.field(e)})),w.a.component({type:"submit",className:"Button Button--primary",children:o.a.translator.trans("fof-masquerade.forum.buttons.save-profile"),loading:this.loading})])},n.field=function(t){return A.typeForField({field:t,set:this.set.bind(this,t),value:this.answers[t.id()]}).editorField()},n.load=function(){o.a.request({method:"GET",url:o.a.forum.attribute("apiUrl")+"/masquerade/configure"}).then(this.parseResponse.bind(this))},n.set=function(t,e){this.answers.hasOwnProperty(t.id())?this.answers[t.id()](e):this.answers[t.id()]=m.prop(e)},n.update=function(t){var e=this;t.preventDefault(),this.loading=!0;var n=this.answers;o.a.request({method:"POST",url:o.a.forum.attribute("apiUrl")+"/masquerade/configure",data:n}).then(this.parseResponse.bind(this)).catch(function(){e.loading=!1,m.redraw()})},n.parseResponse=function(t){this.fields=o.a.store.pushPayload(t),this.loading=!1,m.redraw()},e}(y.a),k=function(t){function e(){return t.apply(this,arguments)||this}Object(l.a)(e,t);var n=e.prototype;return n.init=function(){t.prototype.init.call(this),this.loading=!0,this.fields=[],this.answers={},this.loadUser(m.route.param("username"))},n.content=function(){var t=this;return m(".Masquerade-Bio",[m(".Fields",this.fields.sort(function(t,e){return t.sort()-e.sort()}).map(function(e){return t.answers[e.id()]=e.answer()&&e.answer().userId()==t.user.id()?e.answer().content():null,t.field(e)}))])},n.field=function(t){return A.typeForField({field:t,value:m.prop(this.answers[t.id()])}).answerField()},n.load=function(t){app.request({method:"GET",url:app.forum.attribute("apiUrl")+"/masquerade/profile/"+t.id()}).then(this.parseResponse.bind(this))},n.show=function(e){this.load(e),t.prototype.show.call(this,e)},n.parseResponse=function(t){this.answers={},this.fields=app.store.pushPayload(t),this.loading=!1,m.redraw()},e}(y.a),B=n(15),C=n.n(B),N=function(){Object(r.extend)(C.a.prototype,"infoItems",function(t){var e=app.forum.attribute("canViewMasquerade")&&this.props.user.bioFields()||[];t.add("masquerade-bio",m("div",e.map(function(t){var e=t.attribute("field");return A.typeForField({field:e,value:function(){return t.content()}}).answerField()})))})};o.a.initializers.add("fof-masquerade",function(t){t.store.models["masquerade-field"]=u.a,t.store.models["masquerade-answer"]=c,s.a.prototype.bioFields=p.a.hasMany("bioFields"),o.a.routes["fof-masquerade-view-profile"]={path:"/masquerade/:username",component:k.component()},o.a.routes["fof-masquerade-configure-profile"]={path:"/masquerade/configure",component:M.component()},Object(r.extend)(y.a.prototype,"navItems",function(t){var e=o.a.forum.attribute("canHaveMasquerade")&&o.a.session.user.id()===this.user.id();if(o.a.forum.attribute("canViewMasquerade")||e){var n=e?o.a.route("fof-masquerade-configure-profile"):o.a.route("fof-masquerade-view-profile",{username:this.user.username()});t.add("masquerade",v.a.component({href:n,children:o.a.translator.trans("fof-masquerade.forum.buttons.view-profile"),icon:"far fa-id-card"}),200)}}),N()})}]); +module.exports = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "./forum.js"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "./forum.js": +/*!******************!*\ + !*** ./forum.js ***! + \******************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _src_forum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/forum */ "./src/forum/index.js"); +/* empty/unused harmony star reexport */ + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***! + \*******************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _defineProperty; }); +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js": +/*!******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***! + \******************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _inheritsLoose; }); +function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; +} + +/***/ }), + +/***/ "./src/forum/addProfilePane.js": +/*!*************************************!*\ + !*** ./src/forum/addProfilePane.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/extend */ "flarum/extend"); +/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_extend__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/app */ "flarum/app"); +/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_app__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_components_LinkButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/components/LinkButton */ "flarum/components/LinkButton"); +/* harmony import */ var flarum_components_LinkButton__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_components_LinkButton__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var flarum_components_UserPage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/components/UserPage */ "flarum/components/UserPage"); +/* harmony import */ var flarum_components_UserPage__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_components_UserPage__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _panes_ProfileConfigurePane__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./panes/ProfileConfigurePane */ "./src/forum/panes/ProfileConfigurePane.js"); +/* harmony import */ var _panes_ProfilePane__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./panes/ProfilePane */ "./src/forum/panes/ProfilePane.js"); + + + + + + +/* harmony default export */ __webpack_exports__["default"] = (function () { + flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.routes['fof-masquerade-view-profile'] = { + path: '/masquerade/:username', + component: _panes_ProfilePane__WEBPACK_IMPORTED_MODULE_5__["default"].component() + }; + flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.routes['fof-masquerade-configure-profile'] = { + path: '/masquerade/configure', + component: _panes_ProfileConfigurePane__WEBPACK_IMPORTED_MODULE_4__["default"].component() + }; + Object(flarum_extend__WEBPACK_IMPORTED_MODULE_0__["extend"])(flarum_components_UserPage__WEBPACK_IMPORTED_MODULE_3___default.a.prototype, 'navItems', function (items) { + var isOwnProfileAndCanHaveMasquerade = flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('canHaveMasquerade') && flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.session.user.id() === this.user.id(); + + if (flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('canViewMasquerade') || isOwnProfileAndCanHaveMasquerade) { + var href = isOwnProfileAndCanHaveMasquerade ? flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.route('fof-masquerade-configure-profile') : flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.route('fof-masquerade-view-profile', { + username: this.user.username() + }); + items.add('masquerade', flarum_components_LinkButton__WEBPACK_IMPORTED_MODULE_2___default.a.component({ + href: href, + children: flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('fof-masquerade.forum.buttons.view-profile'), + icon: 'far fa-id-card' + }), 200); + } + }); +}); + +/***/ }), + +/***/ "./src/forum/index.js": +/*!****************************!*\ + !*** ./src/forum/index.js ***! + \****************************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/extend */ "flarum/extend"); +/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_extend__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/app */ "flarum/app"); +/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_app__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_models_User__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/models/User */ "flarum/models/User"); +/* harmony import */ var flarum_models_User__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_models_User__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _lib_models_Field__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../lib/models/Field */ "./src/lib/models/Field.js"); +/* harmony import */ var _lib_models_Answer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../lib/models/Answer */ "./src/lib/models/Answer.js"); +/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/Model */ "flarum/Model"); +/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_Model__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var _addProfilePane__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./addProfilePane */ "./src/forum/addProfilePane.js"); +/* harmony import */ var _mutateUserHero__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mutateUserHero */ "./src/forum/mutateUserHero.js"); + + + + + + + + +flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.initializers.add('fof-masquerade', function (app) { + app.store.models['masquerade-field'] = _lib_models_Field__WEBPACK_IMPORTED_MODULE_3__["default"]; + app.store.models['masquerade-answer'] = _lib_models_Answer__WEBPACK_IMPORTED_MODULE_4__["default"]; + flarum_models_User__WEBPACK_IMPORTED_MODULE_2___default.a.prototype.bioFields = flarum_Model__WEBPACK_IMPORTED_MODULE_5___default.a.hasMany('bioFields'); + Object(_addProfilePane__WEBPACK_IMPORTED_MODULE_6__["default"])(); + Object(_mutateUserHero__WEBPACK_IMPORTED_MODULE_7__["default"])(); +}); + +/***/ }), + +/***/ "./src/forum/mutateUserHero.js": +/*!*************************************!*\ + !*** ./src/forum/mutateUserHero.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/extend */ "flarum/extend"); +/* harmony import */ var flarum_extend__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_extend__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var flarum_components_UserCard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/components/UserCard */ "flarum/components/UserCard"); +/* harmony import */ var flarum_components_UserCard__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_components_UserCard__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _types_TypeFactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./types/TypeFactory */ "./src/forum/types/TypeFactory.js"); + + + +/* harmony default export */ __webpack_exports__["default"] = (function () { + Object(flarum_extend__WEBPACK_IMPORTED_MODULE_0__["extend"])(flarum_components_UserCard__WEBPACK_IMPORTED_MODULE_1___default.a.prototype, 'infoItems', function (items) { + var answers = app.forum.attribute('canViewMasquerade') ? this.props.user.bioFields() || [] : []; + items.add('masquerade-bio', m('div', answers.map(function (answer) { + var field = answer.attribute('field'); + var type = _types_TypeFactory__WEBPACK_IMPORTED_MODULE_2__["default"].typeForField({ + field: field, + value: function value() { + return answer.content(); + } + }); + return type.answerField(); + }))); + }); +}); + +/***/ }), + +/***/ "./src/forum/panes/ProfileConfigurePane.js": +/*!*************************************************!*\ + !*** ./src/forum/panes/ProfileConfigurePane.js ***! + \*************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ProfileConfigurePane; }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/app */ "flarum/app"); +/* harmony import */ var flarum_app__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_app__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_components_UserPage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/components/UserPage */ "flarum/components/UserPage"); +/* harmony import */ var flarum_components_UserPage__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_components_UserPage__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/components/Button */ "flarum/components/Button"); +/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Button__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _types_TypeFactory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./../types/TypeFactory */ "./src/forum/types/TypeFactory.js"); + + + + + +/* global m */ + +var ProfileConfigurePane = /*#__PURE__*/function (_UserPage) { + Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ProfileConfigurePane, _UserPage); + + function ProfileConfigurePane() { + return _UserPage.apply(this, arguments) || this; + } + + var _proto = ProfileConfigurePane.prototype; + + _proto.init = function init() { + _UserPage.prototype.init.call(this); + + this.loading = true; + this.loadUser(flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.session.user.username()); + this.enforceProfileCompletion = flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('masquerade.force-profile-completion') || false; + this.profileCompleted = flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('masquerade.profile-completed') || false; + this.fields = []; + this.answers = {}; + this.load(); + }; + + _proto.content = function content() { + var _this = this; + + return m('form.ProfileConfigurePane', { + onsubmit: this.update.bind(this) + }, [this.enforceProfileCompletion && !this.profileCompleted ? m('.Alert.Alert--Error', flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('fof-masquerade.forum.alerts.profile-completion-required')) : null, m('.Fields', this.fields.sort(function (a, b) { + return a.sort() - b.sort(); + }).map(function (field) { + if (!_this.answers.hasOwnProperty(field.id())) { + _this.answers[field.id()] = field.answer() ? m.prop(field.answer().content()) : m.prop(''); + } + + return _this.field(field); + })), flarum_components_Button__WEBPACK_IMPORTED_MODULE_3___default.a.component({ + type: 'submit', + className: 'Button Button--primary', + children: flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('fof-masquerade.forum.buttons.save-profile'), + loading: this.loading + })]); + }; + + _proto.field = function field(_field) { + var type = _types_TypeFactory__WEBPACK_IMPORTED_MODULE_4__["default"].typeForField({ + field: _field, + set: this.set.bind(this, _field), + value: this.answers[_field.id()] + }); + return type.editorField(); + }; + + _proto.load = function load() { + flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.request({ + method: 'GET', + url: flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('apiUrl') + '/masquerade/configure' + }).then(this.parseResponse.bind(this)); + }; + + _proto.set = function set(field, value) { + if (this.answers.hasOwnProperty(field.id())) { + this.answers[field.id()](value); + } else { + this.answers[field.id()] = m.prop(value); + } + }; + + _proto.update = function update(e) { + var _this2 = this; + + e.preventDefault(); + this.loading = true; + var data = this.answers; + flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.request({ + method: 'POST', + url: flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('apiUrl') + '/masquerade/configure', + data: data + }).then(this.parseResponse.bind(this))["catch"](function () { + _this2.loading = false; + m.redraw(); + }); + }; + + _proto.parseResponse = function parseResponse(response) { + this.fields = flarum_app__WEBPACK_IMPORTED_MODULE_1___default.a.store.pushPayload(response); + this.loading = false; + m.redraw(); + }; + + return ProfileConfigurePane; +}(flarum_components_UserPage__WEBPACK_IMPORTED_MODULE_2___default.a); + + + +/***/ }), + +/***/ "./src/forum/panes/ProfilePane.js": +/*!****************************************!*\ + !*** ./src/forum/panes/ProfilePane.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return ProfileConfigurePane; }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var flarum_components_UserPage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/components/UserPage */ "flarum/components/UserPage"); +/* harmony import */ var flarum_components_UserPage__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_components_UserPage__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _types_TypeFactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../types/TypeFactory */ "./src/forum/types/TypeFactory.js"); + + + +/* global m */ + +var ProfileConfigurePane = /*#__PURE__*/function (_UserPage) { + Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(ProfileConfigurePane, _UserPage); + + function ProfileConfigurePane() { + return _UserPage.apply(this, arguments) || this; + } + + var _proto = ProfileConfigurePane.prototype; + + _proto.init = function init() { + _UserPage.prototype.init.call(this); + + this.loading = true; + this.fields = []; + this.answers = {}; + this.loadUser(m.route.param('username')); + }; + + _proto.content = function content() { + var _this = this; + + return m('.Masquerade-Bio', [m('.Fields', this.fields.sort(function (a, b) { + return a.sort() - b.sort(); + }).map(function (field) { + var content = null; // UserID check must be done with == because userId() is number while id() is string + + if (field.answer() && field.answer().userId() == _this.user.id()) { + if (field.type() === 'text') { + content = field.answer().contentHtml(); + } else { + content = field.answer().content(); + } + } + + _this.answers[field.id()] = content; + return _this.field(field); + }))]); + }; + + _proto.field = function field(_field) { + var type = _types_TypeFactory__WEBPACK_IMPORTED_MODULE_2__["default"].typeForField({ + field: _field, + value: m.prop(this.answers[_field.id()]) + }); + return type.answerField(); + }; + + _proto.load = function load(user) { + app.request({ + method: 'GET', + url: app.forum.attribute('apiUrl') + '/masquerade/profile/' + user.id() + }).then(this.parseResponse.bind(this)); + }; + + _proto.show = function show(user) { + this.load(user); + + _UserPage.prototype.show.call(this, user); + }; + + _proto.parseResponse = function parseResponse(response) { + this.answers = {}; + this.fields = app.store.pushPayload(response); + this.loading = false; + m.redraw(); + }; + + return ProfileConfigurePane; +}(flarum_components_UserPage__WEBPACK_IMPORTED_MODULE_1___default.a); + + + +/***/ }), + +/***/ "./src/forum/types/BaseField.js": +/*!**************************************!*\ + !*** ./src/forum/types/BaseField.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return BaseField; }); +/* harmony import */ var flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/helpers/icon */ "flarum/helpers/icon"); +/* harmony import */ var flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_0__); + +/* global m */ + +var BaseField = /*#__PURE__*/function () { + function BaseField(_ref) { + var field = _ref.field, + set = _ref.set, + value = _ref.value; + this.field = field; + this.set = set; + this.value = value; + } + + var _proto = BaseField.prototype; + + _proto.readAttribute = function readAttribute(object, attribute) { + if (typeof object[attribute] === 'function') { + return object[attribute](); + } + + return object[attribute]; + } + /** + * Gets all Laravel validation rules split by rule + * @returns {Array} + */ + ; + + _proto.validationRules = function validationRules() { + return this.readAttribute(this.field, 'validation').split('|'); + } + /** + * Gets a Laravel validation rule by name + * @param {string} ruleName + * @returns {string|null} + */ + ; + + _proto.validationRule = function validationRule(ruleName) { + var ruleContent = null; + this.validationRules().forEach(function (rule) { + var split = rule.split(':', 2); + + if (split[0] === ruleName) { + ruleContent = split[1]; + } + }); + return ruleContent; + }; + + _proto.editorField = function editorField() { + return m('fieldset.Field', [m('legend', [this.field.icon() ? [flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_0___default()(this.field.icon()), ' '] : null, this.field.name(), this.field.required() ? ' *' : null]), m('.FormField', [this.field.prefix() ? m('.prefix', this.field.prefix()) : null, this.editorInput(), this.field.description() ? m('.helpText', this.field.description()) : null])]); + }; + + _proto.editorInput = function editorInput() { + return m('input', this.editorInputProps()); + }; + + _proto.editorInputProps = function editorInputProps() { + return { + className: 'FormControl', + oninput: m.withAttr('value', this.set), + value: this.value(), + required: this.field.required() + }; + }; + + _proto.answerField = function answerField() { + var iconName = this.readAttribute(this.field, 'icon'); + var type = this.readAttribute(this.field, 'type'); + return m('.Masquerade-Bio-Set', [m('span.Masquerade-Bio-Field', [iconName ? [flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_0___default()(iconName), ' '] : null, this.readAttribute(this.field, 'name') + ': ']), m('span.Masquerade-Bio-Answer' + (type ? '.Masquerade-Bio-Answer-' + this.capitalize(type) : ''), this.answerContent())]); + }; + + _proto.answerContent = function answerContent() { + return this.value(); + }; + + BaseField.isNoOptionSelectedValue = function isNoOptionSelectedValue(value) { + // The value can be null when coming from the API + // The value can be '' when the field does not exist on the user (the empty string is set in ProfileConfigurePane) + return value === null || value === ''; + }; + + _proto.capitalize = function capitalize(s) { + if (typeof s !== 'string') return ''; + return s.charAt(0).toUpperCase() + s.slice(1); + }; + + return BaseField; +}(); + + + +/***/ }), + +/***/ "./src/forum/types/BooleanField.js": +/*!*****************************************!*\ + !*** ./src/forum/types/BooleanField.js ***! + \*****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return BooleanField; }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/helpers/icon */ "flarum/helpers/icon"); +/* harmony import */ var flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _BaseField__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./BaseField */ "./src/forum/types/BaseField.js"); + + + + +var BooleanField = /*#__PURE__*/function (_BaseField) { + Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(BooleanField, _BaseField); + + function BooleanField() { + return _BaseField.apply(this, arguments) || this; + } + + var _proto = BooleanField.prototype; + + _proto.editorInput = function editorInput() { + var _this = this; + + return this.options().map(function (option) { + return m('div', m('label', [m('input[type=radio]', { + checked: option.selected(_this.value()), + onclick: function onclick() { + _this.set(option.key); + } + }), ' ' + option.label])); + }); + }; + + _proto.options = function options() { + var options = []; + + if (!this.readAttribute(this.field, 'required')) { + options.push({ + selected: function selected(value) { + return _BaseField__WEBPACK_IMPORTED_MODULE_2__["default"].isNoOptionSelectedValue(value); + }, + key: null, + label: app.translator.trans('fof-masquerade.forum.fields.select.none-optional') + }); + } + + options.push({ + selected: function selected(value) { + return ['true', '1', 1, true, 'yes'].indexOf(value) !== -1; + }, + key: 'true', + label: app.translator.trans('fof-masquerade.forum.fields.boolean.yes') + }); + options.push({ + selected: function selected(value) { + return ['false', '0', 0, false, 'no'].indexOf(value) !== -1; + }, + key: 'false', + label: app.translator.trans('fof-masquerade.forum.fields.boolean.no') + }); // This is probably overkill because it looks like the backend casts the value anyway + + if (!_BaseField__WEBPACK_IMPORTED_MODULE_2__["default"].isNoOptionSelectedValue(this.value()) && ['true', '1', 1, true, 'yes', 'false', '0', 0, false, 'no'].indexOf(this.value()) === -1) { + options.push({ + selected: function selected() { + return true; + }, + key: this.value(), + label: '(invalid) ' + this.value() + }); + } + + return options; + }; + + _proto.answerContent = function answerContent() { + if (_BaseField__WEBPACK_IMPORTED_MODULE_2__["default"].isNoOptionSelectedValue(this.value())) { + return ''; + } + + return [1, '1', true, 'true', 'yes'].indexOf(this.value()) !== -1 ? [flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_1___default()('far fa-check-square'), ' ', app.translator.trans('fof-masquerade.forum.fields.boolean.yes')] : [flarum_helpers_icon__WEBPACK_IMPORTED_MODULE_1___default()('far fa-square'), ' ', app.translator.trans('fof-masquerade.forum.fields.boolean.no')]; + }; + + return BooleanField; +}(_BaseField__WEBPACK_IMPORTED_MODULE_2__["default"]); + + + +/***/ }), + +/***/ "./src/forum/types/EmailField.js": +/*!***************************************!*\ + !*** ./src/forum/types/EmailField.js ***! + \***************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return EmailField; }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/components/Button */ "flarum/components/Button"); +/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Button__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _BaseField__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./BaseField */ "./src/forum/types/BaseField.js"); + + + + +var EmailField = /*#__PURE__*/function (_BaseField) { + Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(EmailField, _BaseField); + + function EmailField() { + return _BaseField.apply(this, arguments) || this; + } + + var _proto = EmailField.prototype; + + _proto.editorInputProps = function editorInputProps() { + var props = _BaseField.prototype.editorInputProps.call(this); + + props.type = 'email'; + props.placeholder = 'you@example.com'; + return props; + }; + + _proto.answerContent = function answerContent() { + var _this = this; + + var value = this.value(); + + if (!value) { + return null; + } + + var email = value.split(/@|\./).map(function (segment) { + return segment.replace(/(.{2})./g, '$1*'); + }).join('*'); + return flarum_components_Button__WEBPACK_IMPORTED_MODULE_1___default.a.component({ + onclick: function onclick() { + return _this.mailTo(); + }, + className: 'Button Button--text', + icon: 'far fa-envelope', + children: email + }); + }; + + _proto.mailTo = function mailTo() { + window.location = 'mailto:' + this.value(); + }; + + return EmailField; +}(_BaseField__WEBPACK_IMPORTED_MODULE_2__["default"]); + + + +/***/ }), + +/***/ "./src/forum/types/SelectField.js": +/*!****************************************!*\ + !*** ./src/forum/types/SelectField.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return EmailField; }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var flarum_components_Select__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/components/Select */ "flarum/components/Select"); +/* harmony import */ var flarum_components_Select__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Select__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _BaseField__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./BaseField */ "./src/forum/types/BaseField.js"); + + + +var NO_OPTION_SELECTED_KEY = 'fof_masquerade_no_option_selected'; + +var EmailField = /*#__PURE__*/function (_BaseField) { + Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(EmailField, _BaseField); + + function EmailField() { + return _BaseField.apply(this, arguments) || this; + } + + var _proto = EmailField.prototype; + + _proto.editorInput = function editorInput() { + var _this = this; + + return flarum_components_Select__WEBPACK_IMPORTED_MODULE_1___default.a.component({ + onchange: function onchange(value) { + if (value === NO_OPTION_SELECTED_KEY) { + value = null; + } + + _this.set(value); + }, + value: _BaseField__WEBPACK_IMPORTED_MODULE_2__["default"].isNoOptionSelectedValue(this.value()) ? NO_OPTION_SELECTED_KEY : this.value(), + options: this.options() + }); + }; + + _proto.options = function options() { + var options = {}; + + if (!this.readAttribute(this.field, 'required')) { + options[NO_OPTION_SELECTED_KEY] = app.translator.trans('fof-masquerade.forum.fields.select.none-optional'); + } else if (_BaseField__WEBPACK_IMPORTED_MODULE_2__["default"].isNoOptionSelectedValue(this.value())) { + options[NO_OPTION_SELECTED_KEY] = app.translator.trans('fof-masquerade.forum.fields.select.none-required'); + } + + var validationIn = this.validationRule('in'); + + if (validationIn) { + validationIn.split(',').forEach(function (value) { + options[value] = value; + }); + } + + if (!_BaseField__WEBPACK_IMPORTED_MODULE_2__["default"].isNoOptionSelectedValue(this.value()) && typeof options[this.value()] === 'undefined') { + options[this.value()] = '(invalid) ' + this.value(); + } + + return options; + }; + + return EmailField; +}(_BaseField__WEBPACK_IMPORTED_MODULE_2__["default"]); + + + +/***/ }), + +/***/ "./src/forum/types/TextField.js": +/*!**************************************!*\ + !*** ./src/forum/types/TextField.js ***! + \**************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TextField; }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js"); +/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/components/Button */ "flarum/components/Button"); +/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Button__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _BaseField__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./BaseField */ "./src/forum/types/BaseField.js"); + + + + + +var TextField = /*#__PURE__*/function (_BaseField) { + Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(TextField, _BaseField); + + function TextField() { + return _BaseField.apply(this, arguments) || this; + } + + var _proto = TextField.prototype; + + _proto.editorInputProps = function editorInputProps() { + var props = _BaseField.prototype.editorInputProps.call(this); + + props.placeholder = ''; + props.onfocus = this.startUpdatingPreview.bind(this); + props.onfocusout = this.stopUpdatingPreview.bind(this); + return props; + }; + + _proto.baseElementSelector = function baseElementSelector() { + return '.Field-text[data-id="' + this.field.id() + '"]'; + }; + + _proto.startUpdatingPreview = function startUpdatingPreview() { + TextField.updateInterval = setInterval(this.updatePreview.bind(this), 200); + }; + + _proto.stopUpdatingPreview = function stopUpdatingPreview() { + clearInterval(TextField.updateInterval); + document.querySelector(this.baseElementSelector() + ' .js-preview').style.display = 'none'; + }; + + _proto.updatePreview = function updatePreview() { + var content = document.querySelector(this.baseElementSelector() + ' textarea').value; + s9e.TextFormatter.preview(content, document.querySelector(this.baseElementSelector() + ' .js-preview')); + document.querySelector(this.baseElementSelector() + ' .js-preview').style.display = 'block'; + }; + + _proto.answerContent = function answerContent() { + return m.trust(this.value() || ''); + }; + + _proto.editorInput = function editorInput() { + return m('.Field-text', { + 'data-id': this.field.id() + }, [m('.js-preview', { + style: { + display: 'none', + opacity: 0.5, + 'max-height': '400px', + overflow: 'auto' + } + }), m('textarea', this.editorInputProps())]); + }; + + return TextField; +}(_BaseField__WEBPACK_IMPORTED_MODULE_3__["default"]); + +Object(_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(TextField, "updateInterval", void 0); + + + +/***/ }), + +/***/ "./src/forum/types/TypeFactory.js": +/*!****************************************!*\ + !*** ./src/forum/types/TypeFactory.js ***! + \****************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return TypeFactory; }); +/* harmony import */ var _BaseField__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BaseField */ "./src/forum/types/BaseField.js"); +/* harmony import */ var _BooleanField__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./BooleanField */ "./src/forum/types/BooleanField.js"); +/* harmony import */ var _EmailField__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./EmailField */ "./src/forum/types/EmailField.js"); +/* harmony import */ var _SelectField__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./SelectField */ "./src/forum/types/SelectField.js"); +/* harmony import */ var _UrlField__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./UrlField */ "./src/forum/types/UrlField.js"); +/* harmony import */ var _TextField__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TextField */ "./src/forum/types/TextField.js"); + + + + + + + +var TypeFactory = /*#__PURE__*/function () { + function TypeFactory() {} + + TypeFactory.typeForField = function typeForField(_ref) { + var field = _ref.field, + set = _ref.set, + value = _ref.value; + var className = _BaseField__WEBPACK_IMPORTED_MODULE_0__["default"]; + var type = this.identify(field); + + if (type) { + className = this.types()[type]; + } + + return new className({ + field: field, + set: set, + value: value + }); + }; + + TypeFactory.fieldAttribute = function fieldAttribute(field, attribute) { + if (typeof field[attribute] === 'function') { + return field[attribute](); + } + + return field[attribute]; + }; + + TypeFactory.types = function types() { + return { + "boolean": _BooleanField__WEBPACK_IMPORTED_MODULE_1__["default"], + email: _EmailField__WEBPACK_IMPORTED_MODULE_2__["default"], + select: _SelectField__WEBPACK_IMPORTED_MODULE_3__["default"], + url: _UrlField__WEBPACK_IMPORTED_MODULE_4__["default"], + text: _TextField__WEBPACK_IMPORTED_MODULE_5__["default"] + }; + } + /** + * Identifies how to parse the field answer. + * @returns {null|string} + */ + ; + + TypeFactory.identify = function identify(field) { + var _this = this; + + var validation = (this.fieldAttribute(field, 'validation') || '').split(','); + var identified = null; // If the field has a type we use it + + var fieldType = this.fieldAttribute(field, 'type'); + + if (typeof this.types()[fieldType] !== 'undefined') { + return fieldType; + } // If it's an advanced field with no type we then guess the best type + + + validation.forEach(function (rule) { + rule = rule.trim(); + + if (typeof _this.types()[rule] !== 'undefined') { + identified = rule; + } + }); + return identified; + }; + + return TypeFactory; +}(); + + + +/***/ }), + +/***/ "./src/forum/types/UrlField.js": +/*!*************************************!*\ + !*** ./src/forum/types/UrlField.js ***! + \*************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return UrlField; }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/components/Button */ "flarum/components/Button"); +/* harmony import */ var flarum_components_Button__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_components_Button__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _BaseField__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./BaseField */ "./src/forum/types/BaseField.js"); + + + + +var UrlField = /*#__PURE__*/function (_BaseField) { + Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(UrlField, _BaseField); + + function UrlField() { + return _BaseField.apply(this, arguments) || this; + } + + var _proto = UrlField.prototype; + + _proto.editorInputProps = function editorInputProps() { + var props = _BaseField.prototype.editorInputProps.call(this); + + props.type = 'url'; + props.placeholder = 'https://example.com'; + return props; + }; + + _proto.answerContent = function answerContent() { + var _this = this; + + var value = this.value(); + + if (!value) { + return null; + } + + return flarum_components_Button__WEBPACK_IMPORTED_MODULE_1___default.a.component({ + onclick: function onclick() { + return _this.to(); + }, + className: 'Button Button--text', + icon: 'fas fa-link', + children: value.replace(/^https?:\/\//, '') + }); + }; + + _proto.to = function to() { + var popup = window.open(); + popup.location = this.value(); + }; + + return UrlField; +}(_BaseField__WEBPACK_IMPORTED_MODULE_2__["default"]); + + + +/***/ }), + +/***/ "./src/lib/models/Answer.js": +/*!**********************************!*\ + !*** ./src/lib/models/Answer.js ***! + \**********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Answer; }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/Model */ "flarum/Model"); +/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_Model__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_utils_mixin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/utils/mixin */ "flarum/utils/mixin"); +/* harmony import */ var flarum_utils_mixin__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_mixin__WEBPACK_IMPORTED_MODULE_2__); + + + + +var Answer = /*#__PURE__*/function (_mixin) { + Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(Answer, _mixin); + + function Answer() { + return _mixin.apply(this, arguments) || this; + } + + var _proto = Answer.prototype; + + /** + * Construct a path to the API endpoint for this resource. + * + * @return {String} + * @protected + */ + _proto.apiEndpoint = function apiEndpoint() { + return '/masquerade/configure' + (this.exists ? '/' + this.data.id : ''); + }; + + return Answer; +}(flarum_utils_mixin__WEBPACK_IMPORTED_MODULE_2___default()(flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a, { + content: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('content'), + contentHtml: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('content_html'), + field: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.hasOne('field'), + userId: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('user_id') +})); + + + +/***/ }), + +/***/ "./src/lib/models/Field.js": +/*!*********************************!*\ + !*** ./src/lib/models/Field.js ***! + \*********************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Field; }); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/Model */ "flarum/Model"); +/* harmony import */ var flarum_Model__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_Model__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var flarum_utils_mixin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/utils/mixin */ "flarum/utils/mixin"); +/* harmony import */ var flarum_utils_mixin__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_utils_mixin__WEBPACK_IMPORTED_MODULE_2__); + + + + +var Field = /*#__PURE__*/function (_mixin) { + Object(_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(Field, _mixin); + + function Field() { + return _mixin.apply(this, arguments) || this; + } + + var _proto = Field.prototype; + + /** + * Construct a path to the API endpoint for this resource. + * + * @return {String} + * @protected + */ + _proto.apiEndpoint = function apiEndpoint() { + return '/masquerade/fields' + (this.exists ? '/' + this.data.id : ''); + }; + + return Field; +}(flarum_utils_mixin__WEBPACK_IMPORTED_MODULE_2___default()(flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a, { + name: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('name'), + description: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('description'), + type: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('type'), + validation: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('validation'), + required: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('required'), + prefix: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('prefix'), + icon: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('icon'), + sort: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('sort'), + deleted_at: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('deleted_at', flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.transformDate), + answer: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.hasOne('answer'), + on_bio: flarum_Model__WEBPACK_IMPORTED_MODULE_1___default.a.attribute('on_bio') +})); + + + +/***/ }), + +/***/ "flarum/Model": +/*!**********************************************!*\ + !*** external "flarum.core.compat['Model']" ***! + \**********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['Model']; + +/***/ }), + +/***/ "flarum/app": +/*!********************************************!*\ + !*** external "flarum.core.compat['app']" ***! + \********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['app']; + +/***/ }), + +/***/ "flarum/components/Button": +/*!**********************************************************!*\ + !*** external "flarum.core.compat['components/Button']" ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['components/Button']; + +/***/ }), + +/***/ "flarum/components/LinkButton": +/*!**************************************************************!*\ + !*** external "flarum.core.compat['components/LinkButton']" ***! + \**************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['components/LinkButton']; + +/***/ }), + +/***/ "flarum/components/Select": +/*!**********************************************************!*\ + !*** external "flarum.core.compat['components/Select']" ***! + \**********************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['components/Select']; + +/***/ }), + +/***/ "flarum/components/UserCard": +/*!************************************************************!*\ + !*** external "flarum.core.compat['components/UserCard']" ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['components/UserCard']; + +/***/ }), + +/***/ "flarum/components/UserPage": +/*!************************************************************!*\ + !*** external "flarum.core.compat['components/UserPage']" ***! + \************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['components/UserPage']; + +/***/ }), + +/***/ "flarum/extend": +/*!***********************************************!*\ + !*** external "flarum.core.compat['extend']" ***! + \***********************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['extend']; + +/***/ }), + +/***/ "flarum/helpers/icon": +/*!*****************************************************!*\ + !*** external "flarum.core.compat['helpers/icon']" ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['helpers/icon']; + +/***/ }), + +/***/ "flarum/models/User": +/*!****************************************************!*\ + !*** external "flarum.core.compat['models/User']" ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['models/User']; + +/***/ }), + +/***/ "flarum/utils/mixin": +/*!****************************************************!*\ + !*** external "flarum.core.compat['utils/mixin']" ***! + \****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['utils/mixin']; + +/***/ }) + +/******/ }); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/js/dist/forum.js.map b/js/dist/forum.js.map index c7ab9e9..c7f8b6e 100644 --- a/js/dist/forum.js.map +++ b/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://@fof/masquerade/webpack/bootstrap","webpack://@fof/masquerade/external \"flarum.core.compat['app']\"","webpack://@fof/masquerade/external \"flarum.core.compat['Model']\"","webpack://@fof/masquerade/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@fof/masquerade/external \"flarum.core.compat['helpers/icon']\"","webpack://@fof/masquerade/external \"flarum.core.compat['extend']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/Button']\"","webpack://@fof/masquerade/external \"flarum.core.compat['utils/mixin']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/UserPage']\"","webpack://@fof/masquerade/./src/lib/models/Field.js","webpack://@fof/masquerade/external \"flarum.core.compat['components/Select']\"","webpack://@fof/masquerade/external \"flarum.core.compat['models/User']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/LinkButton']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/UserCard']\"","webpack://@fof/masquerade/./src/lib/models/Answer.js","webpack://@fof/masquerade/./src/forum/types/BaseField.js","webpack://@fof/masquerade/./src/forum/types/BooleanField.js","webpack://@fof/masquerade/./src/forum/types/EmailField.js","webpack://@fof/masquerade/./src/forum/types/SelectField.js","webpack://@fof/masquerade/./src/forum/types/UrlField.js","webpack://@fof/masquerade/./src/forum/types/TypeFactory.js","webpack://@fof/masquerade/./src/forum/panes/ProfileConfigurePane.js","webpack://@fof/masquerade/./src/forum/panes/ProfilePane.js","webpack://@fof/masquerade/./src/forum/mutateUserHero.js","webpack://@fof/masquerade/./src/forum/index.js","webpack://@fof/masquerade/./src/forum/addProfilePane.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","_inheritsLoose","subClass","superClass","constructor","__proto__","__webpack_exports__","Field","apiEndpoint","this","exists","data","id","mixin","Model","attribute","description","type","validation","required","prefix","icon","sort","deleted_at","transformDate","answer","hasOne","on_bio","Answer","content","field","userId","BaseField","_ref","set","readAttribute","validationRules","split","validationRule","ruleName","ruleContent","forEach","rule","editorField","editorInput","editorInputProps","className","oninput","withAttr","answerField","iconName","answerContent","isNoOptionSelectedValue","BooleanField","_this","options","map","option","checked","selected","onclick","label","push","app","translator","trans","indexOf","EmailField","props","_BaseField","placeholder","email","segment","replace","join","Button","component","mailTo","children","window","location","Select","onchange","validationIn","UrlField","to","open","TypeFactory","typeForField","identify","types","fieldAttribute","boolean","select","SelectField","url","identified","fieldType","trim","ProfileConfigurePane","init","_UserPage","loading","loadUser","session","user","username","enforceProfileCompletion","forum","profileCompleted","fields","answers","load","onsubmit","update","a","b","prop","request","method","then","parseResponse","e","_this2","preventDefault","redraw","response","store","pushPayload","UserPage","route","param","show","mutateUserHero","extend","UserCard","items","bioFields","add","initializers","models","User","hasMany","routes","path","ProfilePane","isOwnProfileAndCanHaveMasquerade","href","LinkButton"],"mappings":"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","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 19);\n","module.exports = flarum.core.compat['app'];","module.exports = flarum.core.compat['Model'];","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","module.exports = flarum.core.compat['helpers/icon'];","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['components/Button'];","module.exports = flarum.core.compat['utils/mixin'];","module.exports = flarum.core.compat['components/UserPage'];","import Model from 'flarum/Model';\nimport mixin from 'flarum/utils/mixin';\n\nexport default class Field extends mixin(Model, {\n name: Model.attribute('name'),\n description: Model.attribute('description'),\n type: Model.attribute('type'),\n validation: Model.attribute('validation'),\n required: Model.attribute('required'),\n prefix: Model.attribute('prefix'),\n icon: Model.attribute('icon'),\n sort: Model.attribute('sort'),\n deleted_at: Model.attribute('deleted_at', Model.transformDate),\n answer: Model.hasOne('answer'),\n on_bio: Model.attribute('on_bio')\n}) {\n /**\n * Construct a path to the API endpoint for this resource.\n *\n * @return {String}\n * @protected\n */\n apiEndpoint() {\n return '/masquerade/fields' + (this.exists ? '/' + this.data.id : '');\n }\n}\n","module.exports = flarum.core.compat['components/Select'];","module.exports = flarum.core.compat['models/User'];","module.exports = flarum.core.compat['components/LinkButton'];","module.exports = flarum.core.compat['components/UserCard'];","import Model from 'flarum/Model';\nimport mixin from 'flarum/utils/mixin';\n\nexport default class Answer extends mixin(Model, {\n content: Model.attribute('content'),\n field: Model.hasOne('field'),\n userId: Model.attribute('user_id')\n}) {\n /**\n * Construct a path to the API endpoint for this resource.\n *\n * @return {String}\n * @protected\n */\n apiEndpoint() {\n return '/masquerade/configure' + (this.exists ? '/' + this.data.id : '');\n }\n}\n","import icon from 'flarum/helpers/icon';\n\n/* global m */\n\nexport default class BaseField {\n constructor({field, set, value}) {\n this.field = field;\n this.set = set;\n this.value = value;\n }\n\n readAttribute(object, attribute) {\n if (typeof object[attribute] === 'function') {\n return object[attribute]();\n }\n\n return object[attribute];\n }\n\n /**\n * Gets all Laravel validation rules split by rule\n * @returns {Array}\n */\n validationRules() {\n return this.readAttribute(this.field, 'validation').split('|');\n }\n\n /**\n * Gets a Laravel validation rule by name\n * @param {string} ruleName\n * @returns {string|null}\n */\n validationRule(ruleName) {\n let ruleContent = null;\n\n this.validationRules().forEach(rule => {\n const split = rule.split(':', 2);\n\n if (split[0] === ruleName) {\n ruleContent = split[1];\n }\n });\n\n return ruleContent;\n }\n\n editorField() {\n return m('fieldset.Field', [\n m('legend', [\n this.field.icon() ? [icon(this.field.icon()), ' '] : null,\n this.field.name(),\n this.field.required() ? ' *' : null,\n ]),\n m('.FormField', [\n this.field.prefix() ? m('.prefix', this.field.prefix()) : null,\n this.editorInput(),\n this.field.description() ? m('.helpText', this.field.description()) : null,\n ]),\n ]);\n }\n\n editorInput() {\n return m('input', this.editorInputProps());\n }\n\n editorInputProps() {\n return {\n className: 'FormControl',\n oninput: m.withAttr('value', this.set),\n value: this.value(),\n required: this.field.required(),\n };\n }\n\n answerField() {\n const iconName = this.readAttribute(this.field, 'icon');\n\n return m('.Masquerade-Bio-Set', [\n m('span.Masquerade-Bio-Field', [\n iconName ? [icon(iconName), ' '] : null,\n this.readAttribute(this.field, 'name') + ': ',\n ]),\n m('span.Masquerade-Bio-Answer', this.answerContent()),\n ]);\n }\n\n answerContent() {\n return this.value();\n }\n\n static isNoOptionSelectedValue(value) {\n // The value can be null when coming from the API\n // The value can be '' when the field does not exist on the user (the empty string is set in ProfileConfigurePane)\n return value === null || value === '';\n }\n}\n","import icon from 'flarum/helpers/icon';\nimport BaseField from './BaseField';\n\nexport default class BooleanField extends BaseField {\n editorInput() {\n return this.options().map(option => m('div', m('label', [\n m('input[type=radio]', {\n checked: option.selected(this.value()),\n onclick: () => {\n this.set(option.key);\n },\n }),\n ' ' + option.label,\n ])));\n }\n\n options() {\n let options = [];\n\n if (!this.readAttribute(this.field, 'required')) {\n options.push({\n selected: value => BaseField.isNoOptionSelectedValue(value),\n key: null,\n label: app.translator.trans('fof-masquerade.forum.fields.select.none-optional'),\n });\n }\n\n options.push({\n selected: value => ['true', '1', 1, true, 'yes'].indexOf(value) !== -1,\n key: 'true',\n label: app.translator.trans('fof-masquerade.forum.fields.boolean.yes'),\n });\n\n options.push({\n selected: value => ['false', '0', 0, false, 'no'].indexOf(value) !== -1,\n key: 'false',\n label: app.translator.trans('fof-masquerade.forum.fields.boolean.no'),\n });\n\n // This is probably overkill because it looks like the backend casts the value anyway\n if (!BaseField.isNoOptionSelectedValue(this.value()) && ['true', '1', 1, true, 'yes', 'false', '0', 0, false, 'no'].indexOf(this.value()) === -1) {\n options.push({\n selected: () => true,\n key: this.value(),\n label: '(invalid) ' + this.value(),\n });\n }\n\n return options;\n }\n\n answerContent() {\n if (BaseField.isNoOptionSelectedValue(this.value())) {\n return '';\n }\n\n return [1, '1', true, 'true', 'yes'].indexOf(this.value()) !== -1 ?\n [icon('far fa-check-square'), ' ', app.translator.trans('fof-masquerade.forum.fields.boolean.yes')] :\n [icon('far fa-square'), ' ', app.translator.trans('fof-masquerade.forum.fields.boolean.no')];\n }\n}\n","import Button from 'flarum/components/Button';\nimport BaseField from './BaseField';\n\nexport default class EmailField extends BaseField {\n editorInputProps() {\n let props = super.editorInputProps();\n\n props.type = 'email';\n props.placeholder = 'you@example.com';\n\n return props;\n }\n\n answerContent() {\n const value = this.value();\n\n if (!value) {\n return null;\n }\n\n const email = value\n .split(/@|\\./)\n .map(segment => {\n return segment.replace(/(.{2})./g, '$1*');\n })\n .join('*');\n\n return Button.component({\n onclick: () => this.mailTo(),\n className: 'Button Button--text',\n icon: 'far fa-envelope',\n children: email,\n });\n }\n\n mailTo() {\n window.location = 'mailto:' + this.value();\n }\n}\n","import Select from 'flarum/components/Select';\nimport BaseField from './BaseField';\n\nconst NO_OPTION_SELECTED_KEY = 'fof_masquerade_no_option_selected';\n\nexport default class EmailField extends BaseField {\n editorInput() {\n return Select.component({\n onchange: value => {\n if (value === NO_OPTION_SELECTED_KEY) {\n value = null;\n }\n\n this.set(value);\n },\n value: BaseField.isNoOptionSelectedValue(this.value()) ? NO_OPTION_SELECTED_KEY : this.value(),\n options: this.options(),\n });\n }\n\n options() {\n let options = {};\n\n if (!this.readAttribute(this.field, 'required')) {\n options[NO_OPTION_SELECTED_KEY] = app.translator.trans('fof-masquerade.forum.fields.select.none-optional');\n } else if (BaseField.isNoOptionSelectedValue(this.value())) {\n options[NO_OPTION_SELECTED_KEY] = app.translator.trans('fof-masquerade.forum.fields.select.none-required');\n }\n\n const validationIn = this.validationRule('in');\n\n if (validationIn) {\n validationIn.split(',').forEach(value => {\n options[value] = value;\n });\n }\n\n if (!BaseField.isNoOptionSelectedValue(this.value()) && typeof options[this.value()] === 'undefined') {\n options[this.value()] = '(invalid) ' + this.value();\n }\n\n return options;\n }\n}\n","import Button from 'flarum/components/Button';\nimport BaseField from './BaseField';\n\nexport default class UrlField extends BaseField {\n editorInputProps() {\n let props = super.editorInputProps();\n\n props.type = 'url';\n props.placeholder = 'https://example.com';\n\n return props;\n }\n\n answerContent() {\n const value = this.value();\n\n if (!value) {\n return null;\n }\n\n return Button.component({\n onclick: () => this.to(),\n className: 'Button Button--text',\n icon: 'fas fa-link',\n children: value.replace(/^https?:\\/\\//, ''),\n });\n }\n\n to() {\n const popup = window.open();\n popup.location = this.value();\n }\n}\n","import BaseField from './BaseField';\nimport BooleanField from './BooleanField';\nimport EmailField from './EmailField';\nimport SelectField from './SelectField';\nimport UrlField from './UrlField';\n\nexport default class TypeFactory {\n static typeForField({field, set, value}) {\n let className = BaseField;\n\n const type = this.identify(field);\n\n if (type) {\n className = this.types()[type];\n }\n\n return new className({\n field,\n set,\n value,\n });\n }\n\n static fieldAttribute(field, attribute) {\n if (typeof field[attribute] === 'function') {\n return field[attribute]();\n }\n\n return field[attribute];\n }\n\n static types() {\n return {\n boolean: BooleanField,\n email: EmailField,\n select: SelectField,\n url: UrlField,\n };\n }\n\n /**\n * Identifies how to parse the field answer.\n * @returns {null|string}\n */\n static identify(field) {\n const validation = (this.fieldAttribute(field, 'validation') || '').split(',');\n let identified = null;\n\n // If the field has a type we use it\n const fieldType = this.fieldAttribute(field, 'type');\n if (typeof this.types()[fieldType] !== 'undefined') {\n return fieldType;\n }\n\n // If it's an advanced field with no type we then guess the best type\n validation.forEach(rule => {\n rule = rule.trim();\n\n if (typeof this.types()[rule] !== 'undefined') {\n identified = rule;\n }\n });\n\n return identified;\n }\n}\n","import app from 'flarum/app';\nimport UserPage from 'flarum/components/UserPage';\nimport Button from 'flarum/components/Button';\nimport TypeFactory from './../types/TypeFactory';\n\n/* global m */\n\nexport default class ProfileConfigurePane extends UserPage {\n init() {\n super.init();\n this.loading = true;\n\n this.loadUser(app.session.user.username());\n this.enforceProfileCompletion = app.forum.attribute('masquerade.force-profile-completion') || false;\n this.profileCompleted = app.forum.attribute('masquerade.profile-completed') || false;\n this.fields = [];\n this.answers = {};\n this.load();\n }\n\n content() {\n return m('form.ProfileConfigurePane', {\n onsubmit: this.update.bind(this),\n }, [\n (this.enforceProfileCompletion && !this.profileCompleted) ?\n m('.Alert.Alert--Error', app.translator.trans('fof-masquerade.forum.alerts.profile-completion-required')) :\n null,\n m('.Fields', this.fields\n .sort((a, b) => a.sort() - b.sort())\n .map(field => {\n if (!this.answers.hasOwnProperty(field.id())) {\n this.answers[field.id()] = field.answer() ? m.prop(field.answer().content()) : m.prop('');\n }\n\n return this.field(field);\n })\n ),\n Button.component({\n type: 'submit',\n className: 'Button Button--primary',\n children: app.translator.trans('fof-masquerade.forum.buttons.save-profile'),\n loading: this.loading,\n }),\n ]);\n }\n\n field(field) {\n const type = TypeFactory.typeForField({\n field,\n set: this.set.bind(this, field),\n value: this.answers[field.id()],\n });\n\n return type.editorField();\n }\n\n load() {\n app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/masquerade/configure',\n }).then(\n this.parseResponse.bind(this)\n );\n }\n\n set(field, value) {\n if (this.answers.hasOwnProperty(field.id())) {\n this.answers[field.id()](value);\n } else {\n this.answers[field.id()] = m.prop(value);\n }\n }\n\n update(e) {\n e.preventDefault();\n\n this.loading = true;\n let data = this.answers;\n\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/masquerade/configure',\n data,\n }).then(\n this.parseResponse.bind(this)\n ).catch(() => {\n this.loading = false;\n m.redraw();\n });\n }\n\n parseResponse(response) {\n this.fields = app.store.pushPayload(response);\n this.loading = false;\n m.redraw();\n }\n}\n","import UserPage from 'flarum/components/UserPage';\nimport TypeFactory from './../types/TypeFactory';\n\n/* global m */\n\nexport default class ProfileConfigurePane extends UserPage {\n init() {\n super.init();\n this.loading = true;\n\n this.fields = [];\n this.answers = {};\n\n this.loadUser(m.route.param('username'));\n }\n\n content() {\n return m('.Masquerade-Bio', [\n m('.Fields', this.fields\n .sort((a, b) => a.sort() - b.sort())\n .map(field => {\n // UserID check must be done with == because userId() is number while id() is string\n this.answers[field.id()] = field.answer() && field.answer().userId() == this.user.id() ? field.answer().content() : null;\n\n return this.field(field);\n })\n ),\n ]);\n }\n\n field(field) {\n const type = TypeFactory.typeForField({\n field,\n value: m.prop(this.answers[field.id()]),\n });\n\n return type.answerField();\n }\n\n load(user) {\n app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/masquerade/profile/' + user.id(),\n }).then(\n this.parseResponse.bind(this)\n );\n }\n\n show(user) {\n this.load(user);\n\n super.show(user);\n }\n\n parseResponse(response) {\n this.answers = {};\n this.fields = app.store.pushPayload(response);\n\n this.loading = false;\n m.redraw();\n }\n}\n","import {extend} from \"flarum/extend\";\nimport UserCard from \"flarum/components/UserCard\";\nimport TypeFactory from './types/TypeFactory';\n\nexport default function () {\n extend(UserCard.prototype, 'infoItems', function (items) {\n let answers = app.forum.attribute('canViewMasquerade') ? this.props.user.bioFields() || [] : [];\n\n items.add('masquerade-bio', m('div', answers.map(answer => {\n const field = answer.attribute('field');\n const type = TypeFactory.typeForField({\n field,\n value() {\n return answer.content();\n },\n });\n\n return type.answerField();\n })));\n });\n}\n","import {extend} from \"flarum/extend\";\nimport app from \"flarum/app\";\nimport User from \"flarum/models/User\";\nimport Field from \"./../lib/models/Field\";\nimport Answer from \"./../lib/models/Answer\";\nimport Model from 'flarum/Model';\n\nimport addProfilePane from './addProfilePane';\nimport mutateUserHero from './mutateUserHero';\n\napp.initializers.add('fof-masquerade', app => {\n app.store.models['masquerade-field'] = Field;\n app.store.models['masquerade-answer'] = Answer;\n\n User.prototype.bioFields = Model.hasMany('bioFields');\n\n addProfilePane();\n\n mutateUserHero();\n});\n","import {extend} from 'flarum/extend';\nimport app from 'flarum/app';\nimport LinkButton from 'flarum/components/LinkButton';\nimport UserPage from 'flarum/components/UserPage';\nimport ProfileConfigurePane from './panes/ProfileConfigurePane';\nimport ProfilePane from './panes/ProfilePane';\n\nexport default function () {\n app.routes['fof-masquerade-view-profile'] = {\n path: '/masquerade/:username',\n component: ProfilePane.component(),\n };\n app.routes['fof-masquerade-configure-profile'] = {\n path: '/masquerade/configure',\n component: ProfileConfigurePane.component(),\n };\n\n extend(UserPage.prototype, 'navItems', function (items) {\n const isOwnProfileAndCanHaveMasquerade = app.forum.attribute('canHaveMasquerade') && app.session.user.id() === this.user.id();\n\n if (app.forum.attribute('canViewMasquerade') || isOwnProfileAndCanHaveMasquerade) {\n const href = isOwnProfileAndCanHaveMasquerade\n ? app.route('fof-masquerade-configure-profile')\n : app.route('fof-masquerade-view-profile', {username: this.user.username()});\n items.add('masquerade',\n LinkButton.component({\n href,\n children: app.translator.trans('fof-masquerade.forum.buttons.view-profile'),\n icon: 'far fa-id-card',\n }),\n 200\n );\n }\n });\n}\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://@fof/masquerade/webpack/bootstrap","webpack://@fof/masquerade/./forum.js","webpack://@fof/masquerade/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@fof/masquerade/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@fof/masquerade/./src/forum/addProfilePane.js","webpack://@fof/masquerade/./src/forum/index.js","webpack://@fof/masquerade/./src/forum/mutateUserHero.js","webpack://@fof/masquerade/./src/forum/panes/ProfileConfigurePane.js","webpack://@fof/masquerade/./src/forum/panes/ProfilePane.js","webpack://@fof/masquerade/./src/forum/types/BaseField.js","webpack://@fof/masquerade/./src/forum/types/BooleanField.js","webpack://@fof/masquerade/./src/forum/types/EmailField.js","webpack://@fof/masquerade/./src/forum/types/SelectField.js","webpack://@fof/masquerade/./src/forum/types/TextField.js","webpack://@fof/masquerade/./src/forum/types/TypeFactory.js","webpack://@fof/masquerade/./src/forum/types/UrlField.js","webpack://@fof/masquerade/./src/lib/models/Answer.js","webpack://@fof/masquerade/./src/lib/models/Field.js","webpack://@fof/masquerade/external \"flarum.core.compat['Model']\"","webpack://@fof/masquerade/external \"flarum.core.compat['app']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/Button']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/LinkButton']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/Select']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/UserCard']\"","webpack://@fof/masquerade/external \"flarum.core.compat['components/UserPage']\"","webpack://@fof/masquerade/external \"flarum.core.compat['extend']\"","webpack://@fof/masquerade/external \"flarum.core.compat['helpers/icon']\"","webpack://@fof/masquerade/external \"flarum.core.compat['models/User']\"","webpack://@fof/masquerade/external \"flarum.core.compat['utils/mixin']\""],"names":["app","routes","path","component","ProfilePane","ProfileConfigurePane","extend","UserPage","prototype","items","isOwnProfileAndCanHaveMasquerade","forum","attribute","session","user","id","href","route","username","add","LinkButton","children","translator","trans","icon","initializers","store","models","Field","Answer","User","bioFields","Model","hasMany","addProfilePane","mutateUserHero","UserCard","answers","props","m","map","answer","field","type","TypeFactory","typeForField","value","content","answerField","init","loading","loadUser","enforceProfileCompletion","profileCompleted","fields","load","onsubmit","update","bind","sort","a","b","hasOwnProperty","prop","Button","className","set","editorField","request","method","url","then","parseResponse","e","preventDefault","data","redraw","response","pushPayload","param","userId","contentHtml","show","BaseField","readAttribute","object","validationRules","split","validationRule","ruleName","ruleContent","forEach","rule","name","required","prefix","editorInput","description","editorInputProps","oninput","withAttr","iconName","capitalize","answerContent","isNoOptionSelectedValue","s","charAt","toUpperCase","slice","BooleanField","options","option","checked","selected","onclick","key","label","push","indexOf","EmailField","placeholder","email","segment","replace","join","mailTo","window","location","NO_OPTION_SELECTED_KEY","Select","onchange","validationIn","TextField","onfocus","startUpdatingPreview","onfocusout","stopUpdatingPreview","baseElementSelector","updateInterval","setInterval","updatePreview","clearInterval","document","querySelector","style","display","s9e","TextFormatter","preview","trust","opacity","overflow","identify","types","fieldAttribute","select","SelectField","UrlField","text","validation","identified","fieldType","trim","to","popup","open","apiEndpoint","exists","mixin","hasOne","deleted_at","transformDate","on_bio"],"mappings":"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","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./forum.js\");\n","export * from './src/forum';\n","export default function _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}","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","import {extend} from 'flarum/extend';\nimport app from 'flarum/app';\nimport LinkButton from 'flarum/components/LinkButton';\nimport UserPage from 'flarum/components/UserPage';\nimport ProfileConfigurePane from './panes/ProfileConfigurePane';\nimport ProfilePane from './panes/ProfilePane';\n\nexport default function () {\n app.routes['fof-masquerade-view-profile'] = {\n path: '/masquerade/:username',\n component: ProfilePane.component(),\n };\n app.routes['fof-masquerade-configure-profile'] = {\n path: '/masquerade/configure',\n component: ProfileConfigurePane.component(),\n };\n\n extend(UserPage.prototype, 'navItems', function (items) {\n const isOwnProfileAndCanHaveMasquerade = app.forum.attribute('canHaveMasquerade') && app.session.user.id() === this.user.id();\n\n if (app.forum.attribute('canViewMasquerade') || isOwnProfileAndCanHaveMasquerade) {\n const href = isOwnProfileAndCanHaveMasquerade\n ? app.route('fof-masquerade-configure-profile')\n : app.route('fof-masquerade-view-profile', {username: this.user.username()});\n items.add('masquerade',\n LinkButton.component({\n href,\n children: app.translator.trans('fof-masquerade.forum.buttons.view-profile'),\n icon: 'far fa-id-card',\n }),\n 200\n );\n }\n });\n}\n","import {extend} from \"flarum/extend\";\nimport app from \"flarum/app\";\nimport User from \"flarum/models/User\";\nimport Field from \"./../lib/models/Field\";\nimport Answer from \"./../lib/models/Answer\";\nimport Model from 'flarum/Model';\n\nimport addProfilePane from './addProfilePane';\nimport mutateUserHero from './mutateUserHero';\n\napp.initializers.add('fof-masquerade', app => {\n app.store.models['masquerade-field'] = Field;\n app.store.models['masquerade-answer'] = Answer;\n\n User.prototype.bioFields = Model.hasMany('bioFields');\n\n addProfilePane();\n\n mutateUserHero();\n});\n","import {extend} from \"flarum/extend\";\nimport UserCard from \"flarum/components/UserCard\";\nimport TypeFactory from './types/TypeFactory';\n\nexport default function () {\n extend(UserCard.prototype, 'infoItems', function (items) {\n let answers = app.forum.attribute('canViewMasquerade') ? this.props.user.bioFields() || [] : [];\n\n items.add('masquerade-bio', m('div', answers.map(answer => {\n const field = answer.attribute('field');\n const type = TypeFactory.typeForField({\n field,\n value() {\n return answer.content();\n },\n });\n\n return type.answerField();\n })));\n });\n}\n","import app from 'flarum/app';\nimport UserPage from 'flarum/components/UserPage';\nimport Button from 'flarum/components/Button';\nimport TypeFactory from './../types/TypeFactory';\n\n/* global m */\n\nexport default class ProfileConfigurePane extends UserPage {\n init() {\n super.init();\n this.loading = true;\n\n this.loadUser(app.session.user.username());\n this.enforceProfileCompletion = app.forum.attribute('masquerade.force-profile-completion') || false;\n this.profileCompleted = app.forum.attribute('masquerade.profile-completed') || false;\n this.fields = [];\n this.answers = {};\n this.load();\n }\n\n content() {\n return m('form.ProfileConfigurePane', {\n onsubmit: this.update.bind(this),\n }, [\n (this.enforceProfileCompletion && !this.profileCompleted) ?\n m('.Alert.Alert--Error', app.translator.trans('fof-masquerade.forum.alerts.profile-completion-required')) :\n null,\n m('.Fields', this.fields\n .sort((a, b) => a.sort() - b.sort())\n .map(field => {\n if (!this.answers.hasOwnProperty(field.id())) {\n this.answers[field.id()] = field.answer() ? m.prop(field.answer().content()) : m.prop('');\n }\n\n return this.field(field);\n })\n ),\n Button.component({\n type: 'submit',\n className: 'Button Button--primary',\n children: app.translator.trans('fof-masquerade.forum.buttons.save-profile'),\n loading: this.loading,\n }),\n ]);\n }\n\n field(field) {\n const type = TypeFactory.typeForField({\n field,\n set: this.set.bind(this, field),\n value: this.answers[field.id()],\n });\n\n return type.editorField();\n }\n\n load() {\n app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/masquerade/configure',\n }).then(\n this.parseResponse.bind(this)\n );\n }\n\n set(field, value) {\n if (this.answers.hasOwnProperty(field.id())) {\n this.answers[field.id()](value);\n } else {\n this.answers[field.id()] = m.prop(value);\n }\n }\n\n update(e) {\n e.preventDefault();\n\n this.loading = true;\n let data = this.answers;\n\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/masquerade/configure',\n data,\n }).then(\n this.parseResponse.bind(this)\n ).catch(() => {\n this.loading = false;\n m.redraw();\n });\n }\n\n parseResponse(response) {\n this.fields = app.store.pushPayload(response);\n this.loading = false;\n m.redraw();\n }\n}\n","import UserPage from 'flarum/components/UserPage';\nimport TypeFactory from './../types/TypeFactory';\n\n/* global m */\n\nexport default class ProfileConfigurePane extends UserPage {\n init() {\n super.init();\n this.loading = true;\n\n this.fields = [];\n this.answers = {};\n\n this.loadUser(m.route.param('username'));\n }\n\n content() {\n return m('.Masquerade-Bio', [\n m('.Fields', this.fields\n .sort((a, b) => a.sort() - b.sort())\n .map(field => {\n let content = null;\n // UserID check must be done with == because userId() is number while id() is string\n if (field.answer() && field.answer().userId() == this.user.id()) {\n if (field.type() === 'text') {\n content = field.answer().contentHtml();\n } else {\n content = field.answer().content()\n }\n }\n this.answers[field.id()] = content;\n\n return this.field(field);\n })\n ),\n ]);\n }\n\n field(field) {\n const type = TypeFactory.typeForField({\n field,\n value: m.prop(this.answers[field.id()]),\n });\n\n return type.answerField();\n }\n\n load(user) {\n app.request({\n method: 'GET',\n url: app.forum.attribute('apiUrl') + '/masquerade/profile/' + user.id(),\n }).then(\n this.parseResponse.bind(this)\n );\n }\n\n show(user) {\n this.load(user);\n\n super.show(user);\n }\n\n parseResponse(response) {\n this.answers = {};\n this.fields = app.store.pushPayload(response);\n\n this.loading = false;\n m.redraw();\n }\n}\n","import icon from 'flarum/helpers/icon';\n\n/* global m */\n\nexport default class BaseField {\n constructor({field, set, value}) {\n this.field = field;\n this.set = set;\n this.value = value;\n }\n\n readAttribute(object, attribute) {\n if (typeof object[attribute] === 'function') {\n return object[attribute]();\n }\n\n return object[attribute];\n }\n\n /**\n * Gets all Laravel validation rules split by rule\n * @returns {Array}\n */\n validationRules() {\n return this.readAttribute(this.field, 'validation').split('|');\n }\n\n /**\n * Gets a Laravel validation rule by name\n * @param {string} ruleName\n * @returns {string|null}\n */\n validationRule(ruleName) {\n let ruleContent = null;\n\n this.validationRules().forEach(rule => {\n const split = rule.split(':', 2);\n\n if (split[0] === ruleName) {\n ruleContent = split[1];\n }\n });\n\n return ruleContent;\n }\n\n editorField() {\n return m('fieldset.Field', [\n m('legend', [\n this.field.icon() ? [icon(this.field.icon()), ' '] : null,\n this.field.name(),\n this.field.required() ? ' *' : null,\n ]),\n m('.FormField', [\n this.field.prefix() ? m('.prefix', this.field.prefix()) : null,\n this.editorInput(),\n this.field.description() ? m('.helpText', this.field.description()) : null,\n ]),\n ]);\n }\n\n editorInput() {\n return m('input', this.editorInputProps());\n }\n\n editorInputProps() {\n return {\n className: 'FormControl',\n oninput: m.withAttr('value', this.set),\n value: this.value(),\n required: this.field.required(),\n };\n }\n\n answerField() {\n const iconName = this.readAttribute(this.field, 'icon');\n const type = this.readAttribute(this.field, 'type');\n\n return m('.Masquerade-Bio-Set', [\n m('span.Masquerade-Bio-Field', [\n iconName ? [icon(iconName), ' '] : null,\n this.readAttribute(this.field, 'name') + ': ',\n ]),\n m('span.Masquerade-Bio-Answer' + (type ? '.Masquerade-Bio-Answer-' + this.capitalize(type) : ''), this.answerContent()),\n ]);\n }\n\n answerContent() {\n return this.value();\n }\n\n static isNoOptionSelectedValue(value) {\n // The value can be null when coming from the API\n // The value can be '' when the field does not exist on the user (the empty string is set in ProfileConfigurePane)\n return value === null || value === '';\n }\n\n capitalize(s) {\n if (typeof s !== 'string') return ''\n return s.charAt(0).toUpperCase() + s.slice(1)\n }\n\n}\n","import icon from 'flarum/helpers/icon';\nimport BaseField from './BaseField';\n\nexport default class BooleanField extends BaseField {\n editorInput() {\n return this.options().map(option => m('div', m('label', [\n m('input[type=radio]', {\n checked: option.selected(this.value()),\n onclick: () => {\n this.set(option.key);\n },\n }),\n ' ' + option.label,\n ])));\n }\n\n options() {\n let options = [];\n\n if (!this.readAttribute(this.field, 'required')) {\n options.push({\n selected: value => BaseField.isNoOptionSelectedValue(value),\n key: null,\n label: app.translator.trans('fof-masquerade.forum.fields.select.none-optional'),\n });\n }\n\n options.push({\n selected: value => ['true', '1', 1, true, 'yes'].indexOf(value) !== -1,\n key: 'true',\n label: app.translator.trans('fof-masquerade.forum.fields.boolean.yes'),\n });\n\n options.push({\n selected: value => ['false', '0', 0, false, 'no'].indexOf(value) !== -1,\n key: 'false',\n label: app.translator.trans('fof-masquerade.forum.fields.boolean.no'),\n });\n\n // This is probably overkill because it looks like the backend casts the value anyway\n if (!BaseField.isNoOptionSelectedValue(this.value()) && ['true', '1', 1, true, 'yes', 'false', '0', 0, false, 'no'].indexOf(this.value()) === -1) {\n options.push({\n selected: () => true,\n key: this.value(),\n label: '(invalid) ' + this.value(),\n });\n }\n\n return options;\n }\n\n answerContent() {\n if (BaseField.isNoOptionSelectedValue(this.value())) {\n return '';\n }\n\n return [1, '1', true, 'true', 'yes'].indexOf(this.value()) !== -1 ?\n [icon('far fa-check-square'), ' ', app.translator.trans('fof-masquerade.forum.fields.boolean.yes')] :\n [icon('far fa-square'), ' ', app.translator.trans('fof-masquerade.forum.fields.boolean.no')];\n }\n}\n","import Button from 'flarum/components/Button';\nimport BaseField from './BaseField';\n\nexport default class EmailField extends BaseField {\n editorInputProps() {\n let props = super.editorInputProps();\n\n props.type = 'email';\n props.placeholder = 'you@example.com';\n\n return props;\n }\n\n answerContent() {\n const value = this.value();\n\n if (!value) {\n return null;\n }\n\n const email = value\n .split(/@|\\./)\n .map(segment => {\n return segment.replace(/(.{2})./g, '$1*');\n })\n .join('*');\n\n return Button.component({\n onclick: () => this.mailTo(),\n className: 'Button Button--text',\n icon: 'far fa-envelope',\n children: email,\n });\n }\n\n mailTo() {\n window.location = 'mailto:' + this.value();\n }\n}\n","import Select from 'flarum/components/Select';\nimport BaseField from './BaseField';\n\nconst NO_OPTION_SELECTED_KEY = 'fof_masquerade_no_option_selected';\n\nexport default class EmailField extends BaseField {\n editorInput() {\n return Select.component({\n onchange: value => {\n if (value === NO_OPTION_SELECTED_KEY) {\n value = null;\n }\n\n this.set(value);\n },\n value: BaseField.isNoOptionSelectedValue(this.value()) ? NO_OPTION_SELECTED_KEY : this.value(),\n options: this.options(),\n });\n }\n\n options() {\n let options = {};\n\n if (!this.readAttribute(this.field, 'required')) {\n options[NO_OPTION_SELECTED_KEY] = app.translator.trans('fof-masquerade.forum.fields.select.none-optional');\n } else if (BaseField.isNoOptionSelectedValue(this.value())) {\n options[NO_OPTION_SELECTED_KEY] = app.translator.trans('fof-masquerade.forum.fields.select.none-required');\n }\n\n const validationIn = this.validationRule('in');\n\n if (validationIn) {\n validationIn.split(',').forEach(value => {\n options[value] = value;\n });\n }\n\n if (!BaseField.isNoOptionSelectedValue(this.value()) && typeof options[this.value()] === 'undefined') {\n options[this.value()] = '(invalid) ' + this.value();\n }\n\n return options;\n }\n}\n","import Button from 'flarum/components/Button';\nimport BaseField from './BaseField';\n\nexport default class TextField extends BaseField {\n static updateInterval;\n\n editorInputProps() {\n let props = super.editorInputProps();\n props.placeholder = '';\n props.onfocus = this.startUpdatingPreview.bind(this);\n props.onfocusout = this.stopUpdatingPreview.bind(this);\n return props;\n }\n\n baseElementSelector() {\n return '.Field-text[data-id=\"'+this.field.id()+'\"]';\n }\n\n startUpdatingPreview() {\n TextField.updateInterval = setInterval(this.updatePreview.bind(this), 200);\n }\n\n stopUpdatingPreview() {\n clearInterval(TextField.updateInterval);\n document.querySelector(this.baseElementSelector() + ' .js-preview').style.display = 'none';\n }\n\n updatePreview() {\n const content = document.querySelector(this.baseElementSelector() + ' textarea').value;\n s9e.TextFormatter.preview(content, document.querySelector(this.baseElementSelector() + ' .js-preview'));\n document.querySelector(this.baseElementSelector() + ' .js-preview').style.display = 'block';\n }\n\n answerContent() {\n return m.trust(this.value() || '');\n }\n\n editorInput() {\n return m('.Field-text', {'data-id': this.field.id()}, [\n m('.js-preview', {\n style: {\n display: 'none',\n opacity: 0.5,\n 'max-height': '400px',\n overflow: 'auto',\n },\n }),\n m('textarea', this.editorInputProps())\n ]);\n }\n\n}\n\n","import BaseField from './BaseField';\nimport BooleanField from './BooleanField';\nimport EmailField from './EmailField';\nimport SelectField from './SelectField';\nimport UrlField from './UrlField';\nimport TextField from './TextField';\n\nexport default class TypeFactory {\n static typeForField({field, set, value}) {\n let className = BaseField;\n\n const type = this.identify(field);\n\n if (type) {\n className = this.types()[type];\n }\n\n return new className({\n field,\n set,\n value,\n });\n }\n\n static fieldAttribute(field, attribute) {\n if (typeof field[attribute] === 'function') {\n return field[attribute]();\n }\n\n return field[attribute];\n }\n\n static types() {\n return {\n boolean: BooleanField,\n email: EmailField,\n select: SelectField,\n url: UrlField,\n text: TextField,\n };\n }\n\n /**\n * Identifies how to parse the field answer.\n * @returns {null|string}\n */\n static identify(field) {\n const validation = (this.fieldAttribute(field, 'validation') || '').split(',');\n let identified = null;\n\n // If the field has a type we use it\n const fieldType = this.fieldAttribute(field, 'type');\n if (typeof this.types()[fieldType] !== 'undefined') {\n return fieldType;\n }\n\n // If it's an advanced field with no type we then guess the best type\n validation.forEach(rule => {\n rule = rule.trim();\n\n if (typeof this.types()[rule] !== 'undefined') {\n identified = rule;\n }\n });\n\n return identified;\n }\n}\n","import Button from 'flarum/components/Button';\nimport BaseField from './BaseField';\n\nexport default class UrlField extends BaseField {\n editorInputProps() {\n let props = super.editorInputProps();\n\n props.type = 'url';\n props.placeholder = 'https://example.com';\n\n return props;\n }\n\n answerContent() {\n const value = this.value();\n\n if (!value) {\n return null;\n }\n\n return Button.component({\n onclick: () => this.to(),\n className: 'Button Button--text',\n icon: 'fas fa-link',\n children: value.replace(/^https?:\\/\\//, ''),\n });\n }\n\n to() {\n const popup = window.open();\n popup.location = this.value();\n }\n}\n","import Model from 'flarum/Model';\nimport mixin from 'flarum/utils/mixin';\n\nexport default class Answer extends mixin(Model, {\n content: Model.attribute('content'),\n contentHtml: Model.attribute('content_html'),\n field: Model.hasOne('field'),\n userId: Model.attribute('user_id')\n}) {\n /**\n * Construct a path to the API endpoint for this resource.\n *\n * @return {String}\n * @protected\n */\n apiEndpoint() {\n return '/masquerade/configure' + (this.exists ? '/' + this.data.id : '');\n }\n}\n","import Model from 'flarum/Model';\nimport mixin from 'flarum/utils/mixin';\n\nexport default class Field extends mixin(Model, {\n name: Model.attribute('name'),\n description: Model.attribute('description'),\n type: Model.attribute('type'),\n validation: Model.attribute('validation'),\n required: Model.attribute('required'),\n prefix: Model.attribute('prefix'),\n icon: Model.attribute('icon'),\n sort: Model.attribute('sort'),\n deleted_at: Model.attribute('deleted_at', Model.transformDate),\n answer: Model.hasOne('answer'),\n on_bio: Model.attribute('on_bio')\n}) {\n /**\n * Construct a path to the API endpoint for this resource.\n *\n * @return {String}\n * @protected\n */\n apiEndpoint() {\n return '/masquerade/fields' + (this.exists ? '/' + this.data.id : '');\n }\n}\n","module.exports = flarum.core.compat['Model'];","module.exports = flarum.core.compat['app'];","module.exports = flarum.core.compat['components/Button'];","module.exports = flarum.core.compat['components/LinkButton'];","module.exports = flarum.core.compat['components/Select'];","module.exports = flarum.core.compat['components/UserCard'];","module.exports = flarum.core.compat['components/UserPage'];","module.exports = flarum.core.compat['extend'];","module.exports = flarum.core.compat['helpers/icon'];","module.exports = flarum.core.compat['models/User'];","module.exports = flarum.core.compat['utils/mixin'];"],"sourceRoot":""} \ No newline at end of file diff --git a/js/package-lock.json b/js/package-lock.json index 14aae9f..a5ea693 100644 --- a/js/package-lock.json +++ b/js/package-lock.json @@ -4,957 +4,1152 @@ "lockfileVersion": 1, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.4.tgz", + "integrity": "sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw==", + "requires": { + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz", - "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.5", - "@babel/types": "^7.4.4", - "convert-source-map": "^1.1.0", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.4.tgz", + "integrity": "sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" } }, "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", + "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", "requires": { - "@babel/types": "^7.4.4", + "@babel/types": "^7.10.4", "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "lodash": "^4.17.13", + "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-builder-react-jsx": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz", - "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", + "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", "requires": { - "@babel/types": "^7.3.0", - "esutils": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/types": "^7.10.4" } }, - "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.4.tgz", + "integrity": "sha512-LyacH/kgQPgLAuaWrvvq1+E7f5bLyT8jXCh7nM67sRsy2cpIGfgWJ+FCnAKQXfY+F0tXUaN6FqLkp4JiCzdK8Q==", "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", + "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", + "requires": { + "@babel/compat-data": "^7.10.4", + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz", - "integrity": "sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz", + "integrity": "sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ==", "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", - "@babel/helper-split-export-declaration": "^7.4.4" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", + "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.0" } }, "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz", + "integrity": "sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA==", "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.4", + "lodash": "^4.17.13" } }, "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", + "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.10.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz", + "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz", + "integrity": "sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4", + "lodash": "^4.17.13" } }, "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.4.tgz", + "integrity": "sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ==", "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", + "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", + "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.10.4" } }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", + "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", + "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", - "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==" + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", + "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz", + "integrity": "sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz", - "integrity": "sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", + "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", + "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", + "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", + "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", + "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz", + "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", + "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz", + "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", + "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", - "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", + "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", + "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-jsx": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", - "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", + "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", + "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", + "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", + "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz", + "integrity": "sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" + "@babel/helper-plugin-utils": "^7.10.4", + "lodash": "^4.17.13" } }, "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", - "@babel/helper-split-export-declaration": "^7.4.4", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", + "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", + "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", + "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", - "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", + "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", + "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", + "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", + "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", + "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", + "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", - "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", + "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz", + "integrity": "sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA==", "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", + "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", "requires": { - "@babel/helper-module-transforms": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz", + "integrity": "sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ==", "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", + "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", - "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", + "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", "requires": { - "regexp-tree": "^0.1.6" + "@babel/helper-create-regexp-features-plugin": "^7.10.4" } }, "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", + "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-object-assign": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.2.0.tgz", - "integrity": "sha512-nmE55cZBPFgUktbF2OuoZgPRadfxosLOpSgzEPYotKSls9J4pEPcembi8r78RU37Rph6UApCpNmsQA4QMWK9Ng==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.10.4.tgz", + "integrity": "sha512-6zccDhYEICfMeQqIjuY5G09/yhKzG30DKHJeYBQUHIsJH7c2jXSGvgwRalufLAXAq432OSlsEfAOLlzEsQzxVw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", + "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4" } }, "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz", + "integrity": "sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ==", "requires": { - "@babel/helper-call-delegate": "^7.4.4", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-property-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", - "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", + "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", - "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz", + "integrity": "sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", - "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz", + "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==", "requires": { - "@babel/helper-builder-react-jsx": "^7.3.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-builder-react-jsx": "^7.10.4", + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz", + "integrity": "sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ==", + "requires": { + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", - "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz", + "integrity": "sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz", - "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.4.tgz", + "integrity": "sha512-FTK3eQFrPv2aveerUSazFmGygqIdTtvskG50SnGnbEUnRPcGx2ylBhdFIzoVS1ty44hEgcPoCAyw5r3VDEq+Ug==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz", + "integrity": "sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-regenerator": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", - "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", + "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", "requires": { - "regenerator-transform": "^0.14.0" + "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", - "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", + "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-runtime": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz", - "integrity": "sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.4.tgz", + "integrity": "sha512-8ULlGv8p+Vuxu+kz2Y1dk6MYS2b/Dki+NO6/0ZlfSj5tMalfDL7jI/o/2a+rrWLqSXvnadEqc2WguB4gdQIxZw==", "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", "resolve": "^1.8.1", "semver": "^5.5.1" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", + "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz", + "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", + "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" } }, "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz", + "integrity": "sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", + "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", + "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", - "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", + "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/preset-env": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.5.tgz", - "integrity": "sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz", + "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==", + "requires": { + "@babel/compat-data": "^7.10.4", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.10.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.10.4", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.10.4", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.10.4", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", "requires": { - "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.4", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.4", - "@babel/plugin-transform-classes": "^7.4.4", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.4", "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-modules-systemjs": "^7.4.4", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.5", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", "@babel/types": "^7.4.4", - "browserslist": "^4.6.0", - "core-js-compat": "^3.1.1", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" + "esutils": "^2.0.2" } }, "@babel/preset-react": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", - "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.10.4.tgz", + "integrity": "sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-transform-react-display-name": "^7.10.4", + "@babel/plugin-transform-react-jsx": "^7.10.4", + "@babel/plugin-transform-react-jsx-development": "^7.10.4", + "@babel/plugin-transform-react-jsx-self": "^7.10.4", + "@babel/plugin-transform-react-jsx-source": "^7.10.4", + "@babel/plugin-transform-react-pure-annotations": "^7.10.4" } }, "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", + "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", "requires": { - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", - "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/types": "^7.4.4", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", + "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", + "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" + }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -969,21 +1164,16 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==" - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -995,14 +1185,14 @@ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" }, "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.1.tgz", + "integrity": "sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA==" }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", @@ -1013,22 +1203,13 @@ } }, "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "optional": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "aproba": { @@ -1064,6 +1245,13 @@ "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } } }, "assert": { @@ -1098,7 +1286,8 @@ "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "optional": true }, "atob": { "version": "2.1.2", @@ -1106,14 +1295,23 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" } }, "balanced-match": { @@ -1172,9 +1370,9 @@ } }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "big.js": { "version": "5.2.2", @@ -1182,19 +1380,20 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" }, "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "optional": true }, "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", + "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==" }, "brace-expansion": { "version": "1.1.11", @@ -1278,20 +1477,46 @@ "requires": { "bn.js": "^4.1.0", "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", + "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.2", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "browserify-zlib": { @@ -1303,19 +1528,20 @@ } }, "browserslist": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.2.tgz", - "integrity": "sha512-2neU/V0giQy9h3XMPwLhEY3+Ao0uHSwHvU8Q1Ea6AgLVL1sXbX3dzPrJ8NWe5Hi4PoTkCYXOtVR9rfRLI0J/8Q==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz", + "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==", "requires": { - "caniuse-lite": "^1.0.30000974", - "electron-to-chromium": "^1.3.150", - "node-releases": "^1.1.23" + "caniuse-lite": "^1.0.30001093", + "electron-to-chromium": "^1.3.488", + "escalade": "^3.0.1", + "node-releases": "^1.1.58" } }, "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -1338,21 +1564,22 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, "cacache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", - "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "requires": { - "bluebird": "^3.5.3", + "bluebird": "^3.5.5", "chownr": "^1.1.1", "figgy-pudding": "^3.5.1", - "glob": "^7.1.3", + "glob": "^7.1.4", "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", "lru-cache": "^5.1.1", "mississippi": "^3.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", + "rimraf": "^2.6.3", "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" @@ -1380,9 +1607,9 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-lite": { - "version": "1.0.30000974", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000974.tgz", - "integrity": "sha512-xc3rkNS/Zc3CmpMKuczWEdY2sZgx09BkAxfvkxlAEBTqcMHeL8QnPqhKse+5sRTi3nrw2pJwToD2WvKn1Uhvww==" + "version": "1.0.30001097", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001097.tgz", + "integrity": "sha512-TeuSleKt/vWXaPkLVFqGDnbweYfq4IaZ6rUugFf3rWY6dlII8StUZ8Ddin0PkADfgYZ4wRqCdO2ORl4Rn5eZIA==" }, "chalk": { "version": "2.4.2", @@ -1395,28 +1622,60 @@ } }, "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", + "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "optional": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } } }, "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "chrome-trace-event": { "version": "1.0.2", @@ -1457,20 +1716,15 @@ } }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -1494,9 +1748,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "commondir": { "version": "1.0.1", @@ -1525,12 +1779,9 @@ } }, "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "requires": { - "date-now": "^0.1.4" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" }, "constants-browserify": { "version": "1.0.0", @@ -1538,9 +1789,9 @@ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" }, "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "requires": { "safe-buffer": "~5.1.1" } @@ -1564,27 +1815,21 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "core-js-compat": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.3.tgz", - "integrity": "sha512-EP018pVhgwsKHz3YoN1hTq49aRe+h017Kjz0NQz3nXV0cCRMvH3fLQl+vEPGr4r4J5sk4sU3tUC7U1aqTCeJeA==", + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", "requires": { - "browserslist": "^4.6.0", - "core-js-pure": "3.1.3", - "semver": "^6.1.0" + "browserslist": "^4.8.5", + "semver": "7.0.0" }, "dependencies": { "semver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", - "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" } } }, - "core-js-pure": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.3.tgz", - "integrity": "sha512-k3JWTrcQBKqjkjI0bkfXS0lbpWPxYuHWfMMjC1VDmzU4Q58IwSbuXSo99YO/hUHlw/EB4AlfA2PVxOGkrIq6dA==" - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1597,6 +1842,13 @@ "requires": { "bn.js": "^4.1.0", "elliptic": "^6.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } } }, "create-hash": { @@ -1655,14 +1907,9 @@ } }, "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" }, "debug": { "version": "4.1.1", @@ -1682,6 +1929,14 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -1720,9 +1975,9 @@ } }, "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "requires": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -1741,6 +1996,13 @@ "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } } }, "domain-browser": { @@ -1760,14 +2022,14 @@ } }, "electron-to-chromium": { - "version": "1.3.155", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.155.tgz", - "integrity": "sha512-/ci/XgZG8jkLYOgOe3mpJY1onxPPTDY17y7scldhnSjjZqV6VvREG/LvwhRuV7BJbnENFfuDWZkSqlTh4x9ZjQ==" + "version": "1.3.496", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.496.tgz", + "integrity": "sha512-TXY4mwoyowwi4Lsrq9vcTUYBThyc1b2hXaTZI13p8/FRhY2CTaq5lK+DVjhYkKiTLsKt569Xes+0J5JsVXFurQ==" }, "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -1776,29 +2038,52 @@ "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" }, "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "requires": { "once": "^1.4.0" } }, "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz", + "integrity": "sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ==", "requires": { "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", + "memory-fs": "^0.5.0", "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } } }, "errno": { @@ -1809,6 +2094,11 @@ "prr": "~1.0.1" } }, + "escalade": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz", + "integrity": "sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA==" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1832,19 +2122,19 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", + "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==" }, "evp_bytestokey": { "version": "1.0.3", @@ -1855,20 +2145,6 @@ "safe-buffer": "^5.1.1" } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -2001,19 +2277,19 @@ } }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, "fill-range": { "version": "4.0.0", @@ -2055,24 +2331,14 @@ } }, "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "requires": { "detect-file": "^1.0.0", - "is-glob": "^3.1.0", + "is-glob": "^4.0.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } } }, "flarum-webpack-config": { @@ -2139,479 +2405,25 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true - } - } + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-value": { "version": "2.0.6", @@ -2619,9 +2431,9 @@ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2631,35 +2443,35 @@ "path-is-absolute": "^1.0.0" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "global-prefix": "^3.0.0" }, "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "requires": { - "is-extglob": "^2.1.0" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" } } } }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, "global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", @@ -2678,15 +2490,20 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -2717,12 +2534,30 @@ } }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "hash.js": { @@ -2752,6 +2587,11 @@ "parse-passwd": "^1.0.0" } }, + "html5sortable": { + "version": "0.9.17", + "resolved": "https://registry.npmjs.org/html5sortable/-/html5sortable-0.9.17.tgz", + "integrity": "sha512-zCr78fJY/EI0qjBZfhpv+V6twTd2+xf32TKsas9bUX5N9uEg0lDl+OCyhr38ebVRzkXjQ+O5xQFN5XCOHkUbTQ==" + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -2781,10 +2621,10 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" }, "inflight": { "version": "1.0.6", @@ -2796,9 +2636,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.5", @@ -2806,9 +2646,9 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" }, "invariant": { "version": "2.2.4", @@ -2818,11 +2658,6 @@ "loose-envify": "^1.0.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" - }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -2842,11 +2677,12 @@ } }, "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "optional": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" } }, "is-buffer": { @@ -2938,11 +2774,6 @@ "isobject": "^3.0.1" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -2968,11 +2799,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2994,24 +2820,29 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", "requires": { - "invert-kv": "^2.0.0" + "leven": "^3.1.0" } }, "loader-runner": { @@ -3020,12 +2851,12 @@ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" }, "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "requires": { "big.js": "^5.2.2", - "emojis-list": "^2.0.0", + "emojis-list": "^3.0.0", "json5": "^1.0.1" }, "dependencies": { @@ -3049,9 +2880,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, "loose-envify": { "version": "1.4.0", @@ -3078,19 +2909,6 @@ "semver": "^5.6.0" } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "requires": { - "p-defer": "^1.0.0" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -3114,16 +2932,6 @@ "safe-buffer": "^5.1.2" } }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -3160,13 +2968,15 @@ "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -3186,9 +2996,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mississippi": { "version": "3.0.0", @@ -3227,18 +3037,11 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } + "minimist": "^1.2.5" } }, "move-concurrently": { @@ -3259,12 +3062,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "optional": true - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -3284,9 +3081,9 @@ } }, "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "nice-try": { "version": "1.0.5", @@ -3294,9 +3091,9 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node-libs-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", - "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "requires": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", @@ -3308,7 +3105,7 @@ "events": "^3.0.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", + "path-browserify": "0.0.1", "process": "^0.11.10", "punycode": "^1.2.4", "querystring-es3": "^0.2.0", @@ -3320,7 +3117,7 @@ "tty-browserify": "0.0.0", "url": "^0.11.0", "util": "^0.11.0", - "vm-browserify": "0.0.4" + "vm-browserify": "^1.0.1" }, "dependencies": { "punycode": { @@ -3331,30 +3128,15 @@ } }, "node-releases": { - "version": "1.1.23", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.23.tgz", - "integrity": "sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w==", - "requires": { - "semver": "^5.3.0" - } + "version": "1.1.59", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.59.tgz", + "integrity": "sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw==" }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "optional": true }, "object-assign": { "version": "4.1.1", @@ -3389,6 +3171,11 @@ } } }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -3397,6 +3184,17 @@ "isobject": "^3.0.0" } }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -3418,35 +3216,10 @@ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" - }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { "p-try": "^2.0.0" } @@ -3465,24 +3238,24 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "requires": { - "cyclist": "~0.2.2", + "cyclist": "^1.0.1", "inherits": "^2.0.3", "readable-stream": "^2.1.5" } }, "parse-asn1": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", - "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", @@ -3503,14 +3276,15 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "optional": true }, "path-exists": { "version": "3.0.0", @@ -3533,9 +3307,9 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -3544,6 +3318,12 @@ "sha.js": "^2.4.8" } }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "optional": true + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -3562,25 +3342,15 @@ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, - "prettier": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", - "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==" - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" - }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "promise-inflight": { "version": "1.0.1", @@ -3603,6 +3373,13 @@ "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } } }, "pump": { @@ -3668,9 +3445,9 @@ } }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3682,39 +3459,38 @@ } }, "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "optional": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "picomatch": "^2.2.1" } }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" }, "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "requires": { "regenerate": "^1.4.0" } }, "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "regenerator-transform": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", - "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "requires": { - "private": "^0.1.6" + "@babel/runtime": "^7.8.4" } }, "regex-not": { @@ -3726,33 +3502,28 @@ "safe-regex": "^1.1.0" } }, - "regexp-tree": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz", - "integrity": "sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==" - }, "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" }, "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "requires": { "jsesc": "~0.5.0" }, @@ -3767,7 +3538,8 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "optional": true }, "repeat-element": { "version": "1.1.3", @@ -3785,14 +3557,14 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "resolve": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", - "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "requires": { "path-parse": "^1.0.6" } @@ -3812,6 +3584,18 @@ "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } } }, "resolve-from": { @@ -3830,9 +3614,9 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } @@ -3868,24 +3652,27 @@ } }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" } }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "serialize-javascript": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", - "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", + "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "requires": { + "randombytes": "^2.1.0" + } }, "set-blocking": { "version": "2.0.0", @@ -3940,11 +3727,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -4066,11 +3848,11 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "requires": { - "atob": "^2.1.1", + "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -4078,9 +3860,9 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -4164,17 +3946,18 @@ } }, "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "requires": { + "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "strip-ansi": "^5.1.0" } }, "string_decoder": { @@ -4186,18 +3969,13 @@ } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -4212,13 +3990,13 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "terser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.0.0.tgz", - "integrity": "sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "requires": { - "commander": "^2.19.0", + "commander": "^2.20.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.10" + "source-map-support": "~0.5.12" }, "dependencies": { "source-map": { @@ -4229,22 +4007,31 @@ } }, "terser-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", + "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", "requires": { - "cacache": "^11.3.2", - "find-cache-dir": "^2.0.0", + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", "is-wsl": "^1.1.0", - "loader-utils": "^1.2.3", "schema-utils": "^1.0.0", - "serialize-javascript": "^1.7.0", + "serialize-javascript": "^3.1.0", "source-map": "^0.6.1", - "terser": "^4.0.0", - "webpack-sources": "^1.3.0", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", "worker-farm": "^1.7.0" }, "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -4262,9 +4049,9 @@ } }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "requires": { "setimmediate": "^1.0.4" } @@ -4317,15 +4104,10 @@ "repeat-string": "^1.6.1" } }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" - }, "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, "tty-browserify": { "version": "0.0.0", @@ -4352,14 +4134,14 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" }, "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" }, "union-value": { "version": "1.0.1", @@ -4381,9 +4163,9 @@ } }, "unique-slug": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "requires": { "imurmurhash": "^0.1.4" } @@ -4425,9 +4207,10 @@ } }, "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "optional": true }, "uri-js": { "version": "4.2.2", @@ -4469,6 +4252,13 @@ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "requires": { "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } } }, "util-deprecate": { @@ -4477,82 +4267,205 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" }, "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", + "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", "requires": { - "chokidar": "^2.0.2", + "chokidar": "^3.4.0", "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "optional": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + } } }, "webpack": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.33.0.tgz", - "integrity": "sha512-ggWMb0B2QUuYso6FPZKUohOgfm+Z0sVFs8WwWuSH1IAvkWs428VDNmOlAxvHGTB9Dm/qOB/qtE5cRx5y01clxw==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.0.5", - "acorn-dynamic-import": "^4.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", + "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", + "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.6.1", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } } }, "webpack-cli": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.3.tgz", - "integrity": "sha512-/qBxTvsxZ7bIFQtSa08QRY5BZuiJb27cbJM/nzmgXg9NEaudP20D7BruKKIuWfABqWoMEJQcNYYq/OxxSbPHlg==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", + "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", "requires": { - "chalk": "^2.4.1", + "chalk": "^2.4.2", "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "findup-sync": "^2.0.0", - "global-modules": "^1.0.0", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "prettier": "^1.17.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.5" + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" @@ -4587,45 +4500,13 @@ } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" } }, "wrappy": { @@ -4634,9 +4515,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "4.0.0", @@ -4644,33 +4525,31 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" diff --git a/js/package.json b/js/package.json index a8d94a6..d17139c 100644 --- a/js/package.json +++ b/js/package.json @@ -3,6 +3,7 @@ "name": "@fof/masquerade", "dependencies": { "flarum-webpack-config": "0.1.0-beta.10", + "html5sortable": "^0.9.17", "webpack": "^4.0.0", "webpack-cli": "^3.0.7" }, diff --git a/js/src/admin/panes/ProfileConfigurePane.js b/js/src/admin/panes/ProfileConfigurePane.js index 035880e..d338ce7 100644 --- a/js/src/admin/panes/ProfileConfigurePane.js +++ b/js/src/admin/panes/ProfileConfigurePane.js @@ -1,3 +1,5 @@ +import sortable from 'html5sortable/dist/html5sortable.es.js'; + import app from 'flarum/app'; import icon from 'flarum/helpers/icon'; import Component from 'flarum/Component'; @@ -26,19 +28,17 @@ export default class ProfileConfigurePane extends Component { * Configures the component. */ config() { - this.$('.js-sortable-fields') - .sortable({ - cancel: '', - }) - .on('sortupdate', (e, ui) => { - const sorting = this.$('.js-sortable-fields > .Field') - .map(function () { - return $(this).data('id'); - }) - .get(); - - this.updateSort(sorting); - }); + sortable(this.element.querySelector('.js-sortable-fields'), { + handle: 'legend', + })[0].addEventListener('sortupdate', () => { + const sorting = this.$('.js-sortable-fields > .Field') + .map(function () { + return $(this).data('id'); + }) + .get(); + + this.updateSort(sorting); + }); } /** @@ -382,6 +382,7 @@ export default class ProfileConfigurePane extends Component { email: app.translator.trans('fof-masquerade.admin.types.email'), boolean: app.translator.trans('fof-masquerade.admin.types.boolean'), select: app.translator.trans('fof-masquerade.admin.types.select'), + text: app.translator.trans('fof-masquerade.admin.types.text'), null: app.translator.trans('fof-masquerade.admin.types.advanced'), }; } diff --git a/js/src/forum/panes/ProfilePane.js b/js/src/forum/panes/ProfilePane.js index 035e471..6c55b28 100644 --- a/js/src/forum/panes/ProfilePane.js +++ b/js/src/forum/panes/ProfilePane.js @@ -19,8 +19,16 @@ export default class ProfileConfigurePane extends UserPage { m('.Fields', this.fields .sort((a, b) => a.sort() - b.sort()) .map(field => { + let content = null; // UserID check must be done with == because userId() is number while id() is string - this.answers[field.id()] = field.answer() && field.answer().userId() == this.user.id() ? field.answer().content() : null; + if (field.answer() && field.answer().userId() == this.user.id()) { + if (field.type() === 'text') { + content = field.answer().contentHtml(); + } else { + content = field.answer().content() + } + } + this.answers[field.id()] = content; return this.field(field); }) diff --git a/js/src/forum/types/BaseField.js b/js/src/forum/types/BaseField.js index b4a41b8..3bfd590 100644 --- a/js/src/forum/types/BaseField.js +++ b/js/src/forum/types/BaseField.js @@ -74,13 +74,14 @@ export default class BaseField { answerField() { const iconName = this.readAttribute(this.field, 'icon'); + const type = this.readAttribute(this.field, 'type'); return m('.Masquerade-Bio-Set', [ m('span.Masquerade-Bio-Field', [ iconName ? [icon(iconName), ' '] : null, this.readAttribute(this.field, 'name') + ': ', ]), - m('span.Masquerade-Bio-Answer', this.answerContent()), + m('span.Masquerade-Bio-Answer' + (type ? '.Masquerade-Bio-Answer-' + this.capitalize(type) : ''), this.answerContent()), ]); } @@ -93,4 +94,10 @@ export default class BaseField { // The value can be '' when the field does not exist on the user (the empty string is set in ProfileConfigurePane) return value === null || value === ''; } + + capitalize(s) { + if (typeof s !== 'string') return '' + return s.charAt(0).toUpperCase() + s.slice(1) + } + } diff --git a/js/src/forum/types/TextField.js b/js/src/forum/types/TextField.js new file mode 100644 index 0000000..eee8ba0 --- /dev/null +++ b/js/src/forum/types/TextField.js @@ -0,0 +1,53 @@ +import Button from 'flarum/components/Button'; +import BaseField from './BaseField'; + +export default class TextField extends BaseField { + static updateInterval; + + editorInputProps() { + let props = super.editorInputProps(); + props.placeholder = ''; + props.onfocus = this.startUpdatingPreview.bind(this); + props.onfocusout = this.stopUpdatingPreview.bind(this); + return props; + } + + baseElementSelector() { + return '.Field-text[data-id="'+this.field.id()+'"]'; + } + + startUpdatingPreview() { + TextField.updateInterval = setInterval(this.updatePreview.bind(this), 200); + } + + stopUpdatingPreview() { + clearInterval(TextField.updateInterval); + document.querySelector(this.baseElementSelector() + ' .js-preview').style.display = 'none'; + } + + updatePreview() { + const content = document.querySelector(this.baseElementSelector() + ' textarea').value; + s9e.TextFormatter.preview(content, document.querySelector(this.baseElementSelector() + ' .js-preview')); + document.querySelector(this.baseElementSelector() + ' .js-preview').style.display = 'block'; + } + + answerContent() { + return m.trust(this.value() || ''); + } + + editorInput() { + return m('.Field-text', {'data-id': this.field.id()}, [ + m('.js-preview', { + style: { + display: 'none', + opacity: 0.5, + 'max-height': '400px', + overflow: 'auto', + }, + }), + m('textarea', this.editorInputProps()) + ]); + } + +} + diff --git a/js/src/forum/types/TypeFactory.js b/js/src/forum/types/TypeFactory.js index b654096..5d68d3e 100644 --- a/js/src/forum/types/TypeFactory.js +++ b/js/src/forum/types/TypeFactory.js @@ -3,6 +3,7 @@ import BooleanField from './BooleanField'; import EmailField from './EmailField'; import SelectField from './SelectField'; import UrlField from './UrlField'; +import TextField from './TextField'; export default class TypeFactory { static typeForField({field, set, value}) { @@ -35,6 +36,7 @@ export default class TypeFactory { email: EmailField, select: SelectField, url: UrlField, + text: TextField, }; } diff --git a/js/src/lib/models/Answer.js b/js/src/lib/models/Answer.js index b388338..4f4cf0e 100644 --- a/js/src/lib/models/Answer.js +++ b/js/src/lib/models/Answer.js @@ -3,6 +3,7 @@ import mixin from 'flarum/utils/mixin'; export default class Answer extends mixin(Model, { content: Model.attribute('content'), + contentHtml: Model.attribute('content_html'), field: Model.hasOne('field'), userId: Model.attribute('user_id') }) { diff --git a/resources/less/forum.less b/resources/less/forum.less index 1502eff..e6ed140 100644 --- a/resources/less/forum.less +++ b/resources/less/forum.less @@ -59,5 +59,9 @@ display: inline-block; width: 50%; } + .Masquerade-Bio-Answer-Text { + display: block; + width: 100%; + } } } diff --git a/resources/locale/en.yml b/resources/locale/en.yml index 2db010c..572ca93 100644 --- a/resources/locale/en.yml +++ b/resources/locale/en.yml @@ -61,3 +61,4 @@ fof-masquerade: email: Email select: Dropdown url: URL + text: Text diff --git a/src/Api/Controllers/UserConfigureController.php b/src/Api/Controllers/UserConfigureController.php index f65193f..df8b707 100644 --- a/src/Api/Controllers/UserConfigureController.php +++ b/src/Api/Controllers/UserConfigureController.php @@ -12,6 +12,7 @@ use Illuminate\Support\Arr; use Psr\Http\Message\ServerRequestInterface; use Tobscure\JsonApi\Document; +use s9e\TextFormatter\Bundles\Fatdown as TextFormatter; class UserConfigureController extends AbstractListController { @@ -69,6 +70,8 @@ protected function processUpdate(User $actor, $answers, &$fields) $content = Arr::get($answers, $field->id); $this->processBoolean($field, $content); + + $this->processText($field, $content); $this->validator->setField($field); @@ -96,4 +99,12 @@ protected function processBoolean(Field $field, &$content) } } } + + protected function processText(Field $field, &$content) + { + // For Text field type, convert the values to XML + if ($field->type === 'text') { + $content = TextFormatter::parse($content ? $content : ''); + } + } } diff --git a/src/Api/Serializers/AnswerSerializer.php b/src/Api/Serializers/AnswerSerializer.php index 03741b4..a9b2596 100644 --- a/src/Api/Serializers/AnswerSerializer.php +++ b/src/Api/Serializers/AnswerSerializer.php @@ -4,6 +4,7 @@ use FoF\Masquerade\Field; use Flarum\Api\Serializer\AbstractSerializer; +use s9e\TextFormatter\Bundles\Fatdown as TextFormatter; class AnswerSerializer extends AbstractSerializer { @@ -16,7 +17,14 @@ class AnswerSerializer extends AbstractSerializer */ protected function getDefaultAttributes($model) { - return $model->toArray(); + $answer = $model->toArray(); + if ($answer['field']['type'] == 'text') { + // render HTML for text field + // TODO make something like "render" method for each field type + $answer['content_html'] = $answer['content'] ? nl2br(TextFormatter::render($answer['content'])) : ''; + $answer['content'] = TextFormatter::unparse($answer['content']); + } + return $answer; } /** diff --git a/src/Api/Serializers/FieldSerializer.php b/src/Api/Serializers/FieldSerializer.php index ecd8b1a..e6ab18a 100644 --- a/src/Api/Serializers/FieldSerializer.php +++ b/src/Api/Serializers/FieldSerializer.php @@ -42,6 +42,8 @@ public function answer($model) $for = $model->for ? $model->for : $this->getActor()->id; if ($answer = $model->answers()->where('user_id', $for)->first()) { + // just so load field data into $answer + $answer->field; return new Relationship(new Resource( $answer, new AnswerSerializer diff --git a/src/FieldType/TextField.php b/src/FieldType/TextField.php new file mode 100644 index 0000000..3ebacb5 --- /dev/null +++ b/src/FieldType/TextField.php @@ -0,0 +1,8 @@ + EmailField::class, 'select' => BaseField::class, 'url' => UrlField::class, + 'text' => TextField::class, ]; } diff --git a/src/Listeners/DemandProfileCompletion.php b/src/Listeners/DemandProfileCompletion.php deleted file mode 100644 index 263d260..0000000 --- a/src/Listeners/DemandProfileCompletion.php +++ /dev/null @@ -1,38 +0,0 @@ -enforce = (bool) $settings->get('masquerade.force-profile-completion', false); - } - /** - * @param Dispatcher $events - */ - public function subscribe(Dispatcher $events) - { - $events->listen(ConfigureMiddleware::class, [$this, 'force']); - } - - /** - * @param ConfigureMiddleware $event - */ - public function force(ConfigureMiddleware $event) - { - if ($this->enforce && $event->isForum()) { - $event->pipe(app(Middleware::class)); - } - } -} diff --git a/src/Middleware/DemandProfileCompletion.php b/src/Middleware/DemandProfileCompletion.php index a55c0da..caa360e 100644 --- a/src/Middleware/DemandProfileCompletion.php +++ b/src/Middleware/DemandProfileCompletion.php @@ -2,17 +2,22 @@ namespace FoF\Masquerade\Middleware; -use FoF\Masquerade\Repositories\FieldRepository; use Flarum\Http\UrlGenerator; +use Flarum\Settings\SettingsRepositoryInterface; use Flarum\User\User; +use FoF\Masquerade\Repositories\FieldRepository; +use Laminas\Diactoros\Response\RedirectResponse; use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; -use Zend\Diactoros\Response\RedirectResponse; class DemandProfileCompletion implements MiddlewareInterface { + /** + * @var SettingsRepositoryInterface + */ + protected $settings; /** * @var FieldRepository */ @@ -26,8 +31,9 @@ class DemandProfileCompletion implements MiddlewareInterface */ protected $configureProfilePathWithoutBase; - public function __construct(FieldRepository $fields, UrlGenerator $url) + public function __construct(SettingsRepositoryInterface $settings, FieldRepository $fields, UrlGenerator $url) { + $this->settings = $settings; $this->fields = $fields; $this->configureProfileUrl = $url->to('forum')->route('masquerade.profile.configure'); $this->configureProfilePathWithoutBase = str_replace($url->to('forum')->base(), '', $this->configureProfileUrl); @@ -40,9 +46,8 @@ public function process(Request $request, RequestHandlerInterface $handler): Res if ( $this->configureProfilePathWithoutBase != $request->getUri()->getPath() && - $actor && - $actor->exists && - $actor->is_email_confirmed && + $actor->can('fof.masquerade.have-profile') && + $this->settings->get('masquerade.force-profile-completion') && !$this->fields->completed($actor->id) ) { return new RedirectResponse(