aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Molakvoæ <skjnldsv@protonmail.com>2023-03-28 17:26:36 +0200
committerJohn Molakvoæ <skjnldsv@protonmail.com>2023-04-06 14:49:32 +0200
commit044e8242602907c8fa73989aa8149cf879de8881 (patch)
treedd2a008f5f8928b4f1ac2da1e0ef588ff49166b6
parent60b74e3d6d626a7f7599acbeaadb650cbf56cc6c (diff)
downloadnextcloud-server-044e8242602907c8fa73989aa8149cf879de8881.tar.gz
nextcloud-server-044e8242602907c8fa73989aa8149cf879de8881.zip
chore(deps): update lockfile
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
-rw-r--r--dist/files_trashbin-main.js870
-rw-r--r--dist/files_trashbin-main.js.map1
-rw-r--r--dist/preview-service-worker.js3119
-rw-r--r--dist/settings-apps-view-settings-apps-view.js2556
-rw-r--r--dist/settings-apps-view-settings-apps-view.js.map1
-rw-r--r--dist/settings-users-settings-users.js3866
-rw-r--r--dist/settings-users-settings-users.js.map1
-rw-r--r--dist/user-status-modal-user-status-modal.js1956
-rw-r--r--dist/user-status-modal-user-status-modal.js.map1
9 files changed, 12371 insertions, 0 deletions
diff --git a/dist/files_trashbin-main.js b/dist/files_trashbin-main.js
new file mode 100644
index 00000000000..1be085e4c9e
--- /dev/null
+++ b/dist/files_trashbin-main.js
@@ -0,0 +1,870 @@
+/******/ (function() { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
+
+/***/ "./apps/files_trashbin/src/actions/restoreAction.ts":
+/*!**********************************************************!*\
+ !*** ./apps/files_trashbin/src/actions/restoreAction.ts ***!
+ \**********************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/event-bus */ "./node_modules/@nextcloud/event-bus/dist/index.esm.js");
+/* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.js");
+/* harmony import */ var _nextcloud_auth__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/auth */ "./node_modules/@nextcloud/auth/dist/index.esm.js");
+/* harmony import */ var _nextcloud_files__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/files */ "./node_modules/@nextcloud/files/dist/index.esm.js");
+/* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs");
+/* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.js");
+/* harmony import */ var _mdi_svg_svg_history_svg_raw__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mdi/svg/svg/history.svg?raw */ "./node_modules/@mdi/svg/svg/history.svg?raw");
+/* provided dependency */ var console = __webpack_require__(/*! ./node_modules/console-browserify/index.js */ "./node_modules/console-browserify/index.js");
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+/**
+ * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+
+
+
+
+
+(0,_nextcloud_files__WEBPACK_IMPORTED_MODULE_3__.registerFileAction)(new _nextcloud_files__WEBPACK_IMPORTED_MODULE_3__.FileAction({
+ id: 'restore',
+ displayName: function displayName() {
+ return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_4__.translate)('files_trashbin', 'Restore');
+ },
+ iconSvgInline: function iconSvgInline() {
+ return _mdi_svg_svg_history_svg_raw__WEBPACK_IMPORTED_MODULE_6__;
+ },
+ enabled: function enabled(nodes, view) {
+ // Only available in the trashbin view
+ if (view.id !== 'trashbin') {
+ return false;
+ }
+
+ // Only available if all nodes have read permission
+ return nodes.length > 0 && nodes.map(function (node) {
+ return node.permissions;
+ }).every(function (permission) {
+ return (permission & _nextcloud_files__WEBPACK_IMPORTED_MODULE_3__.Permission.READ) !== 0;
+ });
+ },
+ exec: function exec(node) {
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
+ var _getCurrentUser, destination;
+ return regeneratorRuntime.wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ _context.prev = 0;
+ destination = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateRemoteUrl)("dav/trashbin/".concat((_getCurrentUser = (0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_2__.getCurrentUser)()) === null || _getCurrentUser === void 0 ? void 0 : _getCurrentUser.uid, "/restore/").concat(node.basename));
+ _context.next = 4;
+ return (0,_nextcloud_axios__WEBPACK_IMPORTED_MODULE_5__["default"])({
+ method: 'MOVE',
+ url: node.source,
+ headers: {
+ destination: destination
+ }
+ });
+ case 4:
+ // Let's pretend the file is deleted since
+ // we don't know the restored location
+ (0,_nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__.emit)('files:file:deleted', node);
+ return _context.abrupt("return", true);
+ case 8:
+ _context.prev = 8;
+ _context.t0 = _context["catch"](0);
+ console.error(_context.t0);
+ return _context.abrupt("return", false);
+ case 12:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, null, [[0, 8]]);
+ }))();
+ },
+ execBatch: function execBatch(nodes, view) {
+ var _this = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
+ while (1) {
+ switch (_context2.prev = _context2.next) {
+ case 0:
+ return _context2.abrupt("return", Promise.all(nodes.map(function (node) {
+ return _this.exec(node, view);
+ })));
+ case 1:
+ case "end":
+ return _context2.stop();
+ }
+ }
+ }, _callee2);
+ }))();
+ },
+ order: 1,
+ inline: function inline() {
+ return true;
+ }
+}));
+
+/***/ }),
+
+/***/ "./apps/files_trashbin/src/main.ts":
+/*!*****************************************!*\
+ !*** ./apps/files_trashbin/src/main.ts ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs");
+/* harmony import */ var _mdi_svg_svg_delete_svg_raw__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mdi/svg/svg/delete.svg?raw */ "./node_modules/@mdi/svg/svg/delete.svg?raw");
+/* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.js");
+/* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_moment__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _services_trashbin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./services/trashbin */ "./apps/files_trashbin/src/services/trashbin.ts");
+/* harmony import */ var _actions_restoreAction__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./actions/restoreAction */ "./apps/files_trashbin/src/actions/restoreAction.ts");
+/**
+ * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+
+
+
+
+// Register restore action
+
+var Navigation = window.OCP.Files.Navigation;
+Navigation.register({
+ id: 'trashbin',
+ name: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('files_trashbin', 'Deleted files'),
+ caption: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('files_trashbin', 'List of files that have been deleted.'),
+ icon: _mdi_svg_svg_delete_svg_raw__WEBPACK_IMPORTED_MODULE_1__,
+ order: 50,
+ sticky: true,
+ defaultSortKey: 'deleted',
+ columns: [{
+ id: 'deleted',
+ title: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('files_trashbin', 'Deleted'),
+ render: function render(node) {
+ var _node$attributes;
+ var deletionTime = (_node$attributes = node.attributes) === null || _node$attributes === void 0 ? void 0 : _node$attributes['trashbin-deletion-time'];
+ var span = document.createElement('span');
+ if (deletionTime) {
+ span.title = _nextcloud_moment__WEBPACK_IMPORTED_MODULE_2___default().unix(deletionTime).format('LLL');
+ span.textContent = _nextcloud_moment__WEBPACK_IMPORTED_MODULE_2___default().unix(deletionTime).fromNow();
+ return span;
+ }
+
+ // Unknown deletion time
+ span.textContent = (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('files_trashbin', 'A long time ago');
+ return span;
+ },
+ sort: function sort(nodeA, nodeB) {
+ var _nodeA$attributes, _nodeB$attributes;
+ var deletionTimeA = ((_nodeA$attributes = nodeA.attributes) === null || _nodeA$attributes === void 0 ? void 0 : _nodeA$attributes['trashbin-deletion-time']) || (nodeA === null || nodeA === void 0 ? void 0 : nodeA.mtime) || 0;
+ var deletionTimeB = ((_nodeB$attributes = nodeB.attributes) === null || _nodeB$attributes === void 0 ? void 0 : _nodeB$attributes['trashbin-deletion-time']) || (nodeB === null || nodeB === void 0 ? void 0 : nodeB.mtime) || 0;
+ return deletionTimeB - deletionTimeA;
+ }
+ }],
+ getContents: _services_trashbin__WEBPACK_IMPORTED_MODULE_3__["default"]
+});
+
+/***/ }),
+
+/***/ "./apps/files_trashbin/src/services/client.ts":
+/*!****************************************************!*\
+ !*** ./apps/files_trashbin/src/services/client.ts ***!
+ \****************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "rootPath": function() { return /* binding */ rootPath; },
+/* harmony export */ "rootUrl": function() { return /* binding */ rootUrl; }
+/* harmony export */ });
+/* harmony import */ var webdav__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! webdav */ "./node_modules/webdav/dist/web/index.js");
+/* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.js");
+/* harmony import */ var _nextcloud_auth__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/auth */ "./node_modules/@nextcloud/auth/dist/index.esm.js");
+var _getCurrentUser;
+/**
+ * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+
+var rootPath = "/trashbin/".concat((_getCurrentUser = (0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_2__.getCurrentUser)()) === null || _getCurrentUser === void 0 ? void 0 : _getCurrentUser.uid, "/trash");
+var rootUrl = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateRemoteUrl)('dav' + rootPath);
+var client = (0,webdav__WEBPACK_IMPORTED_MODULE_0__.createClient)(rootUrl, {
+ headers: {
+ requesttoken: (0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_2__.getRequestToken)()
+ }
+});
+/* harmony default export */ __webpack_exports__["default"] = (client);
+
+/***/ }),
+
+/***/ "./apps/files_trashbin/src/services/trashbin.ts":
+/*!******************************************************!*\
+ !*** ./apps/files_trashbin/src/services/trashbin.ts ***!
+ \******************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_auth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/auth */ "./node_modules/@nextcloud/auth/dist/index.esm.js");
+/* harmony import */ var _nextcloud_files__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/files */ "./node_modules/@nextcloud/files/dist/index.esm.js");
+/* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.js");
+/* harmony import */ var _client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./client */ "./apps/files_trashbin/src/services/client.ts");
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
+function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+/**
+ * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+/* eslint-disable */
+
+
+
+
+var data = "<?xml version=\"1.0\"?>\n<d:propfind xmlns:d=\"DAV:\"\n\txmlns:oc=\"http://owncloud.org/ns\"\n\txmlns:nc=\"http://nextcloud.org/ns\">\n\t<d:prop>\n\t\t<nc:trashbin-filename />\n\t\t<nc:trashbin-deletion-time />\n\t\t<nc:trashbin-original-location />\n\t\t<nc:trashbin-title />\n\t\t<d:getlastmodified />\n\t\t<d:getetag />\n\t\t<d:getcontenttype />\n\t\t<d:resourcetype />\n\t\t<oc:fileid />\n\t\t<oc:permissions />\n\t\t<oc:size />\n\t\t<d:getcontentlength />\n\t</d:prop>\n</d:propfind>";
+var resultToNode = function resultToNode(node) {
+ var _node$props, _getCurrentUser, _node$props2, _node$props3, _node$props4;
+ var permissions = (0,_nextcloud_files__WEBPACK_IMPORTED_MODULE_1__.parseWebdavPermissions)((_node$props = node.props) === null || _node$props === void 0 ? void 0 : _node$props.permissions);
+ var owner = (_getCurrentUser = (0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_0__.getCurrentUser)()) === null || _getCurrentUser === void 0 ? void 0 : _getCurrentUser.uid;
+ var previewUrl = (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateUrl)('/apps/files_trashbin/preview?fileId={fileid}', node.props);
+ var nodeData = {
+ id: ((_node$props2 = node.props) === null || _node$props2 === void 0 ? void 0 : _node$props2.fileid) || 0,
+ source: (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_2__.generateRemoteUrl)('dav' + _client__WEBPACK_IMPORTED_MODULE_3__.rootPath + node.filename),
+ mtime: new Date(node.lastmod),
+ mime: node.mime,
+ size: ((_node$props3 = node.props) === null || _node$props3 === void 0 ? void 0 : _node$props3.size) || 0,
+ permissions: permissions,
+ owner: owner,
+ root: _client__WEBPACK_IMPORTED_MODULE_3__.rootPath,
+ attributes: _objectSpread(_objectSpread(_objectSpread({}, node), node.props), {}, {
+ // Override displayed name on the list
+ displayName: (_node$props4 = node.props) === null || _node$props4 === void 0 ? void 0 : _node$props4['trashbin-filename'],
+ previewUrl: previewUrl
+ })
+ };
+ return node.type === 'file' ? new _nextcloud_files__WEBPACK_IMPORTED_MODULE_1__.File(nodeData) : new _nextcloud_files__WEBPACK_IMPORTED_MODULE_1__.Folder(nodeData);
+};
+/* harmony default export */ __webpack_exports__["default"] = (/*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
+ var path,
+ rootResponse,
+ contentsResponse,
+ _args = arguments;
+ return regeneratorRuntime.wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ path = _args.length > 0 && _args[0] !== undefined ? _args[0] : '/';
+ _context.next = 3;
+ return _client__WEBPACK_IMPORTED_MODULE_3__["default"].stat(path, {
+ details: true,
+ data: data
+ });
+ case 3:
+ rootResponse = _context.sent;
+ _context.next = 6;
+ return _client__WEBPACK_IMPORTED_MODULE_3__["default"].getDirectoryContents(path, {
+ details: true,
+ data: data
+ });
+ case 6:
+ contentsResponse = _context.sent;
+ return _context.abrupt("return", {
+ folder: resultToNode(rootResponse.data),
+ contents: contentsResponse.data.map(resultToNode)
+ });
+ case 8:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee);
+})));
+
+/***/ }),
+
+/***/ "./node_modules/moment/locale sync recursive ^\\.\\/.*$":
+/*!***************************************************!*\
+ !*** ./node_modules/moment/locale/ sync ^\.\/.*$ ***!
+ \***************************************************/
+/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
+
+var map = {
+ "./af": "./node_modules/moment/locale/af.js",
+ "./af.js": "./node_modules/moment/locale/af.js",
+ "./ar": "./node_modules/moment/locale/ar.js",
+ "./ar-dz": "./node_modules/moment/locale/ar-dz.js",
+ "./ar-dz.js": "./node_modules/moment/locale/ar-dz.js",
+ "./ar-kw": "./node_modules/moment/locale/ar-kw.js",
+ "./ar-kw.js": "./node_modules/moment/locale/ar-kw.js",
+ "./ar-ly": "./node_modules/moment/locale/ar-ly.js",
+ "./ar-ly.js": "./node_modules/moment/locale/ar-ly.js",
+ "./ar-ma": "./node_modules/moment/locale/ar-ma.js",
+ "./ar-ma.js": "./node_modules/moment/locale/ar-ma.js",
+ "./ar-sa": "./node_modules/moment/locale/ar-sa.js",
+ "./ar-sa.js": "./node_modules/moment/locale/ar-sa.js",
+ "./ar-tn": "./node_modules/moment/locale/ar-tn.js",
+ "./ar-tn.js": "./node_modules/moment/locale/ar-tn.js",
+ "./ar.js": "./node_modules/moment/locale/ar.js",
+ "./az": "./node_modules/moment/locale/az.js",
+ "./az.js": "./node_modules/moment/locale/az.js",
+ "./be": "./node_modules/moment/locale/be.js",
+ "./be.js": "./node_modules/moment/locale/be.js",
+ "./bg": "./node_modules/moment/locale/bg.js",
+ "./bg.js": "./node_modules/moment/locale/bg.js",
+ "./bm": "./node_modules/moment/locale/bm.js",
+ "./bm.js": "./node_modules/moment/locale/bm.js",
+ "./bn": "./node_modules/moment/locale/bn.js",
+ "./bn-bd": "./node_modules/moment/locale/bn-bd.js",
+ "./bn-bd.js": "./node_modules/moment/locale/bn-bd.js",
+ "./bn.js": "./node_modules/moment/locale/bn.js",
+ "./bo": "./node_modules/moment/locale/bo.js",
+ "./bo.js": "./node_modules/moment/locale/bo.js",
+ "./br": "./node_modules/moment/locale/br.js",
+ "./br.js": "./node_modules/moment/locale/br.js",
+ "./bs": "./node_modules/moment/locale/bs.js",
+ "./bs.js": "./node_modules/moment/locale/bs.js",
+ "./ca": "./node_modules/moment/locale/ca.js",
+ "./ca.js": "./node_modules/moment/locale/ca.js",
+ "./cs": "./node_modules/moment/locale/cs.js",
+ "./cs.js": "./node_modules/moment/locale/cs.js",
+ "./cv": "./node_modules/moment/locale/cv.js",
+ "./cv.js": "./node_modules/moment/locale/cv.js",
+ "./cy": "./node_modules/moment/locale/cy.js",
+ "./cy.js": "./node_modules/moment/locale/cy.js",
+ "./da": "./node_modules/moment/locale/da.js",
+ "./da.js": "./node_modules/moment/locale/da.js",
+ "./de": "./node_modules/moment/locale/de.js",
+ "./de-at": "./node_modules/moment/locale/de-at.js",
+ "./de-at.js": "./node_modules/moment/locale/de-at.js",
+ "./de-ch": "./node_modules/moment/locale/de-ch.js",
+ "./de-ch.js": "./node_modules/moment/locale/de-ch.js",
+ "./de.js": "./node_modules/moment/locale/de.js",
+ "./dv": "./node_modules/moment/locale/dv.js",
+ "./dv.js": "./node_modules/moment/locale/dv.js",
+ "./el": "./node_modules/moment/locale/el.js",
+ "./el.js": "./node_modules/moment/locale/el.js",
+ "./en-au": "./node_modules/moment/locale/en-au.js",
+ "./en-au.js": "./node_modules/moment/locale/en-au.js",
+ "./en-ca": "./node_modules/moment/locale/en-ca.js",
+ "./en-ca.js": "./node_modules/moment/locale/en-ca.js",
+ "./en-gb": "./node_modules/moment/locale/en-gb.js",
+ "./en-gb.js": "./node_modules/moment/locale/en-gb.js",
+ "./en-ie": "./node_modules/moment/locale/en-ie.js",
+ "./en-ie.js": "./node_modules/moment/locale/en-ie.js",
+ "./en-il": "./node_modules/moment/locale/en-il.js",
+ "./en-il.js": "./node_modules/moment/locale/en-il.js",
+ "./en-in": "./node_modules/moment/locale/en-in.js",
+ "./en-in.js": "./node_modules/moment/locale/en-in.js",
+ "./en-nz": "./node_modules/moment/locale/en-nz.js",
+ "./en-nz.js": "./node_modules/moment/locale/en-nz.js",
+ "./en-sg": "./node_modules/moment/locale/en-sg.js",
+ "./en-sg.js": "./node_modules/moment/locale/en-sg.js",
+ "./eo": "./node_modules/moment/locale/eo.js",
+ "./eo.js": "./node_modules/moment/locale/eo.js",
+ "./es": "./node_modules/moment/locale/es.js",
+ "./es-do": "./node_modules/moment/locale/es-do.js",
+ "./es-do.js": "./node_modules/moment/locale/es-do.js",
+ "./es-mx": "./node_modules/moment/locale/es-mx.js",
+ "./es-mx.js": "./node_modules/moment/locale/es-mx.js",
+ "./es-us": "./node_modules/moment/locale/es-us.js",
+ "./es-us.js": "./node_modules/moment/locale/es-us.js",
+ "./es.js": "./node_modules/moment/locale/es.js",
+ "./et": "./node_modules/moment/locale/et.js",
+ "./et.js": "./node_modules/moment/locale/et.js",
+ "./eu": "./node_modules/moment/locale/eu.js",
+ "./eu.js": "./node_modules/moment/locale/eu.js",
+ "./fa": "./node_modules/moment/locale/fa.js",
+ "./fa.js": "./node_modules/moment/locale/fa.js",
+ "./fi": "./node_modules/moment/locale/fi.js",
+ "./fi.js": "./node_modules/moment/locale/fi.js",
+ "./fil": "./node_modules/moment/locale/fil.js",
+ "./fil.js": "./node_modules/moment/locale/fil.js",
+ "./fo": "./node_modules/moment/locale/fo.js",
+ "./fo.js": "./node_modules/moment/locale/fo.js",
+ "./fr": "./node_modules/moment/locale/fr.js",
+ "./fr-ca": "./node_modules/moment/locale/fr-ca.js",
+ "./fr-ca.js": "./node_modules/moment/locale/fr-ca.js",
+ "./fr-ch": "./node_modules/moment/locale/fr-ch.js",
+ "./fr-ch.js": "./node_modules/moment/locale/fr-ch.js",
+ "./fr.js": "./node_modules/moment/locale/fr.js",
+ "./fy": "./node_modules/moment/locale/fy.js",
+ "./fy.js": "./node_modules/moment/locale/fy.js",
+ "./ga": "./node_modules/moment/locale/ga.js",
+ "./ga.js": "./node_modules/moment/locale/ga.js",
+ "./gd": "./node_modules/moment/locale/gd.js",
+ "./gd.js": "./node_modules/moment/locale/gd.js",
+ "./gl": "./node_modules/moment/locale/gl.js",
+ "./gl.js": "./node_modules/moment/locale/gl.js",
+ "./gom-deva": "./node_modules/moment/locale/gom-deva.js",
+ "./gom-deva.js": "./node_modules/moment/locale/gom-deva.js",
+ "./gom-latn": "./node_modules/moment/locale/gom-latn.js",
+ "./gom-latn.js": "./node_modules/moment/locale/gom-latn.js",
+ "./gu": "./node_modules/moment/locale/gu.js",
+ "./gu.js": "./node_modules/moment/locale/gu.js",
+ "./he": "./node_modules/moment/locale/he.js",
+ "./he.js": "./node_modules/moment/locale/he.js",
+ "./hi": "./node_modules/moment/locale/hi.js",
+ "./hi.js": "./node_modules/moment/locale/hi.js",
+ "./hr": "./node_modules/moment/locale/hr.js",
+ "./hr.js": "./node_modules/moment/locale/hr.js",
+ "./hu": "./node_modules/moment/locale/hu.js",
+ "./hu.js": "./node_modules/moment/locale/hu.js",
+ "./hy-am": "./node_modules/moment/locale/hy-am.js",
+ "./hy-am.js": "./node_modules/moment/locale/hy-am.js",
+ "./id": "./node_modules/moment/locale/id.js",
+ "./id.js": "./node_modules/moment/locale/id.js",
+ "./is": "./node_modules/moment/locale/is.js",
+ "./is.js": "./node_modules/moment/locale/is.js",
+ "./it": "./node_modules/moment/locale/it.js",
+ "./it-ch": "./node_modules/moment/locale/it-ch.js",
+ "./it-ch.js": "./node_modules/moment/locale/it-ch.js",
+ "./it.js": "./node_modules/moment/locale/it.js",
+ "./ja": "./node_modules/moment/locale/ja.js",
+ "./ja.js": "./node_modules/moment/locale/ja.js",
+ "./jv": "./node_modules/moment/locale/jv.js",
+ "./jv.js": "./node_modules/moment/locale/jv.js",
+ "./ka": "./node_modules/moment/locale/ka.js",
+ "./ka.js": "./node_modules/moment/locale/ka.js",
+ "./kk": "./node_modules/moment/locale/kk.js",
+ "./kk.js": "./node_modules/moment/locale/kk.js",
+ "./km": "./node_modules/moment/locale/km.js",
+ "./km.js": "./node_modules/moment/locale/km.js",
+ "./kn": "./node_modules/moment/locale/kn.js",
+ "./kn.js": "./node_modules/moment/locale/kn.js",
+ "./ko": "./node_modules/moment/locale/ko.js",
+ "./ko.js": "./node_modules/moment/locale/ko.js",
+ "./ku": "./node_modules/moment/locale/ku.js",
+ "./ku.js": "./node_modules/moment/locale/ku.js",
+ "./ky": "./node_modules/moment/locale/ky.js",
+ "./ky.js": "./node_modules/moment/locale/ky.js",
+ "./lb": "./node_modules/moment/locale/lb.js",
+ "./lb.js": "./node_modules/moment/locale/lb.js",
+ "./lo": "./node_modules/moment/locale/lo.js",
+ "./lo.js": "./node_modules/moment/locale/lo.js",
+ "./lt": "./node_modules/moment/locale/lt.js",
+ "./lt.js": "./node_modules/moment/locale/lt.js",
+ "./lv": "./node_modules/moment/locale/lv.js",
+ "./lv.js": "./node_modules/moment/locale/lv.js",
+ "./me": "./node_modules/moment/locale/me.js",
+ "./me.js": "./node_modules/moment/locale/me.js",
+ "./mi": "./node_modules/moment/locale/mi.js",
+ "./mi.js": "./node_modules/moment/locale/mi.js",
+ "./mk": "./node_modules/moment/locale/mk.js",
+ "./mk.js": "./node_modules/moment/locale/mk.js",
+ "./ml": "./node_modules/moment/locale/ml.js",
+ "./ml.js": "./node_modules/moment/locale/ml.js",
+ "./mn": "./node_modules/moment/locale/mn.js",
+ "./mn.js": "./node_modules/moment/locale/mn.js",
+ "./mr": "./node_modules/moment/locale/mr.js",
+ "./mr.js": "./node_modules/moment/locale/mr.js",
+ "./ms": "./node_modules/moment/locale/ms.js",
+ "./ms-my": "./node_modules/moment/locale/ms-my.js",
+ "./ms-my.js": "./node_modules/moment/locale/ms-my.js",
+ "./ms.js": "./node_modules/moment/locale/ms.js",
+ "./mt": "./node_modules/moment/locale/mt.js",
+ "./mt.js": "./node_modules/moment/locale/mt.js",
+ "./my": "./node_modules/moment/locale/my.js",
+ "./my.js": "./node_modules/moment/locale/my.js",
+ "./nb": "./node_modules/moment/locale/nb.js",
+ "./nb.js": "./node_modules/moment/locale/nb.js",
+ "./ne": "./node_modules/moment/locale/ne.js",
+ "./ne.js": "./node_modules/moment/locale/ne.js",
+ "./nl": "./node_modules/moment/locale/nl.js",
+ "./nl-be": "./node_modules/moment/locale/nl-be.js",
+ "./nl-be.js": "./node_modules/moment/locale/nl-be.js",
+ "./nl.js": "./node_modules/moment/locale/nl.js",
+ "./nn": "./node_modules/moment/locale/nn.js",
+ "./nn.js": "./node_modules/moment/locale/nn.js",
+ "./oc-lnc": "./node_modules/moment/locale/oc-lnc.js",
+ "./oc-lnc.js": "./node_modules/moment/locale/oc-lnc.js",
+ "./pa-in": "./node_modules/moment/locale/pa-in.js",
+ "./pa-in.js": "./node_modules/moment/locale/pa-in.js",
+ "./pl": "./node_modules/moment/locale/pl.js",
+ "./pl.js": "./node_modules/moment/locale/pl.js",
+ "./pt": "./node_modules/moment/locale/pt.js",
+ "./pt-br": "./node_modules/moment/locale/pt-br.js",
+ "./pt-br.js": "./node_modules/moment/locale/pt-br.js",
+ "./pt.js": "./node_modules/moment/locale/pt.js",
+ "./ro": "./node_modules/moment/locale/ro.js",
+ "./ro.js": "./node_modules/moment/locale/ro.js",
+ "./ru": "./node_modules/moment/locale/ru.js",
+ "./ru.js": "./node_modules/moment/locale/ru.js",
+ "./sd": "./node_modules/moment/locale/sd.js",
+ "./sd.js": "./node_modules/moment/locale/sd.js",
+ "./se": "./node_modules/moment/locale/se.js",
+ "./se.js": "./node_modules/moment/locale/se.js",
+ "./si": "./node_modules/moment/locale/si.js",
+ "./si.js": "./node_modules/moment/locale/si.js",
+ "./sk": "./node_modules/moment/locale/sk.js",
+ "./sk.js": "./node_modules/moment/locale/sk.js",
+ "./sl": "./node_modules/moment/locale/sl.js",
+ "./sl.js": "./node_modules/moment/locale/sl.js",
+ "./sq": "./node_modules/moment/locale/sq.js",
+ "./sq.js": "./node_modules/moment/locale/sq.js",
+ "./sr": "./node_modules/moment/locale/sr.js",
+ "./sr-cyrl": "./node_modules/moment/locale/sr-cyrl.js",
+ "./sr-cyrl.js": "./node_modules/moment/locale/sr-cyrl.js",
+ "./sr.js": "./node_modules/moment/locale/sr.js",
+ "./ss": "./node_modules/moment/locale/ss.js",
+ "./ss.js": "./node_modules/moment/locale/ss.js",
+ "./sv": "./node_modules/moment/locale/sv.js",
+ "./sv.js": "./node_modules/moment/locale/sv.js",
+ "./sw": "./node_modules/moment/locale/sw.js",
+ "./sw.js": "./node_modules/moment/locale/sw.js",
+ "./ta": "./node_modules/moment/locale/ta.js",
+ "./ta.js": "./node_modules/moment/locale/ta.js",
+ "./te": "./node_modules/moment/locale/te.js",
+ "./te.js": "./node_modules/moment/locale/te.js",
+ "./tet": "./node_modules/moment/locale/tet.js",
+ "./tet.js": "./node_modules/moment/locale/tet.js",
+ "./tg": "./node_modules/moment/locale/tg.js",
+ "./tg.js": "./node_modules/moment/locale/tg.js",
+ "./th": "./node_modules/moment/locale/th.js",
+ "./th.js": "./node_modules/moment/locale/th.js",
+ "./tk": "./node_modules/moment/locale/tk.js",
+ "./tk.js": "./node_modules/moment/locale/tk.js",
+ "./tl-ph": "./node_modules/moment/locale/tl-ph.js",
+ "./tl-ph.js": "./node_modules/moment/locale/tl-ph.js",
+ "./tlh": "./node_modules/moment/locale/tlh.js",
+ "./tlh.js": "./node_modules/moment/locale/tlh.js",
+ "./tr": "./node_modules/moment/locale/tr.js",
+ "./tr.js": "./node_modules/moment/locale/tr.js",
+ "./tzl": "./node_modules/moment/locale/tzl.js",
+ "./tzl.js": "./node_modules/moment/locale/tzl.js",
+ "./tzm": "./node_modules/moment/locale/tzm.js",
+ "./tzm-latn": "./node_modules/moment/locale/tzm-latn.js",
+ "./tzm-latn.js": "./node_modules/moment/locale/tzm-latn.js",
+ "./tzm.js": "./node_modules/moment/locale/tzm.js",
+ "./ug-cn": "./node_modules/moment/locale/ug-cn.js",
+ "./ug-cn.js": "./node_modules/moment/locale/ug-cn.js",
+ "./uk": "./node_modules/moment/locale/uk.js",
+ "./uk.js": "./node_modules/moment/locale/uk.js",
+ "./ur": "./node_modules/moment/locale/ur.js",
+ "./ur.js": "./node_modules/moment/locale/ur.js",
+ "./uz": "./node_modules/moment/locale/uz.js",
+ "./uz-latn": "./node_modules/moment/locale/uz-latn.js",
+ "./uz-latn.js": "./node_modules/moment/locale/uz-latn.js",
+ "./uz.js": "./node_modules/moment/locale/uz.js",
+ "./vi": "./node_modules/moment/locale/vi.js",
+ "./vi.js": "./node_modules/moment/locale/vi.js",
+ "./x-pseudo": "./node_modules/moment/locale/x-pseudo.js",
+ "./x-pseudo.js": "./node_modules/moment/locale/x-pseudo.js",
+ "./yo": "./node_modules/moment/locale/yo.js",
+ "./yo.js": "./node_modules/moment/locale/yo.js",
+ "./zh-cn": "./node_modules/moment/locale/zh-cn.js",
+ "./zh-cn.js": "./node_modules/moment/locale/zh-cn.js",
+ "./zh-hk": "./node_modules/moment/locale/zh-hk.js",
+ "./zh-hk.js": "./node_modules/moment/locale/zh-hk.js",
+ "./zh-mo": "./node_modules/moment/locale/zh-mo.js",
+ "./zh-mo.js": "./node_modules/moment/locale/zh-mo.js",
+ "./zh-tw": "./node_modules/moment/locale/zh-tw.js",
+ "./zh-tw.js": "./node_modules/moment/locale/zh-tw.js"
+};
+
+
+function webpackContext(req) {
+ var id = webpackContextResolve(req);
+ return __webpack_require__(id);
+}
+function webpackContextResolve(req) {
+ if(!__webpack_require__.o(map, req)) {
+ var e = new Error("Cannot find module '" + req + "'");
+ e.code = 'MODULE_NOT_FOUND';
+ throw e;
+ }
+ return map[req];
+}
+webpackContext.keys = function webpackContextKeys() {
+ return Object.keys(map);
+};
+webpackContext.resolve = webpackContextResolve;
+module.exports = webpackContext;
+webpackContext.id = "./node_modules/moment/locale sync recursive ^\\.\\/.*$";
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ id: moduleId,
+/******/ loaded: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.loaded = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = __webpack_modules__;
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/chunk loaded */
+/******/ !function() {
+/******/ var deferred = [];
+/******/ __webpack_require__.O = function(result, chunkIds, fn, priority) {
+/******/ if(chunkIds) {
+/******/ priority = priority || 0;
+/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
+/******/ deferred[i] = [chunkIds, fn, priority];
+/******/ return;
+/******/ }
+/******/ var notFulfilled = Infinity;
+/******/ for (var i = 0; i < deferred.length; i++) {
+/******/ var chunkIds = deferred[i][0];
+/******/ var fn = deferred[i][1];
+/******/ var priority = deferred[i][2];
+/******/ var fulfilled = true;
+/******/ for (var j = 0; j < chunkIds.length; j++) {
+/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {
+/******/ chunkIds.splice(j--, 1);
+/******/ } else {
+/******/ fulfilled = false;
+/******/ if(priority < notFulfilled) notFulfilled = priority;
+/******/ }
+/******/ }
+/******/ if(fulfilled) {
+/******/ deferred.splice(i--, 1)
+/******/ var r = fn();
+/******/ if (r !== undefined) result = r;
+/******/ }
+/******/ }
+/******/ return result;
+/******/ };
+/******/ }();
+/******/
+/******/ /* webpack/runtime/compat get default export */
+/******/ !function() {
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function() { return module['default']; } :
+/******/ function() { return module; };
+/******/ __webpack_require__.d(getter, { a: getter });
+/******/ return getter;
+/******/ };
+/******/ }();
+/******/
+/******/ /* webpack/runtime/define property getters */
+/******/ !function() {
+/******/ // define getter functions for harmony exports
+/******/ __webpack_require__.d = function(exports, definition) {
+/******/ for(var key in definition) {
+/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ }
+/******/ }
+/******/ };
+/******/ }();
+/******/
+/******/ /* webpack/runtime/global */
+/******/ !function() {
+/******/ __webpack_require__.g = (function() {
+/******/ if (typeof globalThis === 'object') return globalThis;
+/******/ try {
+/******/ return this || new Function('return this')();
+/******/ } catch (e) {
+/******/ if (typeof window === 'object') return window;
+/******/ }
+/******/ })();
+/******/ }();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ !function() {
+/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
+/******/ }();
+/******/
+/******/ /* webpack/runtime/make namespace object */
+/******/ !function() {
+/******/ // 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 });
+/******/ };
+/******/ }();
+/******/
+/******/ /* webpack/runtime/node module decorator */
+/******/ !function() {
+/******/ __webpack_require__.nmd = function(module) {
+/******/ module.paths = [];
+/******/ if (!module.children) module.children = [];
+/******/ return module;
+/******/ };
+/******/ }();
+/******/
+/******/ /* webpack/runtime/jsonp chunk loading */
+/******/ !function() {
+/******/ __webpack_require__.b = document.baseURI || self.location.href;
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ "files_trashbin-main": 0
+/******/ };
+/******/
+/******/ // no chunk on demand loading
+/******/
+/******/ // no prefetching
+/******/
+/******/ // no preloaded
+/******/
+/******/ // no HMR
+/******/
+/******/ // no HMR manifest
+/******/
+/******/ __webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };
+/******/
+/******/ // install a JSONP callback for chunk loading
+/******/ var webpackJsonpCallback = function(parentChunkLoadingFunction, data) {
+/******/ var chunkIds = data[0];
+/******/ var moreModules = data[1];
+/******/ var runtime = data[2];
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0;
+/******/ if(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {
+/******/ for(moduleId in moreModules) {
+/******/ if(__webpack_require__.o(moreModules, moduleId)) {
+/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(runtime) var result = runtime(__webpack_require__);
+/******/ }
+/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
+/******/ installedChunks[chunkId][0]();
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ return __webpack_require__.O(result);
+/******/ }
+/******/
+/******/ var chunkLoadingGlobal = self["webpackChunknextcloud"] = self["webpackChunknextcloud"] || [];
+/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
+/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
+/******/ }();
+/******/
+/******/ /* webpack/runtime/nonce */
+/******/ !function() {
+/******/ __webpack_require__.nc = undefined;
+/******/ }();
+/******/
+/************************************************************************/
+/******/
+/******/ // startup
+/******/ // Load entry module and return exports
+/******/ // This entry module depends on other loaded chunks and execution need to be delayed
+/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["core-common"], function() { return __webpack_require__("./apps/files_trashbin/src/main.ts"); })
+/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
+/******/
+/******/ })()
+;
+//# sourceMappingURL=files_trashbin-main.js.map?v=7549606b4d25ea65013a \ No newline at end of file
diff --git a/dist/files_trashbin-main.js.map b/dist/files_trashbin-main.js.map
new file mode 100644
index 00000000000..041458e6765
--- /dev/null
+++ b/dist/files_trashbin-main.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"files_trashbin-main.js?v=7549606b4d25ea65013a","mappings":";;;;;;;;;;;;;;;;;;;AAAA;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;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;;;;;;;;;;;;;;;;;;AC5GA;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;;;;;;;;;;;;;;;;;;;AC/DA;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;;;;;;;;;;;;;;;;AChCA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC3FA;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;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;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;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;;;;;;ACnSA;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;;;;AC7BA;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;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACNA;AACA;AACA;AACA;AACA;;;;;ACJA;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;;;;;AClDA;;;;;AEAA;AACA;AACA;AACA;AACA","sources":["webpack:///nextcloud/apps/files_trashbin/src/actions/restoreAction.ts","webpack:///nextcloud/apps/files_trashbin/src/main.ts","webpack:///nextcloud/apps/files_trashbin/src/services/client.ts","webpack:///nextcloud/apps/files_trashbin/src/services/trashbin.ts","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/before-startup","webpack:///nextcloud/webpack/startup","webpack:///nextcloud/webpack/after-startup"],"sourcesContent":["function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { emit } from '@nextcloud/event-bus';\nimport { generateRemoteUrl } from '@nextcloud/router';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { registerFileAction, Permission, FileAction } from '@nextcloud/files';\nimport { translate as t } from '@nextcloud/l10n';\nimport axios from '@nextcloud/axios';\nimport History from '@mdi/svg/svg/history.svg?raw';\nregisterFileAction(new FileAction({\n id: 'restore',\n displayName: function displayName() {\n return t('files_trashbin', 'Restore');\n },\n iconSvgInline: function iconSvgInline() {\n return History;\n },\n enabled: function enabled(nodes, view) {\n // Only available in the trashbin view\n if (view.id !== 'trashbin') {\n return false;\n }\n\n // Only available if all nodes have read permission\n return nodes.length > 0 && nodes.map(function (node) {\n return node.permissions;\n }).every(function (permission) {\n return (permission & Permission.READ) !== 0;\n });\n },\n exec: function exec(node) {\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n var _getCurrentUser, destination;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.prev = 0;\n destination = generateRemoteUrl(\"dav/trashbin/\".concat((_getCurrentUser = getCurrentUser()) === null || _getCurrentUser === void 0 ? void 0 : _getCurrentUser.uid, \"/restore/\").concat(node.basename));\n _context.next = 4;\n return axios({\n method: 'MOVE',\n url: node.source,\n headers: {\n destination: destination\n }\n });\n case 4:\n // Let's pretend the file is deleted since\n // we don't know the restored location\n emit('files:file:deleted', node);\n return _context.abrupt(\"return\", true);\n case 8:\n _context.prev = 8;\n _context.t0 = _context[\"catch\"](0);\n console.error(_context.t0);\n return _context.abrupt(\"return\", false);\n case 12:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, null, [[0, 8]]);\n }))();\n },\n execBatch: function execBatch(nodes, view) {\n var _this = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n return _context2.abrupt(\"return\", Promise.all(nodes.map(function (node) {\n return _this.exec(node, view);\n })));\n case 1:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }))();\n },\n order: 1,\n inline: function inline() {\n return true;\n }\n}));","/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t, translate } from '@nextcloud/l10n';\nimport DeleteSvg from '@mdi/svg/svg/delete.svg?raw';\nimport moment from '@nextcloud/moment';\nimport getContents from './services/trashbin';\n\n// Register restore action\nimport './actions/restoreAction';\nvar Navigation = window.OCP.Files.Navigation;\nNavigation.register({\n id: 'trashbin',\n name: t('files_trashbin', 'Deleted files'),\n caption: t('files_trashbin', 'List of files that have been deleted.'),\n icon: DeleteSvg,\n order: 50,\n sticky: true,\n defaultSortKey: 'deleted',\n columns: [{\n id: 'deleted',\n title: t('files_trashbin', 'Deleted'),\n render: function render(node) {\n var _node$attributes;\n var deletionTime = (_node$attributes = node.attributes) === null || _node$attributes === void 0 ? void 0 : _node$attributes['trashbin-deletion-time'];\n var span = document.createElement('span');\n if (deletionTime) {\n span.title = moment.unix(deletionTime).format('LLL');\n span.textContent = moment.unix(deletionTime).fromNow();\n return span;\n }\n\n // Unknown deletion time\n span.textContent = translate('files_trashbin', 'A long time ago');\n return span;\n },\n sort: function sort(nodeA, nodeB) {\n var _nodeA$attributes, _nodeB$attributes;\n var deletionTimeA = ((_nodeA$attributes = nodeA.attributes) === null || _nodeA$attributes === void 0 ? void 0 : _nodeA$attributes['trashbin-deletion-time']) || (nodeA === null || nodeA === void 0 ? void 0 : nodeA.mtime) || 0;\n var deletionTimeB = ((_nodeB$attributes = nodeB.attributes) === null || _nodeB$attributes === void 0 ? void 0 : _nodeB$attributes['trashbin-deletion-time']) || (nodeB === null || nodeB === void 0 ? void 0 : nodeB.mtime) || 0;\n return deletionTimeB - deletionTimeA;\n }\n }],\n getContents: getContents\n});","var _getCurrentUser;\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { createClient } from 'webdav';\nimport { generateRemoteUrl } from '@nextcloud/router';\nimport { getCurrentUser, getRequestToken } from '@nextcloud/auth';\nexport var rootPath = \"/trashbin/\".concat((_getCurrentUser = getCurrentUser()) === null || _getCurrentUser === void 0 ? void 0 : _getCurrentUser.uid, \"/trash\");\nexport var rootUrl = generateRemoteUrl('dav' + rootPath);\nvar client = createClient(rootUrl, {\n headers: {\n requesttoken: getRequestToken()\n }\n});\nexport default client;","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/* eslint-disable */\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { File, Folder, parseWebdavPermissions } from '@nextcloud/files';\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router';\nimport client, { rootPath } from './client';\nvar data = \"<?xml version=\\\"1.0\\\"?>\\n<d:propfind xmlns:d=\\\"DAV:\\\"\\n\\txmlns:oc=\\\"http://owncloud.org/ns\\\"\\n\\txmlns:nc=\\\"http://nextcloud.org/ns\\\">\\n\\t<d:prop>\\n\\t\\t<nc:trashbin-filename />\\n\\t\\t<nc:trashbin-deletion-time />\\n\\t\\t<nc:trashbin-original-location />\\n\\t\\t<nc:trashbin-title />\\n\\t\\t<d:getlastmodified />\\n\\t\\t<d:getetag />\\n\\t\\t<d:getcontenttype />\\n\\t\\t<d:resourcetype />\\n\\t\\t<oc:fileid />\\n\\t\\t<oc:permissions />\\n\\t\\t<oc:size />\\n\\t\\t<d:getcontentlength />\\n\\t</d:prop>\\n</d:propfind>\";\nvar resultToNode = function resultToNode(node) {\n var _node$props, _getCurrentUser, _node$props2, _node$props3, _node$props4;\n var permissions = parseWebdavPermissions((_node$props = node.props) === null || _node$props === void 0 ? void 0 : _node$props.permissions);\n var owner = (_getCurrentUser = getCurrentUser()) === null || _getCurrentUser === void 0 ? void 0 : _getCurrentUser.uid;\n var previewUrl = generateUrl('/apps/files_trashbin/preview?fileId={fileid}', node.props);\n var nodeData = {\n id: ((_node$props2 = node.props) === null || _node$props2 === void 0 ? void 0 : _node$props2.fileid) || 0,\n source: generateRemoteUrl('dav' + rootPath + node.filename),\n mtime: new Date(node.lastmod),\n mime: node.mime,\n size: ((_node$props3 = node.props) === null || _node$props3 === void 0 ? void 0 : _node$props3.size) || 0,\n permissions: permissions,\n owner: owner,\n root: rootPath,\n attributes: _objectSpread(_objectSpread(_objectSpread({}, node), node.props), {}, {\n // Override displayed name on the list\n displayName: (_node$props4 = node.props) === null || _node$props4 === void 0 ? void 0 : _node$props4['trashbin-filename'],\n previewUrl: previewUrl\n })\n };\n return node.type === 'file' ? new File(nodeData) : new Folder(nodeData);\n};\nexport default /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n var path,\n rootResponse,\n contentsResponse,\n _args = arguments;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n path = _args.length > 0 && _args[0] !== undefined ? _args[0] : '/';\n _context.next = 3;\n return client.stat(path, {\n details: true,\n data: data\n });\n case 3:\n rootResponse = _context.sent;\n _context.next = 6;\n return client.getDirectoryContents(path, {\n details: true,\n data: data\n });\n case 6:\n contentsResponse = _context.sent;\n return _context.abrupt(\"return\", {\n folder: resultToNode(rootResponse.data),\n contents: contentsResponse.data.map(resultToNode)\n });\n case 8:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n}));","var map = {\n\t\"./af\": \"./node_modules/moment/locale/af.js\",\n\t\"./af.js\": \"./node_modules/moment/locale/af.js\",\n\t\"./ar\": \"./node_modules/moment/locale/ar.js\",\n\t\"./ar-dz\": \"./node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-dz.js\": \"./node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-kw\": \"./node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-kw.js\": \"./node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-ly\": \"./node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ly.js\": \"./node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ma\": \"./node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-ma.js\": \"./node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-sa\": \"./node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-sa.js\": \"./node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-tn\": \"./node_modules/moment/locale/ar-tn.js\",\n\t\"./ar-tn.js\": \"./node_modules/moment/locale/ar-tn.js\",\n\t\"./ar.js\": \"./node_modules/moment/locale/ar.js\",\n\t\"./az\": \"./node_modules/moment/locale/az.js\",\n\t\"./az.js\": \"./node_modules/moment/locale/az.js\",\n\t\"./be\": \"./node_modules/moment/locale/be.js\",\n\t\"./be.js\": \"./node_modules/moment/locale/be.js\",\n\t\"./bg\": \"./node_modules/moment/locale/bg.js\",\n\t\"./bg.js\": \"./node_modules/moment/locale/bg.js\",\n\t\"./bm\": \"./node_modules/moment/locale/bm.js\",\n\t\"./bm.js\": \"./node_modules/moment/locale/bm.js\",\n\t\"./bn\": \"./node_modules/moment/locale/bn.js\",\n\t\"./bn-bd\": \"./node_modules/moment/locale/bn-bd.js\",\n\t\"./bn-bd.js\": \"./node_modules/moment/locale/bn-bd.js\",\n\t\"./bn.js\": \"./node_modules/moment/locale/bn.js\",\n\t\"./bo\": \"./node_modules/moment/locale/bo.js\",\n\t\"./bo.js\": \"./node_modules/moment/locale/bo.js\",\n\t\"./br\": \"./node_modules/moment/locale/br.js\",\n\t\"./br.js\": \"./node_modules/moment/locale/br.js\",\n\t\"./bs\": \"./node_modules/moment/locale/bs.js\",\n\t\"./bs.js\": \"./node_modules/moment/locale/bs.js\",\n\t\"./ca\": \"./node_modules/moment/locale/ca.js\",\n\t\"./ca.js\": \"./node_modules/moment/locale/ca.js\",\n\t\"./cs\": \"./node_modules/moment/locale/cs.js\",\n\t\"./cs.js\": \"./node_modules/moment/locale/cs.js\",\n\t\"./cv\": \"./node_modules/moment/locale/cv.js\",\n\t\"./cv.js\": \"./node_modules/moment/locale/cv.js\",\n\t\"./cy\": \"./node_modules/moment/locale/cy.js\",\n\t\"./cy.js\": \"./node_modules/moment/locale/cy.js\",\n\t\"./da\": \"./node_modules/moment/locale/da.js\",\n\t\"./da.js\": \"./node_modules/moment/locale/da.js\",\n\t\"./de\": \"./node_modules/moment/locale/de.js\",\n\t\"./de-at\": \"./node_modules/moment/locale/de-at.js\",\n\t\"./de-at.js\": \"./node_modules/moment/locale/de-at.js\",\n\t\"./de-ch\": \"./node_modules/moment/locale/de-ch.js\",\n\t\"./de-ch.js\": \"./node_modules/moment/locale/de-ch.js\",\n\t\"./de.js\": \"./node_modules/moment/locale/de.js\",\n\t\"./dv\": \"./node_modules/moment/locale/dv.js\",\n\t\"./dv.js\": \"./node_modules/moment/locale/dv.js\",\n\t\"./el\": \"./node_modules/moment/locale/el.js\",\n\t\"./el.js\": \"./node_modules/moment/locale/el.js\",\n\t\"./en-au\": \"./node_modules/moment/locale/en-au.js\",\n\t\"./en-au.js\": \"./node_modules/moment/locale/en-au.js\",\n\t\"./en-ca\": \"./node_modules/moment/locale/en-ca.js\",\n\t\"./en-ca.js\": \"./node_modules/moment/locale/en-ca.js\",\n\t\"./en-gb\": \"./node_modules/moment/locale/en-gb.js\",\n\t\"./en-gb.js\": \"./node_modules/moment/locale/en-gb.js\",\n\t\"./en-ie\": \"./node_modules/moment/locale/en-ie.js\",\n\t\"./en-ie.js\": \"./node_modules/moment/locale/en-ie.js\",\n\t\"./en-il\": \"./node_modules/moment/locale/en-il.js\",\n\t\"./en-il.js\": \"./node_modules/moment/locale/en-il.js\",\n\t\"./en-in\": \"./node_modules/moment/locale/en-in.js\",\n\t\"./en-in.js\": \"./node_modules/moment/locale/en-in.js\",\n\t\"./en-nz\": \"./node_modules/moment/locale/en-nz.js\",\n\t\"./en-nz.js\": \"./node_modules/moment/locale/en-nz.js\",\n\t\"./en-sg\": \"./node_modules/moment/locale/en-sg.js\",\n\t\"./en-sg.js\": \"./node_modules/moment/locale/en-sg.js\",\n\t\"./eo\": \"./node_modules/moment/locale/eo.js\",\n\t\"./eo.js\": \"./node_modules/moment/locale/eo.js\",\n\t\"./es\": \"./node_modules/moment/locale/es.js\",\n\t\"./es-do\": \"./node_modules/moment/locale/es-do.js\",\n\t\"./es-do.js\": \"./node_modules/moment/locale/es-do.js\",\n\t\"./es-mx\": \"./node_modules/moment/locale/es-mx.js\",\n\t\"./es-mx.js\": \"./node_modules/moment/locale/es-mx.js\",\n\t\"./es-us\": \"./node_modules/moment/locale/es-us.js\",\n\t\"./es-us.js\": \"./node_modules/moment/locale/es-us.js\",\n\t\"./es.js\": \"./node_modules/moment/locale/es.js\",\n\t\"./et\": \"./node_modules/moment/locale/et.js\",\n\t\"./et.js\": \"./node_modules/moment/locale/et.js\",\n\t\"./eu\": \"./node_modules/moment/locale/eu.js\",\n\t\"./eu.js\": \"./node_modules/moment/locale/eu.js\",\n\t\"./fa\": \"./node_modules/moment/locale/fa.js\",\n\t\"./fa.js\": \"./node_modules/moment/locale/fa.js\",\n\t\"./fi\": \"./node_modules/moment/locale/fi.js\",\n\t\"./fi.js\": \"./node_modules/moment/locale/fi.js\",\n\t\"./fil\": \"./node_modules/moment/locale/fil.js\",\n\t\"./fil.js\": \"./node_modules/moment/locale/fil.js\",\n\t\"./fo\": \"./node_modules/moment/locale/fo.js\",\n\t\"./fo.js\": \"./node_modules/moment/locale/fo.js\",\n\t\"./fr\": \"./node_modules/moment/locale/fr.js\",\n\t\"./fr-ca\": \"./node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ca.js\": \"./node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ch\": \"./node_modules/moment/locale/fr-ch.js\",\n\t\"./fr-ch.js\": \"./node_modules/moment/locale/fr-ch.js\",\n\t\"./fr.js\": \"./node_modules/moment/locale/fr.js\",\n\t\"./fy\": \"./node_modules/moment/locale/fy.js\",\n\t\"./fy.js\": \"./node_modules/moment/locale/fy.js\",\n\t\"./ga\": \"./node_modules/moment/locale/ga.js\",\n\t\"./ga.js\": \"./node_modules/moment/locale/ga.js\",\n\t\"./gd\": \"./node_modules/moment/locale/gd.js\",\n\t\"./gd.js\": \"./node_modules/moment/locale/gd.js\",\n\t\"./gl\": \"./node_modules/moment/locale/gl.js\",\n\t\"./gl.js\": \"./node_modules/moment/locale/gl.js\",\n\t\"./gom-deva\": \"./node_modules/moment/locale/gom-deva.js\",\n\t\"./gom-deva.js\": \"./node_modules/moment/locale/gom-deva.js\",\n\t\"./gom-latn\": \"./node_modules/moment/locale/gom-latn.js\",\n\t\"./gom-latn.js\": \"./node_modules/moment/locale/gom-latn.js\",\n\t\"./gu\": \"./node_modules/moment/locale/gu.js\",\n\t\"./gu.js\": \"./node_modules/moment/locale/gu.js\",\n\t\"./he\": \"./node_modules/moment/locale/he.js\",\n\t\"./he.js\": \"./node_modules/moment/locale/he.js\",\n\t\"./hi\": \"./node_modules/moment/locale/hi.js\",\n\t\"./hi.js\": \"./node_modules/moment/locale/hi.js\",\n\t\"./hr\": \"./node_modules/moment/locale/hr.js\",\n\t\"./hr.js\": \"./node_modules/moment/locale/hr.js\",\n\t\"./hu\": \"./node_modules/moment/locale/hu.js\",\n\t\"./hu.js\": \"./node_modules/moment/locale/hu.js\",\n\t\"./hy-am\": \"./node_modules/moment/locale/hy-am.js\",\n\t\"./hy-am.js\": \"./node_modules/moment/locale/hy-am.js\",\n\t\"./id\": \"./node_modules/moment/locale/id.js\",\n\t\"./id.js\": \"./node_modules/moment/locale/id.js\",\n\t\"./is\": \"./node_modules/moment/locale/is.js\",\n\t\"./is.js\": \"./node_modules/moment/locale/is.js\",\n\t\"./it\": \"./node_modules/moment/locale/it.js\",\n\t\"./it-ch\": \"./node_modules/moment/locale/it-ch.js\",\n\t\"./it-ch.js\": \"./node_modules/moment/locale/it-ch.js\",\n\t\"./it.js\": \"./node_modules/moment/locale/it.js\",\n\t\"./ja\": \"./node_modules/moment/locale/ja.js\",\n\t\"./ja.js\": \"./node_modules/moment/locale/ja.js\",\n\t\"./jv\": \"./node_modules/moment/locale/jv.js\",\n\t\"./jv.js\": \"./node_modules/moment/locale/jv.js\",\n\t\"./ka\": \"./node_modules/moment/locale/ka.js\",\n\t\"./ka.js\": \"./node_modules/moment/locale/ka.js\",\n\t\"./kk\": \"./node_modules/moment/locale/kk.js\",\n\t\"./kk.js\": \"./node_modules/moment/locale/kk.js\",\n\t\"./km\": \"./node_modules/moment/locale/km.js\",\n\t\"./km.js\": \"./node_modules/moment/locale/km.js\",\n\t\"./kn\": \"./node_modules/moment/locale/kn.js\",\n\t\"./kn.js\": \"./node_modules/moment/locale/kn.js\",\n\t\"./ko\": \"./node_modules/moment/locale/ko.js\",\n\t\"./ko.js\": \"./node_modules/moment/locale/ko.js\",\n\t\"./ku\": \"./node_modules/moment/locale/ku.js\",\n\t\"./ku.js\": \"./node_modules/moment/locale/ku.js\",\n\t\"./ky\": \"./node_modules/moment/locale/ky.js\",\n\t\"./ky.js\": \"./node_modules/moment/locale/ky.js\",\n\t\"./lb\": \"./node_modules/moment/locale/lb.js\",\n\t\"./lb.js\": \"./node_modules/moment/locale/lb.js\",\n\t\"./lo\": \"./node_modules/moment/locale/lo.js\",\n\t\"./lo.js\": \"./node_modules/moment/locale/lo.js\",\n\t\"./lt\": \"./node_modules/moment/locale/lt.js\",\n\t\"./lt.js\": \"./node_modules/moment/locale/lt.js\",\n\t\"./lv\": \"./node_modules/moment/locale/lv.js\",\n\t\"./lv.js\": \"./node_modules/moment/locale/lv.js\",\n\t\"./me\": \"./node_modules/moment/locale/me.js\",\n\t\"./me.js\": \"./node_modules/moment/locale/me.js\",\n\t\"./mi\": \"./node_modules/moment/locale/mi.js\",\n\t\"./mi.js\": \"./node_modules/moment/locale/mi.js\",\n\t\"./mk\": \"./node_modules/moment/locale/mk.js\",\n\t\"./mk.js\": \"./node_modules/moment/locale/mk.js\",\n\t\"./ml\": \"./node_modules/moment/locale/ml.js\",\n\t\"./ml.js\": \"./node_modules/moment/locale/ml.js\",\n\t\"./mn\": \"./node_modules/moment/locale/mn.js\",\n\t\"./mn.js\": \"./node_modules/moment/locale/mn.js\",\n\t\"./mr\": \"./node_modules/moment/locale/mr.js\",\n\t\"./mr.js\": \"./node_modules/moment/locale/mr.js\",\n\t\"./ms\": \"./node_modules/moment/locale/ms.js\",\n\t\"./ms-my\": \"./node_modules/moment/locale/ms-my.js\",\n\t\"./ms-my.js\": \"./node_modules/moment/locale/ms-my.js\",\n\t\"./ms.js\": \"./node_modules/moment/locale/ms.js\",\n\t\"./mt\": \"./node_modules/moment/locale/mt.js\",\n\t\"./mt.js\": \"./node_modules/moment/locale/mt.js\",\n\t\"./my\": \"./node_modules/moment/locale/my.js\",\n\t\"./my.js\": \"./node_modules/moment/locale/my.js\",\n\t\"./nb\": \"./node_modules/moment/locale/nb.js\",\n\t\"./nb.js\": \"./node_modules/moment/locale/nb.js\",\n\t\"./ne\": \"./node_modules/moment/locale/ne.js\",\n\t\"./ne.js\": \"./node_modules/moment/locale/ne.js\",\n\t\"./nl\": \"./node_modules/moment/locale/nl.js\",\n\t\"./nl-be\": \"./node_modules/moment/locale/nl-be.js\",\n\t\"./nl-be.js\": \"./node_modules/moment/locale/nl-be.js\",\n\t\"./nl.js\": \"./node_modules/moment/locale/nl.js\",\n\t\"./nn\": \"./node_modules/moment/locale/nn.js\",\n\t\"./nn.js\": \"./node_modules/moment/locale/nn.js\",\n\t\"./oc-lnc\": \"./node_modules/moment/locale/oc-lnc.js\",\n\t\"./oc-lnc.js\": \"./node_modules/moment/locale/oc-lnc.js\",\n\t\"./pa-in\": \"./node_modules/moment/locale/pa-in.js\",\n\t\"./pa-in.js\": \"./node_modules/moment/locale/pa-in.js\",\n\t\"./pl\": \"./node_modules/moment/locale/pl.js\",\n\t\"./pl.js\": \"./node_modules/moment/locale/pl.js\",\n\t\"./pt\": \"./node_modules/moment/locale/pt.js\",\n\t\"./pt-br\": \"./node_modules/moment/locale/pt-br.js\",\n\t\"./pt-br.js\": \"./node_modules/moment/locale/pt-br.js\",\n\t\"./pt.js\": \"./node_modules/moment/locale/pt.js\",\n\t\"./ro\": \"./node_modules/moment/locale/ro.js\",\n\t\"./ro.js\": \"./node_modules/moment/locale/ro.js\",\n\t\"./ru\": \"./node_modules/moment/locale/ru.js\",\n\t\"./ru.js\": \"./node_modules/moment/locale/ru.js\",\n\t\"./sd\": \"./node_modules/moment/locale/sd.js\",\n\t\"./sd.js\": \"./node_modules/moment/locale/sd.js\",\n\t\"./se\": \"./node_modules/moment/locale/se.js\",\n\t\"./se.js\": \"./node_modules/moment/locale/se.js\",\n\t\"./si\": \"./node_modules/moment/locale/si.js\",\n\t\"./si.js\": \"./node_modules/moment/locale/si.js\",\n\t\"./sk\": \"./node_modules/moment/locale/sk.js\",\n\t\"./sk.js\": \"./node_modules/moment/locale/sk.js\",\n\t\"./sl\": \"./node_modules/moment/locale/sl.js\",\n\t\"./sl.js\": \"./node_modules/moment/locale/sl.js\",\n\t\"./sq\": \"./node_modules/moment/locale/sq.js\",\n\t\"./sq.js\": \"./node_modules/moment/locale/sq.js\",\n\t\"./sr\": \"./node_modules/moment/locale/sr.js\",\n\t\"./sr-cyrl\": \"./node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr-cyrl.js\": \"./node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr.js\": \"./node_modules/moment/locale/sr.js\",\n\t\"./ss\": \"./node_modules/moment/locale/ss.js\",\n\t\"./ss.js\": \"./node_modules/moment/locale/ss.js\",\n\t\"./sv\": \"./node_modules/moment/locale/sv.js\",\n\t\"./sv.js\": \"./node_modules/moment/locale/sv.js\",\n\t\"./sw\": \"./node_modules/moment/locale/sw.js\",\n\t\"./sw.js\": \"./node_modules/moment/locale/sw.js\",\n\t\"./ta\": \"./node_modules/moment/locale/ta.js\",\n\t\"./ta.js\": \"./node_modules/moment/locale/ta.js\",\n\t\"./te\": \"./node_modules/moment/locale/te.js\",\n\t\"./te.js\": \"./node_modules/moment/locale/te.js\",\n\t\"./tet\": \"./node_modules/moment/locale/tet.js\",\n\t\"./tet.js\": \"./node_modules/moment/locale/tet.js\",\n\t\"./tg\": \"./node_modules/moment/locale/tg.js\",\n\t\"./tg.js\": \"./node_modules/moment/locale/tg.js\",\n\t\"./th\": \"./node_modules/moment/locale/th.js\",\n\t\"./th.js\": \"./node_modules/moment/locale/th.js\",\n\t\"./tk\": \"./node_modules/moment/locale/tk.js\",\n\t\"./tk.js\": \"./node_modules/moment/locale/tk.js\",\n\t\"./tl-ph\": \"./node_modules/moment/locale/tl-ph.js\",\n\t\"./tl-ph.js\": \"./node_modules/moment/locale/tl-ph.js\",\n\t\"./tlh\": \"./node_modules/moment/locale/tlh.js\",\n\t\"./tlh.js\": \"./node_modules/moment/locale/tlh.js\",\n\t\"./tr\": \"./node_modules/moment/locale/tr.js\",\n\t\"./tr.js\": \"./node_modules/moment/locale/tr.js\",\n\t\"./tzl\": \"./node_modules/moment/locale/tzl.js\",\n\t\"./tzl.js\": \"./node_modules/moment/locale/tzl.js\",\n\t\"./tzm\": \"./node_modules/moment/locale/tzm.js\",\n\t\"./tzm-latn\": \"./node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm-latn.js\": \"./node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm.js\": \"./node_modules/moment/locale/tzm.js\",\n\t\"./ug-cn\": \"./node_modules/moment/locale/ug-cn.js\",\n\t\"./ug-cn.js\": \"./node_modules/moment/locale/ug-cn.js\",\n\t\"./uk\": \"./node_modules/moment/locale/uk.js\",\n\t\"./uk.js\": \"./node_modules/moment/locale/uk.js\",\n\t\"./ur\": \"./node_modules/moment/locale/ur.js\",\n\t\"./ur.js\": \"./node_modules/moment/locale/ur.js\",\n\t\"./uz\": \"./node_modules/moment/locale/uz.js\",\n\t\"./uz-latn\": \"./node_modules/moment/locale/uz-latn.js\",\n\t\"./uz-latn.js\": \"./node_modules/moment/locale/uz-latn.js\",\n\t\"./uz.js\": \"./node_modules/moment/locale/uz.js\",\n\t\"./vi\": \"./node_modules/moment/locale/vi.js\",\n\t\"./vi.js\": \"./node_modules/moment/locale/vi.js\",\n\t\"./x-pseudo\": \"./node_modules/moment/locale/x-pseudo.js\",\n\t\"./x-pseudo.js\": \"./node_modules/moment/locale/x-pseudo.js\",\n\t\"./yo\": \"./node_modules/moment/locale/yo.js\",\n\t\"./yo.js\": \"./node_modules/moment/locale/yo.js\",\n\t\"./zh-cn\": \"./node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-cn.js\": \"./node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-hk\": \"./node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-hk.js\": \"./node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-mo\": \"./node_modules/moment/locale/zh-mo.js\",\n\t\"./zh-mo.js\": \"./node_modules/moment/locale/zh-mo.js\",\n\t\"./zh-tw\": \"./node_modules/moment/locale/zh-tw.js\",\n\t\"./zh-tw.js\": \"./node_modules/moment/locale/zh-tw.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./node_modules/moment/locale sync recursive ^\\\\.\\\\/.*$\";","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"files_trashbin-main\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [\"core-common\"], function() { return __webpack_require__(\"./apps/files_trashbin/src/main.ts\"); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n",""],"names":[],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/preview-service-worker.js b/dist/preview-service-worker.js
new file mode 100644
index 00000000000..68fb455a419
--- /dev/null
+++ b/dist/preview-service-worker.js
@@ -0,0 +1,3119 @@
+// @ts-ignore
+try {
+ self['workbox:core:6.5.3'] && _();
+} catch (e) {}
+
+/*
+ Copyright 2019 Google LLC
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+const logger = (() => {
+ // Don't overwrite this value if it's already set.
+ // See https://github.com/GoogleChrome/workbox/pull/2284#issuecomment-560470923
+ if (!('__WB_DISABLE_DEV_LOGS' in self)) {
+ self.__WB_DISABLE_DEV_LOGS = false;
+ }
+ let inGroup = false;
+ const methodToColorMap = {
+ debug: `#7f8c8d`,
+ log: `#2ecc71`,
+ warn: `#f39c12`,
+ error: `#c0392b`,
+ groupCollapsed: `#3498db`,
+ groupEnd: null // No colored prefix on groupEnd
+ };
+
+ const print = function (method, args) {
+ if (self.__WB_DISABLE_DEV_LOGS) {
+ return;
+ }
+ if (method === 'groupCollapsed') {
+ // Safari doesn't print all console.groupCollapsed() arguments:
+ // https://bugs.webkit.org/show_bug.cgi?id=182754
+ if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
+ console[method](...args);
+ return;
+ }
+ }
+ const styles = [`background: ${methodToColorMap[method]}`, `border-radius: 0.5em`, `color: white`, `font-weight: bold`, `padding: 2px 0.5em`];
+ // When in a group, the workbox prefix is not displayed.
+ const logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')];
+ console[method](...logPrefix, ...args);
+ if (method === 'groupCollapsed') {
+ inGroup = true;
+ }
+ if (method === 'groupEnd') {
+ inGroup = false;
+ }
+ };
+ // eslint-disable-next-line @typescript-eslint/ban-types
+ const api = {};
+ const loggerMethods = Object.keys(methodToColorMap);
+ for (const key of loggerMethods) {
+ const method = key;
+ api[method] = (...args) => {
+ print(method, args);
+ };
+ }
+ return api;
+})();
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+const messages$1 = {
+ 'invalid-value': ({
+ paramName,
+ validValueDescription,
+ value
+ }) => {
+ if (!paramName || !validValueDescription) {
+ throw new Error(`Unexpected input to 'invalid-value' error.`);
+ }
+ return `The '${paramName}' parameter was given a value with an ` + `unexpected value. ${validValueDescription} Received a value of ` + `${JSON.stringify(value)}.`;
+ },
+ 'not-an-array': ({
+ moduleName,
+ className,
+ funcName,
+ paramName
+ }) => {
+ if (!moduleName || !className || !funcName || !paramName) {
+ throw new Error(`Unexpected input to 'not-an-array' error.`);
+ }
+ return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className}.${funcName}()' must be an array.`;
+ },
+ 'incorrect-type': ({
+ expectedType,
+ paramName,
+ moduleName,
+ className,
+ funcName
+ }) => {
+ if (!expectedType || !paramName || !moduleName || !funcName) {
+ throw new Error(`Unexpected input to 'incorrect-type' error.`);
+ }
+ const classNameStr = className ? `${className}.` : '';
+ return `The parameter '${paramName}' passed into ` + `'${moduleName}.${classNameStr}` + `${funcName}()' must be of type ${expectedType}.`;
+ },
+ 'incorrect-class': ({
+ expectedClassName,
+ paramName,
+ moduleName,
+ className,
+ funcName,
+ isReturnValueProblem
+ }) => {
+ if (!expectedClassName || !moduleName || !funcName) {
+ throw new Error(`Unexpected input to 'incorrect-class' error.`);
+ }
+ const classNameStr = className ? `${className}.` : '';
+ if (isReturnValueProblem) {
+ return `The return value from ` + `'${moduleName}.${classNameStr}${funcName}()' ` + `must be an instance of class ${expectedClassName}.`;
+ }
+ return `The parameter '${paramName}' passed into ` + `'${moduleName}.${classNameStr}${funcName}()' ` + `must be an instance of class ${expectedClassName}.`;
+ },
+ 'missing-a-method': ({
+ expectedMethod,
+ paramName,
+ moduleName,
+ className,
+ funcName
+ }) => {
+ if (!expectedMethod || !paramName || !moduleName || !className || !funcName) {
+ throw new Error(`Unexpected input to 'missing-a-method' error.`);
+ }
+ return `${moduleName}.${className}.${funcName}() expected the ` + `'${paramName}' parameter to expose a '${expectedMethod}' method.`;
+ },
+ 'add-to-cache-list-unexpected-type': ({
+ entry
+ }) => {
+ return `An unexpected entry was passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' The entry ` + `'${JSON.stringify(entry)}' isn't supported. You must supply an array of ` + `strings with one or more characters, objects with a url property or ` + `Request objects.`;
+ },
+ 'add-to-cache-list-conflicting-entries': ({
+ firstEntry,
+ secondEntry
+ }) => {
+ if (!firstEntry || !secondEntry) {
+ throw new Error(`Unexpected input to ` + `'add-to-cache-list-duplicate-entries' error.`);
+ }
+ return `Two of the entries passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' had the URL ` + `${firstEntry} but different revision details. Workbox is ` + `unable to cache and version the asset correctly. Please remove one ` + `of the entries.`;
+ },
+ 'plugin-error-request-will-fetch': ({
+ thrownErrorMessage
+ }) => {
+ if (!thrownErrorMessage) {
+ throw new Error(`Unexpected input to ` + `'plugin-error-request-will-fetch', error.`);
+ }
+ return `An error was thrown by a plugins 'requestWillFetch()' method. ` + `The thrown error message was: '${thrownErrorMessage}'.`;
+ },
+ 'invalid-cache-name': ({
+ cacheNameId,
+ value
+ }) => {
+ if (!cacheNameId) {
+ throw new Error(`Expected a 'cacheNameId' for error 'invalid-cache-name'`);
+ }
+ return `You must provide a name containing at least one character for ` + `setCacheDetails({${cacheNameId}: '...'}). Received a value of ` + `'${JSON.stringify(value)}'`;
+ },
+ 'unregister-route-but-not-found-with-method': ({
+ method
+ }) => {
+ if (!method) {
+ throw new Error(`Unexpected input to ` + `'unregister-route-but-not-found-with-method' error.`);
+ }
+ return `The route you're trying to unregister was not previously ` + `registered for the method type '${method}'.`;
+ },
+ 'unregister-route-route-not-registered': () => {
+ return `The route you're trying to unregister was not previously ` + `registered.`;
+ },
+ 'queue-replay-failed': ({
+ name
+ }) => {
+ return `Replaying the background sync queue '${name}' failed.`;
+ },
+ 'duplicate-queue-name': ({
+ name
+ }) => {
+ return `The Queue name '${name}' is already being used. ` + `All instances of backgroundSync.Queue must be given unique names.`;
+ },
+ 'expired-test-without-max-age': ({
+ methodName,
+ paramName
+ }) => {
+ return `The '${methodName}()' method can only be used when the ` + `'${paramName}' is used in the constructor.`;
+ },
+ 'unsupported-route-type': ({
+ moduleName,
+ className,
+ funcName,
+ paramName
+ }) => {
+ return `The supplied '${paramName}' parameter was an unsupported type. ` + `Please check the docs for ${moduleName}.${className}.${funcName} for ` + `valid input types.`;
+ },
+ 'not-array-of-class': ({
+ value,
+ expectedClass,
+ moduleName,
+ className,
+ funcName,
+ paramName
+ }) => {
+ return `The supplied '${paramName}' parameter must be an array of ` + `'${expectedClass}' objects. Received '${JSON.stringify(value)},'. ` + `Please check the call to ${moduleName}.${className}.${funcName}() ` + `to fix the issue.`;
+ },
+ 'max-entries-or-age-required': ({
+ moduleName,
+ className,
+ funcName
+ }) => {
+ return `You must define either config.maxEntries or config.maxAgeSeconds` + `in ${moduleName}.${className}.${funcName}`;
+ },
+ 'statuses-or-headers-required': ({
+ moduleName,
+ className,
+ funcName
+ }) => {
+ return `You must define either config.statuses or config.headers` + `in ${moduleName}.${className}.${funcName}`;
+ },
+ 'invalid-string': ({
+ moduleName,
+ funcName,
+ paramName
+ }) => {
+ if (!paramName || !moduleName || !funcName) {
+ throw new Error(`Unexpected input to 'invalid-string' error.`);
+ }
+ return `When using strings, the '${paramName}' parameter must start with ` + `'http' (for cross-origin matches) or '/' (for same-origin matches). ` + `Please see the docs for ${moduleName}.${funcName}() for ` + `more info.`;
+ },
+ 'channel-name-required': () => {
+ return `You must provide a channelName to construct a ` + `BroadcastCacheUpdate instance.`;
+ },
+ 'invalid-responses-are-same-args': () => {
+ return `The arguments passed into responsesAreSame() appear to be ` + `invalid. Please ensure valid Responses are used.`;
+ },
+ 'expire-custom-caches-only': () => {
+ return `You must provide a 'cacheName' property when using the ` + `expiration plugin with a runtime caching strategy.`;
+ },
+ 'unit-must-be-bytes': ({
+ normalizedRangeHeader
+ }) => {
+ if (!normalizedRangeHeader) {
+ throw new Error(`Unexpected input to 'unit-must-be-bytes' error.`);
+ }
+ return `The 'unit' portion of the Range header must be set to 'bytes'. ` + `The Range header provided was "${normalizedRangeHeader}"`;
+ },
+ 'single-range-only': ({
+ normalizedRangeHeader
+ }) => {
+ if (!normalizedRangeHeader) {
+ throw new Error(`Unexpected input to 'single-range-only' error.`);
+ }
+ return `Multiple ranges are not supported. Please use a single start ` + `value, and optional end value. The Range header provided was ` + `"${normalizedRangeHeader}"`;
+ },
+ 'invalid-range-values': ({
+ normalizedRangeHeader
+ }) => {
+ if (!normalizedRangeHeader) {
+ throw new Error(`Unexpected input to 'invalid-range-values' error.`);
+ }
+ return `The Range header is missing both start and end values. At least ` + `one of those values is needed. The Range header provided was ` + `"${normalizedRangeHeader}"`;
+ },
+ 'no-range-header': () => {
+ return `No Range header was found in the Request provided.`;
+ },
+ 'range-not-satisfiable': ({
+ size,
+ start,
+ end
+ }) => {
+ return `The start (${start}) and end (${end}) values in the Range are ` + `not satisfiable by the cached response, which is ${size} bytes.`;
+ },
+ 'attempt-to-cache-non-get-request': ({
+ url,
+ method
+ }) => {
+ return `Unable to cache '${url}' because it is a '${method}' request and ` + `only 'GET' requests can be cached.`;
+ },
+ 'cache-put-with-no-response': ({
+ url
+ }) => {
+ return `There was an attempt to cache '${url}' but the response was not ` + `defined.`;
+ },
+ 'no-response': ({
+ url,
+ error
+ }) => {
+ let message = `The strategy could not generate a response for '${url}'.`;
+ if (error) {
+ message += ` The underlying error is ${error}.`;
+ }
+ return message;
+ },
+ 'bad-precaching-response': ({
+ url,
+ status
+ }) => {
+ return `The precaching request for '${url}' failed` + (status ? ` with an HTTP status of ${status}.` : `.`);
+ },
+ 'non-precached-url': ({
+ url
+ }) => {
+ return `createHandlerBoundToURL('${url}') was called, but that URL is ` + `not precached. Please pass in a URL that is precached instead.`;
+ },
+ 'add-to-cache-list-conflicting-integrities': ({
+ url
+ }) => {
+ return `Two of the entries passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' had the URL ` + `${url} with different integrity values. Please remove one of them.`;
+ },
+ 'missing-precache-entry': ({
+ cacheName,
+ url
+ }) => {
+ return `Unable to find a precached response in ${cacheName} for ${url}.`;
+ },
+ 'cross-origin-copy-response': ({
+ origin
+ }) => {
+ return `workbox-core.copyResponse() can only be used with same-origin ` + `responses. It was passed a response with origin ${origin}.`;
+ },
+ 'opaque-streams-source': ({
+ type
+ }) => {
+ const message = `One of the workbox-streams sources resulted in an ` + `'${type}' response.`;
+ if (type === 'opaqueredirect') {
+ return `${message} Please do not use a navigation request that results ` + `in a redirect as a source.`;
+ }
+ return `${message} Please ensure your sources are CORS-enabled.`;
+ }
+};
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+const generatorFunction = (code, details = {}) => {
+ const message = messages$1[code];
+ if (!message) {
+ throw new Error(`Unable to find message for code '${code}'.`);
+ }
+ return message(details);
+};
+const messageGenerator = generatorFunction;
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * Workbox errors should be thrown with this class.
+ * This allows use to ensure the type easily in tests,
+ * helps developers identify errors from workbox
+ * easily and allows use to optimise error
+ * messages correctly.
+ *
+ * @private
+ */
+class WorkboxError extends Error {
+ /**
+ *
+ * @param {string} errorCode The error code that
+ * identifies this particular error.
+ * @param {Object=} details Any relevant arguments
+ * that will help developers identify issues should
+ * be added as a key on the context object.
+ */
+ constructor(errorCode, details) {
+ const message = messageGenerator(errorCode, details);
+ super(message);
+ this.name = errorCode;
+ this.details = details;
+ }
+}
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/*
+ * This method throws if the supplied value is not an array.
+ * The destructed values are required to produce a meaningful error for users.
+ * The destructed and restructured object is so it's clear what is
+ * needed.
+ */
+const isArray = (value, details) => {
+ if (!Array.isArray(value)) {
+ throw new WorkboxError('not-an-array', details);
+ }
+};
+const hasMethod = (object, expectedMethod, details) => {
+ const type = typeof object[expectedMethod];
+ if (type !== 'function') {
+ details['expectedMethod'] = expectedMethod;
+ throw new WorkboxError('missing-a-method', details);
+ }
+};
+const isType = (object, expectedType, details) => {
+ if (typeof object !== expectedType) {
+ details['expectedType'] = expectedType;
+ throw new WorkboxError('incorrect-type', details);
+ }
+};
+const isInstance = (object,
+// Need the general type to do the check later.
+// eslint-disable-next-line @typescript-eslint/ban-types
+expectedClass, details) => {
+ if (!(object instanceof expectedClass)) {
+ details['expectedClassName'] = expectedClass.name;
+ throw new WorkboxError('incorrect-class', details);
+ }
+};
+const isOneOf = (value, validValues, details) => {
+ if (!validValues.includes(value)) {
+ details['validValueDescription'] = `Valid values are ${JSON.stringify(validValues)}.`;
+ throw new WorkboxError('invalid-value', details);
+ }
+};
+const isArrayOfClass = (value,
+// Need general type to do check later.
+expectedClass,
+// eslint-disable-line
+details) => {
+ const error = new WorkboxError('not-array-of-class', details);
+ if (!Array.isArray(value)) {
+ throw error;
+ }
+ for (const item of value) {
+ if (!(item instanceof expectedClass)) {
+ throw error;
+ }
+ }
+};
+const finalAssertExports = {
+ hasMethod,
+ isArray,
+ isInstance,
+ isOneOf,
+ isType,
+ isArrayOfClass
+};
+
+// @ts-ignore
+try {
+ self['workbox:routing:6.5.3'] && _();
+} catch (e) {}
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * The default HTTP method, 'GET', used when there's no specific method
+ * configured for a route.
+ *
+ * @type {string}
+ *
+ * @private
+ */
+const defaultMethod = 'GET';
+/**
+ * The list of valid HTTP methods associated with requests that could be routed.
+ *
+ * @type {Array<string>}
+ *
+ * @private
+ */
+const validMethods = ['DELETE', 'GET', 'HEAD', 'PATCH', 'POST', 'PUT'];
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * @param {function()|Object} handler Either a function, or an object with a
+ * 'handle' method.
+ * @return {Object} An object with a handle method.
+ *
+ * @private
+ */
+const normalizeHandler = handler => {
+ if (handler && typeof handler === 'object') {
+ {
+ finalAssertExports.hasMethod(handler, 'handle', {
+ moduleName: 'workbox-routing',
+ className: 'Route',
+ funcName: 'constructor',
+ paramName: 'handler'
+ });
+ }
+ return handler;
+ } else {
+ {
+ finalAssertExports.isType(handler, 'function', {
+ moduleName: 'workbox-routing',
+ className: 'Route',
+ funcName: 'constructor',
+ paramName: 'handler'
+ });
+ }
+ return {
+ handle: handler
+ };
+ }
+};
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * A `Route` consists of a pair of callback functions, "match" and "handler".
+ * The "match" callback determine if a route should be used to "handle" a
+ * request by returning a non-falsy value if it can. The "handler" callback
+ * is called when there is a match and should return a Promise that resolves
+ * to a `Response`.
+ *
+ * @memberof workbox-routing
+ */
+class Route {
+ /**
+ * Constructor for Route class.
+ *
+ * @param {workbox-routing~matchCallback} match
+ * A callback function that determines whether the route matches a given
+ * `fetch` event by returning a non-falsy value.
+ * @param {workbox-routing~handlerCallback} handler A callback
+ * function that returns a Promise resolving to a Response.
+ * @param {string} [method='GET'] The HTTP method to match the Route
+ * against.
+ */
+ constructor(match, handler, method = defaultMethod) {
+ {
+ finalAssertExports.isType(match, 'function', {
+ moduleName: 'workbox-routing',
+ className: 'Route',
+ funcName: 'constructor',
+ paramName: 'match'
+ });
+ if (method) {
+ finalAssertExports.isOneOf(method, validMethods, {
+ paramName: 'method'
+ });
+ }
+ }
+ // These values are referenced directly by Router so cannot be
+ // altered by minificaton.
+ this.handler = normalizeHandler(handler);
+ this.match = match;
+ this.method = method;
+ }
+ /**
+ *
+ * @param {workbox-routing-handlerCallback} handler A callback
+ * function that returns a Promise resolving to a Response
+ */
+ setCatchHandler(handler) {
+ this.catchHandler = normalizeHandler(handler);
+ }
+}
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * RegExpRoute makes it easy to create a regular expression based
+ * {@link workbox-routing.Route}.
+ *
+ * For same-origin requests the RegExp only needs to match part of the URL. For
+ * requests against third-party servers, you must define a RegExp that matches
+ * the start of the URL.
+ *
+ * @memberof workbox-routing
+ * @extends workbox-routing.Route
+ */
+class RegExpRoute extends Route {
+ /**
+ * If the regular expression contains
+ * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},
+ * the captured values will be passed to the
+ * {@link workbox-routing~handlerCallback} `params`
+ * argument.
+ *
+ * @param {RegExp} regExp The regular expression to match against URLs.
+ * @param {workbox-routing~handlerCallback} handler A callback
+ * function that returns a Promise resulting in a Response.
+ * @param {string} [method='GET'] The HTTP method to match the Route
+ * against.
+ */
+ constructor(regExp, handler, method) {
+ {
+ finalAssertExports.isInstance(regExp, RegExp, {
+ moduleName: 'workbox-routing',
+ className: 'RegExpRoute',
+ funcName: 'constructor',
+ paramName: 'pattern'
+ });
+ }
+ const match = ({
+ url
+ }) => {
+ const result = regExp.exec(url.href);
+ // Return immediately if there's no match.
+ if (!result) {
+ return;
+ }
+ // Require that the match start at the first character in the URL string
+ // if it's a cross-origin request.
+ // See https://github.com/GoogleChrome/workbox/issues/281 for the context
+ // behind this behavior.
+ if (url.origin !== location.origin && result.index !== 0) {
+ {
+ logger.debug(`The regular expression '${regExp.toString()}' only partially matched ` + `against the cross-origin URL '${url.toString()}'. RegExpRoute's will only ` + `handle cross-origin requests if they match the entire URL.`);
+ }
+ return;
+ }
+ // If the route matches, but there aren't any capture groups defined, then
+ // this will return [], which is truthy and therefore sufficient to
+ // indicate a match.
+ // If there are capture groups, then it will return their values.
+ return result.slice(1);
+ };
+ super(match, handler, method);
+ }
+}
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+const getFriendlyURL = url => {
+ const urlObj = new URL(String(url), location.href);
+ // See https://github.com/GoogleChrome/workbox/issues/2323
+ // We want to include everything, except for the origin if it's same-origin.
+ return urlObj.href.replace(new RegExp(`^${location.origin}`), '');
+};
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * The Router can be used to process a `FetchEvent` using one or more
+ * {@link workbox-routing.Route}, responding with a `Response` if
+ * a matching route exists.
+ *
+ * If no route matches a given a request, the Router will use a "default"
+ * handler if one is defined.
+ *
+ * Should the matching Route throw an error, the Router will use a "catch"
+ * handler if one is defined to gracefully deal with issues and respond with a
+ * Request.
+ *
+ * If a request matches multiple routes, the **earliest** registered route will
+ * be used to respond to the request.
+ *
+ * @memberof workbox-routing
+ */
+class Router {
+ /**
+ * Initializes a new Router.
+ */
+ constructor() {
+ this._routes = new Map();
+ this._defaultHandlerMap = new Map();
+ }
+ /**
+ * @return {Map<string, Array<workbox-routing.Route>>} routes A `Map` of HTTP
+ * method name ('GET', etc.) to an array of all the corresponding `Route`
+ * instances that are registered.
+ */
+ get routes() {
+ return this._routes;
+ }
+ /**
+ * Adds a fetch event listener to respond to events when a route matches
+ * the event's request.
+ */
+ addFetchListener() {
+ // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705
+ self.addEventListener('fetch', event => {
+ const {
+ request
+ } = event;
+ const responsePromise = this.handleRequest({
+ request,
+ event
+ });
+ if (responsePromise) {
+ event.respondWith(responsePromise);
+ }
+ });
+ }
+ /**
+ * Adds a message event listener for URLs to cache from the window.
+ * This is useful to cache resources loaded on the page prior to when the
+ * service worker started controlling it.
+ *
+ * The format of the message data sent from the window should be as follows.
+ * Where the `urlsToCache` array may consist of URL strings or an array of
+ * URL string + `requestInit` object (the same as you'd pass to `fetch()`).
+ *
+ * ```
+ * {
+ * type: 'CACHE_URLS',
+ * payload: {
+ * urlsToCache: [
+ * './script1.js',
+ * './script2.js',
+ * ['./script3.js', {mode: 'no-cors'}],
+ * ],
+ * },
+ * }
+ * ```
+ */
+ addCacheListener() {
+ // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705
+ self.addEventListener('message', event => {
+ // event.data is type 'any'
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
+ if (event.data && event.data.type === 'CACHE_URLS') {
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
+ const {
+ payload
+ } = event.data;
+ {
+ logger.debug(`Caching URLs from the window`, payload.urlsToCache);
+ }
+ const requestPromises = Promise.all(payload.urlsToCache.map(entry => {
+ if (typeof entry === 'string') {
+ entry = [entry];
+ }
+ const request = new Request(...entry);
+ return this.handleRequest({
+ request,
+ event
+ });
+ // TODO(philipwalton): TypeScript errors without this typecast for
+ // some reason (probably a bug). The real type here should work but
+ // doesn't: `Array<Promise<Response> | undefined>`.
+ })); // TypeScript
+ event.waitUntil(requestPromises);
+ // If a MessageChannel was used, reply to the message on success.
+ if (event.ports && event.ports[0]) {
+ void requestPromises.then(() => event.ports[0].postMessage(true));
+ }
+ }
+ });
+ }
+ /**
+ * Apply the routing rules to a FetchEvent object to get a Response from an
+ * appropriate Route's handler.
+ *
+ * @param {Object} options
+ * @param {Request} options.request The request to handle.
+ * @param {ExtendableEvent} options.event The event that triggered the
+ * request.
+ * @return {Promise<Response>|undefined} A promise is returned if a
+ * registered route can handle the request. If there is no matching
+ * route and there's no `defaultHandler`, `undefined` is returned.
+ */
+ handleRequest({
+ request,
+ event
+ }) {
+ {
+ finalAssertExports.isInstance(request, Request, {
+ moduleName: 'workbox-routing',
+ className: 'Router',
+ funcName: 'handleRequest',
+ paramName: 'options.request'
+ });
+ }
+ const url = new URL(request.url, location.href);
+ if (!url.protocol.startsWith('http')) {
+ {
+ logger.debug(`Workbox Router only supports URLs that start with 'http'.`);
+ }
+ return;
+ }
+ const sameOrigin = url.origin === location.origin;
+ const {
+ params,
+ route
+ } = this.findMatchingRoute({
+ event,
+ request,
+ sameOrigin,
+ url
+ });
+ let handler = route && route.handler;
+ const debugMessages = [];
+ {
+ if (handler) {
+ debugMessages.push([`Found a route to handle this request:`, route]);
+ if (params) {
+ debugMessages.push([`Passing the following params to the route's handler:`, params]);
+ }
+ }
+ }
+ // If we don't have a handler because there was no matching route, then
+ // fall back to defaultHandler if that's defined.
+ const method = request.method;
+ if (!handler && this._defaultHandlerMap.has(method)) {
+ {
+ debugMessages.push(`Failed to find a matching route. Falling ` + `back to the default handler for ${method}.`);
+ }
+ handler = this._defaultHandlerMap.get(method);
+ }
+ if (!handler) {
+ {
+ // No handler so Workbox will do nothing. If logs is set of debug
+ // i.e. verbose, we should print out this information.
+ logger.debug(`No route found for: ${getFriendlyURL(url)}`);
+ }
+ return;
+ }
+ {
+ // We have a handler, meaning Workbox is going to handle the route.
+ // print the routing details to the console.
+ logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);
+ debugMessages.forEach(msg => {
+ if (Array.isArray(msg)) {
+ logger.log(...msg);
+ } else {
+ logger.log(msg);
+ }
+ });
+ logger.groupEnd();
+ }
+ // Wrap in try and catch in case the handle method throws a synchronous
+ // error. It should still callback to the catch handler.
+ let responsePromise;
+ try {
+ responsePromise = handler.handle({
+ url,
+ request,
+ event,
+ params
+ });
+ } catch (err) {
+ responsePromise = Promise.reject(err);
+ }
+ // Get route's catch handler, if it exists
+ const catchHandler = route && route.catchHandler;
+ if (responsePromise instanceof Promise && (this._catchHandler || catchHandler)) {
+ responsePromise = responsePromise.catch(async err => {
+ // If there's a route catch handler, process that first
+ if (catchHandler) {
+ {
+ // Still include URL here as it will be async from the console group
+ // and may not make sense without the URL
+ logger.groupCollapsed(`Error thrown when responding to: ` + ` ${getFriendlyURL(url)}. Falling back to route's Catch Handler.`);
+ logger.error(`Error thrown by:`, route);
+ logger.error(err);
+ logger.groupEnd();
+ }
+ try {
+ return await catchHandler.handle({
+ url,
+ request,
+ event,
+ params
+ });
+ } catch (catchErr) {
+ if (catchErr instanceof Error) {
+ err = catchErr;
+ }
+ }
+ }
+ if (this._catchHandler) {
+ {
+ // Still include URL here as it will be async from the console group
+ // and may not make sense without the URL
+ logger.groupCollapsed(`Error thrown when responding to: ` + ` ${getFriendlyURL(url)}. Falling back to global Catch Handler.`);
+ logger.error(`Error thrown by:`, route);
+ logger.error(err);
+ logger.groupEnd();
+ }
+ return this._catchHandler.handle({
+ url,
+ request,
+ event
+ });
+ }
+ throw err;
+ });
+ }
+ return responsePromise;
+ }
+ /**
+ * Checks a request and URL (and optionally an event) against the list of
+ * registered routes, and if there's a match, returns the corresponding
+ * route along with any params generated by the match.
+ *
+ * @param {Object} options
+ * @param {URL} options.url
+ * @param {boolean} options.sameOrigin The result of comparing `url.origin`
+ * against the current origin.
+ * @param {Request} options.request The request to match.
+ * @param {Event} options.event The corresponding event.
+ * @return {Object} An object with `route` and `params` properties.
+ * They are populated if a matching route was found or `undefined`
+ * otherwise.
+ */
+ findMatchingRoute({
+ url,
+ sameOrigin,
+ request,
+ event
+ }) {
+ const routes = this._routes.get(request.method) || [];
+ for (const route of routes) {
+ let params;
+ // route.match returns type any, not possible to change right now.
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
+ const matchResult = route.match({
+ url,
+ sameOrigin,
+ request,
+ event
+ });
+ if (matchResult) {
+ {
+ // Warn developers that using an async matchCallback is almost always
+ // not the right thing to do.
+ if (matchResult instanceof Promise) {
+ logger.warn(`While routing ${getFriendlyURL(url)}, an async ` + `matchCallback function was used. Please convert the ` + `following route to use a synchronous matchCallback function:`, route);
+ }
+ }
+ // See https://github.com/GoogleChrome/workbox/issues/2079
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
+ params = matchResult;
+ if (Array.isArray(params) && params.length === 0) {
+ // Instead of passing an empty array in as params, use undefined.
+ params = undefined;
+ } else if (matchResult.constructor === Object &&
+ // eslint-disable-line
+ Object.keys(matchResult).length === 0) {
+ // Instead of passing an empty object in as params, use undefined.
+ params = undefined;
+ } else if (typeof matchResult === 'boolean') {
+ // For the boolean value true (rather than just something truth-y),
+ // don't set params.
+ // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353
+ params = undefined;
+ }
+ // Return early if have a match.
+ return {
+ route,
+ params
+ };
+ }
+ }
+ // If no match was found above, return and empty object.
+ return {};
+ }
+ /**
+ * Define a default `handler` that's called when no routes explicitly
+ * match the incoming request.
+ *
+ * Each HTTP method ('GET', 'POST', etc.) gets its own default handler.
+ *
+ * Without a default handler, unmatched requests will go against the
+ * network as if there were no service worker present.
+ *
+ * @param {workbox-routing~handlerCallback} handler A callback
+ * function that returns a Promise resulting in a Response.
+ * @param {string} [method='GET'] The HTTP method to associate with this
+ * default handler. Each method has its own default.
+ */
+ setDefaultHandler(handler, method = defaultMethod) {
+ this._defaultHandlerMap.set(method, normalizeHandler(handler));
+ }
+ /**
+ * If a Route throws an error while handling a request, this `handler`
+ * will be called and given a chance to provide a response.
+ *
+ * @param {workbox-routing~handlerCallback} handler A callback
+ * function that returns a Promise resulting in a Response.
+ */
+ setCatchHandler(handler) {
+ this._catchHandler = normalizeHandler(handler);
+ }
+ /**
+ * Registers a route with the router.
+ *
+ * @param {workbox-routing.Route} route The route to register.
+ */
+ registerRoute(route) {
+ {
+ finalAssertExports.isType(route, 'object', {
+ moduleName: 'workbox-routing',
+ className: 'Router',
+ funcName: 'registerRoute',
+ paramName: 'route'
+ });
+ finalAssertExports.hasMethod(route, 'match', {
+ moduleName: 'workbox-routing',
+ className: 'Router',
+ funcName: 'registerRoute',
+ paramName: 'route'
+ });
+ finalAssertExports.isType(route.handler, 'object', {
+ moduleName: 'workbox-routing',
+ className: 'Router',
+ funcName: 'registerRoute',
+ paramName: 'route'
+ });
+ finalAssertExports.hasMethod(route.handler, 'handle', {
+ moduleName: 'workbox-routing',
+ className: 'Router',
+ funcName: 'registerRoute',
+ paramName: 'route.handler'
+ });
+ finalAssertExports.isType(route.method, 'string', {
+ moduleName: 'workbox-routing',
+ className: 'Router',
+ funcName: 'registerRoute',
+ paramName: 'route.method'
+ });
+ }
+ if (!this._routes.has(route.method)) {
+ this._routes.set(route.method, []);
+ }
+ // Give precedence to all of the earlier routes by adding this additional
+ // route to the end of the array.
+ this._routes.get(route.method).push(route);
+ }
+ /**
+ * Unregisters a route with the router.
+ *
+ * @param {workbox-routing.Route} route The route to unregister.
+ */
+ unregisterRoute(route) {
+ if (!this._routes.has(route.method)) {
+ throw new WorkboxError('unregister-route-but-not-found-with-method', {
+ method: route.method
+ });
+ }
+ const routeIndex = this._routes.get(route.method).indexOf(route);
+ if (routeIndex > -1) {
+ this._routes.get(route.method).splice(routeIndex, 1);
+ } else {
+ throw new WorkboxError('unregister-route-route-not-registered');
+ }
+ }
+}
+
+/*
+ Copyright 2019 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+let defaultRouter;
+/**
+ * Creates a new, singleton Router instance if one does not exist. If one
+ * does already exist, that instance is returned.
+ *
+ * @private
+ * @return {Router}
+ */
+const getOrCreateDefaultRouter = () => {
+ if (!defaultRouter) {
+ defaultRouter = new Router();
+ // The helpers that use the default Router assume these listeners exist.
+ defaultRouter.addFetchListener();
+ defaultRouter.addCacheListener();
+ }
+ return defaultRouter;
+};
+
+/*
+ Copyright 2019 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * Easily register a RegExp, string, or function with a caching
+ * strategy to a singleton Router instance.
+ *
+ * This method will generate a Route for you if needed and
+ * call {@link workbox-routing.Router#registerRoute}.
+ *
+ * @param {RegExp|string|workbox-routing.Route~matchCallback|workbox-routing.Route} capture
+ * If the capture param is a `Route`, all other arguments will be ignored.
+ * @param {workbox-routing~handlerCallback} [handler] A callback
+ * function that returns a Promise resulting in a Response. This parameter
+ * is required if `capture` is not a `Route` object.
+ * @param {string} [method='GET'] The HTTP method to match the Route
+ * against.
+ * @return {workbox-routing.Route} The generated `Route`.
+ *
+ * @memberof workbox-routing
+ */
+function registerRoute(capture, handler, method) {
+ let route;
+ if (typeof capture === 'string') {
+ const captureUrl = new URL(capture, location.href);
+ {
+ if (!(capture.startsWith('/') || capture.startsWith('http'))) {
+ throw new WorkboxError('invalid-string', {
+ moduleName: 'workbox-routing',
+ funcName: 'registerRoute',
+ paramName: 'capture'
+ });
+ }
+ // We want to check if Express-style wildcards are in the pathname only.
+ // TODO: Remove this log message in v4.
+ const valueToCheck = capture.startsWith('http') ? captureUrl.pathname : capture;
+ // See https://github.com/pillarjs/path-to-regexp#parameters
+ const wildcards = '[*:?+]';
+ if (new RegExp(`${wildcards}`).exec(valueToCheck)) {
+ logger.debug(`The '$capture' parameter contains an Express-style wildcard ` + `character (${wildcards}). Strings are now always interpreted as ` + `exact matches; use a RegExp for partial or wildcard matches.`);
+ }
+ }
+ const matchCallback = ({
+ url
+ }) => {
+ {
+ if (url.pathname === captureUrl.pathname && url.origin !== captureUrl.origin) {
+ logger.debug(`${capture} only partially matches the cross-origin URL ` + `${url.toString()}. This route will only handle cross-origin requests ` + `if they match the entire URL.`);
+ }
+ }
+ return url.href === captureUrl.href;
+ };
+ // If `capture` is a string then `handler` and `method` must be present.
+ route = new Route(matchCallback, handler, method);
+ } else if (capture instanceof RegExp) {
+ // If `capture` is a `RegExp` then `handler` and `method` must be present.
+ route = new RegExpRoute(capture, handler, method);
+ } else if (typeof capture === 'function') {
+ // If `capture` is a function then `handler` and `method` must be present.
+ route = new Route(capture, handler, method);
+ } else if (capture instanceof Route) {
+ route = capture;
+ } else {
+ throw new WorkboxError('unsupported-route-type', {
+ moduleName: 'workbox-routing',
+ funcName: 'registerRoute',
+ paramName: 'capture'
+ });
+ }
+ const defaultRouter = getOrCreateDefaultRouter();
+ defaultRouter.registerRoute(route);
+ return route;
+}
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+const _cacheNameDetails = {
+ googleAnalytics: 'googleAnalytics',
+ precache: 'precache-v2',
+ prefix: 'workbox',
+ runtime: 'runtime',
+ suffix: typeof registration !== 'undefined' ? registration.scope : ''
+};
+const _createCacheName = cacheName => {
+ return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix].filter(value => value && value.length > 0).join('-');
+};
+const eachCacheNameDetail = fn => {
+ for (const key of Object.keys(_cacheNameDetails)) {
+ fn(key);
+ }
+};
+const cacheNames = {
+ updateDetails: details => {
+ eachCacheNameDetail(key => {
+ if (typeof details[key] === 'string') {
+ _cacheNameDetails[key] = details[key];
+ }
+ });
+ },
+ getGoogleAnalyticsName: userCacheName => {
+ return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);
+ },
+ getPrecacheName: userCacheName => {
+ return userCacheName || _createCacheName(_cacheNameDetails.precache);
+ },
+ getPrefix: () => {
+ return _cacheNameDetails.prefix;
+ },
+ getRuntimeName: userCacheName => {
+ return userCacheName || _createCacheName(_cacheNameDetails.runtime);
+ },
+ getSuffix: () => {
+ return _cacheNameDetails.suffix;
+ }
+};
+
+/*
+ Copyright 2019 Google LLC
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * A helper function that prevents a promise from being flagged as unused.
+ *
+ * @private
+ **/
+function dontWaitFor(promise) {
+ // Effective no-op.
+ void promise.then(() => {});
+}
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+// Callbacks to be executed whenever there's a quota error.
+// Can't change Function type right now.
+// eslint-disable-next-line @typescript-eslint/ban-types
+const quotaErrorCallbacks = new Set();
+
+/*
+ Copyright 2019 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * Adds a function to the set of quotaErrorCallbacks that will be executed if
+ * there's a quota error.
+ *
+ * @param {Function} callback
+ * @memberof workbox-core
+ */
+// Can't change Function type
+// eslint-disable-next-line @typescript-eslint/ban-types
+function registerQuotaErrorCallback(callback) {
+ {
+ finalAssertExports.isType(callback, 'function', {
+ moduleName: 'workbox-core',
+ funcName: 'register',
+ paramName: 'callback'
+ });
+ }
+ quotaErrorCallbacks.add(callback);
+ {
+ logger.log('Registered a callback to respond to quota errors.', callback);
+ }
+}
+
+function _extends() {
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+ return target;
+ };
+ return _extends.apply(this, arguments);
+}
+
+const instanceOfAny = (object, constructors) => constructors.some(c => object instanceof c);
+let idbProxyableTypes;
+let cursorAdvanceMethods;
+// This is a function to prevent it throwing up in node environments.
+function getIdbProxyableTypes() {
+ return idbProxyableTypes || (idbProxyableTypes = [IDBDatabase, IDBObjectStore, IDBIndex, IDBCursor, IDBTransaction]);
+}
+// This is a function to prevent it throwing up in node environments.
+function getCursorAdvanceMethods() {
+ return cursorAdvanceMethods || (cursorAdvanceMethods = [IDBCursor.prototype.advance, IDBCursor.prototype.continue, IDBCursor.prototype.continuePrimaryKey]);
+}
+const cursorRequestMap = new WeakMap();
+const transactionDoneMap = new WeakMap();
+const transactionStoreNamesMap = new WeakMap();
+const transformCache = new WeakMap();
+const reverseTransformCache = new WeakMap();
+function promisifyRequest(request) {
+ const promise = new Promise((resolve, reject) => {
+ const unlisten = () => {
+ request.removeEventListener('success', success);
+ request.removeEventListener('error', error);
+ };
+ const success = () => {
+ resolve(wrap(request.result));
+ unlisten();
+ };
+ const error = () => {
+ reject(request.error);
+ unlisten();
+ };
+ request.addEventListener('success', success);
+ request.addEventListener('error', error);
+ });
+ promise.then(value => {
+ // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval
+ // (see wrapFunction).
+ if (value instanceof IDBCursor) {
+ cursorRequestMap.set(value, request);
+ }
+ // Catching to avoid "Uncaught Promise exceptions"
+ }).catch(() => {});
+ // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This
+ // is because we create many promises from a single IDBRequest.
+ reverseTransformCache.set(promise, request);
+ return promise;
+}
+function cacheDonePromiseForTransaction(tx) {
+ // Early bail if we've already created a done promise for this transaction.
+ if (transactionDoneMap.has(tx)) return;
+ const done = new Promise((resolve, reject) => {
+ const unlisten = () => {
+ tx.removeEventListener('complete', complete);
+ tx.removeEventListener('error', error);
+ tx.removeEventListener('abort', error);
+ };
+ const complete = () => {
+ resolve();
+ unlisten();
+ };
+ const error = () => {
+ reject(tx.error || new DOMException('AbortError', 'AbortError'));
+ unlisten();
+ };
+ tx.addEventListener('complete', complete);
+ tx.addEventListener('error', error);
+ tx.addEventListener('abort', error);
+ });
+ // Cache it for later retrieval.
+ transactionDoneMap.set(tx, done);
+}
+let idbProxyTraps = {
+ get(target, prop, receiver) {
+ if (target instanceof IDBTransaction) {
+ // Special handling for transaction.done.
+ if (prop === 'done') return transactionDoneMap.get(target);
+ // Polyfill for objectStoreNames because of Edge.
+ if (prop === 'objectStoreNames') {
+ return target.objectStoreNames || transactionStoreNamesMap.get(target);
+ }
+ // Make tx.store return the only store in the transaction, or undefined if there are many.
+ if (prop === 'store') {
+ return receiver.objectStoreNames[1] ? undefined : receiver.objectStore(receiver.objectStoreNames[0]);
+ }
+ }
+ // Else transform whatever we get back.
+ return wrap(target[prop]);
+ },
+ set(target, prop, value) {
+ target[prop] = value;
+ return true;
+ },
+ has(target, prop) {
+ if (target instanceof IDBTransaction && (prop === 'done' || prop === 'store')) {
+ return true;
+ }
+ return prop in target;
+ }
+};
+function replaceTraps(callback) {
+ idbProxyTraps = callback(idbProxyTraps);
+}
+function wrapFunction(func) {
+ // Due to expected object equality (which is enforced by the caching in `wrap`), we
+ // only create one new func per func.
+ // Edge doesn't support objectStoreNames (booo), so we polyfill it here.
+ if (func === IDBDatabase.prototype.transaction && !('objectStoreNames' in IDBTransaction.prototype)) {
+ return function (storeNames, ...args) {
+ const tx = func.call(unwrap(this), storeNames, ...args);
+ transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);
+ return wrap(tx);
+ };
+ }
+ // Cursor methods are special, as the behaviour is a little more different to standard IDB. In
+ // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the
+ // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense
+ // with real promises, so each advance methods returns a new promise for the cursor object, or
+ // undefined if the end of the cursor has been reached.
+ if (getCursorAdvanceMethods().includes(func)) {
+ return function (...args) {
+ // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use
+ // the original object.
+ func.apply(unwrap(this), args);
+ return wrap(cursorRequestMap.get(this));
+ };
+ }
+ return function (...args) {
+ // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use
+ // the original object.
+ return wrap(func.apply(unwrap(this), args));
+ };
+}
+function transformCachableValue(value) {
+ if (typeof value === 'function') return wrapFunction(value);
+ // This doesn't return, it just creates a 'done' promise for the transaction,
+ // which is later returned for transaction.done (see idbObjectHandler).
+ if (value instanceof IDBTransaction) cacheDonePromiseForTransaction(value);
+ if (instanceOfAny(value, getIdbProxyableTypes())) return new Proxy(value, idbProxyTraps);
+ // Return the same value back if we're not going to transform it.
+ return value;
+}
+function wrap(value) {
+ // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because
+ // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.
+ if (value instanceof IDBRequest) return promisifyRequest(value);
+ // If we've already transformed this value before, reuse the transformed value.
+ // This is faster, but it also provides object equality.
+ if (transformCache.has(value)) return transformCache.get(value);
+ const newValue = transformCachableValue(value);
+ // Not all types are transformed.
+ // These may be primitive types, so they can't be WeakMap keys.
+ if (newValue !== value) {
+ transformCache.set(value, newValue);
+ reverseTransformCache.set(newValue, value);
+ }
+ return newValue;
+}
+const unwrap = value => reverseTransformCache.get(value);
+
+/**
+ * Open a database.
+ *
+ * @param name Name of the database.
+ * @param version Schema version.
+ * @param callbacks Additional callbacks.
+ */
+function openDB(name, version, {
+ blocked,
+ upgrade,
+ blocking,
+ terminated
+} = {}) {
+ const request = indexedDB.open(name, version);
+ const openPromise = wrap(request);
+ if (upgrade) {
+ request.addEventListener('upgradeneeded', event => {
+ upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);
+ });
+ }
+ if (blocked) {
+ request.addEventListener('blocked', event => blocked(
+ // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405
+ event.oldVersion, event.newVersion, event));
+ }
+ openPromise.then(db => {
+ if (terminated) db.addEventListener('close', () => terminated());
+ if (blocking) {
+ db.addEventListener('versionchange', event => blocking(event.oldVersion, event.newVersion, event));
+ }
+ }).catch(() => {});
+ return openPromise;
+}
+/**
+ * Delete a database.
+ *
+ * @param name Name of the database.
+ */
+function deleteDB(name, {
+ blocked
+} = {}) {
+ const request = indexedDB.deleteDatabase(name);
+ if (blocked) {
+ request.addEventListener('blocked', event => blocked(
+ // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405
+ event.oldVersion, event));
+ }
+ return wrap(request).then(() => undefined);
+}
+const readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];
+const writeMethods = ['put', 'add', 'delete', 'clear'];
+const cachedMethods = new Map();
+function getMethod(target, prop) {
+ if (!(target instanceof IDBDatabase && !(prop in target) && typeof prop === 'string')) {
+ return;
+ }
+ if (cachedMethods.get(prop)) return cachedMethods.get(prop);
+ const targetFuncName = prop.replace(/FromIndex$/, '');
+ const useIndex = prop !== targetFuncName;
+ const isWrite = writeMethods.includes(targetFuncName);
+ if (
+ // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.
+ !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) || !(isWrite || readMethods.includes(targetFuncName))) {
+ return;
+ }
+ const method = async function (storeName, ...args) {
+ // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(
+ const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');
+ let target = tx.store;
+ if (useIndex) target = target.index(args.shift());
+ // Must reject if op rejects.
+ // If it's a write operation, must reject if tx.done rejects.
+ // Must reject with op rejection first.
+ // Must resolve with op value.
+ // Must handle both promises (no unhandled rejections)
+ return (await Promise.all([target[targetFuncName](...args), isWrite && tx.done]))[0];
+ };
+ cachedMethods.set(prop, method);
+ return method;
+}
+replaceTraps(oldTraps => _extends({}, oldTraps, {
+ get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),
+ has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop)
+}));
+
+// @ts-ignore
+try {
+ self['workbox:expiration:6.5.3'] && _();
+} catch (e) {}
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+const DB_NAME = 'workbox-expiration';
+const CACHE_OBJECT_STORE = 'cache-entries';
+const normalizeURL = unNormalizedUrl => {
+ const url = new URL(unNormalizedUrl, location.href);
+ url.hash = '';
+ return url.href;
+};
+/**
+ * Returns the timestamp model.
+ *
+ * @private
+ */
+class CacheTimestampsModel {
+ /**
+ *
+ * @param {string} cacheName
+ *
+ * @private
+ */
+ constructor(cacheName) {
+ this._db = null;
+ this._cacheName = cacheName;
+ }
+ /**
+ * Performs an upgrade of indexedDB.
+ *
+ * @param {IDBPDatabase<CacheDbSchema>} db
+ *
+ * @private
+ */
+ _upgradeDb(db) {
+ // TODO(philipwalton): EdgeHTML doesn't support arrays as a keyPath, so we
+ // have to use the `id` keyPath here and create our own values (a
+ // concatenation of `url + cacheName`) instead of simply using
+ // `keyPath: ['url', 'cacheName']`, which is supported in other browsers.
+ const objStore = db.createObjectStore(CACHE_OBJECT_STORE, {
+ keyPath: 'id'
+ });
+ // TODO(philipwalton): once we don't have to support EdgeHTML, we can
+ // create a single index with the keyPath `['cacheName', 'timestamp']`
+ // instead of doing both these indexes.
+ objStore.createIndex('cacheName', 'cacheName', {
+ unique: false
+ });
+ objStore.createIndex('timestamp', 'timestamp', {
+ unique: false
+ });
+ }
+ /**
+ * Performs an upgrade of indexedDB and deletes deprecated DBs.
+ *
+ * @param {IDBPDatabase<CacheDbSchema>} db
+ *
+ * @private
+ */
+ _upgradeDbAndDeleteOldDbs(db) {
+ this._upgradeDb(db);
+ if (this._cacheName) {
+ void deleteDB(this._cacheName);
+ }
+ }
+ /**
+ * @param {string} url
+ * @param {number} timestamp
+ *
+ * @private
+ */
+ async setTimestamp(url, timestamp) {
+ url = normalizeURL(url);
+ const entry = {
+ url,
+ timestamp,
+ cacheName: this._cacheName,
+ // Creating an ID from the URL and cache name won't be necessary once
+ // Edge switches to Chromium and all browsers we support work with
+ // array keyPaths.
+ id: this._getId(url)
+ };
+ const db = await this.getDb();
+ const tx = db.transaction(CACHE_OBJECT_STORE, 'readwrite', {
+ durability: 'relaxed'
+ });
+ await tx.store.put(entry);
+ await tx.done;
+ }
+ /**
+ * Returns the timestamp stored for a given URL.
+ *
+ * @param {string} url
+ * @return {number | undefined}
+ *
+ * @private
+ */
+ async getTimestamp(url) {
+ const db = await this.getDb();
+ const entry = await db.get(CACHE_OBJECT_STORE, this._getId(url));
+ return entry === null || entry === void 0 ? void 0 : entry.timestamp;
+ }
+ /**
+ * Iterates through all the entries in the object store (from newest to
+ * oldest) and removes entries once either `maxCount` is reached or the
+ * entry's timestamp is less than `minTimestamp`.
+ *
+ * @param {number} minTimestamp
+ * @param {number} maxCount
+ * @return {Array<string>}
+ *
+ * @private
+ */
+ async expireEntries(minTimestamp, maxCount) {
+ const db = await this.getDb();
+ let cursor = await db.transaction(CACHE_OBJECT_STORE).store.index('timestamp').openCursor(null, 'prev');
+ const entriesToDelete = [];
+ let entriesNotDeletedCount = 0;
+ while (cursor) {
+ const result = cursor.value;
+ // TODO(philipwalton): once we can use a multi-key index, we
+ // won't have to check `cacheName` here.
+ if (result.cacheName === this._cacheName) {
+ // Delete an entry if it's older than the max age or
+ // if we already have the max number allowed.
+ if (minTimestamp && result.timestamp < minTimestamp || maxCount && entriesNotDeletedCount >= maxCount) {
+ // TODO(philipwalton): we should be able to delete the
+ // entry right here, but doing so causes an iteration
+ // bug in Safari stable (fixed in TP). Instead we can
+ // store the keys of the entries to delete, and then
+ // delete the separate transactions.
+ // https://github.com/GoogleChrome/workbox/issues/1978
+ // cursor.delete();
+ // We only need to return the URL, not the whole entry.
+ entriesToDelete.push(cursor.value);
+ } else {
+ entriesNotDeletedCount++;
+ }
+ }
+ cursor = await cursor.continue();
+ }
+ // TODO(philipwalton): once the Safari bug in the following issue is fixed,
+ // we should be able to remove this loop and do the entry deletion in the
+ // cursor loop above:
+ // https://github.com/GoogleChrome/workbox/issues/1978
+ const urlsDeleted = [];
+ for (const entry of entriesToDelete) {
+ await db.delete(CACHE_OBJECT_STORE, entry.id);
+ urlsDeleted.push(entry.url);
+ }
+ return urlsDeleted;
+ }
+ /**
+ * Takes a URL and returns an ID that will be unique in the object store.
+ *
+ * @param {string} url
+ * @return {string}
+ *
+ * @private
+ */
+ _getId(url) {
+ // Creating an ID from the URL and cache name won't be necessary once
+ // Edge switches to Chromium and all browsers we support work with
+ // array keyPaths.
+ return this._cacheName + '|' + normalizeURL(url);
+ }
+ /**
+ * Returns an open connection to the database.
+ *
+ * @private
+ */
+ async getDb() {
+ if (!this._db) {
+ this._db = await openDB(DB_NAME, 1, {
+ upgrade: this._upgradeDbAndDeleteOldDbs.bind(this)
+ });
+ }
+ return this._db;
+ }
+}
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * The `CacheExpiration` class allows you define an expiration and / or
+ * limit on the number of responses stored in a
+ * [`Cache`](https://developer.mozilla.org/en-US/docs/Web/API/Cache).
+ *
+ * @memberof workbox-expiration
+ */
+class CacheExpiration {
+ /**
+ * To construct a new CacheExpiration instance you must provide at least
+ * one of the `config` properties.
+ *
+ * @param {string} cacheName Name of the cache to apply restrictions to.
+ * @param {Object} config
+ * @param {number} [config.maxEntries] The maximum number of entries to cache.
+ * Entries used the least will be removed as the maximum is reached.
+ * @param {number} [config.maxAgeSeconds] The maximum age of an entry before
+ * it's treated as stale and removed.
+ * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)
+ * that will be used when calling `delete()` on the cache.
+ */
+ constructor(cacheName, config = {}) {
+ this._isRunning = false;
+ this._rerunRequested = false;
+ {
+ finalAssertExports.isType(cacheName, 'string', {
+ moduleName: 'workbox-expiration',
+ className: 'CacheExpiration',
+ funcName: 'constructor',
+ paramName: 'cacheName'
+ });
+ if (!(config.maxEntries || config.maxAgeSeconds)) {
+ throw new WorkboxError('max-entries-or-age-required', {
+ moduleName: 'workbox-expiration',
+ className: 'CacheExpiration',
+ funcName: 'constructor'
+ });
+ }
+ if (config.maxEntries) {
+ finalAssertExports.isType(config.maxEntries, 'number', {
+ moduleName: 'workbox-expiration',
+ className: 'CacheExpiration',
+ funcName: 'constructor',
+ paramName: 'config.maxEntries'
+ });
+ }
+ if (config.maxAgeSeconds) {
+ finalAssertExports.isType(config.maxAgeSeconds, 'number', {
+ moduleName: 'workbox-expiration',
+ className: 'CacheExpiration',
+ funcName: 'constructor',
+ paramName: 'config.maxAgeSeconds'
+ });
+ }
+ }
+ this._maxEntries = config.maxEntries;
+ this._maxAgeSeconds = config.maxAgeSeconds;
+ this._matchOptions = config.matchOptions;
+ this._cacheName = cacheName;
+ this._timestampModel = new CacheTimestampsModel(cacheName);
+ }
+ /**
+ * Expires entries for the given cache and given criteria.
+ */
+ async expireEntries() {
+ if (this._isRunning) {
+ this._rerunRequested = true;
+ return;
+ }
+ this._isRunning = true;
+ const minTimestamp = this._maxAgeSeconds ? Date.now() - this._maxAgeSeconds * 1000 : 0;
+ const urlsExpired = await this._timestampModel.expireEntries(minTimestamp, this._maxEntries);
+ // Delete URLs from the cache
+ const cache = await self.caches.open(this._cacheName);
+ for (const url of urlsExpired) {
+ await cache.delete(url, this._matchOptions);
+ }
+ {
+ if (urlsExpired.length > 0) {
+ logger.groupCollapsed(`Expired ${urlsExpired.length} ` + `${urlsExpired.length === 1 ? 'entry' : 'entries'} and removed ` + `${urlsExpired.length === 1 ? 'it' : 'them'} from the ` + `'${this._cacheName}' cache.`);
+ logger.log(`Expired the following ${urlsExpired.length === 1 ? 'URL' : 'URLs'}:`);
+ urlsExpired.forEach(url => logger.log(` ${url}`));
+ logger.groupEnd();
+ } else {
+ logger.debug(`Cache expiration ran and found no entries to remove.`);
+ }
+ }
+ this._isRunning = false;
+ if (this._rerunRequested) {
+ this._rerunRequested = false;
+ dontWaitFor(this.expireEntries());
+ }
+ }
+ /**
+ * Update the timestamp for the given URL. This ensures the when
+ * removing entries based on maximum entries, most recently used
+ * is accurate or when expiring, the timestamp is up-to-date.
+ *
+ * @param {string} url
+ */
+ async updateTimestamp(url) {
+ {
+ finalAssertExports.isType(url, 'string', {
+ moduleName: 'workbox-expiration',
+ className: 'CacheExpiration',
+ funcName: 'updateTimestamp',
+ paramName: 'url'
+ });
+ }
+ await this._timestampModel.setTimestamp(url, Date.now());
+ }
+ /**
+ * Can be used to check if a URL has expired or not before it's used.
+ *
+ * This requires a look up from IndexedDB, so can be slow.
+ *
+ * Note: This method will not remove the cached entry, call
+ * `expireEntries()` to remove indexedDB and Cache entries.
+ *
+ * @param {string} url
+ * @return {boolean}
+ */
+ async isURLExpired(url) {
+ if (!this._maxAgeSeconds) {
+ {
+ throw new WorkboxError(`expired-test-without-max-age`, {
+ methodName: 'isURLExpired',
+ paramName: 'maxAgeSeconds'
+ });
+ }
+ } else {
+ const timestamp = await this._timestampModel.getTimestamp(url);
+ const expireOlderThan = Date.now() - this._maxAgeSeconds * 1000;
+ return timestamp !== undefined ? timestamp < expireOlderThan : true;
+ }
+ }
+ /**
+ * Removes the IndexedDB object store used to keep track of cache expiration
+ * metadata.
+ */
+ async delete() {
+ // Make sure we don't attempt another rerun if we're called in the middle of
+ // a cache expiration.
+ this._rerunRequested = false;
+ await this._timestampModel.expireEntries(Infinity); // Expires all.
+ }
+}
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * This plugin can be used in a `workbox-strategy` to regularly enforce a
+ * limit on the age and / or the number of cached requests.
+ *
+ * It can only be used with `workbox-strategy` instances that have a
+ * [custom `cacheName` property set](/web/tools/workbox/guides/configure-workbox#custom_cache_names_in_strategies).
+ * In other words, it can't be used to expire entries in strategy that uses the
+ * default runtime cache name.
+ *
+ * Whenever a cached response is used or updated, this plugin will look
+ * at the associated cache and remove any old or extra responses.
+ *
+ * When using `maxAgeSeconds`, responses may be used *once* after expiring
+ * because the expiration clean up will not have occurred until *after* the
+ * cached response has been used. If the response has a "Date" header, then
+ * a light weight expiration check is performed and the response will not be
+ * used immediately.
+ *
+ * When using `maxEntries`, the entry least-recently requested will be removed
+ * from the cache first.
+ *
+ * @memberof workbox-expiration
+ */
+class ExpirationPlugin {
+ /**
+ * @param {ExpirationPluginOptions} config
+ * @param {number} [config.maxEntries] The maximum number of entries to cache.
+ * Entries used the least will be removed as the maximum is reached.
+ * @param {number} [config.maxAgeSeconds] The maximum age of an entry before
+ * it's treated as stale and removed.
+ * @param {Object} [config.matchOptions] The [`CacheQueryOptions`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/delete#Parameters)
+ * that will be used when calling `delete()` on the cache.
+ * @param {boolean} [config.purgeOnQuotaError] Whether to opt this cache in to
+ * automatic deletion if the available storage quota has been exceeded.
+ */
+ constructor(config = {}) {
+ /**
+ * A "lifecycle" callback that will be triggered automatically by the
+ * `workbox-strategies` handlers when a `Response` is about to be returned
+ * from a [Cache](https://developer.mozilla.org/en-US/docs/Web/API/Cache) to
+ * the handler. It allows the `Response` to be inspected for freshness and
+ * prevents it from being used if the `Response`'s `Date` header value is
+ * older than the configured `maxAgeSeconds`.
+ *
+ * @param {Object} options
+ * @param {string} options.cacheName Name of the cache the response is in.
+ * @param {Response} options.cachedResponse The `Response` object that's been
+ * read from a cache and whose freshness should be checked.
+ * @return {Response} Either the `cachedResponse`, if it's
+ * fresh, or `null` if the `Response` is older than `maxAgeSeconds`.
+ *
+ * @private
+ */
+ this.cachedResponseWillBeUsed = async ({
+ event,
+ request,
+ cacheName,
+ cachedResponse
+ }) => {
+ if (!cachedResponse) {
+ return null;
+ }
+ const isFresh = this._isResponseDateFresh(cachedResponse);
+ // Expire entries to ensure that even if the expiration date has
+ // expired, it'll only be used once.
+ const cacheExpiration = this._getCacheExpiration(cacheName);
+ dontWaitFor(cacheExpiration.expireEntries());
+ // Update the metadata for the request URL to the current timestamp,
+ // but don't `await` it as we don't want to block the response.
+ const updateTimestampDone = cacheExpiration.updateTimestamp(request.url);
+ if (event) {
+ try {
+ event.waitUntil(updateTimestampDone);
+ } catch (error) {
+ {
+ // The event may not be a fetch event; only log the URL if it is.
+ if ('request' in event) {
+ logger.warn(`Unable to ensure service worker stays alive when ` + `updating cache entry for ` + `'${getFriendlyURL(event.request.url)}'.`);
+ }
+ }
+ }
+ }
+ return isFresh ? cachedResponse : null;
+ };
+ /**
+ * A "lifecycle" callback that will be triggered automatically by the
+ * `workbox-strategies` handlers when an entry is added to a cache.
+ *
+ * @param {Object} options
+ * @param {string} options.cacheName Name of the cache that was updated.
+ * @param {string} options.request The Request for the cached entry.
+ *
+ * @private
+ */
+ this.cacheDidUpdate = async ({
+ cacheName,
+ request
+ }) => {
+ {
+ finalAssertExports.isType(cacheName, 'string', {
+ moduleName: 'workbox-expiration',
+ className: 'Plugin',
+ funcName: 'cacheDidUpdate',
+ paramName: 'cacheName'
+ });
+ finalAssertExports.isInstance(request, Request, {
+ moduleName: 'workbox-expiration',
+ className: 'Plugin',
+ funcName: 'cacheDidUpdate',
+ paramName: 'request'
+ });
+ }
+ const cacheExpiration = this._getCacheExpiration(cacheName);
+ await cacheExpiration.updateTimestamp(request.url);
+ await cacheExpiration.expireEntries();
+ };
+ {
+ if (!(config.maxEntries || config.maxAgeSeconds)) {
+ throw new WorkboxError('max-entries-or-age-required', {
+ moduleName: 'workbox-expiration',
+ className: 'Plugin',
+ funcName: 'constructor'
+ });
+ }
+ if (config.maxEntries) {
+ finalAssertExports.isType(config.maxEntries, 'number', {
+ moduleName: 'workbox-expiration',
+ className: 'Plugin',
+ funcName: 'constructor',
+ paramName: 'config.maxEntries'
+ });
+ }
+ if (config.maxAgeSeconds) {
+ finalAssertExports.isType(config.maxAgeSeconds, 'number', {
+ moduleName: 'workbox-expiration',
+ className: 'Plugin',
+ funcName: 'constructor',
+ paramName: 'config.maxAgeSeconds'
+ });
+ }
+ }
+ this._config = config;
+ this._maxAgeSeconds = config.maxAgeSeconds;
+ this._cacheExpirations = new Map();
+ if (config.purgeOnQuotaError) {
+ registerQuotaErrorCallback(() => this.deleteCacheAndMetadata());
+ }
+ }
+ /**
+ * A simple helper method to return a CacheExpiration instance for a given
+ * cache name.
+ *
+ * @param {string} cacheName
+ * @return {CacheExpiration}
+ *
+ * @private
+ */
+ _getCacheExpiration(cacheName) {
+ if (cacheName === cacheNames.getRuntimeName()) {
+ throw new WorkboxError('expire-custom-caches-only');
+ }
+ let cacheExpiration = this._cacheExpirations.get(cacheName);
+ if (!cacheExpiration) {
+ cacheExpiration = new CacheExpiration(cacheName, this._config);
+ this._cacheExpirations.set(cacheName, cacheExpiration);
+ }
+ return cacheExpiration;
+ }
+ /**
+ * @param {Response} cachedResponse
+ * @return {boolean}
+ *
+ * @private
+ */
+ _isResponseDateFresh(cachedResponse) {
+ if (!this._maxAgeSeconds) {
+ // We aren't expiring by age, so return true, it's fresh
+ return true;
+ }
+ // Check if the 'date' header will suffice a quick expiration check.
+ // See https://github.com/GoogleChromeLabs/sw-toolbox/issues/164 for
+ // discussion.
+ const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse);
+ if (dateHeaderTimestamp === null) {
+ // Unable to parse date, so assume it's fresh.
+ return true;
+ }
+ // If we have a valid headerTime, then our response is fresh iff the
+ // headerTime plus maxAgeSeconds is greater than the current time.
+ const now = Date.now();
+ return dateHeaderTimestamp >= now - this._maxAgeSeconds * 1000;
+ }
+ /**
+ * This method will extract the data header and parse it into a useful
+ * value.
+ *
+ * @param {Response} cachedResponse
+ * @return {number|null}
+ *
+ * @private
+ */
+ _getDateHeaderTimestamp(cachedResponse) {
+ if (!cachedResponse.headers.has('date')) {
+ return null;
+ }
+ const dateHeader = cachedResponse.headers.get('date');
+ const parsedDate = new Date(dateHeader);
+ const headerTime = parsedDate.getTime();
+ // If the Date header was invalid for some reason, parsedDate.getTime()
+ // will return NaN.
+ if (isNaN(headerTime)) {
+ return null;
+ }
+ return headerTime;
+ }
+ /**
+ * This is a helper method that performs two operations:
+ *
+ * - Deletes *all* the underlying Cache instances associated with this plugin
+ * instance, by calling caches.delete() on your behalf.
+ * - Deletes the metadata from IndexedDB used to keep track of expiration
+ * details for each Cache instance.
+ *
+ * When using cache expiration, calling this method is preferable to calling
+ * `caches.delete()` directly, since this will ensure that the IndexedDB
+ * metadata is also cleanly removed and open IndexedDB instances are deleted.
+ *
+ * Note that if you're *not* using cache expiration for a given cache, calling
+ * `caches.delete()` and passing in the cache's name should be sufficient.
+ * There is no Workbox-specific method needed for cleanup in that case.
+ */
+ async deleteCacheAndMetadata() {
+ // Do this one at a time instead of all at once via `Promise.all()` to
+ // reduce the chance of inconsistency if a promise rejects.
+ for (const [cacheName, cacheExpiration] of this._cacheExpirations) {
+ await self.caches.delete(cacheName);
+ await cacheExpiration.delete();
+ }
+ // Reset this._cacheExpirations to its initial state.
+ this._cacheExpirations = new Map();
+ }
+}
+
+/*
+ Copyright 2020 Google LLC
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+function stripParams(fullURL, ignoreParams) {
+ const strippedURL = new URL(fullURL);
+ for (const param of ignoreParams) {
+ strippedURL.searchParams.delete(param);
+ }
+ return strippedURL.href;
+}
+/**
+ * Matches an item in the cache, ignoring specific URL params. This is similar
+ * to the `ignoreSearch` option, but it allows you to ignore just specific
+ * params (while continuing to match on the others).
+ *
+ * @private
+ * @param {Cache} cache
+ * @param {Request} request
+ * @param {Object} matchOptions
+ * @param {Array<string>} ignoreParams
+ * @return {Promise<Response|undefined>}
+ */
+async function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {
+ const strippedRequestURL = stripParams(request.url, ignoreParams);
+ // If the request doesn't include any ignored params, match as normal.
+ if (request.url === strippedRequestURL) {
+ return cache.match(request, matchOptions);
+ }
+ // Otherwise, match by comparing keys
+ const keysOptions = Object.assign(Object.assign({}, matchOptions), {
+ ignoreSearch: true
+ });
+ const cacheKeys = await cache.keys(request, keysOptions);
+ for (const cacheKey of cacheKeys) {
+ const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);
+ if (strippedRequestURL === strippedCacheKeyURL) {
+ return cache.match(cacheKey, matchOptions);
+ }
+ }
+ return;
+}
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * The Deferred class composes Promises in a way that allows for them to be
+ * resolved or rejected from outside the constructor. In most cases promises
+ * should be used directly, but Deferreds can be necessary when the logic to
+ * resolve a promise must be separate.
+ *
+ * @private
+ */
+class Deferred {
+ /**
+ * Creates a promise and exposes its resolve and reject functions as methods.
+ */
+ constructor() {
+ this.promise = new Promise((resolve, reject) => {
+ this.resolve = resolve;
+ this.reject = reject;
+ });
+ }
+}
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * Runs all of the callback functions, one at a time sequentially, in the order
+ * in which they were registered.
+ *
+ * @memberof workbox-core
+ * @private
+ */
+async function executeQuotaErrorCallbacks() {
+ {
+ logger.log(`About to run ${quotaErrorCallbacks.size} ` + `callbacks to clean up caches.`);
+ }
+ for (const callback of quotaErrorCallbacks) {
+ await callback();
+ {
+ logger.log(callback, 'is complete.');
+ }
+ }
+ {
+ logger.log('Finished running callbacks.');
+ }
+}
+
+/*
+ Copyright 2019 Google LLC
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * Returns a promise that resolves and the passed number of milliseconds.
+ * This utility is an async/await-friendly version of `setTimeout`.
+ *
+ * @param {number} ms
+ * @return {Promise}
+ * @private
+ */
+function timeout(ms) {
+ return new Promise(resolve => setTimeout(resolve, ms));
+}
+
+// @ts-ignore
+try {
+ self['workbox:strategies:6.5.3'] && _();
+} catch (e) {}
+
+/*
+ Copyright 2020 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+function toRequest(input) {
+ return typeof input === 'string' ? new Request(input) : input;
+}
+/**
+ * A class created every time a Strategy instance instance calls
+ * {@link workbox-strategies.Strategy~handle} or
+ * {@link workbox-strategies.Strategy~handleAll} that wraps all fetch and
+ * cache actions around plugin callbacks and keeps track of when the strategy
+ * is "done" (i.e. all added `event.waitUntil()` promises have resolved).
+ *
+ * @memberof workbox-strategies
+ */
+class StrategyHandler {
+ /**
+ * Creates a new instance associated with the passed strategy and event
+ * that's handling the request.
+ *
+ * The constructor also initializes the state that will be passed to each of
+ * the plugins handling this request.
+ *
+ * @param {workbox-strategies.Strategy} strategy
+ * @param {Object} options
+ * @param {Request|string} options.request A request to run this strategy for.
+ * @param {ExtendableEvent} options.event The event associated with the
+ * request.
+ * @param {URL} [options.url]
+ * @param {*} [options.params] The return value from the
+ * {@link workbox-routing~matchCallback} (if applicable).
+ */
+ constructor(strategy, options) {
+ this._cacheKeys = {};
+ /**
+ * The request the strategy is performing (passed to the strategy's
+ * `handle()` or `handleAll()` method).
+ * @name request
+ * @instance
+ * @type {Request}
+ * @memberof workbox-strategies.StrategyHandler
+ */
+ /**
+ * The event associated with this request.
+ * @name event
+ * @instance
+ * @type {ExtendableEvent}
+ * @memberof workbox-strategies.StrategyHandler
+ */
+ /**
+ * A `URL` instance of `request.url` (if passed to the strategy's
+ * `handle()` or `handleAll()` method).
+ * Note: the `url` param will be present if the strategy was invoked
+ * from a workbox `Route` object.
+ * @name url
+ * @instance
+ * @type {URL|undefined}
+ * @memberof workbox-strategies.StrategyHandler
+ */
+ /**
+ * A `param` value (if passed to the strategy's
+ * `handle()` or `handleAll()` method).
+ * Note: the `param` param will be present if the strategy was invoked
+ * from a workbox `Route` object and the
+ * {@link workbox-routing~matchCallback} returned
+ * a truthy value (it will be that value).
+ * @name params
+ * @instance
+ * @type {*|undefined}
+ * @memberof workbox-strategies.StrategyHandler
+ */
+ {
+ finalAssertExports.isInstance(options.event, ExtendableEvent, {
+ moduleName: 'workbox-strategies',
+ className: 'StrategyHandler',
+ funcName: 'constructor',
+ paramName: 'options.event'
+ });
+ }
+ Object.assign(this, options);
+ this.event = options.event;
+ this._strategy = strategy;
+ this._handlerDeferred = new Deferred();
+ this._extendLifetimePromises = [];
+ // Copy the plugins list (since it's mutable on the strategy),
+ // so any mutations don't affect this handler instance.
+ this._plugins = [...strategy.plugins];
+ this._pluginStateMap = new Map();
+ for (const plugin of this._plugins) {
+ this._pluginStateMap.set(plugin, {});
+ }
+ this.event.waitUntil(this._handlerDeferred.promise);
+ }
+ /**
+ * Fetches a given request (and invokes any applicable plugin callback
+ * methods) using the `fetchOptions` (for non-navigation requests) and
+ * `plugins` defined on the `Strategy` object.
+ *
+ * The following plugin lifecycle methods are invoked when using this method:
+ * - `requestWillFetch()`
+ * - `fetchDidSucceed()`
+ * - `fetchDidFail()`
+ *
+ * @param {Request|string} input The URL or request to fetch.
+ * @return {Promise<Response>}
+ */
+ async fetch(input) {
+ const {
+ event
+ } = this;
+ let request = toRequest(input);
+ if (request.mode === 'navigate' && event instanceof FetchEvent && event.preloadResponse) {
+ const possiblePreloadResponse = await event.preloadResponse;
+ if (possiblePreloadResponse) {
+ {
+ logger.log(`Using a preloaded navigation response for ` + `'${getFriendlyURL(request.url)}'`);
+ }
+ return possiblePreloadResponse;
+ }
+ }
+ // If there is a fetchDidFail plugin, we need to save a clone of the
+ // original request before it's either modified by a requestWillFetch
+ // plugin or before the original request's body is consumed via fetch().
+ const originalRequest = this.hasCallback('fetchDidFail') ? request.clone() : null;
+ try {
+ for (const cb of this.iterateCallbacks('requestWillFetch')) {
+ request = await cb({
+ request: request.clone(),
+ event
+ });
+ }
+ } catch (err) {
+ if (err instanceof Error) {
+ throw new WorkboxError('plugin-error-request-will-fetch', {
+ thrownErrorMessage: err.message
+ });
+ }
+ }
+ // The request can be altered by plugins with `requestWillFetch` making
+ // the original request (most likely from a `fetch` event) different
+ // from the Request we make. Pass both to `fetchDidFail` to aid debugging.
+ const pluginFilteredRequest = request.clone();
+ try {
+ let fetchResponse;
+ // See https://github.com/GoogleChrome/workbox/issues/1796
+ fetchResponse = await fetch(request, request.mode === 'navigate' ? undefined : this._strategy.fetchOptions);
+ if ("development" !== 'production') {
+ logger.debug(`Network request for ` + `'${getFriendlyURL(request.url)}' returned a response with ` + `status '${fetchResponse.status}'.`);
+ }
+ for (const callback of this.iterateCallbacks('fetchDidSucceed')) {
+ fetchResponse = await callback({
+ event,
+ request: pluginFilteredRequest,
+ response: fetchResponse
+ });
+ }
+ return fetchResponse;
+ } catch (error) {
+ {
+ logger.log(`Network request for ` + `'${getFriendlyURL(request.url)}' threw an error.`, error);
+ }
+ // `originalRequest` will only exist if a `fetchDidFail` callback
+ // is being used (see above).
+ if (originalRequest) {
+ await this.runCallbacks('fetchDidFail', {
+ error: error,
+ event,
+ originalRequest: originalRequest.clone(),
+ request: pluginFilteredRequest.clone()
+ });
+ }
+ throw error;
+ }
+ }
+ /**
+ * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on
+ * the response generated by `this.fetch()`.
+ *
+ * The call to `this.cachePut()` automatically invokes `this.waitUntil()`,
+ * so you do not have to manually call `waitUntil()` on the event.
+ *
+ * @param {Request|string} input The request or URL to fetch and cache.
+ * @return {Promise<Response>}
+ */
+ async fetchAndCachePut(input) {
+ const response = await this.fetch(input);
+ const responseClone = response.clone();
+ void this.waitUntil(this.cachePut(input, responseClone));
+ return response;
+ }
+ /**
+ * Matches a request from the cache (and invokes any applicable plugin
+ * callback methods) using the `cacheName`, `matchOptions`, and `plugins`
+ * defined on the strategy object.
+ *
+ * The following plugin lifecycle methods are invoked when using this method:
+ * - cacheKeyWillByUsed()
+ * - cachedResponseWillByUsed()
+ *
+ * @param {Request|string} key The Request or URL to use as the cache key.
+ * @return {Promise<Response|undefined>} A matching response, if found.
+ */
+ async cacheMatch(key) {
+ const request = toRequest(key);
+ let cachedResponse;
+ const {
+ cacheName,
+ matchOptions
+ } = this._strategy;
+ const effectiveRequest = await this.getCacheKey(request, 'read');
+ const multiMatchOptions = Object.assign(Object.assign({}, matchOptions), {
+ cacheName
+ });
+ cachedResponse = await caches.match(effectiveRequest, multiMatchOptions);
+ {
+ if (cachedResponse) {
+ logger.debug(`Found a cached response in '${cacheName}'.`);
+ } else {
+ logger.debug(`No cached response found in '${cacheName}'.`);
+ }
+ }
+ for (const callback of this.iterateCallbacks('cachedResponseWillBeUsed')) {
+ cachedResponse = (await callback({
+ cacheName,
+ matchOptions,
+ cachedResponse,
+ request: effectiveRequest,
+ event: this.event
+ })) || undefined;
+ }
+ return cachedResponse;
+ }
+ /**
+ * Puts a request/response pair in the cache (and invokes any applicable
+ * plugin callback methods) using the `cacheName` and `plugins` defined on
+ * the strategy object.
+ *
+ * The following plugin lifecycle methods are invoked when using this method:
+ * - cacheKeyWillByUsed()
+ * - cacheWillUpdate()
+ * - cacheDidUpdate()
+ *
+ * @param {Request|string} key The request or URL to use as the cache key.
+ * @param {Response} response The response to cache.
+ * @return {Promise<boolean>} `false` if a cacheWillUpdate caused the response
+ * not be cached, and `true` otherwise.
+ */
+ async cachePut(key, response) {
+ const request = toRequest(key);
+ // Run in the next task to avoid blocking other cache reads.
+ // https://github.com/w3c/ServiceWorker/issues/1397
+ await timeout(0);
+ const effectiveRequest = await this.getCacheKey(request, 'write');
+ {
+ if (effectiveRequest.method && effectiveRequest.method !== 'GET') {
+ throw new WorkboxError('attempt-to-cache-non-get-request', {
+ url: getFriendlyURL(effectiveRequest.url),
+ method: effectiveRequest.method
+ });
+ }
+ // See https://github.com/GoogleChrome/workbox/issues/2818
+ const vary = response.headers.get('Vary');
+ if (vary) {
+ logger.debug(`The response for ${getFriendlyURL(effectiveRequest.url)} ` + `has a 'Vary: ${vary}' header. ` + `Consider setting the {ignoreVary: true} option on your strategy ` + `to ensure cache matching and deletion works as expected.`);
+ }
+ }
+ if (!response) {
+ {
+ logger.error(`Cannot cache non-existent response for ` + `'${getFriendlyURL(effectiveRequest.url)}'.`);
+ }
+ throw new WorkboxError('cache-put-with-no-response', {
+ url: getFriendlyURL(effectiveRequest.url)
+ });
+ }
+ const responseToCache = await this._ensureResponseSafeToCache(response);
+ if (!responseToCache) {
+ {
+ logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' ` + `will not be cached.`, responseToCache);
+ }
+ return false;
+ }
+ const {
+ cacheName,
+ matchOptions
+ } = this._strategy;
+ const cache = await self.caches.open(cacheName);
+ const hasCacheUpdateCallback = this.hasCallback('cacheDidUpdate');
+ const oldResponse = hasCacheUpdateCallback ? await cacheMatchIgnoreParams(
+ // TODO(philipwalton): the `__WB_REVISION__` param is a precaching
+ // feature. Consider into ways to only add this behavior if using
+ // precaching.
+ cache, effectiveRequest.clone(), ['__WB_REVISION__'], matchOptions) : null;
+ {
+ logger.debug(`Updating the '${cacheName}' cache with a new Response ` + `for ${getFriendlyURL(effectiveRequest.url)}.`);
+ }
+ try {
+ await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache);
+ } catch (error) {
+ if (error instanceof Error) {
+ // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError
+ if (error.name === 'QuotaExceededError') {
+ await executeQuotaErrorCallbacks();
+ }
+ throw error;
+ }
+ }
+ for (const callback of this.iterateCallbacks('cacheDidUpdate')) {
+ await callback({
+ cacheName,
+ oldResponse,
+ newResponse: responseToCache.clone(),
+ request: effectiveRequest,
+ event: this.event
+ });
+ }
+ return true;
+ }
+ /**
+ * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and
+ * executes any of those callbacks found in sequence. The final `Request`
+ * object returned by the last plugin is treated as the cache key for cache
+ * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have
+ * been registered, the passed request is returned unmodified
+ *
+ * @param {Request} request
+ * @param {string} mode
+ * @return {Promise<Request>}
+ */
+ async getCacheKey(request, mode) {
+ const key = `${request.url} | ${mode}`;
+ if (!this._cacheKeys[key]) {
+ let effectiveRequest = request;
+ for (const callback of this.iterateCallbacks('cacheKeyWillBeUsed')) {
+ effectiveRequest = toRequest(await callback({
+ mode,
+ request: effectiveRequest,
+ event: this.event,
+ // params has a type any can't change right now.
+ params: this.params // eslint-disable-line
+ }));
+ }
+
+ this._cacheKeys[key] = effectiveRequest;
+ }
+ return this._cacheKeys[key];
+ }
+ /**
+ * Returns true if the strategy has at least one plugin with the given
+ * callback.
+ *
+ * @param {string} name The name of the callback to check for.
+ * @return {boolean}
+ */
+ hasCallback(name) {
+ for (const plugin of this._strategy.plugins) {
+ if (name in plugin) {
+ return true;
+ }
+ }
+ return false;
+ }
+ /**
+ * Runs all plugin callbacks matching the given name, in order, passing the
+ * given param object (merged ith the current plugin state) as the only
+ * argument.
+ *
+ * Note: since this method runs all plugins, it's not suitable for cases
+ * where the return value of a callback needs to be applied prior to calling
+ * the next callback. See
+ * {@link workbox-strategies.StrategyHandler#iterateCallbacks}
+ * below for how to handle that case.
+ *
+ * @param {string} name The name of the callback to run within each plugin.
+ * @param {Object} param The object to pass as the first (and only) param
+ * when executing each callback. This object will be merged with the
+ * current plugin state prior to callback execution.
+ */
+ async runCallbacks(name, param) {
+ for (const callback of this.iterateCallbacks(name)) {
+ // TODO(philipwalton): not sure why `any` is needed. It seems like
+ // this should work with `as WorkboxPluginCallbackParam[C]`.
+ await callback(param);
+ }
+ }
+ /**
+ * Accepts a callback and returns an iterable of matching plugin callbacks,
+ * where each callback is wrapped with the current handler state (i.e. when
+ * you call each callback, whatever object parameter you pass it will
+ * be merged with the plugin's current state).
+ *
+ * @param {string} name The name fo the callback to run
+ * @return {Array<Function>}
+ */
+ *iterateCallbacks(name) {
+ for (const plugin of this._strategy.plugins) {
+ if (typeof plugin[name] === 'function') {
+ const state = this._pluginStateMap.get(plugin);
+ const statefulCallback = param => {
+ const statefulParam = Object.assign(Object.assign({}, param), {
+ state
+ });
+ // TODO(philipwalton): not sure why `any` is needed. It seems like
+ // this should work with `as WorkboxPluginCallbackParam[C]`.
+ return plugin[name](statefulParam);
+ };
+ yield statefulCallback;
+ }
+ }
+ }
+ /**
+ * Adds a promise to the
+ * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises}
+ * of the event event associated with the request being handled (usually a
+ * `FetchEvent`).
+ *
+ * Note: you can await
+ * {@link workbox-strategies.StrategyHandler~doneWaiting}
+ * to know when all added promises have settled.
+ *
+ * @param {Promise} promise A promise to add to the extend lifetime promises
+ * of the event that triggered the request.
+ */
+ waitUntil(promise) {
+ this._extendLifetimePromises.push(promise);
+ return promise;
+ }
+ /**
+ * Returns a promise that resolves once all promises passed to
+ * {@link workbox-strategies.StrategyHandler~waitUntil}
+ * have settled.
+ *
+ * Note: any work done after `doneWaiting()` settles should be manually
+ * passed to an event's `waitUntil()` method (not this handler's
+ * `waitUntil()` method), otherwise the service worker thread my be killed
+ * prior to your work completing.
+ */
+ async doneWaiting() {
+ let promise;
+ while (promise = this._extendLifetimePromises.shift()) {
+ await promise;
+ }
+ }
+ /**
+ * Stops running the strategy and immediately resolves any pending
+ * `waitUntil()` promises.
+ */
+ destroy() {
+ this._handlerDeferred.resolve(null);
+ }
+ /**
+ * This method will call cacheWillUpdate on the available plugins (or use
+ * status === 200) to determine if the Response is safe and valid to cache.
+ *
+ * @param {Request} options.request
+ * @param {Response} options.response
+ * @return {Promise<Response|undefined>}
+ *
+ * @private
+ */
+ async _ensureResponseSafeToCache(response) {
+ let responseToCache = response;
+ let pluginsUsed = false;
+ for (const callback of this.iterateCallbacks('cacheWillUpdate')) {
+ responseToCache = (await callback({
+ request: this.request,
+ response: responseToCache,
+ event: this.event
+ })) || undefined;
+ pluginsUsed = true;
+ if (!responseToCache) {
+ break;
+ }
+ }
+ if (!pluginsUsed) {
+ if (responseToCache && responseToCache.status !== 200) {
+ responseToCache = undefined;
+ }
+ {
+ if (responseToCache) {
+ if (responseToCache.status !== 200) {
+ if (responseToCache.status === 0) {
+ logger.warn(`The response for '${this.request.url}' ` + `is an opaque response. The caching strategy that you're ` + `using will not cache opaque responses by default.`);
+ } else {
+ logger.debug(`The response for '${this.request.url}' ` + `returned a status code of '${response.status}' and won't ` + `be cached as a result.`);
+ }
+ }
+ }
+ }
+ }
+ return responseToCache;
+ }
+}
+
+/*
+ Copyright 2020 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * An abstract base class that all other strategy classes must extend from:
+ *
+ * @memberof workbox-strategies
+ */
+class Strategy {
+ /**
+ * Creates a new instance of the strategy and sets all documented option
+ * properties as public instance properties.
+ *
+ * Note: if a custom strategy class extends the base Strategy class and does
+ * not need more than these properties, it does not need to define its own
+ * constructor.
+ *
+ * @param {Object} [options]
+ * @param {string} [options.cacheName] Cache name to store and retrieve
+ * requests. Defaults to the cache names provided by
+ * {@link workbox-core.cacheNames}.
+ * @param {Array<Object>} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}
+ * to use in conjunction with this caching strategy.
+ * @param {Object} [options.fetchOptions] Values passed along to the
+ * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)
+ * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)
+ * `fetch()` requests made by this strategy.
+ * @param {Object} [options.matchOptions] The
+ * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}
+ * for any `cache.match()` or `cache.put()` calls made by this strategy.
+ */
+ constructor(options = {}) {
+ /**
+ * Cache name to store and retrieve
+ * requests. Defaults to the cache names provided by
+ * {@link workbox-core.cacheNames}.
+ *
+ * @type {string}
+ */
+ this.cacheName = cacheNames.getRuntimeName(options.cacheName);
+ /**
+ * The list
+ * [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}
+ * used by this strategy.
+ *
+ * @type {Array<Object>}
+ */
+ this.plugins = options.plugins || [];
+ /**
+ * Values passed along to the
+ * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters}
+ * of all fetch() requests made by this strategy.
+ *
+ * @type {Object}
+ */
+ this.fetchOptions = options.fetchOptions;
+ /**
+ * The
+ * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}
+ * for any `cache.match()` or `cache.put()` calls made by this strategy.
+ *
+ * @type {Object}
+ */
+ this.matchOptions = options.matchOptions;
+ }
+ /**
+ * Perform a request strategy and returns a `Promise` that will resolve with
+ * a `Response`, invoking all relevant plugin callbacks.
+ *
+ * When a strategy instance is registered with a Workbox
+ * {@link workbox-routing.Route}, this method is automatically
+ * called when the route matches.
+ *
+ * Alternatively, this method can be used in a standalone `FetchEvent`
+ * listener by passing it to `event.respondWith()`.
+ *
+ * @param {FetchEvent|Object} options A `FetchEvent` or an object with the
+ * properties listed below.
+ * @param {Request|string} options.request A request to run this strategy for.
+ * @param {ExtendableEvent} options.event The event associated with the
+ * request.
+ * @param {URL} [options.url]
+ * @param {*} [options.params]
+ */
+ handle(options) {
+ const [responseDone] = this.handleAll(options);
+ return responseDone;
+ }
+ /**
+ * Similar to {@link workbox-strategies.Strategy~handle}, but
+ * instead of just returning a `Promise` that resolves to a `Response` it
+ * it will return an tuple of `[response, done]` promises, where the former
+ * (`response`) is equivalent to what `handle()` returns, and the latter is a
+ * Promise that will resolve once any promises that were added to
+ * `event.waitUntil()` as part of performing the strategy have completed.
+ *
+ * You can await the `done` promise to ensure any extra work performed by
+ * the strategy (usually caching responses) completes successfully.
+ *
+ * @param {FetchEvent|Object} options A `FetchEvent` or an object with the
+ * properties listed below.
+ * @param {Request|string} options.request A request to run this strategy for.
+ * @param {ExtendableEvent} options.event The event associated with the
+ * request.
+ * @param {URL} [options.url]
+ * @param {*} [options.params]
+ * @return {Array<Promise>} A tuple of [response, done]
+ * promises that can be used to determine when the response resolves as
+ * well as when the handler has completed all its work.
+ */
+ handleAll(options) {
+ // Allow for flexible options to be passed.
+ if (options instanceof FetchEvent) {
+ options = {
+ event: options,
+ request: options.request
+ };
+ }
+ const event = options.event;
+ const request = typeof options.request === 'string' ? new Request(options.request) : options.request;
+ const params = 'params' in options ? options.params : undefined;
+ const handler = new StrategyHandler(this, {
+ event,
+ request,
+ params
+ });
+ const responseDone = this._getResponse(handler, request, event);
+ const handlerDone = this._awaitComplete(responseDone, handler, request, event);
+ // Return an array of promises, suitable for use with Promise.all().
+ return [responseDone, handlerDone];
+ }
+ async _getResponse(handler, request, event) {
+ await handler.runCallbacks('handlerWillStart', {
+ event,
+ request
+ });
+ let response = undefined;
+ try {
+ response = await this._handle(request, handler);
+ // The "official" Strategy subclasses all throw this error automatically,
+ // but in case a third-party Strategy doesn't, ensure that we have a
+ // consistent failure when there's no response or an error response.
+ if (!response || response.type === 'error') {
+ throw new WorkboxError('no-response', {
+ url: request.url
+ });
+ }
+ } catch (error) {
+ if (error instanceof Error) {
+ for (const callback of handler.iterateCallbacks('handlerDidError')) {
+ response = await callback({
+ error,
+ event,
+ request
+ });
+ if (response) {
+ break;
+ }
+ }
+ }
+ if (!response) {
+ throw error;
+ } else {
+ logger.log(`While responding to '${getFriendlyURL(request.url)}', ` + `an ${error instanceof Error ? error.toString() : ''} error occurred. Using a fallback response provided by ` + `a handlerDidError plugin.`);
+ }
+ }
+ for (const callback of handler.iterateCallbacks('handlerWillRespond')) {
+ response = await callback({
+ event,
+ request,
+ response
+ });
+ }
+ return response;
+ }
+ async _awaitComplete(responseDone, handler, request, event) {
+ let response;
+ let error;
+ try {
+ response = await responseDone;
+ } catch (error) {
+ // Ignore errors, as response errors should be caught via the `response`
+ // promise above. The `done` promise will only throw for errors in
+ // promises passed to `handler.waitUntil()`.
+ }
+ try {
+ await handler.runCallbacks('handlerDidRespond', {
+ event,
+ request,
+ response
+ });
+ await handler.doneWaiting();
+ } catch (waitUntilError) {
+ if (waitUntilError instanceof Error) {
+ error = waitUntilError;
+ }
+ }
+ await handler.runCallbacks('handlerDidComplete', {
+ event,
+ request,
+ response,
+ error: error
+ });
+ handler.destroy();
+ if (error) {
+ throw error;
+ }
+ }
+}
+/**
+ * Classes extending the `Strategy` based class should implement this method,
+ * and leverage the {@link workbox-strategies.StrategyHandler}
+ * arg to perform all fetching and cache logic, which will ensure all relevant
+ * cache, cache options, fetch options and plugins are used (per the current
+ * strategy instance).
+ *
+ * @name _handle
+ * @instance
+ * @abstract
+ * @function
+ * @param {Request} request
+ * @param {workbox-strategies.StrategyHandler} handler
+ * @return {Promise<Response>}
+ *
+ * @memberof workbox-strategies.Strategy
+ */
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+const messages = {
+ strategyStart: (strategyName, request) => `Using ${strategyName} to respond to '${getFriendlyURL(request.url)}'`,
+ printFinalResponse: response => {
+ if (response) {
+ logger.groupCollapsed(`View the final response here.`);
+ logger.log(response || '[No response returned]');
+ logger.groupEnd();
+ }
+ }
+};
+
+/*
+ Copyright 2018 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * An implementation of a [cache-first](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#cache-first-falling-back-to-network)
+ * request strategy.
+ *
+ * A cache first strategy is useful for assets that have been revisioned,
+ * such as URLs like `/styles/example.a8f5f1.css`, since they
+ * can be cached for long periods of time.
+ *
+ * If the network request fails, and there is no cache match, this will throw
+ * a `WorkboxError` exception.
+ *
+ * @extends workbox-strategies.Strategy
+ * @memberof workbox-strategies
+ */
+class CacheFirst extends Strategy {
+ /**
+ * @private
+ * @param {Request|string} request A request to run this strategy for.
+ * @param {workbox-strategies.StrategyHandler} handler The event that
+ * triggered the request.
+ * @return {Promise<Response>}
+ */
+ async _handle(request, handler) {
+ const logs = [];
+ {
+ finalAssertExports.isInstance(request, Request, {
+ moduleName: 'workbox-strategies',
+ className: this.constructor.name,
+ funcName: 'makeRequest',
+ paramName: 'request'
+ });
+ }
+ let response = await handler.cacheMatch(request);
+ let error = undefined;
+ if (!response) {
+ {
+ logs.push(`No response found in the '${this.cacheName}' cache. ` + `Will respond with a network request.`);
+ }
+ try {
+ response = await handler.fetchAndCachePut(request);
+ } catch (err) {
+ if (err instanceof Error) {
+ error = err;
+ }
+ }
+ {
+ if (response) {
+ logs.push(`Got response from network.`);
+ } else {
+ logs.push(`Unable to get a response from the network.`);
+ }
+ }
+ } else {
+ {
+ logs.push(`Found a cached response in the '${this.cacheName}' cache.`);
+ }
+ }
+ {
+ logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));
+ for (const log of logs) {
+ logger.log(log);
+ }
+ messages.printFinalResponse(response);
+ logger.groupEnd();
+ }
+ if (!response) {
+ throw new WorkboxError('no-response', {
+ url: request.url,
+ error
+ });
+ }
+ return response;
+ }
+}
+
+/*
+ Copyright 2019 Google LLC
+
+ Use of this source code is governed by an MIT-style
+ license that can be found in the LICENSE file or at
+ https://opensource.org/licenses/MIT.
+*/
+/**
+ * Claim any currently available clients once the service worker
+ * becomes active. This is normally used in conjunction with `skipWaiting()`.
+ *
+ * @memberof workbox-core
+ */
+function clientsClaim() {
+ self.addEventListener('activate', () => self.clients.claim());
+}
+
+self.skipWaiting();
+clientsClaim();
+registerRoute(/^.*\/(apps|core)(\/[a-z-_]+)?\/preview.*/i, new CacheFirst({
+ "cacheName": "previews",
+ plugins: [new ExpirationPlugin({
+ maxAgeSeconds: 604800,
+ maxEntries: 10000
+ })]
+}), 'GET');
+self.__WB_DISABLE_DEV_LOGS = true;
diff --git a/dist/settings-apps-view-settings-apps-view.js b/dist/settings-apps-view-settings-apps-view.js
new file mode 100644
index 00000000000..c58774e9e6c
--- /dev/null
+++ b/dist/settings-apps-view-settings-apps-view.js
@@ -0,0 +1,2556 @@
+"use strict";
+(self["webpackChunknextcloud"] = self["webpackChunknextcloud"] || []).push([["settings-apps-view"],{
+
+/***/ "./apps/settings/src/mixins/AppManagement.js":
+/*!***************************************************!*\
+ !*** ./apps/settings/src/mixins/AppManagement.js ***!
+ \***************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs");
+/* harmony import */ var _service_rebuild_navigation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../service/rebuild-navigation.js */ "./apps/settings/src/service/rebuild-navigation.js");
+/**
+ * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ computed: {
+ appGroups: function appGroups() {
+ return this.app.groups.map(function (group) {
+ return {
+ id: group,
+ name: group
+ };
+ });
+ },
+ installing: function installing() {
+ return this.$store.getters.loading('install');
+ },
+ isLoading: function isLoading() {
+ return this.app && this.$store.getters.loading(this.app.id);
+ },
+ enableButtonText: function enableButtonText() {
+ if (this.app.needsDownload) {
+ return t('settings', 'Download and enable');
+ }
+ return t('settings', 'Enable');
+ },
+ forceEnableButtonText: function forceEnableButtonText() {
+ if (this.app.needsDownload) {
+ return t('settings', 'Enable untested app');
+ }
+ return t('settings', 'Enable untested app');
+ },
+ enableButtonTooltip: function enableButtonTooltip() {
+ if (this.app.needsDownload) {
+ return t('settings', 'The app will be downloaded from the App Store');
+ }
+ return false;
+ },
+ forceEnableButtonTooltip: function forceEnableButtonTooltip() {
+ var base = t('settings', 'This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.');
+ if (this.app.needsDownload) {
+ return base + ' ' + t('settings', 'The app will be downloaded from the App Store');
+ }
+ return base;
+ }
+ },
+ data: function data() {
+ return {
+ groupCheckedAppsData: false
+ };
+ },
+ mounted: function mounted() {
+ if (this.app && this.app.groups && this.app.groups.length > 0) {
+ this.groupCheckedAppsData = true;
+ }
+ },
+ methods: {
+ asyncFindGroup: function asyncFindGroup(query) {
+ return this.$store.dispatch('getGroups', {
+ search: query,
+ limit: 5,
+ offset: 0
+ });
+ },
+ isLimitedToGroups: function isLimitedToGroups(app) {
+ if (this.app.groups.length || this.groupCheckedAppsData) {
+ return true;
+ }
+ return false;
+ },
+ setGroupLimit: function setGroupLimit() {
+ if (!this.groupCheckedAppsData) {
+ this.$store.dispatch('enableApp', {
+ appId: this.app.id,
+ groups: []
+ });
+ }
+ },
+ canLimitToGroups: function canLimitToGroups(app) {
+ if (app.types && app.types.includes('filesystem') || app.types.includes('prelogin') || app.types.includes('authentication') || app.types.includes('logging') || app.types.includes('prevent_group_restriction')) {
+ return false;
+ }
+ return true;
+ },
+ addGroupLimitation: function addGroupLimitation(group) {
+ var groups = this.app.groups.concat([]).concat([group.id]);
+ this.$store.dispatch('enableApp', {
+ appId: this.app.id,
+ groups: groups
+ });
+ },
+ removeGroupLimitation: function removeGroupLimitation(group) {
+ var currentGroups = this.app.groups.concat([]);
+ var index = currentGroups.indexOf(group.id);
+ if (index > -1) {
+ currentGroups.splice(index, 1);
+ }
+ this.$store.dispatch('enableApp', {
+ appId: this.app.id,
+ groups: currentGroups
+ });
+ },
+ forceEnable: function forceEnable(appId) {
+ this.$store.dispatch('forceEnableApp', {
+ appId: appId,
+ groups: []
+ }).then(function (response) {
+ (0,_service_rebuild_navigation_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
+ }).catch(function (error) {
+ (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__.showError)(error);
+ });
+ },
+ enable: function enable(appId) {
+ this.$store.dispatch('enableApp', {
+ appId: appId,
+ groups: []
+ }).then(function (response) {
+ (0,_service_rebuild_navigation_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
+ }).catch(function (error) {
+ (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__.showError)(error);
+ });
+ },
+ disable: function disable(appId) {
+ this.$store.dispatch('disableApp', {
+ appId: appId
+ }).then(function (response) {
+ (0,_service_rebuild_navigation_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
+ }).catch(function (error) {
+ (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__.showError)(error);
+ });
+ },
+ remove: function remove(appId) {
+ this.$store.dispatch('uninstallApp', {
+ appId: appId
+ }).then(function (response) {
+ (0,_service_rebuild_navigation_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
+ }).catch(function (error) {
+ (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__.showError)(error);
+ });
+ },
+ install: function install(appId) {
+ this.$store.dispatch('enableApp', {
+ appId: appId
+ }).then(function (response) {
+ (0,_service_rebuild_navigation_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
+ }).catch(function (error) {
+ (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__.showError)(error);
+ });
+ },
+ update: function update(appId) {
+ this.$store.dispatch('updateApp', {
+ appId: appId
+ }).then(function (response) {
+ (0,_service_rebuild_navigation_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
+ }).catch(function (error) {
+ (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__.showError)(error);
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./apps/settings/src/service/rebuild-navigation.js":
+/*!*********************************************************!*\
+ !*** ./apps/settings/src/service/rebuild-navigation.js ***!
+ \*********************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.js");
+/* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.js");
+/* harmony import */ var _nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/event-bus */ "./node_modules/@nextcloud/event-bus/dist/index.esm.js");
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = (function () {
+ return _nextcloud_axios__WEBPACK_IMPORTED_MODULE_0__["default"].get((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_1__.generateOcsUrl)('core/navigation', 2) + '/apps?format=json').then(function (_ref) {
+ var data = _ref.data;
+ if (data.ocs.meta.statuscode !== 200) {
+ return;
+ }
+ (0,_nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_2__.emit)('nextcloud:app-menu.refresh', {
+ apps: data.ocs.data
+ });
+ window.dispatchEvent(new Event('resize'));
+ });
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppDetails.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppDetails.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcMultiselect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcMultiselect.js */ "./node_modules/@nextcloud/vue/dist/Components/NcMultiselect.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcMultiselect_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcMultiselect_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _mixins_AppManagement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../mixins/AppManagement.js */ "./apps/settings/src/mixins/AppManagement.js");
+/* harmony import */ var _PrefixMixin_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PrefixMixin.vue */ "./apps/settings/src/components/PrefixMixin.vue");
+/* harmony import */ var _Markdown_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Markdown.vue */ "./apps/settings/src/components/Markdown.vue");
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'AppDetails',
+ components: {
+ NcMultiselect: (_nextcloud_vue_dist_Components_NcMultiselect_js__WEBPACK_IMPORTED_MODULE_0___default()),
+ Markdown: _Markdown_vue__WEBPACK_IMPORTED_MODULE_3__["default"]
+ },
+ mixins: [_mixins_AppManagement_js__WEBPACK_IMPORTED_MODULE_1__["default"], _PrefixMixin_vue__WEBPACK_IMPORTED_MODULE_2__["default"]],
+ props: {
+ app: {
+ type: Object,
+ required: true
+ }
+ },
+ data: function data() {
+ return {
+ groupCheckedAppsData: false
+ };
+ },
+ computed: {
+ appstoreUrl: function appstoreUrl() {
+ return "https://apps.nextcloud.com/apps/".concat(this.app.id);
+ },
+ licence: function licence() {
+ if (this.app.licence) {
+ return t('settings', '{license}-licensed', {
+ license: ('' + this.app.licence).toUpperCase()
+ });
+ }
+ return null;
+ },
+ author: function author() {
+ if (typeof this.app.author === 'string') {
+ return [{
+ '@value': this.app.author
+ }];
+ }
+ if (this.app.author['@value']) {
+ return [this.app.author];
+ }
+ return this.app.author;
+ },
+ appGroups: function appGroups() {
+ return this.app.groups.map(function (group) {
+ return {
+ id: group,
+ name: group
+ };
+ });
+ },
+ groups: function groups() {
+ return this.$store.getters.getGroups.filter(function (group) {
+ return group.id !== 'disabled';
+ }).sort(function (a, b) {
+ return a.name.localeCompare(b.name);
+ });
+ }
+ },
+ mounted: function mounted() {
+ if (this.app.groups.length > 0) {
+ this.groupCheckedAppsData = true;
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _AppList_AppItem_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AppList/AppItem.vue */ "./apps/settings/src/components/AppList/AppItem.vue");
+/* harmony import */ var _PrefixMixin_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PrefixMixin.vue */ "./apps/settings/src/components/PrefixMixin.vue");
+/* harmony import */ var p_limit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! p-limit */ "./node_modules/p-limit/index.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcButton.js */ "./node_modules/@nextcloud/vue/dist/Components/NcButton.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_3__);
+/* provided dependency */ var console = __webpack_require__(/*! ./node_modules/console-browserify/index.js */ "./node_modules/console-browserify/index.js");
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'AppList',
+ components: {
+ AppItem: _AppList_AppItem_vue__WEBPACK_IMPORTED_MODULE_0__["default"],
+ NcButton: (_nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_3___default())
+ },
+ mixins: [_PrefixMixin_vue__WEBPACK_IMPORTED_MODULE_1__["default"]],
+ props: ['category', 'app', 'search'],
+ computed: {
+ counter: function counter() {
+ return this.apps.filter(function (app) {
+ return app.update;
+ }).length;
+ },
+ loading: function loading() {
+ return this.$store.getters.loading('list');
+ },
+ hasPendingUpdate: function hasPendingUpdate() {
+ return this.apps.filter(function (app) {
+ return app.update;
+ }).length > 0;
+ },
+ showUpdateAll: function showUpdateAll() {
+ return this.hasPendingUpdate && this.useListView;
+ },
+ apps: function apps() {
+ var _this = this;
+ var apps = this.$store.getters.getAllApps.filter(function (app) {
+ return app.name.toLowerCase().search(_this.search.toLowerCase()) !== -1;
+ }).sort(function (a, b) {
+ var sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + a.name;
+ var sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + b.name;
+ return OC.Util.naturalSortCompare(sortStringA, sortStringB);
+ });
+ if (this.category === 'installed') {
+ return apps.filter(function (app) {
+ return app.installed;
+ });
+ }
+ if (this.category === 'enabled') {
+ return apps.filter(function (app) {
+ return app.active && app.installed;
+ });
+ }
+ if (this.category === 'disabled') {
+ return apps.filter(function (app) {
+ return !app.active && app.installed;
+ });
+ }
+ if (this.category === 'app-bundles') {
+ return apps.filter(function (app) {
+ return app.bundles;
+ });
+ }
+ if (this.category === 'updates') {
+ return apps.filter(function (app) {
+ return app.update;
+ });
+ }
+ if (this.category === 'featured') {
+ return apps.filter(function (app) {
+ return app.level === 200;
+ });
+ }
+ // filter app store categories
+ return apps.filter(function (app) {
+ return app.appstore && app.category !== undefined && (app.category === _this.category || app.category.indexOf(_this.category) > -1);
+ });
+ },
+ bundles: function bundles() {
+ var _this2 = this;
+ return this.$store.getters.getServerData.bundles.filter(function (bundle) {
+ return _this2.bundleApps(bundle.id).length > 0;
+ });
+ },
+ bundleApps: function bundleApps() {
+ return function (bundle) {
+ return this.$store.getters.getAllApps.filter(function (app) {
+ return app.bundleIds !== undefined && app.bundleIds.includes(bundle);
+ });
+ };
+ },
+ searchApps: function searchApps() {
+ var _this3 = this;
+ if (this.search === '') {
+ return [];
+ }
+ return this.$store.getters.getAllApps.filter(function (app) {
+ if (app.name.toLowerCase().search(_this3.search.toLowerCase()) !== -1) {
+ return !_this3.apps.find(function (_app) {
+ return _app.id === app.id;
+ });
+ }
+ return false;
+ });
+ },
+ useAppStoreView: function useAppStoreView() {
+ return !this.useListView && !this.useBundleView;
+ },
+ useListView: function useListView() {
+ return this.category === 'installed' || this.category === 'enabled' || this.category === 'disabled' || this.category === 'updates' || this.category === 'featured';
+ },
+ useBundleView: function useBundleView() {
+ return this.category === 'app-bundles';
+ },
+ allBundlesEnabled: function allBundlesEnabled() {
+ var self = this;
+ return function (id) {
+ return self.bundleApps(id).filter(function (app) {
+ return !app.active;
+ }).length === 0;
+ };
+ },
+ bundleToggleText: function bundleToggleText() {
+ var self = this;
+ return function (id) {
+ if (self.allBundlesEnabled(id)) {
+ return t('settings', 'Disable all');
+ }
+ return t('settings', 'Enable all');
+ };
+ }
+ },
+ methods: {
+ toggleBundle: function toggleBundle(id) {
+ if (this.allBundlesEnabled(id)) {
+ return this.disableBundle(id);
+ }
+ return this.enableBundle(id);
+ },
+ enableBundle: function enableBundle(id) {
+ var apps = this.bundleApps(id).map(function (app) {
+ return app.id;
+ });
+ this.$store.dispatch('enableApp', {
+ appId: apps,
+ groups: []
+ }).catch(function (error) {
+ console.error(error);
+ OC.Notification.show(error);
+ });
+ },
+ disableBundle: function disableBundle(id) {
+ var apps = this.bundleApps(id).map(function (app) {
+ return app.id;
+ });
+ this.$store.dispatch('disableApp', {
+ appId: apps,
+ groups: []
+ }).catch(function (error) {
+ OC.Notification.show(error);
+ });
+ },
+ updateAll: function updateAll() {
+ var _this4 = this;
+ var limit = (0,p_limit__WEBPACK_IMPORTED_MODULE_2__["default"])(1);
+ this.apps.filter(function (app) {
+ return app.update;
+ }).map(function (app) {
+ return limit(function () {
+ return _this4.$store.dispatch('updateApp', {
+ appId: app.id
+ });
+ });
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppItem.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppItem.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _AppScore_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AppScore.vue */ "./apps/settings/src/components/AppList/AppScore.vue");
+/* harmony import */ var _mixins_AppManagement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/AppManagement.js */ "./apps/settings/src/mixins/AppManagement.js");
+/* harmony import */ var _SvgFilterMixin_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../SvgFilterMixin.vue */ "./apps/settings/src/components/SvgFilterMixin.vue");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcButton.js */ "./node_modules/@nextcloud/vue/dist/Components/NcButton.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_3__);
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'AppItem',
+ components: {
+ AppScore: _AppScore_vue__WEBPACK_IMPORTED_MODULE_0__["default"],
+ NcButton: (_nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_3___default())
+ },
+ mixins: [_mixins_AppManagement_js__WEBPACK_IMPORTED_MODULE_1__["default"], _SvgFilterMixin_vue__WEBPACK_IMPORTED_MODULE_2__["default"]],
+ props: {
+ app: {},
+ category: {},
+ listView: {
+ type: Boolean,
+ default: true
+ }
+ },
+ data: function data() {
+ return {
+ isSelected: false,
+ scrolled: false,
+ screenshotLoaded: false
+ };
+ },
+ computed: {
+ hasRating: function hasRating() {
+ return this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5;
+ }
+ },
+ watch: {
+ '$route.params.id': function $routeParamsId(id) {
+ this.isSelected = this.app.id === id;
+ }
+ },
+ mounted: function mounted() {
+ var _this = this;
+ this.isSelected = this.app.id === this.$route.params.id;
+ if (this.app.releases && this.app.screenshot) {
+ var image = new Image();
+ image.onload = function (e) {
+ _this.screenshotLoaded = true;
+ };
+ image.src = this.app.screenshot;
+ }
+ },
+ watchers: {},
+ methods: {
+ showAppDetails: function showAppDetails(event) {
+ var _this2 = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
+ return regeneratorRuntime.wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ if (!(event.currentTarget.tagName === 'INPUT' || event.currentTarget.tagName === 'A')) {
+ _context.next = 2;
+ break;
+ }
+ return _context.abrupt("return");
+ case 2:
+ _context.prev = 2;
+ _context.next = 5;
+ return _this2.$router.push({
+ name: 'apps-details',
+ params: {
+ category: _this2.category,
+ id: _this2.app.id
+ }
+ });
+ case 5:
+ _context.next = 9;
+ break;
+ case 7:
+ _context.prev = 7;
+ _context.t0 = _context["catch"](2);
+ case 9:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, null, [[2, 7]]);
+ }))();
+ },
+ prefix: function prefix(_prefix, content) {
+ return _prefix + '_' + content;
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppScore.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppScore.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.js");
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'AppScore',
+ props: ['score'],
+ computed: {
+ scoreImage: function scoreImage() {
+ var score = Math.round(this.score * 10);
+ var imageName = 'rating/s' + score + '.svg';
+ return (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__.imagePath)('core', imageName);
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/Markdown.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/Markdown.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var marked__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! marked */ "./node_modules/marked/lib/marked.esm.js");
+/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dompurify */ "./node_modules/dompurify/dist/purify.js");
+/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dompurify__WEBPACK_IMPORTED_MODULE_1__);
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'Markdown',
+ props: {
+ text: {
+ type: String,
+ default: ''
+ }
+ },
+ computed: {
+ renderMarkdown: function renderMarkdown() {
+ var renderer = new marked__WEBPACK_IMPORTED_MODULE_0__.marked.Renderer();
+ renderer.link = function (href, title, text) {
+ var prot;
+ try {
+ prot = decodeURIComponent(unescape(href)).replace(/[^\w:]/g, '').toLowerCase();
+ } catch (e) {
+ return '';
+ }
+ if (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {
+ return '';
+ }
+ var out = '<a href="' + href + '" rel="noreferrer noopener"';
+ if (title) {
+ out += ' title="' + title + '"';
+ }
+ out += '>' + text + '</a>';
+ return out;
+ };
+ renderer.image = function (href, title, text) {
+ if (text) {
+ return text;
+ }
+ return title;
+ };
+ renderer.blockquote = function (quote) {
+ return quote;
+ };
+ return dompurify__WEBPACK_IMPORTED_MODULE_1___default().sanitize((0,marked__WEBPACK_IMPORTED_MODULE_0__.marked)(this.text.trim(), {
+ renderer: renderer,
+ gfm: false,
+ highlight: false,
+ tables: false,
+ breaks: false,
+ pedantic: false,
+ sanitize: true,
+ smartLists: true,
+ smartypants: false
+ }), {
+ SAFE_FOR_JQUERY: true,
+ ALLOWED_TAGS: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'strong', 'p', 'a', 'ul', 'ol', 'li', 'em', 'del', 'blockquote']
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/PrefixMixin.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/PrefixMixin.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'PrefixMixin',
+ methods: {
+ prefix: function prefix(_prefix, content) {
+ return _prefix + '_' + content;
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/SvgFilterMixin.vue?vue&type=script&lang=js&":
+/*!**************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/SvgFilterMixin.vue?vue&type=script&lang=js& ***!
+ \**************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'SvgFilterMixin',
+ data: function data() {
+ return {
+ filterId: ''
+ };
+ },
+ computed: {
+ filterUrl: function filterUrl() {
+ return "url(#".concat(this.filterId, ")");
+ }
+ },
+ mounted: function mounted() {
+ this.filterId = 'invertIconApps-' + Math.random().toString(36).substring(2);
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Apps.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Apps.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/event-bus */ "./node_modules/@nextcloud/event-bus/dist/index.esm.js");
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js");
+/* harmony import */ var vue_localstorage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-localstorage */ "./node_modules/vue-localstorage/dist/vue-local-storage.js");
+/* harmony import */ var vue_localstorage__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue_localstorage__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppContent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppContent.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppContent.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppContent_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppContent_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigation_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppNavigation.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppNavigation.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigation_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppNavigation_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationCounter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppNavigationCounter.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppNavigationCounter.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationCounter_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppNavigationCounter_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationItem_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppNavigationItem.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppNavigationItem.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationItem_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppNavigationItem_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationSpacer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppNavigationSpacer.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppNavigationSpacer.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationSpacer_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppNavigationSpacer_js__WEBPACK_IMPORTED_MODULE_6__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppSidebar_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppSidebar.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppSidebar.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppSidebar_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppSidebar_js__WEBPACK_IMPORTED_MODULE_7__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppSidebarTab_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppSidebarTab.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppSidebarTab.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppSidebarTab_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppSidebarTab_js__WEBPACK_IMPORTED_MODULE_8__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcContent_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcContent.js */ "./node_modules/@nextcloud/vue/dist/Components/NcContent.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcContent_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcContent_js__WEBPACK_IMPORTED_MODULE_9__);
+/* harmony import */ var _components_AppList_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../components/AppList.vue */ "./apps/settings/src/components/AppList.vue");
+/* harmony import */ var _components_AppDetails_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../components/AppDetails.vue */ "./apps/settings/src/components/AppDetails.vue");
+/* harmony import */ var _mixins_AppManagement_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../mixins/AppManagement.js */ "./apps/settings/src/mixins/AppManagement.js");
+/* harmony import */ var _components_AppList_AppScore_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../components/AppList/AppScore.vue */ "./apps/settings/src/components/AppList/AppScore.vue");
+/* harmony import */ var _components_Markdown_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../components/Markdown.vue */ "./apps/settings/src/components/Markdown.vue");
+/* harmony import */ var _constants_AppsConstants_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./../constants/AppsConstants.js */ "./apps/settings/src/constants/AppsConstants.js");
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+vue__WEBPACK_IMPORTED_MODULE_16__["default"].use((vue_localstorage__WEBPACK_IMPORTED_MODULE_1___default()));
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'Apps',
+ APPS_SECTION_ENUM: _constants_AppsConstants_js__WEBPACK_IMPORTED_MODULE_15__.APPS_SECTION_ENUM,
+ components: {
+ NcAppContent: (_nextcloud_vue_dist_Components_NcAppContent_js__WEBPACK_IMPORTED_MODULE_2___default()),
+ AppDetails: _components_AppDetails_vue__WEBPACK_IMPORTED_MODULE_11__["default"],
+ AppList: _components_AppList_vue__WEBPACK_IMPORTED_MODULE_10__["default"],
+ NcAppNavigation: (_nextcloud_vue_dist_Components_NcAppNavigation_js__WEBPACK_IMPORTED_MODULE_3___default()),
+ NcAppNavigationCounter: (_nextcloud_vue_dist_Components_NcAppNavigationCounter_js__WEBPACK_IMPORTED_MODULE_4___default()),
+ NcAppNavigationItem: (_nextcloud_vue_dist_Components_NcAppNavigationItem_js__WEBPACK_IMPORTED_MODULE_5___default()),
+ NcAppNavigationSpacer: (_nextcloud_vue_dist_Components_NcAppNavigationSpacer_js__WEBPACK_IMPORTED_MODULE_6___default()),
+ AppScore: _components_AppList_AppScore_vue__WEBPACK_IMPORTED_MODULE_13__["default"],
+ NcAppSidebar: (_nextcloud_vue_dist_Components_NcAppSidebar_js__WEBPACK_IMPORTED_MODULE_7___default()),
+ NcAppSidebarTab: (_nextcloud_vue_dist_Components_NcAppSidebarTab_js__WEBPACK_IMPORTED_MODULE_8___default()),
+ NcContent: (_nextcloud_vue_dist_Components_NcContent_js__WEBPACK_IMPORTED_MODULE_9___default()),
+ Markdown: _components_Markdown_vue__WEBPACK_IMPORTED_MODULE_14__["default"]
+ },
+ mixins: [_mixins_AppManagement_js__WEBPACK_IMPORTED_MODULE_12__["default"]],
+ props: {
+ category: {
+ type: String,
+ default: 'installed'
+ },
+ id: {
+ type: String,
+ default: ''
+ }
+ },
+ data: function data() {
+ return {
+ searchQuery: '',
+ screenshotLoaded: false
+ };
+ },
+ computed: {
+ loading: function loading() {
+ return this.$store.getters.loading('categories');
+ },
+ loadingList: function loadingList() {
+ return this.$store.getters.loading('list');
+ },
+ app: function app() {
+ var _this = this;
+ return this.apps.find(function (app) {
+ return app.id === _this.id;
+ });
+ },
+ categories: function categories() {
+ return this.$store.getters.getCategories;
+ },
+ apps: function apps() {
+ return this.$store.getters.getAllApps;
+ },
+ updateCount: function updateCount() {
+ return this.$store.getters.getUpdateCount;
+ },
+ settings: function settings() {
+ return this.$store.getters.getServerData;
+ },
+ hasRating: function hasRating() {
+ return this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5;
+ },
+ // sidebar app binding
+ appSidebar: function appSidebar() {
+ var authorName = function authorName(xmlNode) {
+ if (xmlNode['@value']) {
+ // Complex node (with email or homepage attribute)
+ return xmlNode['@value'];
+ }
+
+ // Simple text node
+ return xmlNode;
+ };
+ var author = Array.isArray(this.app.author) ? this.app.author.map(authorName).join(', ') : authorName(this.app.author);
+ var license = t('settings', '{license}-licensed', {
+ license: ('' + this.app.licence).toUpperCase()
+ });
+ var subtitle = t('settings', 'by {author}\n{license}', {
+ author: author,
+ license: license
+ });
+ return {
+ subtitle: subtitle,
+ background: this.app.screenshot && this.screenshotLoaded ? this.app.screenshot : this.app.preview,
+ compact: !(this.app.screenshot && this.screenshotLoaded),
+ title: this.app.name
+ };
+ },
+ changelog: function changelog() {
+ return function (release) {
+ return release.translations.en.changelog;
+ };
+ }
+ },
+ watch: {
+ category: function category() {
+ this.searchQuery = '';
+ },
+ app: function app() {
+ var _this$app,
+ _this$app2,
+ _this2 = this;
+ this.screenshotLoaded = false;
+ if ((_this$app = this.app) !== null && _this$app !== void 0 && _this$app.releases && (_this$app2 = this.app) !== null && _this$app2 !== void 0 && _this$app2.screenshot) {
+ var image = new Image();
+ image.onload = function (e) {
+ _this2.screenshotLoaded = true;
+ };
+ image.src = this.app.screenshot;
+ }
+ }
+ },
+ beforeMount: function beforeMount() {
+ this.$store.dispatch('getCategories', {
+ shouldRefetchCategories: true
+ });
+ this.$store.dispatch('getAllApps');
+ this.$store.dispatch('getGroups', {
+ offset: 0,
+ limit: 5
+ });
+ this.$store.commit('setUpdateCount', this.$store.getters.getServerData.updateCount);
+ },
+ mounted: function mounted() {
+ (0,_nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__.subscribe)('nextcloud:unified-search.search', this.setSearch);
+ (0,_nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__.subscribe)('nextcloud:unified-search.reset', this.resetSearch);
+ },
+ beforeDestroy: function beforeDestroy() {
+ (0,_nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__.unsubscribe)('nextcloud:unified-search.search', this.setSearch);
+ (0,_nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__.unsubscribe)('nextcloud:unified-search.reset', this.resetSearch);
+ },
+ methods: {
+ setSearch: function setSearch(_ref) {
+ var query = _ref.query;
+ this.searchQuery = query;
+ },
+ resetSearch: function resetSearch() {
+ this.searchQuery = '';
+ },
+ hideAppDetails: function hideAppDetails() {
+ this.$router.push({
+ name: 'apps-category',
+ params: {
+ category: this.category
+ }
+ });
+ },
+ openDeveloperDocumentation: function openDeveloperDocumentation() {
+ window.open(this.settings.developerDocumentation);
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppDetails.vue?vue&type=template&id=59a92e62&scoped=true&":
+/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppDetails.vue?vue&type=template&id=59a92e62&scoped=true& ***!
+ \*********************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("div", {
+ staticClass: "app-details"
+ }, [_c("div", {
+ staticClass: "app-details__actions"
+ }, [_vm.app.active && _vm.canLimitToGroups(_vm.app) ? _c("div", {
+ staticClass: "app-details__actions-groups"
+ }, [_c("input", {
+ directives: [{
+ name: "model",
+ rawName: "v-model",
+ value: _vm.groupCheckedAppsData,
+ expression: "groupCheckedAppsData"
+ }],
+ staticClass: "groups-enable__checkbox checkbox",
+ attrs: {
+ id: _vm.prefix("groups_enable", _vm.app.id),
+ type: "checkbox"
+ },
+ domProps: {
+ value: _vm.app.id,
+ checked: Array.isArray(_vm.groupCheckedAppsData) ? _vm._i(_vm.groupCheckedAppsData, _vm.app.id) > -1 : _vm.groupCheckedAppsData
+ },
+ on: {
+ change: [function ($event) {
+ var $$a = _vm.groupCheckedAppsData,
+ $$el = $event.target,
+ $$c = $$el.checked ? true : false;
+ if (Array.isArray($$a)) {
+ var $$v = _vm.app.id,
+ $$i = _vm._i($$a, $$v);
+ if ($$el.checked) {
+ $$i < 0 && (_vm.groupCheckedAppsData = $$a.concat([$$v]));
+ } else {
+ $$i > -1 && (_vm.groupCheckedAppsData = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));
+ }
+ } else {
+ _vm.groupCheckedAppsData = $$c;
+ }
+ }, _vm.setGroupLimit]
+ }
+ }), _vm._v(" "), _c("label", {
+ attrs: {
+ for: _vm.prefix("groups_enable", _vm.app.id)
+ }
+ }, [_vm._v(_vm._s(_vm.t("settings", "Limit to groups")))]), _vm._v(" "), _c("input", {
+ staticClass: "group_select",
+ attrs: {
+ type: "hidden",
+ title: _vm.t("settings", "All"),
+ value: ""
+ }
+ }), _vm._v(" "), _vm.isLimitedToGroups(_vm.app) ? _c("NcMultiselect", {
+ staticClass: "multiselect-vue",
+ attrs: {
+ options: _vm.groups,
+ value: _vm.appGroups,
+ "options-limit": 5,
+ placeholder: _vm.t("settings", "Limit app usage to groups"),
+ label: "name",
+ "track-by": "id",
+ multiple: true,
+ "close-on-select": false,
+ "tag-width": 60
+ },
+ on: {
+ select: _vm.addGroupLimitation,
+ remove: _vm.removeGroupLimitation,
+ "search-change": _vm.asyncFindGroup
+ }
+ }, [_c("span", {
+ attrs: {
+ slot: "noResult"
+ },
+ slot: "noResult"
+ }, [_vm._v(_vm._s(_vm.t("settings", "No results")))])]) : _vm._e()], 1) : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "app-details__actions-manage"
+ }, [_vm.app.update ? _c("input", {
+ staticClass: "update primary",
+ attrs: {
+ type: "button",
+ value: _vm.t("settings", "Update to {version}", {
+ version: _vm.app.update
+ }),
+ disabled: _vm.installing || _vm.isLoading
+ },
+ on: {
+ click: function click($event) {
+ return _vm.update(_vm.app.id);
+ }
+ }
+ }) : _vm._e(), _vm._v(" "), _vm.app.canUnInstall ? _c("input", {
+ staticClass: "uninstall",
+ attrs: {
+ type: "button",
+ value: _vm.t("settings", "Remove"),
+ disabled: _vm.installing || _vm.isLoading
+ },
+ on: {
+ click: function click($event) {
+ return _vm.remove(_vm.app.id);
+ }
+ }
+ }) : _vm._e(), _vm._v(" "), _vm.app.active ? _c("input", {
+ staticClass: "enable",
+ attrs: {
+ type: "button",
+ value: _vm.t("settings", "Disable"),
+ disabled: _vm.installing || _vm.isLoading
+ },
+ on: {
+ click: function click($event) {
+ return _vm.disable(_vm.app.id);
+ }
+ }
+ }) : _vm._e(), _vm._v(" "), !_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible) ? _c("input", {
+ staticClass: "enable primary",
+ attrs: {
+ title: _vm.enableButtonTooltip,
+ "aria-label": _vm.enableButtonTooltip,
+ type: "button",
+ value: _vm.enableButtonText,
+ disabled: !_vm.app.canInstall || _vm.installing || _vm.isLoading
+ },
+ on: {
+ click: function click($event) {
+ return _vm.enable(_vm.app.id);
+ }
+ }
+ }) : !_vm.app.active && !_vm.app.canInstall ? _c("input", {
+ staticClass: "enable force",
+ attrs: {
+ title: _vm.forceEnableButtonTooltip,
+ "aria-label": _vm.forceEnableButtonTooltip,
+ type: "button",
+ value: _vm.forceEnableButtonText,
+ disabled: _vm.installing || _vm.isLoading
+ },
+ on: {
+ click: function click($event) {
+ return _vm.forceEnable(_vm.app.id);
+ }
+ }
+ }) : _vm._e()])]), _vm._v(" "), _c("ul", {
+ staticClass: "app-details__dependencies"
+ }, [_vm.app.missingMinOwnCloudVersion ? _c("li", [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "This app has no minimum Nextcloud version assigned. This will be an error in the future.")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.app.missingMaxOwnCloudVersion ? _c("li", [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "This app has no maximum Nextcloud version assigned. This will be an error in the future.")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), !_vm.app.canInstall ? _c("li", [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "This app cannot be installed because the following dependencies are not fulfilled:")) + "\n\t\t\t"), _c("ul", {
+ staticClass: "missing-dependencies"
+ }, _vm._l(_vm.app.missingDependencies, function (dep, index) {
+ return _c("li", {
+ key: index
+ }, [_vm._v("\n\t\t\t\t\t" + _vm._s(dep) + "\n\t\t\t\t")]);
+ }), 0)]) : _vm._e()]), _vm._v(" "), _c("p", {
+ staticClass: "app-details__documentation"
+ }, [!_vm.app.internal ? _c("a", {
+ staticClass: "appslink",
+ attrs: {
+ href: _vm.appstoreUrl,
+ target: "_blank",
+ rel: "noreferrer noopener"
+ }
+ }, [_vm._v(_vm._s(_vm.t("settings", "View in store")) + " ↗")]) : _vm._e(), _vm._v(" "), _vm.app.website ? _c("a", {
+ staticClass: "appslink",
+ attrs: {
+ href: _vm.app.website,
+ target: "_blank",
+ rel: "noreferrer noopener"
+ }
+ }, [_vm._v(_vm._s(_vm.t("settings", "Visit website")) + " ↗")]) : _vm._e(), _vm._v(" "), _vm.app.bugs ? _c("a", {
+ staticClass: "appslink",
+ attrs: {
+ href: _vm.app.bugs,
+ target: "_blank",
+ rel: "noreferrer noopener"
+ }
+ }, [_vm._v(_vm._s(_vm.t("settings", "Report a bug")) + " ↗")]) : _vm._e(), _vm._v(" "), _vm.app.documentation && _vm.app.documentation.user ? _c("a", {
+ staticClass: "appslink",
+ attrs: {
+ href: _vm.app.documentation.user,
+ target: "_blank",
+ rel: "noreferrer noopener"
+ }
+ }, [_vm._v(_vm._s(_vm.t("settings", "User documentation")) + " ↗")]) : _vm._e(), _vm._v(" "), _vm.app.documentation && _vm.app.documentation.admin ? _c("a", {
+ staticClass: "appslink",
+ attrs: {
+ href: _vm.app.documentation.admin,
+ target: "_blank",
+ rel: "noreferrer noopener"
+ }
+ }, [_vm._v(_vm._s(_vm.t("settings", "Admin documentation")) + " ↗")]) : _vm._e(), _vm._v(" "), _vm.app.documentation && _vm.app.documentation.developer ? _c("a", {
+ staticClass: "appslink",
+ attrs: {
+ href: _vm.app.documentation.developer,
+ target: "_blank",
+ rel: "noreferrer noopener"
+ }
+ }, [_vm._v(_vm._s(_vm.t("settings", "Developer documentation")) + " ↗")]) : _vm._e()]), _vm._v(" "), _c("Markdown", {
+ staticClass: "app-details__description",
+ attrs: {
+ text: _vm.app.description
+ }
+ })], 1);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList.vue?vue&type=template&id=6d1e92a4&":
+/*!******************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList.vue?vue&type=template&id=6d1e92a4& ***!
+ \******************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("div", {
+ attrs: {
+ id: "app-content-inner"
+ }
+ }, [_c("div", {
+ staticClass: "apps-list",
+ class: {
+ installed: _vm.useBundleView || _vm.useListView,
+ store: _vm.useAppStoreView
+ },
+ attrs: {
+ id: "apps-list"
+ }
+ }, [_vm.useListView ? [_vm.showUpdateAll ? _c("div", {
+ staticClass: "toolbar"
+ }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.n("settings", "%n app has an update available", "%n apps have an update available", _vm.counter)) + "\n\t\t\t\t"), _vm.showUpdateAll ? _c("NcButton", {
+ attrs: {
+ id: "app-list-update-all",
+ type: "primary"
+ },
+ on: {
+ click: _vm.updateAll
+ }
+ }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.n("settings", "Update", "Update all", _vm.counter)) + "\n\t\t\t\t")]) : _vm._e()], 1) : _vm._e(), _vm._v(" "), !_vm.showUpdateAll ? _c("div", {
+ staticClass: "toolbar"
+ }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("settings", "All apps are up-to-date.")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _c("transition-group", {
+ staticClass: "apps-list-container",
+ attrs: {
+ name: "app-list",
+ tag: "div"
+ }
+ }, _vm._l(_vm.apps, function (app) {
+ return _c("AppItem", {
+ key: app.id,
+ attrs: {
+ app: app,
+ category: _vm.category
+ }
+ });
+ }), 1)] : _vm._e(), _vm._v(" "), _vm.useBundleView ? _c("transition-group", {
+ staticClass: "apps-list-container",
+ attrs: {
+ name: "app-list",
+ tag: "div"
+ }
+ }, [_vm._l(_vm.bundles, function (bundle) {
+ return [_c("div", {
+ key: bundle.id,
+ staticClass: "apps-header"
+ }, [_c("div", {
+ staticClass: "app-image"
+ }), _vm._v(" "), _c("h2", [_vm._v(_vm._s(bundle.name) + " "), _c("input", {
+ attrs: {
+ type: "button",
+ value: _vm.bundleToggleText(bundle.id)
+ },
+ on: {
+ click: function click($event) {
+ return _vm.toggleBundle(bundle.id);
+ }
+ }
+ })]), _vm._v(" "), _c("div", {
+ staticClass: "app-version"
+ }), _vm._v(" "), _c("div", {
+ staticClass: "app-level"
+ }), _vm._v(" "), _c("div", {
+ staticClass: "app-groups"
+ }), _vm._v(" "), _c("div", {
+ staticClass: "actions"
+ }, [_vm._v("\n\t\t\t\t\t\t \n\t\t\t\t\t")])]), _vm._v(" "), _vm._l(_vm.bundleApps(bundle.id), function (app) {
+ return _c("AppItem", {
+ key: bundle.id + app.id,
+ attrs: {
+ app: app,
+ category: _vm.category
+ }
+ });
+ })];
+ })], 2) : _vm._e(), _vm._v(" "), _vm.useAppStoreView ? _vm._l(_vm.apps, function (app) {
+ return _c("AppItem", {
+ key: app.id,
+ attrs: {
+ app: app,
+ category: _vm.category,
+ "list-view": false
+ }
+ });
+ }) : _vm._e()], 2), _vm._v(" "), _c("div", {
+ staticClass: "apps-list installed",
+ attrs: {
+ id: "apps-list-search"
+ }
+ }, [_c("div", {
+ staticClass: "apps-list-container"
+ }, [_vm.search !== "" && _vm.searchApps.length > 0 ? [_c("div", {
+ staticClass: "section"
+ }, [_c("div"), _vm._v(" "), _c("td", {
+ attrs: {
+ colspan: "5"
+ }
+ }, [_c("h2", [_vm._v(_vm._s(_vm.t("settings", "Results from other categories")))])])]), _vm._v(" "), _vm._l(_vm.searchApps, function (app) {
+ return _c("AppItem", {
+ key: app.id,
+ attrs: {
+ app: app,
+ category: _vm.category,
+ "list-view": true
+ }
+ });
+ })] : _vm._e()], 2)]), _vm._v(" "), _vm.search !== "" && !_vm.loading && _vm.searchApps.length === 0 && _vm.apps.length === 0 ? _c("div", {
+ staticClass: "emptycontent emptycontent-search",
+ attrs: {
+ id: "apps-list-empty"
+ }
+ }, [_c("div", {
+ staticClass: "icon-settings-dark",
+ attrs: {
+ id: "app-list-empty-icon"
+ }
+ }), _vm._v(" "), _c("h2", [_vm._v(_vm._s(_vm.t("settings", "No apps found for your version")))])]) : _vm._e(), _vm._v(" "), _c("div", {
+ attrs: {
+ id: "searchresults"
+ }
+ })]);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppItem.vue?vue&type=template&id=429da85a&scoped=true&":
+/*!**************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppItem.vue?vue&type=template&id=429da85a&scoped=true& ***!
+ \**************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("div", {
+ staticClass: "section",
+ class: {
+ selected: _vm.isSelected
+ },
+ on: {
+ click: _vm.showAppDetails
+ }
+ }, [_c("div", {
+ staticClass: "app-image app-image-icon",
+ on: {
+ click: _vm.showAppDetails
+ }
+ }, [_vm.listView && !_vm.app.preview || !_vm.listView && !_vm.screenshotLoaded ? _c("div", {
+ staticClass: "icon-settings-dark"
+ }) : _vm.listView && _vm.app.preview ? _c("svg", {
+ attrs: {
+ width: "32",
+ height: "32",
+ viewBox: "0 0 32 32"
+ }
+ }, [_c("image", {
+ staticClass: "app-icon",
+ attrs: {
+ x: "0",
+ y: "0",
+ width: "32",
+ height: "32",
+ preserveAspectRatio: "xMinYMin meet",
+ "xlink:href": _vm.app.preview
+ }
+ })]) : _vm._e(), _vm._v(" "), !_vm.listView && _vm.app.screenshot && _vm.screenshotLoaded ? _c("img", {
+ attrs: {
+ src: _vm.app.screenshot,
+ width: "100%"
+ }
+ }) : _vm._e()]), _vm._v(" "), _c("div", {
+ staticClass: "app-name",
+ on: {
+ click: _vm.showAppDetails
+ }
+ }, [_vm._v("\n\t\t" + _vm._s(_vm.app.name) + "\n\t")]), _vm._v(" "), !_vm.listView ? _c("div", {
+ staticClass: "app-summary"
+ }, [_vm._v("\n\t\t" + _vm._s(_vm.app.summary) + "\n\t")]) : _vm._e(), _vm._v(" "), _vm.listView ? _c("div", {
+ staticClass: "app-version"
+ }, [_vm.app.version ? _c("span", [_vm._v(_vm._s(_vm.app.version))]) : _vm.app.appstoreData.releases[0].version ? _c("span", [_vm._v(_vm._s(_vm.app.appstoreData.releases[0].version))]) : _vm._e()]) : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "app-level"
+ }, [_vm.app.level === 300 ? _c("span", {
+ staticClass: "supported icon-checkmark-color",
+ attrs: {
+ title: _vm.t("settings", "This app is supported via your current Nextcloud subscription."),
+ "aria-label": _vm.t("settings", "This app is supported via your current Nextcloud subscription.")
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Supported")))]) : _vm._e(), _vm._v(" "), _vm.app.level === 200 ? _c("span", {
+ staticClass: "official icon-checkmark",
+ attrs: {
+ title: _vm.t("settings", "Featured apps are developed by and within the community. They offer central functionality and are ready for production use."),
+ "aria-label": _vm.t("settings", "Featured apps are developed by and within the community. They offer central functionality and are ready for production use.")
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Featured")))]) : _vm._e(), _vm._v(" "), _vm.hasRating && !_vm.listView ? _c("AppScore", {
+ attrs: {
+ score: _vm.app.score
+ }
+ }) : _vm._e()], 1), _vm._v(" "), _c("div", {
+ staticClass: "actions"
+ }, [_vm.app.error ? _c("div", {
+ staticClass: "warning"
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.app.error) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.isLoading ? _c("div", {
+ staticClass: "icon icon-loading-small"
+ }) : _vm._e(), _vm._v(" "), _vm.app.update ? _c("NcButton", {
+ attrs: {
+ type: "primary",
+ disabled: _vm.installing || _vm.isLoading
+ },
+ on: {
+ click: function click($event) {
+ $event.stopPropagation();
+ return _vm.update(_vm.app.id);
+ }
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Update to {update}", {
+ update: _vm.app.update
+ })) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.app.canUnInstall ? _c("NcButton", {
+ staticClass: "uninstall",
+ attrs: {
+ type: "tertiary",
+ disabled: _vm.installing || _vm.isLoading
+ },
+ on: {
+ click: function click($event) {
+ $event.stopPropagation();
+ return _vm.remove(_vm.app.id);
+ }
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Remove")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.app.active ? _c("NcButton", {
+ attrs: {
+ disabled: _vm.installing || _vm.isLoading
+ },
+ on: {
+ click: function click($event) {
+ $event.stopPropagation();
+ return _vm.disable(_vm.app.id);
+ }
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Disable")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), !_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible) ? _c("NcButton", {
+ attrs: {
+ title: _vm.enableButtonTooltip,
+ "aria-label": _vm.enableButtonTooltip,
+ type: "primary",
+ disabled: !_vm.app.canInstall || _vm.installing || _vm.isLoading
+ },
+ on: {
+ click: function click($event) {
+ $event.stopPropagation();
+ return _vm.enable(_vm.app.id);
+ }
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.enableButtonText) + "\n\t\t")]) : !_vm.app.active ? _c("NcButton", {
+ attrs: {
+ title: _vm.forceEnableButtonTooltip,
+ "aria-label": _vm.forceEnableButtonTooltip,
+ type: "secondary",
+ disabled: _vm.installing || _vm.isLoading
+ },
+ on: {
+ click: function click($event) {
+ $event.stopPropagation();
+ return _vm.forceEnable(_vm.app.id);
+ }
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.forceEnableButtonText) + "\n\t\t")]) : _vm._e()], 1)]);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppScore.vue?vue&type=template&id=0ecce4fc&":
+/*!***************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppScore.vue?vue&type=template&id=0ecce4fc& ***!
+ \***************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("img", {
+ staticClass: "app-score-image",
+ attrs: {
+ src: _vm.scoreImage
+ }
+ });
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/Markdown.vue?vue&type=template&id=11f4a1b0&scoped=true&":
+/*!*******************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/Markdown.vue?vue&type=template&id=11f4a1b0&scoped=true& ***!
+ \*******************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("div", {
+ staticClass: "settings-markdown",
+ domProps: {
+ innerHTML: _vm._s(_vm.renderMarkdown)
+ }
+ });
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Apps.vue?vue&type=template&id=d3714d0a&scoped=true&":
+/*!**********************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Apps.vue?vue&type=template&id=d3714d0a&scoped=true& ***!
+ \**********************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("NcContent", {
+ class: {
+ "with-app-sidebar": _vm.app
+ },
+ attrs: {
+ "app-name": "settings",
+ "content-class": {
+ "icon-loading": _vm.loadingList
+ },
+ "navigation-class": {
+ "icon-loading": _vm.loading
+ }
+ }
+ }, [_c("NcAppNavigation", {
+ scopedSlots: _vm._u([{
+ key: "list",
+ fn: function fn() {
+ return [_c("NcAppNavigationItem", {
+ attrs: {
+ id: "app-category-your-apps",
+ to: {
+ name: "apps"
+ },
+ exact: true,
+ icon: "icon-category-installed",
+ title: _vm.t("settings", "Your apps")
+ }
+ }), _vm._v(" "), _c("NcAppNavigationItem", {
+ attrs: {
+ id: "app-category-enabled",
+ to: {
+ name: "apps-category",
+ params: {
+ category: "enabled"
+ }
+ },
+ icon: "icon-category-enabled",
+ title: _vm.$options.APPS_SECTION_ENUM.enabled
+ }
+ }), _vm._v(" "), _c("NcAppNavigationItem", {
+ attrs: {
+ id: "app-category-disabled",
+ to: {
+ name: "apps-category",
+ params: {
+ category: "disabled"
+ }
+ },
+ icon: "icon-category-disabled",
+ title: _vm.$options.APPS_SECTION_ENUM.disabled
+ }
+ }), _vm._v(" "), _vm.updateCount > 0 ? _c("NcAppNavigationItem", {
+ attrs: {
+ id: "app-category-updates",
+ to: {
+ name: "apps-category",
+ params: {
+ category: "updates"
+ }
+ },
+ icon: "icon-download",
+ title: _vm.$options.APPS_SECTION_ENUM.updates
+ }
+ }, [_c("NcAppNavigationCounter", {
+ attrs: {
+ slot: "counter"
+ },
+ slot: "counter"
+ }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.updateCount) + "\n\t\t\t\t")])], 1) : _vm._e(), _vm._v(" "), _c("NcAppNavigationItem", {
+ attrs: {
+ id: "app-category-your-bundles",
+ to: {
+ name: "apps-category",
+ params: {
+ category: "app-bundles"
+ }
+ },
+ icon: "icon-category-app-bundles",
+ title: _vm.$options.APPS_SECTION_ENUM["app-bundles"]
+ }
+ }), _vm._v(" "), _c("NcAppNavigationSpacer"), _vm._v(" "), _vm.settings.appstoreEnabled ? [_c("NcAppNavigationItem", {
+ attrs: {
+ id: "app-category-featured",
+ to: {
+ name: "apps-category",
+ params: {
+ category: "featured"
+ }
+ },
+ icon: "icon-favorite",
+ title: _vm.$options.APPS_SECTION_ENUM.featured
+ }
+ }), _vm._v(" "), _vm._l(_vm.categories, function (cat) {
+ return _c("NcAppNavigationItem", {
+ key: "icon-category-" + cat.ident,
+ attrs: {
+ icon: "icon-category-" + cat.ident,
+ to: {
+ name: "apps-category",
+ params: {
+ category: cat.ident
+ }
+ },
+ title: cat.displayName
+ }
+ });
+ })] : _vm._e(), _vm._v(" "), _c("NcAppNavigationItem", {
+ attrs: {
+ id: "app-developer-docs",
+ title: _vm.t("settings", "Developer documentation") + " ↗"
+ },
+ on: {
+ click: _vm.openDeveloperDocumentation
+ }
+ })];
+ },
+ proxy: true
+ }])
+ }), _vm._v(" "), _c("NcAppContent", {
+ staticClass: "app-settings-content",
+ class: {
+ "icon-loading": _vm.loadingList
+ }
+ }, [_c("AppList", {
+ attrs: {
+ category: _vm.category,
+ app: _vm.app,
+ search: _vm.searchQuery
+ }
+ })], 1), _vm._v(" "), _vm.id && _vm.app ? _c("NcAppSidebar", _vm._b({
+ class: {
+ "app-sidebar--without-background": !_vm.appSidebar.background
+ },
+ on: {
+ close: _vm.hideAppDetails
+ },
+ scopedSlots: _vm._u([!_vm.appSidebar.background ? {
+ key: "header",
+ fn: function fn() {
+ return [_c("div", {
+ staticClass: "app-sidebar-header__figure--default-app-icon icon-settings-dark"
+ })];
+ },
+ proxy: true
+ } : null, {
+ key: "description",
+ fn: function fn() {
+ return [_vm.app.level === 300 || _vm.app.level === 200 || _vm.hasRating ? _c("div", {
+ staticClass: "app-level"
+ }, [_vm.app.level === 300 ? _c("span", {
+ staticClass: "supported icon-checkmark-color",
+ attrs: {
+ title: _vm.t("settings", "This app is supported via your current Nextcloud subscription.")
+ }
+ }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.t("settings", "Supported")))]) : _vm._e(), _vm._v(" "), _vm.app.level === 200 ? _c("span", {
+ staticClass: "official icon-checkmark",
+ attrs: {
+ title: _vm.t("settings", "Featured apps are developed by and within the community. They offer central functionality and are ready for production use.")
+ }
+ }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.t("settings", "Featured")))]) : _vm._e(), _vm._v(" "), _vm.hasRating ? _c("AppScore", {
+ attrs: {
+ score: _vm.app.appstoreData.ratingOverall
+ }
+ }) : _vm._e()], 1) : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "app-version"
+ }, [_c("p", [_vm._v(_vm._s(_vm.app.version))])])];
+ },
+ proxy: true
+ }], null, true)
+ }, "NcAppSidebar", _vm.appSidebar, false), [_vm._v(" "), _vm._v(" "), _c("NcAppSidebarTab", {
+ attrs: {
+ id: "desc",
+ icon: "icon-category-office",
+ name: _vm.t("settings", "Details"),
+ order: 0
+ }
+ }, [_c("AppDetails", {
+ attrs: {
+ app: _vm.app
+ }
+ })], 1), _vm._v(" "), _vm.app.appstoreData && _vm.app.releases[0].translations.en.changelog ? _c("NcAppSidebarTab", {
+ attrs: {
+ id: "desca",
+ icon: "icon-category-organization",
+ name: _vm.t("settings", "Changelog"),
+ order: 1
+ }
+ }, _vm._l(_vm.app.releases, function (release) {
+ return _c("div", {
+ key: release.version,
+ staticClass: "app-sidebar-tabs__release"
+ }, [_c("h2", [_vm._v(_vm._s(release.version))]), _vm._v(" "), _vm.changelog(release) ? _c("Markdown", {
+ attrs: {
+ text: _vm.changelog(release)
+ }
+ }) : _vm._e()], 1);
+ }), 0) : _vm._e()], 1) : _vm._e()], 1);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss&":
+/*!****************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss& ***!
+ \****************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, ".app-details[data-v-59a92e62] {\n padding: 20px;\n}\n.app-details__actions-manage[data-v-59a92e62] {\n display: flex;\n}\n.app-details__actions-manage input[data-v-59a92e62] {\n flex: 0 1 auto;\n min-width: 0;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n.app-details__dependencies[data-v-59a92e62] {\n opacity: 0.7;\n}\n.app-details__documentation[data-v-59a92e62] {\n padding-top: 20px;\n}\n.app-details__description[data-v-59a92e62] {\n padding-top: 20px;\n}\n.force[data-v-59a92e62] {\n color: var(--color-error);\n border-color: var(--color-error);\n background: var(--color-main-background);\n}\n.force[data-v-59a92e62]:hover,\n.force[data-v-59a92e62]:active {\n color: var(--color-main-background);\n border-color: var(--color-error) !important;\n background: var(--color-error);\n}", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss&":
+/*!**************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss& ***!
+ \**************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, ".settings-markdown[data-v-11f4a1b0] h1,\n.settings-markdown[data-v-11f4a1b0] h2,\n.settings-markdown[data-v-11f4a1b0] h3,\n.settings-markdown[data-v-11f4a1b0] h4,\n.settings-markdown[data-v-11f4a1b0] h5,\n.settings-markdown[data-v-11f4a1b0] h6 {\n font-weight: 600;\n line-height: 120%;\n margin-top: 24px;\n margin-bottom: 12px;\n color: var(--color-main-text);\n}\n.settings-markdown[data-v-11f4a1b0] h1 {\n font-size: 36px;\n margin-top: 48px;\n}\n.settings-markdown[data-v-11f4a1b0] h2 {\n font-size: 28px;\n margin-top: 48px;\n}\n.settings-markdown[data-v-11f4a1b0] h3 {\n font-size: 24px;\n}\n.settings-markdown[data-v-11f4a1b0] h4 {\n font-size: 21px;\n}\n.settings-markdown[data-v-11f4a1b0] h5 {\n font-size: 17px;\n}\n.settings-markdown[data-v-11f4a1b0] h6 {\n font-size: var(--default-font-size);\n}\n.settings-markdown[data-v-11f4a1b0] pre {\n white-space: pre;\n overflow-x: auto;\n background-color: var(--color-background-dark);\n border-radius: var(--border-radius);\n padding: 1em 1.3em;\n margin-bottom: 1em;\n}\n.settings-markdown[data-v-11f4a1b0] p code {\n background-color: var(--color-background-dark);\n border-radius: var(--border-radius);\n padding: 0.1em 0.3em;\n}\n.settings-markdown[data-v-11f4a1b0] li {\n position: relative;\n}\n.settings-markdown[data-v-11f4a1b0] ul, .settings-markdown[data-v-11f4a1b0] ol {\n padding-left: 10px;\n margin-left: 10px;\n}\n.settings-markdown[data-v-11f4a1b0] ul li {\n list-style-type: disc;\n}\n.settings-markdown[data-v-11f4a1b0] ul > li > ul > li {\n list-style-type: circle;\n}\n.settings-markdown[data-v-11f4a1b0] ul > li > ul > li ul li {\n list-style-type: square;\n}\n.settings-markdown[data-v-11f4a1b0] blockquote {\n padding-left: 1em;\n border-left: 4px solid var(--color-primary-element);\n color: var(--color-text-maxcontrast);\n margin-left: 0;\n margin-right: 0;\n}", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true&":
+/*!*****************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true& ***!
+ \*****************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, ".app-sidebar[data-v-d3714d0a]:not(.app-sidebar--without-background) :not(.app-sidebar-header--compact) .app-sidebar-header__figure {\n background-size: cover;\n}\n.app-sidebar[data-v-d3714d0a]:not(.app-sidebar--without-background) .app-sidebar-header--compact .app-sidebar-header__figure {\n background-size: 32px;\n filter: var(--background-invert-if-bright);\n}\n.app-sidebar[data-v-d3714d0a] .app-sidebar-header__description .app-version {\n padding-left: 10px;\n}\n.app-sidebar[data-v-d3714d0a].app-sidebar--without-background .app-sidebar-header__figure {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.app-sidebar[data-v-d3714d0a].app-sidebar--without-background .app-sidebar-header__figure--default-app-icon {\n width: 32px;\n height: 32px;\n background-size: 32px;\n}\n.app-sidebar[data-v-d3714d0a] .app-sidebar-header__desc .app-sidebar-header__subtitle {\n overflow: visible !important;\n height: auto;\n white-space: normal !important;\n line-height: 16px;\n}\n.app-sidebar[data-v-d3714d0a] .app-sidebar-header__action {\n margin: 0 20px;\n}\n.app-sidebar[data-v-d3714d0a] .app-sidebar-header__action input {\n margin: 3px;\n}\n.app-navigation[data-v-d3714d0a] button.app-navigation-toggle {\n top: 8px;\n right: -8px;\n}\n.app-sidebar-tabs__release h2[data-v-d3714d0a] {\n border-bottom: 1px solid var(--color-border);\n}\n.app-sidebar-tabs__release[data-v-d3714d0a] h3 {\n font-size: 20px;\n}\n.app-sidebar-tabs__release[data-v-d3714d0a] h4 {\n font-size: 17px;\n}", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css&":
+/*!*****************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css& ***!
+ \*****************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, "\n.app-icon[data-v-429da85a] {\n\tfilter: var(--background-invert-if-bright);\n}\n.actions[data-v-429da85a] {\n\tdisplay: flex !important;\n\tgap: 8px;\n\tflex-wrap: wrap;\n\tjustify-content: end;\n}\n", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss&":
+/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss& ***!
+ \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppDetails_vue_vue_type_style_index_0_id_59a92e62_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppDetails_vue_vue_type_style_index_0_id_59a92e62_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppDetails_vue_vue_type_style_index_0_id_59a92e62_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppDetails_vue_vue_type_style_index_0_id_59a92e62_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppDetails_vue_vue_type_style_index_0_id_59a92e62_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss&":
+/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss& ***!
+ \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_style_index_0_id_11f4a1b0_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_style_index_0_id_11f4a1b0_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_style_index_0_id_11f4a1b0_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_style_index_0_id_11f4a1b0_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_style_index_0_id_11f4a1b0_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true&":
+/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true& ***!
+ \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Apps_vue_vue_type_style_index_0_id_d3714d0a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Apps_vue_vue_type_style_index_0_id_d3714d0a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Apps_vue_vue_type_style_index_0_id_d3714d0a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Apps_vue_vue_type_style_index_0_id_d3714d0a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Apps_vue_vue_type_style_index_0_id_d3714d0a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css&":
+/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css& ***!
+ \*********************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppItem_vue_vue_type_style_index_0_id_429da85a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppItem_vue_vue_type_style_index_0_id_429da85a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppItem_vue_vue_type_style_index_0_id_429da85a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppItem_vue_vue_type_style_index_0_id_429da85a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppItem_vue_vue_type_style_index_0_id_429da85a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppDetails.vue":
+/*!*****************************************************!*\
+ !*** ./apps/settings/src/components/AppDetails.vue ***!
+ \*****************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _AppDetails_vue_vue_type_template_id_59a92e62_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AppDetails.vue?vue&type=template&id=59a92e62&scoped=true& */ "./apps/settings/src/components/AppDetails.vue?vue&type=template&id=59a92e62&scoped=true&");
+/* harmony import */ var _AppDetails_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AppDetails.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/AppDetails.vue?vue&type=script&lang=js&");
+/* harmony import */ var _AppDetails_vue_vue_type_style_index_0_id_59a92e62_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss& */ "./apps/settings/src/components/AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _AppDetails_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _AppDetails_vue_vue_type_template_id_59a92e62_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
+ _AppDetails_vue_vue_type_template_id_59a92e62_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ "59a92e62",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/AppDetails.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppList.vue":
+/*!**************************************************!*\
+ !*** ./apps/settings/src/components/AppList.vue ***!
+ \**************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _AppList_vue_vue_type_template_id_6d1e92a4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AppList.vue?vue&type=template&id=6d1e92a4& */ "./apps/settings/src/components/AppList.vue?vue&type=template&id=6d1e92a4&");
+/* harmony import */ var _AppList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AppList.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/AppList.vue?vue&type=script&lang=js&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+;
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _AppList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _AppList_vue_vue_type_template_id_6d1e92a4___WEBPACK_IMPORTED_MODULE_0__.render,
+ _AppList_vue_vue_type_template_id_6d1e92a4___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/AppList.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppList/AppItem.vue":
+/*!**********************************************************!*\
+ !*** ./apps/settings/src/components/AppList/AppItem.vue ***!
+ \**********************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _AppItem_vue_vue_type_template_id_429da85a_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AppItem.vue?vue&type=template&id=429da85a&scoped=true& */ "./apps/settings/src/components/AppList/AppItem.vue?vue&type=template&id=429da85a&scoped=true&");
+/* harmony import */ var _AppItem_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AppItem.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/AppList/AppItem.vue?vue&type=script&lang=js&");
+/* harmony import */ var _AppItem_vue_vue_type_style_index_0_id_429da85a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css& */ "./apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _AppItem_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _AppItem_vue_vue_type_template_id_429da85a_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
+ _AppItem_vue_vue_type_template_id_429da85a_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ "429da85a",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/AppList/AppItem.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppList/AppScore.vue":
+/*!***********************************************************!*\
+ !*** ./apps/settings/src/components/AppList/AppScore.vue ***!
+ \***********************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _AppScore_vue_vue_type_template_id_0ecce4fc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AppScore.vue?vue&type=template&id=0ecce4fc& */ "./apps/settings/src/components/AppList/AppScore.vue?vue&type=template&id=0ecce4fc&");
+/* harmony import */ var _AppScore_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./AppScore.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/AppList/AppScore.vue?vue&type=script&lang=js&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+;
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _AppScore_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _AppScore_vue_vue_type_template_id_0ecce4fc___WEBPACK_IMPORTED_MODULE_0__.render,
+ _AppScore_vue_vue_type_template_id_0ecce4fc___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/AppList/AppScore.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/Markdown.vue":
+/*!***************************************************!*\
+ !*** ./apps/settings/src/components/Markdown.vue ***!
+ \***************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Markdown_vue_vue_type_template_id_11f4a1b0_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Markdown.vue?vue&type=template&id=11f4a1b0&scoped=true& */ "./apps/settings/src/components/Markdown.vue?vue&type=template&id=11f4a1b0&scoped=true&");
+/* harmony import */ var _Markdown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Markdown.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/Markdown.vue?vue&type=script&lang=js&");
+/* harmony import */ var _Markdown_vue_vue_type_style_index_0_id_11f4a1b0_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss& */ "./apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _Markdown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Markdown_vue_vue_type_template_id_11f4a1b0_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
+ _Markdown_vue_vue_type_template_id_11f4a1b0_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ "11f4a1b0",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/Markdown.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/PrefixMixin.vue":
+/*!******************************************************!*\
+ !*** ./apps/settings/src/components/PrefixMixin.vue ***!
+ \******************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _PrefixMixin_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PrefixMixin.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/PrefixMixin.vue?vue&type=script&lang=js&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+var render, staticRenderFns
+;
+
+
+
+/* normalize component */
+;
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_1__["default"])(
+ _PrefixMixin_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"],
+ render,
+ staticRenderFns,
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/PrefixMixin.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/SvgFilterMixin.vue":
+/*!*********************************************************!*\
+ !*** ./apps/settings/src/components/SvgFilterMixin.vue ***!
+ \*********************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _SvgFilterMixin_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SvgFilterMixin.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/SvgFilterMixin.vue?vue&type=script&lang=js&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+var render, staticRenderFns
+;
+
+
+
+/* normalize component */
+;
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_1__["default"])(
+ _SvgFilterMixin_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"],
+ render,
+ staticRenderFns,
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/SvgFilterMixin.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/views/Apps.vue":
+/*!******************************************!*\
+ !*** ./apps/settings/src/views/Apps.vue ***!
+ \******************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Apps_vue_vue_type_template_id_d3714d0a_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Apps.vue?vue&type=template&id=d3714d0a&scoped=true& */ "./apps/settings/src/views/Apps.vue?vue&type=template&id=d3714d0a&scoped=true&");
+/* harmony import */ var _Apps_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Apps.vue?vue&type=script&lang=js& */ "./apps/settings/src/views/Apps.vue?vue&type=script&lang=js&");
+/* harmony import */ var _Apps_vue_vue_type_style_index_0_id_d3714d0a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true& */ "./apps/settings/src/views/Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _Apps_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Apps_vue_vue_type_template_id_d3714d0a_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
+ _Apps_vue_vue_type_template_id_d3714d0a_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ "d3714d0a",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/views/Apps.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppDetails.vue?vue&type=script&lang=js&":
+/*!******************************************************************************!*\
+ !*** ./apps/settings/src/components/AppDetails.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppDetails_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppDetails.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppDetails_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppList.vue?vue&type=script&lang=js&":
+/*!***************************************************************************!*\
+ !*** ./apps/settings/src/components/AppList.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppList/AppItem.vue?vue&type=script&lang=js&":
+/*!***********************************************************************************!*\
+ !*** ./apps/settings/src/components/AppList/AppItem.vue?vue&type=script&lang=js& ***!
+ \***********************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppItem_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppItem.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppItem_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppList/AppScore.vue?vue&type=script&lang=js&":
+/*!************************************************************************************!*\
+ !*** ./apps/settings/src/components/AppList/AppScore.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppScore_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppScore.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppScore_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/Markdown.vue?vue&type=script&lang=js&":
+/*!****************************************************************************!*\
+ !*** ./apps/settings/src/components/Markdown.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/Markdown.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/PrefixMixin.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************!*\
+ !*** ./apps/settings/src/components/PrefixMixin.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PrefixMixin_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PrefixMixin.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/PrefixMixin.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PrefixMixin_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/SvgFilterMixin.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************!*\
+ !*** ./apps/settings/src/components/SvgFilterMixin.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_SvgFilterMixin_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/SvgFilterMixin.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_SvgFilterMixin_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/views/Apps.vue?vue&type=script&lang=js&":
+/*!*******************************************************************!*\
+ !*** ./apps/settings/src/views/Apps.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Apps_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Apps.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Apps_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppDetails.vue?vue&type=template&id=59a92e62&scoped=true&":
+/*!************************************************************************************************!*\
+ !*** ./apps/settings/src/components/AppDetails.vue?vue&type=template&id=59a92e62&scoped=true& ***!
+ \************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_AppDetails_vue_vue_type_template_id_59a92e62_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_AppDetails_vue_vue_type_template_id_59a92e62_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_AppDetails_vue_vue_type_template_id_59a92e62_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=template&id=59a92e62&scoped=true& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppDetails.vue?vue&type=template&id=59a92e62&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppList.vue?vue&type=template&id=6d1e92a4&":
+/*!*********************************************************************************!*\
+ !*** ./apps/settings/src/components/AppList.vue?vue&type=template&id=6d1e92a4& ***!
+ \*********************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_AppList_vue_vue_type_template_id_6d1e92a4___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_AppList_vue_vue_type_template_id_6d1e92a4___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_AppList_vue_vue_type_template_id_6d1e92a4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=template&id=6d1e92a4& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList.vue?vue&type=template&id=6d1e92a4&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppList/AppItem.vue?vue&type=template&id=429da85a&scoped=true&":
+/*!*****************************************************************************************************!*\
+ !*** ./apps/settings/src/components/AppList/AppItem.vue?vue&type=template&id=429da85a&scoped=true& ***!
+ \*****************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_AppItem_vue_vue_type_template_id_429da85a_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_AppItem_vue_vue_type_template_id_429da85a_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_AppItem_vue_vue_type_template_id_429da85a_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=template&id=429da85a&scoped=true& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppItem.vue?vue&type=template&id=429da85a&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppList/AppScore.vue?vue&type=template&id=0ecce4fc&":
+/*!******************************************************************************************!*\
+ !*** ./apps/settings/src/components/AppList/AppScore.vue?vue&type=template&id=0ecce4fc& ***!
+ \******************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_AppScore_vue_vue_type_template_id_0ecce4fc___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_AppScore_vue_vue_type_template_id_0ecce4fc___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_AppScore_vue_vue_type_template_id_0ecce4fc___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=template&id=0ecce4fc& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppScore.vue?vue&type=template&id=0ecce4fc&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/Markdown.vue?vue&type=template&id=11f4a1b0&scoped=true&":
+/*!**********************************************************************************************!*\
+ !*** ./apps/settings/src/components/Markdown.vue?vue&type=template&id=11f4a1b0&scoped=true& ***!
+ \**********************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_template_id_11f4a1b0_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_template_id_11f4a1b0_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_template_id_11f4a1b0_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=template&id=11f4a1b0&scoped=true& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/Markdown.vue?vue&type=template&id=11f4a1b0&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/views/Apps.vue?vue&type=template&id=d3714d0a&scoped=true&":
+/*!*************************************************************************************!*\
+ !*** ./apps/settings/src/views/Apps.vue?vue&type=template&id=d3714d0a&scoped=true& ***!
+ \*************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Apps_vue_vue_type_template_id_d3714d0a_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Apps_vue_vue_type_template_id_d3714d0a_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Apps_vue_vue_type_template_id_d3714d0a_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=template&id=d3714d0a&scoped=true& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Apps.vue?vue&type=template&id=d3714d0a&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss&":
+/*!***************************************************************************************************************!*\
+ !*** ./apps/settings/src/components/AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss& ***!
+ \***************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppDetails_vue_vue_type_style_index_0_id_59a92e62_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss&":
+/*!*************************************************************************************************************!*\
+ !*** ./apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss& ***!
+ \*************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Markdown_vue_vue_type_style_index_0_id_11f4a1b0_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/views/Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true&":
+/*!****************************************************************************************************!*\
+ !*** ./apps/settings/src/views/Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true& ***!
+ \****************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Apps_vue_vue_type_style_index_0_id_d3714d0a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css&":
+/*!*******************************************************************************************************************!*\
+ !*** ./apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css& ***!
+ \*******************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_AppItem_vue_vue_type_style_index_0_id_429da85a_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/style-loader/dist/cjs.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css&");
+
+
+/***/ })
+
+}]);
+//# sourceMappingURL=settings-apps-view-settings-apps-view.js.map?v=df28c723d0ebc727c07f \ No newline at end of file
diff --git a/dist/settings-apps-view-settings-apps-view.js.map b/dist/settings-apps-view-settings-apps-view.js.map
new file mode 100644
index 00000000000..a27bb7c002e
--- /dev/null
+++ b/dist/settings-apps-view-settings-apps-view.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"settings-apps-view-settings-apps-view.js?v=df28c723d0ebc727c07f","mappings":";;;;;;;;;;;;AAAA;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;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;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;;;;;;;;;;;;;;ACnLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACdA;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;;;;;;;;;;;;;;;;;AClEA;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;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;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;;;;;;;;;;;;;;;;AC3KA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACXA;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;;;;;;;;;;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACzKA;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;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;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;;;;;;;;;;;;;;;;AC7MA;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;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;;;;;;;;;;;;;;;;ACjIA;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;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;;;;;;;;;;;;;;;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACXA;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;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;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;;;;;;;;;;;;;;;;AC1MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;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;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;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;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;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;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;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;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAaA;AACA;;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAaA;AACA;;;;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;ACvCA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA","sources":["webpack:///nextcloud/apps/settings/src/mixins/AppManagement.js","webpack:///nextcloud/apps/settings/src/service/rebuild-navigation.js","webpack:///nextcloud/apps/settings/src/components/AppDetails.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/PrefixMixin.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/views/Apps.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AppDetails.vue?vue&type=template&id=59a92e62&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=template&id=6d1e92a4&","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=template&id=429da85a&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=template&id=0ecce4fc&","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=template&id=11f4a1b0&scoped=true&","webpack:///nextcloud/apps/settings/src/views/Apps.vue?vue&type=template&id=d3714d0a&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/views/Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css&","webpack://nextcloud/./apps/settings/src/components/AppDetails.vue?5e97","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?6cce","webpack://nextcloud/./apps/settings/src/views/Apps.vue?642f","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?9bb8","webpack:///nextcloud/apps/settings/src/components/AppDetails.vue","webpack:///nextcloud/apps/settings/src/components/AppList.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue","webpack:///nextcloud/apps/settings/src/components/Markdown.vue","webpack:///nextcloud/apps/settings/src/components/PrefixMixin.vue","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue","webpack:///nextcloud/apps/settings/src/views/Apps.vue","webpack://nextcloud/./apps/settings/src/components/AppDetails.vue?9a02","webpack://nextcloud/./apps/settings/src/components/AppList.vue?a32f","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?32ec","webpack://nextcloud/./apps/settings/src/components/AppList/AppScore.vue?18e4","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?5ce2","webpack://nextcloud/./apps/settings/src/components/PrefixMixin.vue?c3f5","webpack://nextcloud/./apps/settings/src/components/SvgFilterMixin.vue?3cde","webpack://nextcloud/./apps/settings/src/views/Apps.vue?b34b","webpack://nextcloud/./apps/settings/src/components/AppDetails.vue?7bd3","webpack://nextcloud/./apps/settings/src/components/AppList.vue?7258","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?af35","webpack://nextcloud/./apps/settings/src/components/AppList/AppScore.vue?ef32","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?1553","webpack://nextcloud/./apps/settings/src/views/Apps.vue?fcc1","webpack://nextcloud/./apps/settings/src/components/AppDetails.vue?41ac","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?a1ce","webpack://nextcloud/./apps/settings/src/views/Apps.vue?cbfa","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?61f8"],"sourcesContent":["/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError } from '@nextcloud/dialogs';\nimport rebuildNavigation from '../service/rebuild-navigation.js';\nexport default {\n computed: {\n appGroups: function appGroups() {\n return this.app.groups.map(function (group) {\n return {\n id: group,\n name: group\n };\n });\n },\n installing: function installing() {\n return this.$store.getters.loading('install');\n },\n isLoading: function isLoading() {\n return this.app && this.$store.getters.loading(this.app.id);\n },\n enableButtonText: function enableButtonText() {\n if (this.app.needsDownload) {\n return t('settings', 'Download and enable');\n }\n return t('settings', 'Enable');\n },\n forceEnableButtonText: function forceEnableButtonText() {\n if (this.app.needsDownload) {\n return t('settings', 'Enable untested app');\n }\n return t('settings', 'Enable untested app');\n },\n enableButtonTooltip: function enableButtonTooltip() {\n if (this.app.needsDownload) {\n return t('settings', 'The app will be downloaded from the App Store');\n }\n return false;\n },\n forceEnableButtonTooltip: function forceEnableButtonTooltip() {\n var base = t('settings', 'This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.');\n if (this.app.needsDownload) {\n return base + ' ' + t('settings', 'The app will be downloaded from the App Store');\n }\n return base;\n }\n },\n data: function data() {\n return {\n groupCheckedAppsData: false\n };\n },\n mounted: function mounted() {\n if (this.app && this.app.groups && this.app.groups.length > 0) {\n this.groupCheckedAppsData = true;\n }\n },\n methods: {\n asyncFindGroup: function asyncFindGroup(query) {\n return this.$store.dispatch('getGroups', {\n search: query,\n limit: 5,\n offset: 0\n });\n },\n isLimitedToGroups: function isLimitedToGroups(app) {\n if (this.app.groups.length || this.groupCheckedAppsData) {\n return true;\n }\n return false;\n },\n setGroupLimit: function setGroupLimit() {\n if (!this.groupCheckedAppsData) {\n this.$store.dispatch('enableApp', {\n appId: this.app.id,\n groups: []\n });\n }\n },\n canLimitToGroups: function canLimitToGroups(app) {\n if (app.types && app.types.includes('filesystem') || app.types.includes('prelogin') || app.types.includes('authentication') || app.types.includes('logging') || app.types.includes('prevent_group_restriction')) {\n return false;\n }\n return true;\n },\n addGroupLimitation: function addGroupLimitation(group) {\n var groups = this.app.groups.concat([]).concat([group.id]);\n this.$store.dispatch('enableApp', {\n appId: this.app.id,\n groups: groups\n });\n },\n removeGroupLimitation: function removeGroupLimitation(group) {\n var currentGroups = this.app.groups.concat([]);\n var index = currentGroups.indexOf(group.id);\n if (index > -1) {\n currentGroups.splice(index, 1);\n }\n this.$store.dispatch('enableApp', {\n appId: this.app.id,\n groups: currentGroups\n });\n },\n forceEnable: function forceEnable(appId) {\n this.$store.dispatch('forceEnableApp', {\n appId: appId,\n groups: []\n }).then(function (response) {\n rebuildNavigation();\n }).catch(function (error) {\n showError(error);\n });\n },\n enable: function enable(appId) {\n this.$store.dispatch('enableApp', {\n appId: appId,\n groups: []\n }).then(function (response) {\n rebuildNavigation();\n }).catch(function (error) {\n showError(error);\n });\n },\n disable: function disable(appId) {\n this.$store.dispatch('disableApp', {\n appId: appId\n }).then(function (response) {\n rebuildNavigation();\n }).catch(function (error) {\n showError(error);\n });\n },\n remove: function remove(appId) {\n this.$store.dispatch('uninstallApp', {\n appId: appId\n }).then(function (response) {\n rebuildNavigation();\n }).catch(function (error) {\n showError(error);\n });\n },\n install: function install(appId) {\n this.$store.dispatch('enableApp', {\n appId: appId\n }).then(function (response) {\n rebuildNavigation();\n }).catch(function (error) {\n showError(error);\n });\n },\n update: function update(appId) {\n this.$store.dispatch('updateApp', {\n appId: appId\n }).then(function (response) {\n rebuildNavigation();\n }).catch(function (error) {\n showError(error);\n });\n }\n }\n};","import axios from '@nextcloud/axios';\nimport { generateOcsUrl } from '@nextcloud/router';\nimport { emit } from '@nextcloud/event-bus';\nexport default (function () {\n return axios.get(generateOcsUrl('core/navigation', 2) + '/apps?format=json').then(function (_ref) {\n var data = _ref.data;\n if (data.ocs.meta.statuscode !== 200) {\n return;\n }\n emit('nextcloud:app-menu.refresh', {\n apps: data.ocs.data\n });\n window.dispatchEvent(new Event('resize'));\n });\n});","import NcMultiselect from '@nextcloud/vue/dist/Components/NcMultiselect.js';\nimport AppManagement from '../mixins/AppManagement.js';\nimport PrefixMixin from './PrefixMixin.vue';\nimport Markdown from './Markdown.vue';\nexport default {\n name: 'AppDetails',\n components: {\n NcMultiselect: NcMultiselect,\n Markdown: Markdown\n },\n mixins: [AppManagement, PrefixMixin],\n props: {\n app: {\n type: Object,\n required: true\n }\n },\n data: function data() {\n return {\n groupCheckedAppsData: false\n };\n },\n computed: {\n appstoreUrl: function appstoreUrl() {\n return \"https://apps.nextcloud.com/apps/\".concat(this.app.id);\n },\n licence: function licence() {\n if (this.app.licence) {\n return t('settings', '{license}-licensed', {\n license: ('' + this.app.licence).toUpperCase()\n });\n }\n return null;\n },\n author: function author() {\n if (typeof this.app.author === 'string') {\n return [{\n '@value': this.app.author\n }];\n }\n if (this.app.author['@value']) {\n return [this.app.author];\n }\n return this.app.author;\n },\n appGroups: function appGroups() {\n return this.app.groups.map(function (group) {\n return {\n id: group,\n name: group\n };\n });\n },\n groups: function groups() {\n return this.$store.getters.getGroups.filter(function (group) {\n return group.id !== 'disabled';\n }).sort(function (a, b) {\n return a.name.localeCompare(b.name);\n });\n }\n },\n mounted: function mounted() {\n if (this.app.groups.length > 0) {\n this.groupCheckedAppsData = true;\n }\n }\n};","import AppItem from './AppList/AppItem.vue';\nimport PrefixMixin from './PrefixMixin.vue';\nimport pLimit from 'p-limit';\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js';\nexport default {\n name: 'AppList',\n components: {\n AppItem: AppItem,\n NcButton: NcButton\n },\n mixins: [PrefixMixin],\n props: ['category', 'app', 'search'],\n computed: {\n counter: function counter() {\n return this.apps.filter(function (app) {\n return app.update;\n }).length;\n },\n loading: function loading() {\n return this.$store.getters.loading('list');\n },\n hasPendingUpdate: function hasPendingUpdate() {\n return this.apps.filter(function (app) {\n return app.update;\n }).length > 0;\n },\n showUpdateAll: function showUpdateAll() {\n return this.hasPendingUpdate && this.useListView;\n },\n apps: function apps() {\n var _this = this;\n var apps = this.$store.getters.getAllApps.filter(function (app) {\n return app.name.toLowerCase().search(_this.search.toLowerCase()) !== -1;\n }).sort(function (a, b) {\n var sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + a.name;\n var sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + b.name;\n return OC.Util.naturalSortCompare(sortStringA, sortStringB);\n });\n if (this.category === 'installed') {\n return apps.filter(function (app) {\n return app.installed;\n });\n }\n if (this.category === 'enabled') {\n return apps.filter(function (app) {\n return app.active && app.installed;\n });\n }\n if (this.category === 'disabled') {\n return apps.filter(function (app) {\n return !app.active && app.installed;\n });\n }\n if (this.category === 'app-bundles') {\n return apps.filter(function (app) {\n return app.bundles;\n });\n }\n if (this.category === 'updates') {\n return apps.filter(function (app) {\n return app.update;\n });\n }\n if (this.category === 'featured') {\n return apps.filter(function (app) {\n return app.level === 200;\n });\n }\n // filter app store categories\n return apps.filter(function (app) {\n return app.appstore && app.category !== undefined && (app.category === _this.category || app.category.indexOf(_this.category) > -1);\n });\n },\n bundles: function bundles() {\n var _this2 = this;\n return this.$store.getters.getServerData.bundles.filter(function (bundle) {\n return _this2.bundleApps(bundle.id).length > 0;\n });\n },\n bundleApps: function bundleApps() {\n return function (bundle) {\n return this.$store.getters.getAllApps.filter(function (app) {\n return app.bundleIds !== undefined && app.bundleIds.includes(bundle);\n });\n };\n },\n searchApps: function searchApps() {\n var _this3 = this;\n if (this.search === '') {\n return [];\n }\n return this.$store.getters.getAllApps.filter(function (app) {\n if (app.name.toLowerCase().search(_this3.search.toLowerCase()) !== -1) {\n return !_this3.apps.find(function (_app) {\n return _app.id === app.id;\n });\n }\n return false;\n });\n },\n useAppStoreView: function useAppStoreView() {\n return !this.useListView && !this.useBundleView;\n },\n useListView: function useListView() {\n return this.category === 'installed' || this.category === 'enabled' || this.category === 'disabled' || this.category === 'updates' || this.category === 'featured';\n },\n useBundleView: function useBundleView() {\n return this.category === 'app-bundles';\n },\n allBundlesEnabled: function allBundlesEnabled() {\n var self = this;\n return function (id) {\n return self.bundleApps(id).filter(function (app) {\n return !app.active;\n }).length === 0;\n };\n },\n bundleToggleText: function bundleToggleText() {\n var self = this;\n return function (id) {\n if (self.allBundlesEnabled(id)) {\n return t('settings', 'Disable all');\n }\n return t('settings', 'Enable all');\n };\n }\n },\n methods: {\n toggleBundle: function toggleBundle(id) {\n if (this.allBundlesEnabled(id)) {\n return this.disableBundle(id);\n }\n return this.enableBundle(id);\n },\n enableBundle: function enableBundle(id) {\n var apps = this.bundleApps(id).map(function (app) {\n return app.id;\n });\n this.$store.dispatch('enableApp', {\n appId: apps,\n groups: []\n }).catch(function (error) {\n console.error(error);\n OC.Notification.show(error);\n });\n },\n disableBundle: function disableBundle(id) {\n var apps = this.bundleApps(id).map(function (app) {\n return app.id;\n });\n this.$store.dispatch('disableApp', {\n appId: apps,\n groups: []\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n updateAll: function updateAll() {\n var _this4 = this;\n var limit = pLimit(1);\n this.apps.filter(function (app) {\n return app.update;\n }).map(function (app) {\n return limit(function () {\n return _this4.$store.dispatch('updateApp', {\n appId: app.id\n });\n });\n });\n }\n }\n};","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport AppScore from './AppScore.vue';\nimport AppManagement from '../../mixins/AppManagement.js';\nimport SvgFilterMixin from '../SvgFilterMixin.vue';\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js';\nexport default {\n name: 'AppItem',\n components: {\n AppScore: AppScore,\n NcButton: NcButton\n },\n mixins: [AppManagement, SvgFilterMixin],\n props: {\n app: {},\n category: {},\n listView: {\n type: Boolean,\n default: true\n }\n },\n data: function data() {\n return {\n isSelected: false,\n scrolled: false,\n screenshotLoaded: false\n };\n },\n computed: {\n hasRating: function hasRating() {\n return this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5;\n }\n },\n watch: {\n '$route.params.id': function $routeParamsId(id) {\n this.isSelected = this.app.id === id;\n }\n },\n mounted: function mounted() {\n var _this = this;\n this.isSelected = this.app.id === this.$route.params.id;\n if (this.app.releases && this.app.screenshot) {\n var image = new Image();\n image.onload = function (e) {\n _this.screenshotLoaded = true;\n };\n image.src = this.app.screenshot;\n }\n },\n watchers: {},\n methods: {\n showAppDetails: function showAppDetails(event) {\n var _this2 = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(event.currentTarget.tagName === 'INPUT' || event.currentTarget.tagName === 'A')) {\n _context.next = 2;\n break;\n }\n return _context.abrupt(\"return\");\n case 2:\n _context.prev = 2;\n _context.next = 5;\n return _this2.$router.push({\n name: 'apps-details',\n params: {\n category: _this2.category,\n id: _this2.app.id\n }\n });\n case 5:\n _context.next = 9;\n break;\n case 7:\n _context.prev = 7;\n _context.t0 = _context[\"catch\"](2);\n case 9:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, null, [[2, 7]]);\n }))();\n },\n prefix: function prefix(_prefix, content) {\n return _prefix + '_' + content;\n }\n }\n};","import { imagePath } from '@nextcloud/router';\nexport default {\n name: 'AppScore',\n props: ['score'],\n computed: {\n scoreImage: function scoreImage() {\n var score = Math.round(this.score * 10);\n var imageName = 'rating/s' + score + '.svg';\n return imagePath('core', imageName);\n }\n }\n};","import { marked } from 'marked';\nimport dompurify from 'dompurify';\nexport default {\n name: 'Markdown',\n props: {\n text: {\n type: String,\n default: ''\n }\n },\n computed: {\n renderMarkdown: function renderMarkdown() {\n var renderer = new marked.Renderer();\n renderer.link = function (href, title, text) {\n var prot;\n try {\n prot = decodeURIComponent(unescape(href)).replace(/[^\\w:]/g, '').toLowerCase();\n } catch (e) {\n return '';\n }\n if (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {\n return '';\n }\n var out = '<a href=\"' + href + '\" rel=\"noreferrer noopener\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n };\n renderer.image = function (href, title, text) {\n if (text) {\n return text;\n }\n return title;\n };\n renderer.blockquote = function (quote) {\n return quote;\n };\n return dompurify.sanitize(marked(this.text.trim(), {\n renderer: renderer,\n gfm: false,\n highlight: false,\n tables: false,\n breaks: false,\n pedantic: false,\n sanitize: true,\n smartLists: true,\n smartypants: false\n }), {\n SAFE_FOR_JQUERY: true,\n ALLOWED_TAGS: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'strong', 'p', 'a', 'ul', 'ol', 'li', 'em', 'del', 'blockquote']\n });\n }\n }\n};","export default {\n name: 'PrefixMixin',\n methods: {\n prefix: function prefix(_prefix, content) {\n return _prefix + '_' + content;\n }\n }\n};","export default {\n name: 'SvgFilterMixin',\n data: function data() {\n return {\n filterId: ''\n };\n },\n computed: {\n filterUrl: function filterUrl() {\n return \"url(#\".concat(this.filterId, \")\");\n }\n },\n mounted: function mounted() {\n this.filterId = 'invertIconApps-' + Math.random().toString(36).substring(2);\n }\n};","import { subscribe, unsubscribe } from '@nextcloud/event-bus';\nimport Vue from 'vue';\nimport VueLocalStorage from 'vue-localstorage';\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js';\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js';\nimport NcAppNavigationCounter from '@nextcloud/vue/dist/Components/NcAppNavigationCounter.js';\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js';\nimport NcAppNavigationSpacer from '@nextcloud/vue/dist/Components/NcAppNavigationSpacer.js';\nimport NcAppSidebar from '@nextcloud/vue/dist/Components/NcAppSidebar.js';\nimport NcAppSidebarTab from '@nextcloud/vue/dist/Components/NcAppSidebarTab.js';\nimport NcContent from '@nextcloud/vue/dist/Components/NcContent.js';\nimport AppList from '../components/AppList.vue';\nimport AppDetails from '../components/AppDetails.vue';\nimport AppManagement from '../mixins/AppManagement.js';\nimport AppScore from '../components/AppList/AppScore.vue';\nimport Markdown from '../components/Markdown.vue';\nimport { APPS_SECTION_ENUM } from './../constants/AppsConstants.js';\nVue.use(VueLocalStorage);\nexport default {\n name: 'Apps',\n APPS_SECTION_ENUM: APPS_SECTION_ENUM,\n components: {\n NcAppContent: NcAppContent,\n AppDetails: AppDetails,\n AppList: AppList,\n NcAppNavigation: NcAppNavigation,\n NcAppNavigationCounter: NcAppNavigationCounter,\n NcAppNavigationItem: NcAppNavigationItem,\n NcAppNavigationSpacer: NcAppNavigationSpacer,\n AppScore: AppScore,\n NcAppSidebar: NcAppSidebar,\n NcAppSidebarTab: NcAppSidebarTab,\n NcContent: NcContent,\n Markdown: Markdown\n },\n mixins: [AppManagement],\n props: {\n category: {\n type: String,\n default: 'installed'\n },\n id: {\n type: String,\n default: ''\n }\n },\n data: function data() {\n return {\n searchQuery: '',\n screenshotLoaded: false\n };\n },\n computed: {\n loading: function loading() {\n return this.$store.getters.loading('categories');\n },\n loadingList: function loadingList() {\n return this.$store.getters.loading('list');\n },\n app: function app() {\n var _this = this;\n return this.apps.find(function (app) {\n return app.id === _this.id;\n });\n },\n categories: function categories() {\n return this.$store.getters.getCategories;\n },\n apps: function apps() {\n return this.$store.getters.getAllApps;\n },\n updateCount: function updateCount() {\n return this.$store.getters.getUpdateCount;\n },\n settings: function settings() {\n return this.$store.getters.getServerData;\n },\n hasRating: function hasRating() {\n return this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5;\n },\n // sidebar app binding\n appSidebar: function appSidebar() {\n var authorName = function authorName(xmlNode) {\n if (xmlNode['@value']) {\n // Complex node (with email or homepage attribute)\n return xmlNode['@value'];\n }\n\n // Simple text node\n return xmlNode;\n };\n var author = Array.isArray(this.app.author) ? this.app.author.map(authorName).join(', ') : authorName(this.app.author);\n var license = t('settings', '{license}-licensed', {\n license: ('' + this.app.licence).toUpperCase()\n });\n var subtitle = t('settings', 'by {author}\\n{license}', {\n author: author,\n license: license\n });\n return {\n subtitle: subtitle,\n background: this.app.screenshot && this.screenshotLoaded ? this.app.screenshot : this.app.preview,\n compact: !(this.app.screenshot && this.screenshotLoaded),\n title: this.app.name\n };\n },\n changelog: function changelog() {\n return function (release) {\n return release.translations.en.changelog;\n };\n }\n },\n watch: {\n category: function category() {\n this.searchQuery = '';\n },\n app: function app() {\n var _this$app,\n _this$app2,\n _this2 = this;\n this.screenshotLoaded = false;\n if ((_this$app = this.app) !== null && _this$app !== void 0 && _this$app.releases && (_this$app2 = this.app) !== null && _this$app2 !== void 0 && _this$app2.screenshot) {\n var image = new Image();\n image.onload = function (e) {\n _this2.screenshotLoaded = true;\n };\n image.src = this.app.screenshot;\n }\n }\n },\n beforeMount: function beforeMount() {\n this.$store.dispatch('getCategories', {\n shouldRefetchCategories: true\n });\n this.$store.dispatch('getAllApps');\n this.$store.dispatch('getGroups', {\n offset: 0,\n limit: 5\n });\n this.$store.commit('setUpdateCount', this.$store.getters.getServerData.updateCount);\n },\n mounted: function mounted() {\n subscribe('nextcloud:unified-search.search', this.setSearch);\n subscribe('nextcloud:unified-search.reset', this.resetSearch);\n },\n beforeDestroy: function beforeDestroy() {\n unsubscribe('nextcloud:unified-search.search', this.setSearch);\n unsubscribe('nextcloud:unified-search.reset', this.resetSearch);\n },\n methods: {\n setSearch: function setSearch(_ref) {\n var query = _ref.query;\n this.searchQuery = query;\n },\n resetSearch: function resetSearch() {\n this.searchQuery = '';\n },\n hideAppDetails: function hideAppDetails() {\n this.$router.push({\n name: 'apps-category',\n params: {\n category: this.category\n }\n });\n },\n openDeveloperDocumentation: function openDeveloperDocumentation() {\n window.open(this.settings.developerDocumentation);\n }\n }\n};","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"app-details\"\n }, [_c(\"div\", {\n staticClass: \"app-details__actions\"\n }, [_vm.app.active && _vm.canLimitToGroups(_vm.app) ? _c(\"div\", {\n staticClass: \"app-details__actions-groups\"\n }, [_c(\"input\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.groupCheckedAppsData,\n expression: \"groupCheckedAppsData\"\n }],\n staticClass: \"groups-enable__checkbox checkbox\",\n attrs: {\n id: _vm.prefix(\"groups_enable\", _vm.app.id),\n type: \"checkbox\"\n },\n domProps: {\n value: _vm.app.id,\n checked: Array.isArray(_vm.groupCheckedAppsData) ? _vm._i(_vm.groupCheckedAppsData, _vm.app.id) > -1 : _vm.groupCheckedAppsData\n },\n on: {\n change: [function ($event) {\n var $$a = _vm.groupCheckedAppsData,\n $$el = $event.target,\n $$c = $$el.checked ? true : false;\n if (Array.isArray($$a)) {\n var $$v = _vm.app.id,\n $$i = _vm._i($$a, $$v);\n if ($$el.checked) {\n $$i < 0 && (_vm.groupCheckedAppsData = $$a.concat([$$v]));\n } else {\n $$i > -1 && (_vm.groupCheckedAppsData = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));\n }\n } else {\n _vm.groupCheckedAppsData = $$c;\n }\n }, _vm.setGroupLimit]\n }\n }), _vm._v(\" \"), _c(\"label\", {\n attrs: {\n for: _vm.prefix(\"groups_enable\", _vm.app.id)\n }\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"Limit to groups\")))]), _vm._v(\" \"), _c(\"input\", {\n staticClass: \"group_select\",\n attrs: {\n type: \"hidden\",\n title: _vm.t(\"settings\", \"All\"),\n value: \"\"\n }\n }), _vm._v(\" \"), _vm.isLimitedToGroups(_vm.app) ? _c(\"NcMultiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n options: _vm.groups,\n value: _vm.appGroups,\n \"options-limit\": 5,\n placeholder: _vm.t(\"settings\", \"Limit app usage to groups\"),\n label: \"name\",\n \"track-by\": \"id\",\n multiple: true,\n \"close-on-select\": false,\n \"tag-width\": 60\n },\n on: {\n select: _vm.addGroupLimitation,\n remove: _vm.removeGroupLimitation,\n \"search-change\": _vm.asyncFindGroup\n }\n }, [_c(\"span\", {\n attrs: {\n slot: \"noResult\"\n },\n slot: \"noResult\"\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))])]) : _vm._e()], 1) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"app-details__actions-manage\"\n }, [_vm.app.update ? _c(\"input\", {\n staticClass: \"update primary\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Update to {version}\", {\n version: _vm.app.update\n }),\n disabled: _vm.installing || _vm.isLoading\n },\n on: {\n click: function click($event) {\n return _vm.update(_vm.app.id);\n }\n }\n }) : _vm._e(), _vm._v(\" \"), _vm.app.canUnInstall ? _c(\"input\", {\n staticClass: \"uninstall\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Remove\"),\n disabled: _vm.installing || _vm.isLoading\n },\n on: {\n click: function click($event) {\n return _vm.remove(_vm.app.id);\n }\n }\n }) : _vm._e(), _vm._v(\" \"), _vm.app.active ? _c(\"input\", {\n staticClass: \"enable\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Disable\"),\n disabled: _vm.installing || _vm.isLoading\n },\n on: {\n click: function click($event) {\n return _vm.disable(_vm.app.id);\n }\n }\n }) : _vm._e(), _vm._v(\" \"), !_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible) ? _c(\"input\", {\n staticClass: \"enable primary\",\n attrs: {\n title: _vm.enableButtonTooltip,\n \"aria-label\": _vm.enableButtonTooltip,\n type: \"button\",\n value: _vm.enableButtonText,\n disabled: !_vm.app.canInstall || _vm.installing || _vm.isLoading\n },\n on: {\n click: function click($event) {\n return _vm.enable(_vm.app.id);\n }\n }\n }) : !_vm.app.active && !_vm.app.canInstall ? _c(\"input\", {\n staticClass: \"enable force\",\n attrs: {\n title: _vm.forceEnableButtonTooltip,\n \"aria-label\": _vm.forceEnableButtonTooltip,\n type: \"button\",\n value: _vm.forceEnableButtonText,\n disabled: _vm.installing || _vm.isLoading\n },\n on: {\n click: function click($event) {\n return _vm.forceEnable(_vm.app.id);\n }\n }\n }) : _vm._e()])]), _vm._v(\" \"), _c(\"ul\", {\n staticClass: \"app-details__dependencies\"\n }, [_vm.app.missingMinOwnCloudVersion ? _c(\"li\", [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"This app has no minimum Nextcloud version assigned. This will be an error in the future.\")) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _vm.app.missingMaxOwnCloudVersion ? _c(\"li\", [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"This app has no maximum Nextcloud version assigned. This will be an error in the future.\")) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), !_vm.app.canInstall ? _c(\"li\", [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"This app cannot be installed because the following dependencies are not fulfilled:\")) + \"\\n\\t\\t\\t\"), _c(\"ul\", {\n staticClass: \"missing-dependencies\"\n }, _vm._l(_vm.app.missingDependencies, function (dep, index) {\n return _c(\"li\", {\n key: index\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(dep) + \"\\n\\t\\t\\t\\t\")]);\n }), 0)]) : _vm._e()]), _vm._v(\" \"), _c(\"p\", {\n staticClass: \"app-details__documentation\"\n }, [!_vm.app.internal ? _c(\"a\", {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.appstoreUrl,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"View in store\")) + \" ↗\")]) : _vm._e(), _vm._v(\" \"), _vm.app.website ? _c(\"a\", {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.website,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"Visit website\")) + \" ↗\")]) : _vm._e(), _vm._v(\" \"), _vm.app.bugs ? _c(\"a\", {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.bugs,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"Report a bug\")) + \" ↗\")]) : _vm._e(), _vm._v(\" \"), _vm.app.documentation && _vm.app.documentation.user ? _c(\"a\", {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.documentation.user,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"User documentation\")) + \" ↗\")]) : _vm._e(), _vm._v(\" \"), _vm.app.documentation && _vm.app.documentation.admin ? _c(\"a\", {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.documentation.admin,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"Admin documentation\")) + \" ↗\")]) : _vm._e(), _vm._v(\" \"), _vm.app.documentation && _vm.app.documentation.developer ? _c(\"a\", {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.documentation.developer,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"Developer documentation\")) + \" ↗\")]) : _vm._e()]), _vm._v(\" \"), _c(\"Markdown\", {\n staticClass: \"app-details__description\",\n attrs: {\n text: _vm.app.description\n }\n })], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n attrs: {\n id: \"app-content-inner\"\n }\n }, [_c(\"div\", {\n staticClass: \"apps-list\",\n class: {\n installed: _vm.useBundleView || _vm.useListView,\n store: _vm.useAppStoreView\n },\n attrs: {\n id: \"apps-list\"\n }\n }, [_vm.useListView ? [_vm.showUpdateAll ? _c(\"div\", {\n staticClass: \"toolbar\"\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.n(\"settings\", \"%n app has an update available\", \"%n apps have an update available\", _vm.counter)) + \"\\n\\t\\t\\t\\t\"), _vm.showUpdateAll ? _c(\"NcButton\", {\n attrs: {\n id: \"app-list-update-all\",\n type: \"primary\"\n },\n on: {\n click: _vm.updateAll\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_vm.n(\"settings\", \"Update\", \"Update all\", _vm.counter)) + \"\\n\\t\\t\\t\\t\")]) : _vm._e()], 1) : _vm._e(), _vm._v(\" \"), !_vm.showUpdateAll ? _c(\"div\", {\n staticClass: \"toolbar\"\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"All apps are up-to-date.\")) + \"\\n\\t\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _c(\"transition-group\", {\n staticClass: \"apps-list-container\",\n attrs: {\n name: \"app-list\",\n tag: \"div\"\n }\n }, _vm._l(_vm.apps, function (app) {\n return _c(\"AppItem\", {\n key: app.id,\n attrs: {\n app: app,\n category: _vm.category\n }\n });\n }), 1)] : _vm._e(), _vm._v(\" \"), _vm.useBundleView ? _c(\"transition-group\", {\n staticClass: \"apps-list-container\",\n attrs: {\n name: \"app-list\",\n tag: \"div\"\n }\n }, [_vm._l(_vm.bundles, function (bundle) {\n return [_c(\"div\", {\n key: bundle.id,\n staticClass: \"apps-header\"\n }, [_c(\"div\", {\n staticClass: \"app-image\"\n }), _vm._v(\" \"), _c(\"h2\", [_vm._v(_vm._s(bundle.name) + \" \"), _c(\"input\", {\n attrs: {\n type: \"button\",\n value: _vm.bundleToggleText(bundle.id)\n },\n on: {\n click: function click($event) {\n return _vm.toggleBundle(bundle.id);\n }\n }\n })]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"app-version\"\n }), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"app-level\"\n }), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"app-groups\"\n }), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"actions\"\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\")])]), _vm._v(\" \"), _vm._l(_vm.bundleApps(bundle.id), function (app) {\n return _c(\"AppItem\", {\n key: bundle.id + app.id,\n attrs: {\n app: app,\n category: _vm.category\n }\n });\n })];\n })], 2) : _vm._e(), _vm._v(\" \"), _vm.useAppStoreView ? _vm._l(_vm.apps, function (app) {\n return _c(\"AppItem\", {\n key: app.id,\n attrs: {\n app: app,\n category: _vm.category,\n \"list-view\": false\n }\n });\n }) : _vm._e()], 2), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"apps-list installed\",\n attrs: {\n id: \"apps-list-search\"\n }\n }, [_c(\"div\", {\n staticClass: \"apps-list-container\"\n }, [_vm.search !== \"\" && _vm.searchApps.length > 0 ? [_c(\"div\", {\n staticClass: \"section\"\n }, [_c(\"div\"), _vm._v(\" \"), _c(\"td\", {\n attrs: {\n colspan: \"5\"\n }\n }, [_c(\"h2\", [_vm._v(_vm._s(_vm.t(\"settings\", \"Results from other categories\")))])])]), _vm._v(\" \"), _vm._l(_vm.searchApps, function (app) {\n return _c(\"AppItem\", {\n key: app.id,\n attrs: {\n app: app,\n category: _vm.category,\n \"list-view\": true\n }\n });\n })] : _vm._e()], 2)]), _vm._v(\" \"), _vm.search !== \"\" && !_vm.loading && _vm.searchApps.length === 0 && _vm.apps.length === 0 ? _c(\"div\", {\n staticClass: \"emptycontent emptycontent-search\",\n attrs: {\n id: \"apps-list-empty\"\n }\n }, [_c(\"div\", {\n staticClass: \"icon-settings-dark\",\n attrs: {\n id: \"app-list-empty-icon\"\n }\n }), _vm._v(\" \"), _c(\"h2\", [_vm._v(_vm._s(_vm.t(\"settings\", \"No apps found for your version\")))])]) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n attrs: {\n id: \"searchresults\"\n }\n })]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"section\",\n class: {\n selected: _vm.isSelected\n },\n on: {\n click: _vm.showAppDetails\n }\n }, [_c(\"div\", {\n staticClass: \"app-image app-image-icon\",\n on: {\n click: _vm.showAppDetails\n }\n }, [_vm.listView && !_vm.app.preview || !_vm.listView && !_vm.screenshotLoaded ? _c(\"div\", {\n staticClass: \"icon-settings-dark\"\n }) : _vm.listView && _vm.app.preview ? _c(\"svg\", {\n attrs: {\n width: \"32\",\n height: \"32\",\n viewBox: \"0 0 32 32\"\n }\n }, [_c(\"image\", {\n staticClass: \"app-icon\",\n attrs: {\n x: \"0\",\n y: \"0\",\n width: \"32\",\n height: \"32\",\n preserveAspectRatio: \"xMinYMin meet\",\n \"xlink:href\": _vm.app.preview\n }\n })]) : _vm._e(), _vm._v(\" \"), !_vm.listView && _vm.app.screenshot && _vm.screenshotLoaded ? _c(\"img\", {\n attrs: {\n src: _vm.app.screenshot,\n width: \"100%\"\n }\n }) : _vm._e()]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"app-name\",\n on: {\n click: _vm.showAppDetails\n }\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.app.name) + \"\\n\\t\")]), _vm._v(\" \"), !_vm.listView ? _c(\"div\", {\n staticClass: \"app-summary\"\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.app.summary) + \"\\n\\t\")]) : _vm._e(), _vm._v(\" \"), _vm.listView ? _c(\"div\", {\n staticClass: \"app-version\"\n }, [_vm.app.version ? _c(\"span\", [_vm._v(_vm._s(_vm.app.version))]) : _vm.app.appstoreData.releases[0].version ? _c(\"span\", [_vm._v(_vm._s(_vm.app.appstoreData.releases[0].version))]) : _vm._e()]) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"app-level\"\n }, [_vm.app.level === 300 ? _c(\"span\", {\n staticClass: \"supported icon-checkmark-color\",\n attrs: {\n title: _vm.t(\"settings\", \"This app is supported via your current Nextcloud subscription.\"),\n \"aria-label\": _vm.t(\"settings\", \"This app is supported via your current Nextcloud subscription.\")\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Supported\")))]) : _vm._e(), _vm._v(\" \"), _vm.app.level === 200 ? _c(\"span\", {\n staticClass: \"official icon-checkmark\",\n attrs: {\n title: _vm.t(\"settings\", \"Featured apps are developed by and within the community. They offer central functionality and are ready for production use.\"),\n \"aria-label\": _vm.t(\"settings\", \"Featured apps are developed by and within the community. They offer central functionality and are ready for production use.\")\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Featured\")))]) : _vm._e(), _vm._v(\" \"), _vm.hasRating && !_vm.listView ? _c(\"AppScore\", {\n attrs: {\n score: _vm.app.score\n }\n }) : _vm._e()], 1), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"actions\"\n }, [_vm.app.error ? _c(\"div\", {\n staticClass: \"warning\"\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.app.error) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _vm.isLoading ? _c(\"div\", {\n staticClass: \"icon icon-loading-small\"\n }) : _vm._e(), _vm._v(\" \"), _vm.app.update ? _c(\"NcButton\", {\n attrs: {\n type: \"primary\",\n disabled: _vm.installing || _vm.isLoading\n },\n on: {\n click: function click($event) {\n $event.stopPropagation();\n return _vm.update(_vm.app.id);\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Update to {update}\", {\n update: _vm.app.update\n })) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _vm.app.canUnInstall ? _c(\"NcButton\", {\n staticClass: \"uninstall\",\n attrs: {\n type: \"tertiary\",\n disabled: _vm.installing || _vm.isLoading\n },\n on: {\n click: function click($event) {\n $event.stopPropagation();\n return _vm.remove(_vm.app.id);\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Remove\")) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _vm.app.active ? _c(\"NcButton\", {\n attrs: {\n disabled: _vm.installing || _vm.isLoading\n },\n on: {\n click: function click($event) {\n $event.stopPropagation();\n return _vm.disable(_vm.app.id);\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Disable\")) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), !_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible) ? _c(\"NcButton\", {\n attrs: {\n title: _vm.enableButtonTooltip,\n \"aria-label\": _vm.enableButtonTooltip,\n type: \"primary\",\n disabled: !_vm.app.canInstall || _vm.installing || _vm.isLoading\n },\n on: {\n click: function click($event) {\n $event.stopPropagation();\n return _vm.enable(_vm.app.id);\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.enableButtonText) + \"\\n\\t\\t\")]) : !_vm.app.active ? _c(\"NcButton\", {\n attrs: {\n title: _vm.forceEnableButtonTooltip,\n \"aria-label\": _vm.forceEnableButtonTooltip,\n type: \"secondary\",\n disabled: _vm.installing || _vm.isLoading\n },\n on: {\n click: function click($event) {\n $event.stopPropagation();\n return _vm.forceEnable(_vm.app.id);\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.forceEnableButtonText) + \"\\n\\t\\t\")]) : _vm._e()], 1)]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"img\", {\n staticClass: \"app-score-image\",\n attrs: {\n src: _vm.scoreImage\n }\n });\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"settings-markdown\",\n domProps: {\n innerHTML: _vm._s(_vm.renderMarkdown)\n }\n });\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"NcContent\", {\n class: {\n \"with-app-sidebar\": _vm.app\n },\n attrs: {\n \"app-name\": \"settings\",\n \"content-class\": {\n \"icon-loading\": _vm.loadingList\n },\n \"navigation-class\": {\n \"icon-loading\": _vm.loading\n }\n }\n }, [_c(\"NcAppNavigation\", {\n scopedSlots: _vm._u([{\n key: \"list\",\n fn: function fn() {\n return [_c(\"NcAppNavigationItem\", {\n attrs: {\n id: \"app-category-your-apps\",\n to: {\n name: \"apps\"\n },\n exact: true,\n icon: \"icon-category-installed\",\n title: _vm.t(\"settings\", \"Your apps\")\n }\n }), _vm._v(\" \"), _c(\"NcAppNavigationItem\", {\n attrs: {\n id: \"app-category-enabled\",\n to: {\n name: \"apps-category\",\n params: {\n category: \"enabled\"\n }\n },\n icon: \"icon-category-enabled\",\n title: _vm.$options.APPS_SECTION_ENUM.enabled\n }\n }), _vm._v(\" \"), _c(\"NcAppNavigationItem\", {\n attrs: {\n id: \"app-category-disabled\",\n to: {\n name: \"apps-category\",\n params: {\n category: \"disabled\"\n }\n },\n icon: \"icon-category-disabled\",\n title: _vm.$options.APPS_SECTION_ENUM.disabled\n }\n }), _vm._v(\" \"), _vm.updateCount > 0 ? _c(\"NcAppNavigationItem\", {\n attrs: {\n id: \"app-category-updates\",\n to: {\n name: \"apps-category\",\n params: {\n category: \"updates\"\n }\n },\n icon: \"icon-download\",\n title: _vm.$options.APPS_SECTION_ENUM.updates\n }\n }, [_c(\"NcAppNavigationCounter\", {\n attrs: {\n slot: \"counter\"\n },\n slot: \"counter\"\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_vm.updateCount) + \"\\n\\t\\t\\t\\t\")])], 1) : _vm._e(), _vm._v(\" \"), _c(\"NcAppNavigationItem\", {\n attrs: {\n id: \"app-category-your-bundles\",\n to: {\n name: \"apps-category\",\n params: {\n category: \"app-bundles\"\n }\n },\n icon: \"icon-category-app-bundles\",\n title: _vm.$options.APPS_SECTION_ENUM[\"app-bundles\"]\n }\n }), _vm._v(\" \"), _c(\"NcAppNavigationSpacer\"), _vm._v(\" \"), _vm.settings.appstoreEnabled ? [_c(\"NcAppNavigationItem\", {\n attrs: {\n id: \"app-category-featured\",\n to: {\n name: \"apps-category\",\n params: {\n category: \"featured\"\n }\n },\n icon: \"icon-favorite\",\n title: _vm.$options.APPS_SECTION_ENUM.featured\n }\n }), _vm._v(\" \"), _vm._l(_vm.categories, function (cat) {\n return _c(\"NcAppNavigationItem\", {\n key: \"icon-category-\" + cat.ident,\n attrs: {\n icon: \"icon-category-\" + cat.ident,\n to: {\n name: \"apps-category\",\n params: {\n category: cat.ident\n }\n },\n title: cat.displayName\n }\n });\n })] : _vm._e(), _vm._v(\" \"), _c(\"NcAppNavigationItem\", {\n attrs: {\n id: \"app-developer-docs\",\n title: _vm.t(\"settings\", \"Developer documentation\") + \" ↗\"\n },\n on: {\n click: _vm.openDeveloperDocumentation\n }\n })];\n },\n proxy: true\n }])\n }), _vm._v(\" \"), _c(\"NcAppContent\", {\n staticClass: \"app-settings-content\",\n class: {\n \"icon-loading\": _vm.loadingList\n }\n }, [_c(\"AppList\", {\n attrs: {\n category: _vm.category,\n app: _vm.app,\n search: _vm.searchQuery\n }\n })], 1), _vm._v(\" \"), _vm.id && _vm.app ? _c(\"NcAppSidebar\", _vm._b({\n class: {\n \"app-sidebar--without-background\": !_vm.appSidebar.background\n },\n on: {\n close: _vm.hideAppDetails\n },\n scopedSlots: _vm._u([!_vm.appSidebar.background ? {\n key: \"header\",\n fn: function fn() {\n return [_c(\"div\", {\n staticClass: \"app-sidebar-header__figure--default-app-icon icon-settings-dark\"\n })];\n },\n proxy: true\n } : null, {\n key: \"description\",\n fn: function fn() {\n return [_vm.app.level === 300 || _vm.app.level === 200 || _vm.hasRating ? _c(\"div\", {\n staticClass: \"app-level\"\n }, [_vm.app.level === 300 ? _c(\"span\", {\n staticClass: \"supported icon-checkmark-color\",\n attrs: {\n title: _vm.t(\"settings\", \"This app is supported via your current Nextcloud subscription.\")\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Supported\")))]) : _vm._e(), _vm._v(\" \"), _vm.app.level === 200 ? _c(\"span\", {\n staticClass: \"official icon-checkmark\",\n attrs: {\n title: _vm.t(\"settings\", \"Featured apps are developed by and within the community. They offer central functionality and are ready for production use.\")\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Featured\")))]) : _vm._e(), _vm._v(\" \"), _vm.hasRating ? _c(\"AppScore\", {\n attrs: {\n score: _vm.app.appstoreData.ratingOverall\n }\n }) : _vm._e()], 1) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"app-version\"\n }, [_c(\"p\", [_vm._v(_vm._s(_vm.app.version))])])];\n },\n proxy: true\n }], null, true)\n }, \"NcAppSidebar\", _vm.appSidebar, false), [_vm._v(\" \"), _vm._v(\" \"), _c(\"NcAppSidebarTab\", {\n attrs: {\n id: \"desc\",\n icon: \"icon-category-office\",\n name: _vm.t(\"settings\", \"Details\"),\n order: 0\n }\n }, [_c(\"AppDetails\", {\n attrs: {\n app: _vm.app\n }\n })], 1), _vm._v(\" \"), _vm.app.appstoreData && _vm.app.releases[0].translations.en.changelog ? _c(\"NcAppSidebarTab\", {\n attrs: {\n id: \"desca\",\n icon: \"icon-category-organization\",\n name: _vm.t(\"settings\", \"Changelog\"),\n order: 1\n }\n }, _vm._l(_vm.app.releases, function (release) {\n return _c(\"div\", {\n key: release.version,\n staticClass: \"app-sidebar-tabs__release\"\n }, [_c(\"h2\", [_vm._v(_vm._s(release.version))]), _vm._v(\" \"), _vm.changelog(release) ? _c(\"Markdown\", {\n attrs: {\n text: _vm.changelog(release)\n }\n }) : _vm._e()], 1);\n }), 0) : _vm._e()], 1) : _vm._e()], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-details[data-v-59a92e62] {\\n padding: 20px;\\n}\\n.app-details__actions-manage[data-v-59a92e62] {\\n display: flex;\\n}\\n.app-details__actions-manage input[data-v-59a92e62] {\\n flex: 0 1 auto;\\n min-width: 0;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n overflow: hidden;\\n}\\n.app-details__dependencies[data-v-59a92e62] {\\n opacity: 0.7;\\n}\\n.app-details__documentation[data-v-59a92e62] {\\n padding-top: 20px;\\n}\\n.app-details__description[data-v-59a92e62] {\\n padding-top: 20px;\\n}\\n.force[data-v-59a92e62] {\\n color: var(--color-error);\\n border-color: var(--color-error);\\n background: var(--color-main-background);\\n}\\n.force[data-v-59a92e62]:hover,\\n.force[data-v-59a92e62]:active {\\n color: var(--color-main-background);\\n border-color: var(--color-error) !important;\\n background: var(--color-error);\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".settings-markdown[data-v-11f4a1b0] h1,\\n.settings-markdown[data-v-11f4a1b0] h2,\\n.settings-markdown[data-v-11f4a1b0] h3,\\n.settings-markdown[data-v-11f4a1b0] h4,\\n.settings-markdown[data-v-11f4a1b0] h5,\\n.settings-markdown[data-v-11f4a1b0] h6 {\\n font-weight: 600;\\n line-height: 120%;\\n margin-top: 24px;\\n margin-bottom: 12px;\\n color: var(--color-main-text);\\n}\\n.settings-markdown[data-v-11f4a1b0] h1 {\\n font-size: 36px;\\n margin-top: 48px;\\n}\\n.settings-markdown[data-v-11f4a1b0] h2 {\\n font-size: 28px;\\n margin-top: 48px;\\n}\\n.settings-markdown[data-v-11f4a1b0] h3 {\\n font-size: 24px;\\n}\\n.settings-markdown[data-v-11f4a1b0] h4 {\\n font-size: 21px;\\n}\\n.settings-markdown[data-v-11f4a1b0] h5 {\\n font-size: 17px;\\n}\\n.settings-markdown[data-v-11f4a1b0] h6 {\\n font-size: var(--default-font-size);\\n}\\n.settings-markdown[data-v-11f4a1b0] pre {\\n white-space: pre;\\n overflow-x: auto;\\n background-color: var(--color-background-dark);\\n border-radius: var(--border-radius);\\n padding: 1em 1.3em;\\n margin-bottom: 1em;\\n}\\n.settings-markdown[data-v-11f4a1b0] p code {\\n background-color: var(--color-background-dark);\\n border-radius: var(--border-radius);\\n padding: 0.1em 0.3em;\\n}\\n.settings-markdown[data-v-11f4a1b0] li {\\n position: relative;\\n}\\n.settings-markdown[data-v-11f4a1b0] ul, .settings-markdown[data-v-11f4a1b0] ol {\\n padding-left: 10px;\\n margin-left: 10px;\\n}\\n.settings-markdown[data-v-11f4a1b0] ul li {\\n list-style-type: disc;\\n}\\n.settings-markdown[data-v-11f4a1b0] ul > li > ul > li {\\n list-style-type: circle;\\n}\\n.settings-markdown[data-v-11f4a1b0] ul > li > ul > li ul li {\\n list-style-type: square;\\n}\\n.settings-markdown[data-v-11f4a1b0] blockquote {\\n padding-left: 1em;\\n border-left: 4px solid var(--color-primary-element);\\n color: var(--color-text-maxcontrast);\\n margin-left: 0;\\n margin-right: 0;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-sidebar[data-v-d3714d0a]:not(.app-sidebar--without-background) :not(.app-sidebar-header--compact) .app-sidebar-header__figure {\\n background-size: cover;\\n}\\n.app-sidebar[data-v-d3714d0a]:not(.app-sidebar--without-background) .app-sidebar-header--compact .app-sidebar-header__figure {\\n background-size: 32px;\\n filter: var(--background-invert-if-bright);\\n}\\n.app-sidebar[data-v-d3714d0a] .app-sidebar-header__description .app-version {\\n padding-left: 10px;\\n}\\n.app-sidebar[data-v-d3714d0a].app-sidebar--without-background .app-sidebar-header__figure {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n.app-sidebar[data-v-d3714d0a].app-sidebar--without-background .app-sidebar-header__figure--default-app-icon {\\n width: 32px;\\n height: 32px;\\n background-size: 32px;\\n}\\n.app-sidebar[data-v-d3714d0a] .app-sidebar-header__desc .app-sidebar-header__subtitle {\\n overflow: visible !important;\\n height: auto;\\n white-space: normal !important;\\n line-height: 16px;\\n}\\n.app-sidebar[data-v-d3714d0a] .app-sidebar-header__action {\\n margin: 0 20px;\\n}\\n.app-sidebar[data-v-d3714d0a] .app-sidebar-header__action input {\\n margin: 3px;\\n}\\n.app-navigation[data-v-d3714d0a] button.app-navigation-toggle {\\n top: 8px;\\n right: -8px;\\n}\\n.app-sidebar-tabs__release h2[data-v-d3714d0a] {\\n border-bottom: 1px solid var(--color-border);\\n}\\n.app-sidebar-tabs__release[data-v-d3714d0a] h3 {\\n font-size: 20px;\\n}\\n.app-sidebar-tabs__release[data-v-d3714d0a] h4 {\\n font-size: 17px;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.app-icon[data-v-429da85a] {\\n\\tfilter: var(--background-invert-if-bright);\\n}\\n.actions[data-v-429da85a] {\\n\\tdisplay: flex !important;\\n\\tgap: 8px;\\n\\tflex-wrap: wrap;\\n\\tjustify-content: end;\\n}\\n\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDetails.vue?vue&type=template&id=59a92e62&scoped=true&\"\nimport script from \"./AppDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./AppDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"59a92e62\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('59a92e62')) {\n api.createRecord('59a92e62', component.options)\n } else {\n api.reload('59a92e62', component.options)\n }\n module.hot.accept(\"./AppDetails.vue?vue&type=template&id=59a92e62&scoped=true&\", function () {\n api.rerender('59a92e62', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/AppDetails.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./AppList.vue?vue&type=template&id=6d1e92a4&\"\nimport script from \"./AppList.vue?vue&type=script&lang=js&\"\nexport * from \"./AppList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('6d1e92a4')) {\n api.createRecord('6d1e92a4', component.options)\n } else {\n api.reload('6d1e92a4', component.options)\n }\n module.hot.accept(\"./AppList.vue?vue&type=template&id=6d1e92a4&\", function () {\n api.rerender('6d1e92a4', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/AppList.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./AppItem.vue?vue&type=template&id=429da85a&scoped=true&\"\nimport script from \"./AppItem.vue?vue&type=script&lang=js&\"\nexport * from \"./AppItem.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"429da85a\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('429da85a')) {\n api.createRecord('429da85a', component.options)\n } else {\n api.reload('429da85a', component.options)\n }\n module.hot.accept(\"./AppItem.vue?vue&type=template&id=429da85a&scoped=true&\", function () {\n api.rerender('429da85a', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/AppList/AppItem.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./AppScore.vue?vue&type=template&id=0ecce4fc&\"\nimport script from \"./AppScore.vue?vue&type=script&lang=js&\"\nexport * from \"./AppScore.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('0ecce4fc')) {\n api.createRecord('0ecce4fc', component.options)\n } else {\n api.reload('0ecce4fc', component.options)\n }\n module.hot.accept(\"./AppScore.vue?vue&type=template&id=0ecce4fc&\", function () {\n api.rerender('0ecce4fc', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/AppList/AppScore.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Markdown.vue?vue&type=template&id=11f4a1b0&scoped=true&\"\nimport script from \"./Markdown.vue?vue&type=script&lang=js&\"\nexport * from \"./Markdown.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"11f4a1b0\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('11f4a1b0')) {\n api.createRecord('11f4a1b0', component.options)\n } else {\n api.reload('11f4a1b0', component.options)\n }\n module.hot.accept(\"./Markdown.vue?vue&type=template&id=11f4a1b0&scoped=true&\", function () {\n api.rerender('11f4a1b0', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/Markdown.vue\"\nexport default component.exports","var render, staticRenderFns\nimport script from \"./PrefixMixin.vue?vue&type=script&lang=js&\"\nexport * from \"./PrefixMixin.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('b4ed0c44')) {\n api.createRecord('b4ed0c44', component.options)\n } else {\n api.reload('b4ed0c44', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"apps/settings/src/components/PrefixMixin.vue\"\nexport default component.exports","var render, staticRenderFns\nimport script from \"./SvgFilterMixin.vue?vue&type=script&lang=js&\"\nexport * from \"./SvgFilterMixin.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('9219d434')) {\n api.createRecord('9219d434', component.options)\n } else {\n api.reload('9219d434', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"apps/settings/src/components/SvgFilterMixin.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Apps.vue?vue&type=template&id=d3714d0a&scoped=true&\"\nimport script from \"./Apps.vue?vue&type=script&lang=js&\"\nexport * from \"./Apps.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d3714d0a\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('d3714d0a')) {\n api.createRecord('d3714d0a', component.options)\n } else {\n api.reload('d3714d0a', component.options)\n }\n module.hot.accept(\"./Apps.vue?vue&type=template&id=d3714d0a&scoped=true&\", function () {\n api.rerender('d3714d0a', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/views/Apps.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PrefixMixin.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PrefixMixin.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=script&lang=js&\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=template&id=59a92e62&scoped=true&\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=template&id=6d1e92a4&\"","export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=template&id=429da85a&scoped=true&\"","export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=template&id=0ecce4fc&\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=template&id=11f4a1b0&scoped=true&\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=template&id=d3714d0a&scoped=true&\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=scss&\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=11f4a1b0&scoped=true&lang=scss&\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=style&index=0&id=d3714d0a&lang=scss&scoped=true&\"","export * from \"-!../../../../../node_modules/style-loader/dist/cjs.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css&\""],"names":[],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/settings-users-settings-users.js b/dist/settings-users-settings-users.js
new file mode 100644
index 00000000000..5259e04cf47
--- /dev/null
+++ b/dist/settings-users-settings-users.js
@@ -0,0 +1,3866 @@
+"use strict";
+(self["webpackChunknextcloud"] = self["webpackChunknextcloud"] || []).push([["settings-users"],{
+
+/***/ "./apps/settings/src/mixins/UserRowMixin.js":
+/*!**************************************************!*\
+ !*** ./apps/settings/src/mixins/UserRowMixin.js ***!
+ \**************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.js");
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+/**
+ * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author Greta Doci <gretadoci@gmail.com>
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ props: {
+ user: {
+ type: Object,
+ required: true
+ },
+ settings: {
+ type: Object,
+ default: function _default() {
+ return {};
+ }
+ },
+ groups: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ subAdminsGroups: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ quotaOptions: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ showConfig: {
+ type: Object,
+ default: function _default() {
+ return {};
+ }
+ },
+ languages: {
+ type: Array,
+ required: true
+ },
+ externalActions: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ }
+ },
+ computed: {
+ /* GROUPS MANAGEMENT */userGroups: function userGroups() {
+ var _this = this;
+ var userGroups = this.groups.filter(function (group) {
+ return _this.user.groups.includes(group.id);
+ });
+ return userGroups;
+ },
+ userSubAdminsGroups: function userSubAdminsGroups() {
+ var _this2 = this;
+ var userSubAdminsGroups = this.subAdminsGroups.filter(function (group) {
+ return _this2.user.subadmin.includes(group.id);
+ });
+ return userSubAdminsGroups;
+ },
+ availableGroups: function availableGroups() {
+ var _this3 = this;
+ return this.groups.map(function (group) {
+ // clone object because we don't want
+ // to edit the original groups
+ var groupClone = Object.assign({}, group);
+
+ // two settings here:
+ // 1. user NOT in group but no permission to add
+ // 2. user is in group but no permission to remove
+ groupClone.$isDisabled = group.canAdd === false && !_this3.user.groups.includes(group.id) || group.canRemove === false && _this3.user.groups.includes(group.id);
+ return groupClone;
+ });
+ },
+ /* QUOTA MANAGEMENT */usedSpace: function usedSpace() {
+ if (this.user.quota.used) {
+ return t('settings', '{size} used', {
+ size: OC.Util.humanFileSize(this.user.quota.used)
+ });
+ }
+ return t('settings', '{size} used', {
+ size: OC.Util.humanFileSize(0)
+ });
+ },
+ usedQuota: function usedQuota() {
+ var quota = this.user.quota.quota;
+ if (quota > 0) {
+ quota = Math.min(100, Math.round(this.user.quota.used / quota * 100));
+ } else {
+ var usedInGB = this.user.quota.used / (10 * Math.pow(2, 30));
+ // asymptotic curve approaching 50% at 10GB to visualize used stace with infinite quota
+ quota = 95 * (1 - 1 / (usedInGB + 1));
+ }
+ return isNaN(quota) ? 0 : quota;
+ },
+ // Mapping saved values to objects
+ userQuota: function userQuota() {
+ if (this.user.quota.quota >= 0) {
+ // if value is valid, let's map the quotaOptions or return custom quota
+ var humanQuota = OC.Util.humanFileSize(this.user.quota.quota);
+ var userQuota = this.quotaOptions.find(function (quota) {
+ return quota.id === humanQuota;
+ });
+ return userQuota || {
+ id: humanQuota,
+ label: humanQuota
+ };
+ } else if (this.user.quota.quota === 'default') {
+ // default quota is replaced by the proper value on load
+ return this.quotaOptions[0];
+ }
+ return this.quotaOptions[1]; // unlimited
+ },
+ /* PASSWORD POLICY? */minPasswordLength: function minPasswordLength() {
+ return this.$store.getters.getPasswordPolicyMinLength;
+ },
+ /* LANGUAGE */userLanguage: function userLanguage() {
+ var _this4 = this;
+ var availableLanguages = this.languages[0].languages.concat(this.languages[1].languages);
+ var userLang = availableLanguages.find(function (lang) {
+ return lang.code === _this4.user.language;
+ });
+ if (_typeof(userLang) !== 'object' && this.user.language !== '') {
+ return {
+ code: this.user.language,
+ name: this.user.language
+ };
+ } else if (this.user.language === '') {
+ return false;
+ }
+ return userLang;
+ },
+ /* LAST LOGIN */userLastLoginTooltip: function userLastLoginTooltip() {
+ if (this.user.lastLogin > 0) {
+ return OC.Util.formatDate(this.user.lastLogin);
+ }
+ return '';
+ },
+ userLastLogin: function userLastLogin() {
+ if (this.user.lastLogin > 0) {
+ return OC.Util.relativeModifiedDate(this.user.lastLogin);
+ }
+ return t('settings', 'Never');
+ }
+ },
+ methods: {
+ /**
+ * Generate avatar url
+ *
+ * @param {string} user The user name
+ * @param {bool} isDarkTheme Whether the avatar should be the dark version
+ * @return {string}
+ */
+ generateAvatar: function generateAvatar(user, isDarkTheme) {
+ if (isDarkTheme) {
+ return (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__.generateUrl)('/avatar/{user}/64/dark?v={version}', {
+ user: user,
+ version: oc_userconfig.avatar.version
+ });
+ } else {
+ return (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__.generateUrl)('/avatar/{user}/64?v={version}', {
+ user: user,
+ version: oc_userconfig.avatar.version
+ });
+ }
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/GroupListItem.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/GroupListItem.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcActionInput_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcActionInput.js */ "./node_modules/@nextcloud/vue/dist/Components/NcActionInput.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcActionInput_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcActionInput_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcActionButton_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcActionButton.js */ "./node_modules/@nextcloud/vue/dist/Components/NcActionButton.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcActionButton_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcActionButton_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcCounterBubble_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcCounterBubble.js */ "./node_modules/@nextcloud/vue/dist/Components/NcCounterBubble.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcCounterBubble_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcCounterBubble_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationItem_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppNavigationItem.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppNavigationItem.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationItem_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppNavigationItem_js__WEBPACK_IMPORTED_MODULE_3__);
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'GroupListItem',
+ components: {
+ NcActionInput: (_nextcloud_vue_dist_Components_NcActionInput_js__WEBPACK_IMPORTED_MODULE_0___default()),
+ NcActionButton: (_nextcloud_vue_dist_Components_NcActionButton_js__WEBPACK_IMPORTED_MODULE_1___default()),
+ NcCounterBubble: (_nextcloud_vue_dist_Components_NcCounterBubble_js__WEBPACK_IMPORTED_MODULE_2___default()),
+ NcAppNavigationItem: (_nextcloud_vue_dist_Components_NcAppNavigationItem_js__WEBPACK_IMPORTED_MODULE_3___default())
+ },
+ props: {
+ id: {
+ type: String,
+ required: true
+ },
+ title: {
+ type: String,
+ required: true
+ },
+ count: {
+ type: Number,
+ required: false
+ }
+ },
+ data: function data() {
+ return {
+ loadingRenameGroup: false,
+ openGroupMenu: false
+ };
+ },
+ computed: {
+ settings: function settings() {
+ return this.$store.getters.getServerData;
+ }
+ },
+ methods: {
+ handleGroupMenuOpen: function handleGroupMenuOpen() {
+ this.openGroupMenu = true;
+ },
+ renameGroup: function renameGroup(gid) {
+ var _this = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
+ var displayName;
+ return regeneratorRuntime.wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ if (!(gid.trim() === '')) {
+ _context.next = 2;
+ break;
+ }
+ return _context.abrupt("return");
+ case 2:
+ displayName = _this.$refs.displayNameInput.$el.querySelector('input[type="text"]').value; // check if group name is valid
+ if (!(displayName.trim() === '')) {
+ _context.next = 5;
+ break;
+ }
+ return _context.abrupt("return");
+ case 5:
+ _context.prev = 5;
+ _this.openGroupMenu = false;
+ _this.loadingRenameGroup = true;
+ _context.next = 10;
+ return _this.$store.dispatch('renameGroup', {
+ groupid: gid.trim(),
+ displayName: displayName.trim()
+ });
+ case 10:
+ _this.loadingRenameGroup = false;
+ _context.next = 17;
+ break;
+ case 13:
+ _context.prev = 13;
+ _context.t0 = _context["catch"](5);
+ _this.openGroupMenu = true;
+ _this.loadingRenameGroup = false;
+ case 17:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, null, [[5, 13]]);
+ }))();
+ },
+ removeGroup: function removeGroup(groupid) {
+ var self = this;
+ // TODO migrate to a vue js confirm dialog component
+ OC.dialogs.confirm(t('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', {
+ group: groupid
+ }), t('settings', 'Please confirm the group removal '), function (success) {
+ if (success) {
+ self.$store.dispatch('removeGroup', groupid);
+ }
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=script&lang=js&":
+/*!********************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=script&lang=js& ***!
+ \********************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/event-bus */ "./node_modules/@nextcloud/event-bus/dist/index.esm.js");
+/* harmony import */ var vue_infinite_loading__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-infinite-loading */ "./node_modules/vue-infinite-loading/dist/vue-infinite-loading.js");
+/* harmony import */ var vue_infinite_loading__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue_infinite_loading__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcModal_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcModal.js */ "./node_modules/@nextcloud/vue/dist/Components/NcModal.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcModal_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcModal_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcButton.js */ "./node_modules/@nextcloud/vue/dist/Components/NcButton.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcMultiselect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcMultiselect.js */ "./node_modules/@nextcloud/vue/dist/Components/NcMultiselect.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcMultiselect_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcMultiselect_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _UserList_UserRow_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./UserList/UserRow.vue */ "./apps/settings/src/components/UserList/UserRow.vue");
+
+
+
+
+
+
+
+var unlimitedQuota = {
+ id: 'none',
+ label: t('settings', 'Unlimited')
+};
+var defaultQuota = {
+ id: 'default',
+ label: t('settings', 'Default quota')
+};
+var newUser = {
+ id: '',
+ displayName: '',
+ password: '',
+ mailAddress: '',
+ groups: [],
+ subAdminsGroups: [],
+ quota: defaultQuota,
+ language: {
+ code: 'en',
+ name: t('settings', 'Default language')
+ }
+};
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'UserList',
+ components: {
+ NcModal: (_nextcloud_vue_dist_Components_NcModal_js__WEBPACK_IMPORTED_MODULE_2___default()),
+ userRow: _UserList_UserRow_vue__WEBPACK_IMPORTED_MODULE_5__["default"],
+ NcMultiselect: (_nextcloud_vue_dist_Components_NcMultiselect_js__WEBPACK_IMPORTED_MODULE_4___default()),
+ InfiniteLoading: (vue_infinite_loading__WEBPACK_IMPORTED_MODULE_1___default()),
+ NcButton: (_nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_3___default())
+ },
+ props: {
+ users: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ showConfig: {
+ type: Object,
+ required: true
+ },
+ selectedGroup: {
+ type: String,
+ default: null
+ },
+ externalActions: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ }
+ },
+ data: function data() {
+ return {
+ unlimitedQuota: unlimitedQuota,
+ defaultQuota: defaultQuota,
+ loading: {
+ all: false,
+ groups: false
+ },
+ scrolled: false,
+ searchQuery: '',
+ newUser: Object.assign({}, newUser)
+ };
+ },
+ computed: {
+ settings: function settings() {
+ return this.$store.getters.getServerData;
+ },
+ selectedGroupDecoded: function selectedGroupDecoded() {
+ return decodeURIComponent(this.selectedGroup);
+ },
+ filteredUsers: function filteredUsers() {
+ if (this.selectedGroup === 'disabled') {
+ return this.users.filter(function (user) {
+ return user.enabled === false;
+ });
+ }
+ if (!this.settings.isAdmin) {
+ // we don't want subadmins to edit themselves
+ return this.users.filter(function (user) {
+ return user.enabled !== false;
+ });
+ }
+ return this.users.filter(function (user) {
+ return user.enabled !== false;
+ });
+ },
+ groups: function groups() {
+ // data provided php side + remove the disabled group
+ return this.$store.getters.getGroups.filter(function (group) {
+ return group.id !== 'disabled';
+ }).sort(function (a, b) {
+ return a.name.localeCompare(b.name);
+ });
+ },
+ canAddGroups: function canAddGroups() {
+ // disabled if no permission to add new users to group
+ return this.groups.map(function (group) {
+ // clone object because we don't want
+ // to edit the original groups
+ group = Object.assign({}, group);
+ group.$isDisabled = group.canAdd === false;
+ return group;
+ });
+ },
+ subAdminsGroups: function subAdminsGroups() {
+ // data provided php side
+ return this.$store.getters.getSubadminGroups;
+ },
+ quotaOptions: function quotaOptions() {
+ // convert the preset array into objects
+ var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {
+ return acc.concat({
+ id: cur,
+ label: cur
+ });
+ }, []);
+ // add default presets
+ if (this.settings.allowUnlimitedQuota) {
+ quotaPreset.unshift(this.unlimitedQuota);
+ }
+ quotaPreset.unshift(this.defaultQuota);
+ return quotaPreset;
+ },
+ minPasswordLength: function minPasswordLength() {
+ return this.$store.getters.getPasswordPolicyMinLength;
+ },
+ usersOffset: function usersOffset() {
+ return this.$store.getters.getUsersOffset;
+ },
+ usersLimit: function usersLimit() {
+ return this.$store.getters.getUsersLimit;
+ },
+ usersCount: function usersCount() {
+ return this.users.length;
+ },
+ /* LANGUAGES */languages: function languages() {
+ return [{
+ label: t('settings', 'Common languages'),
+ languages: this.settings.languages.commonLanguages
+ }, {
+ label: t('settings', 'Other languages'),
+ languages: this.settings.languages.otherLanguages
+ }];
+ },
+ isDarkTheme: function isDarkTheme() {
+ return window.getComputedStyle(this.$el).getPropertyValue('--background-invert-if-dark') === 'invert(100%)';
+ }
+ },
+ watch: {
+ // watch url change and group select
+ selectedGroup: function selectedGroup(val, old) {
+ // if selected is the disabled group but it's empty
+ this.redirectIfDisabled();
+ this.$store.commit('resetUsers');
+ this.$refs.infiniteLoading.stateChanger.reset();
+ this.setNewUserDefaultGroup(val);
+ },
+ // make sure the infiniteLoading state is changed if we manually
+ // add/remove data from the store
+ usersCount: function usersCount(val, old) {
+ // deleting the last user, reset the list
+ if (val === 0 && old === 1) {
+ this.$refs.infiniteLoading.stateChanger.reset();
+ // adding the first user, warn the infiniteLoader that
+ // the list is not empty anymore (we don't fetch the newly
+ // added user as we already have all the info we need)
+ } else if (val === 1 && old === 0) {
+ this.$refs.infiniteLoading.stateChanger.loaded();
+ }
+ }
+ },
+ mounted: function mounted() {
+ if (!this.settings.canChangePassword) {
+ OC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'));
+ }
+
+ /**
+ * Reset and init new user form
+ */
+ this.resetForm();
+
+ /**
+ * Register search
+ */
+ (0,_nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__.subscribe)('nextcloud:unified-search.search', this.search);
+ (0,_nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__.subscribe)('nextcloud:unified-search.reset', this.resetSearch);
+
+ /**
+ * If disabled group but empty, redirect
+ */
+ this.redirectIfDisabled();
+ },
+ beforeDestroy: function beforeDestroy() {
+ (0,_nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__.unsubscribe)('nextcloud:unified-search.search', this.search);
+ (0,_nextcloud_event_bus__WEBPACK_IMPORTED_MODULE_0__.unsubscribe)('nextcloud:unified-search.reset', this.resetSearch);
+ },
+ methods: {
+ onScroll: function onScroll(event) {
+ this.scrolled = event.target.scrollTo > 0;
+ },
+ /**
+ * Validate quota string to make sure it's a valid human file size
+ *
+ * @param {string} quota Quota in readable format '5 GB'
+ * @return {object}
+ */
+ validateQuota: function validateQuota(quota) {
+ // only used for new presets sent through @Tag
+ var validQuota = OC.Util.computerFileSize(quota);
+ if (validQuota !== null && validQuota >= 0) {
+ // unify format output
+ quota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota));
+ this.newUser.quota = {
+ id: quota,
+ label: quota
+ };
+ return this.newUser.quota;
+ }
+ // Default is unlimited
+ this.newUser.quota = this.quotaOptions[0];
+ return this.quotaOptions[0];
+ },
+ infiniteHandler: function infiniteHandler($state) {
+ var _this = this;
+ this.$store.dispatch('getUsers', {
+ offset: this.usersOffset,
+ limit: this.usersLimit,
+ group: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',
+ search: this.searchQuery
+ }).then(function (usersCount) {
+ if (usersCount > 0) {
+ $state.loaded();
+ }
+ if (usersCount < _this.usersLimit) {
+ $state.complete();
+ }
+ });
+ },
+ /* SEARCH */search: function search(_ref) {
+ var query = _ref.query;
+ this.searchQuery = query;
+ this.$store.commit('resetUsers');
+ this.$refs.infiniteLoading.stateChanger.reset();
+ },
+ resetSearch: function resetSearch() {
+ this.search({
+ query: ''
+ });
+ },
+ resetForm: function resetForm() {
+ // revert form to original state
+ this.newUser = Object.assign({}, newUser);
+
+ /**
+ * Init default language from server data. The use of this.settings
+ * requires a computed variable, which break the v-model binding of the form,
+ * this is a much easier solution than getter and setter on a computed var
+ */
+ if (this.settings.defaultLanguage) {
+ vue__WEBPACK_IMPORTED_MODULE_6__["default"].set(this.newUser.language, 'code', this.settings.defaultLanguage);
+ }
+
+ /**
+ * In case the user directly loaded the user list within a group
+ * the watch won't be triggered. We need to initialize it.
+ */
+ this.setNewUserDefaultGroup(this.selectedGroup);
+ this.loading.all = false;
+ },
+ createUser: function createUser() {
+ var _this2 = this;
+ this.loading.all = true;
+ this.$store.dispatch('addUser', {
+ userid: this.newUser.id,
+ password: this.newUser.password,
+ displayName: this.newUser.displayName,
+ email: this.newUser.mailAddress,
+ groups: this.newUser.groups.map(function (group) {
+ return group.id;
+ }),
+ subadmin: this.newUser.subAdminsGroups.map(function (group) {
+ return group.id;
+ }),
+ quota: this.newUser.quota.id,
+ language: this.newUser.language.code
+ }).then(function () {
+ _this2.resetForm();
+ _this2.$refs.newusername.focus();
+ _this2.closeModal();
+ }).catch(function (error) {
+ _this2.loading.all = false;
+ if (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {
+ var statuscode = error.response.data.ocs.meta.statuscode;
+ if (statuscode === 102) {
+ // wrong username
+ _this2.$refs.newusername.focus();
+ } else if (statuscode === 107) {
+ // wrong password
+ _this2.$refs.newuserpassword.focus();
+ }
+ }
+ });
+ },
+ setNewUserDefaultGroup: function setNewUserDefaultGroup(value) {
+ if (value && value.length > 0) {
+ // setting new user default group to the current selected one
+ var currentGroup = this.groups.find(function (group) {
+ return group.id === value;
+ });
+ if (currentGroup) {
+ this.newUser.groups = [currentGroup];
+ return;
+ }
+ }
+ // fallback, empty selected group
+ this.newUser.groups = [];
+ },
+ /**
+ * Create a new group
+ *
+ * @param {string} gid Group id
+ * @return {Promise}
+ */
+ createGroup: function createGroup(gid) {
+ var _this3 = this;
+ this.loading.groups = true;
+ this.$store.dispatch('addGroup', gid).then(function (group) {
+ _this3.newUser.groups.push(_this3.groups.find(function (group) {
+ return group.id === gid;
+ }));
+ _this3.loading.groups = false;
+ }).catch(function () {
+ _this3.loading.groups = false;
+ });
+ return this.$store.getters.getGroups[this.groups.length];
+ },
+ /**
+ * If the selected group is the disabled group but the count is 0
+ * redirect to the all users page.
+ * we only check for 0 because we don't have the count on ldap
+ * and we therefore set the usercount to -1 in this specific case
+ */
+ redirectIfDisabled: function redirectIfDisabled() {
+ var allGroups = this.$store.getters.getGroups;
+ if (this.selectedGroup === 'disabled' && allGroups.findIndex(function (group) {
+ return group.id === 'disabled' && group.usercount === 0;
+ }) > -1) {
+ // disabled group is empty, redirection to all users
+ this.$router.push({
+ name: 'users'
+ });
+ this.$refs.infiniteLoading.stateChanger.reset();
+ }
+ },
+ closeModal: function closeModal() {
+ // eslint-disable-next-line vue/no-mutating-props
+ this.showConfig.showNewUserForm = false;
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-click-outside */ "./node_modules/vue-click-outside/index.js");
+/* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue_click_outside__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/index.module.js");
+/* harmony import */ var _UserRowSimple_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./UserRowSimple.vue */ "./apps/settings/src/components/UserList/UserRowSimple.vue");
+/* harmony import */ var _mixins_UserRowMixin_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/UserRowMixin.js */ "./apps/settings/src/mixins/UserRowMixin.js");
+/* provided dependency */ var console = __webpack_require__(/*! ./node_modules/console-browserify/index.js */ "./node_modules/console-browserify/index.js");
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'UserRow',
+ components: {
+ UserRowSimple: _UserRowSimple_vue__WEBPACK_IMPORTED_MODULE_2__["default"],
+ NcPopoverMenu: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcPopoverMenu,
+ NcActions: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcActions,
+ NcActionButton: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcActionButton,
+ NcMultiselect: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcMultiselect
+ },
+ directives: {
+ ClickOutside: (vue_click_outside__WEBPACK_IMPORTED_MODULE_0___default())
+ },
+ mixins: [_mixins_UserRowMixin_js__WEBPACK_IMPORTED_MODULE_3__["default"]],
+ props: {
+ user: {
+ type: Object,
+ required: true
+ },
+ settings: {
+ type: Object,
+ default: function _default() {
+ return {};
+ }
+ },
+ groups: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ subAdminsGroups: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ quotaOptions: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ showConfig: {
+ type: Object,
+ default: function _default() {
+ return {};
+ }
+ },
+ languages: {
+ type: Array,
+ required: true
+ },
+ externalActions: {
+ type: Array,
+ default: function _default() {
+ return [];
+ }
+ },
+ isDarkTheme: {
+ type: Boolean,
+ required: true
+ }
+ },
+ data: function data() {
+ return {
+ rand: parseInt(Math.random() * 1000),
+ openedMenu: false,
+ feedbackMessage: '',
+ editing: false,
+ loading: {
+ all: false,
+ displayName: false,
+ password: false,
+ mailAddress: false,
+ groups: false,
+ subadmins: false,
+ quota: false,
+ delete: false,
+ disable: false,
+ languages: false,
+ wipe: false
+ }
+ };
+ },
+ computed: {
+ /* USER POPOVERMENU ACTIONS */userActions: function userActions() {
+ var actions = [{
+ icon: 'icon-delete',
+ text: t('settings', 'Delete user'),
+ action: this.deleteUser
+ }, {
+ icon: 'icon-delete',
+ text: t('settings', 'Wipe all devices'),
+ action: this.wipeUserDevices
+ }, {
+ icon: this.user.enabled ? 'icon-close' : 'icon-add',
+ text: this.user.enabled ? t('settings', 'Disable user') : t('settings', 'Enable user'),
+ action: this.enableDisableUser
+ }];
+ if (this.user.email !== null && this.user.email !== '') {
+ actions.push({
+ icon: 'icon-mail',
+ text: t('settings', 'Resend welcome email'),
+ action: this.sendWelcomeMail
+ });
+ }
+ return actions.concat(this.externalActions);
+ }
+ },
+ methods: {
+ /* MENU HANDLING */toggleMenu: function toggleMenu() {
+ this.openedMenu = !this.openedMenu;
+ },
+ hideMenu: function hideMenu() {
+ this.openedMenu = false;
+ },
+ wipeUserDevices: function wipeUserDevices() {
+ var _this = this;
+ var userid = this.user.id;
+ OC.dialogs.confirmDestructive(t('settings', 'In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.', {
+ userid: userid
+ }), t('settings', 'Remote wipe of devices'), {
+ type: OC.dialogs.YES_NO_BUTTONS,
+ confirm: t('settings', 'Wipe {userid}\'s devices', {
+ userid: userid
+ }),
+ confirmClasses: 'error',
+ cancel: t('settings', 'Cancel')
+ }, function (result) {
+ if (result) {
+ _this.loading.wipe = true;
+ _this.loading.all = true;
+ _this.$store.dispatch('wipeUserDevices', userid).then(function () {
+ _this.loading.wipe = false;
+ _this.loading.all = false;
+ });
+ }
+ }, true);
+ },
+ deleteUser: function deleteUser() {
+ var _this2 = this;
+ var userid = this.user.id;
+ OC.dialogs.confirmDestructive(t('settings', 'Fully delete {userid}\'s account including all their personal files, app data, etc.', {
+ userid: userid
+ }), t('settings', 'Account deletion'), {
+ type: OC.dialogs.YES_NO_BUTTONS,
+ confirm: t('settings', 'Delete {userid}\'s account', {
+ userid: userid
+ }),
+ confirmClasses: 'error',
+ cancel: t('settings', 'Cancel')
+ }, function (result) {
+ if (result) {
+ _this2.loading.delete = true;
+ _this2.loading.all = true;
+ return _this2.$store.dispatch('deleteUser', userid).then(function () {
+ _this2.loading.delete = false;
+ _this2.loading.all = false;
+ });
+ }
+ }, true);
+ },
+ enableDisableUser: function enableDisableUser() {
+ var _this3 = this;
+ this.loading.delete = true;
+ this.loading.all = true;
+ var userid = this.user.id;
+ var enabled = !this.user.enabled;
+ return this.$store.dispatch('enableDisableUser', {
+ userid: userid,
+ enabled: enabled
+ }).then(function () {
+ _this3.loading.delete = false;
+ _this3.loading.all = false;
+ });
+ },
+ /**
+ * Set user displayName
+ *
+ * @param {string} displayName The display name
+ */
+ updateDisplayName: function updateDisplayName() {
+ var _this4 = this;
+ var displayName = this.$refs.displayName.value;
+ this.loading.displayName = true;
+ this.$store.dispatch('setUserData', {
+ userid: this.user.id,
+ key: 'displayname',
+ value: displayName
+ }).then(function () {
+ _this4.loading.displayName = false;
+ _this4.$refs.displayName.value = displayName;
+ });
+ },
+ /**
+ * Set user password
+ *
+ * @param {string} password The email address
+ */
+ updatePassword: function updatePassword() {
+ var _this5 = this;
+ var password = this.$refs.password.value;
+ this.loading.password = true;
+ this.$store.dispatch('setUserData', {
+ userid: this.user.id,
+ key: 'password',
+ value: password
+ }).then(function () {
+ _this5.loading.password = false;
+ _this5.$refs.password.value = ''; // empty & show placeholder
+ });
+ },
+ /**
+ * Set user mailAddress
+ *
+ * @param {string} mailAddress The email address
+ */
+ updateEmail: function updateEmail() {
+ var _this6 = this;
+ var mailAddress = this.$refs.mailAddress.value;
+ this.loading.mailAddress = true;
+ this.$store.dispatch('setUserData', {
+ userid: this.user.id,
+ key: 'email',
+ value: mailAddress
+ }).then(function () {
+ _this6.loading.mailAddress = false;
+ _this6.$refs.mailAddress.value = mailAddress;
+ });
+ },
+ /**
+ * Create a new group and add user to it
+ *
+ * @param {string} gid Group id
+ */
+ createGroup: function createGroup(gid) {
+ var _this7 = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
+ var userid;
+ return regeneratorRuntime.wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ _this7.loading = {
+ groups: true,
+ subadmins: true
+ };
+ _context.prev = 1;
+ _context.next = 4;
+ return _this7.$store.dispatch('addGroup', gid);
+ case 4:
+ userid = _this7.user.id;
+ _context.next = 7;
+ return _this7.$store.dispatch('addUserGroup', {
+ userid: userid,
+ gid: gid
+ });
+ case 7:
+ _context.next = 12;
+ break;
+ case 9:
+ _context.prev = 9;
+ _context.t0 = _context["catch"](1);
+ console.error(_context.t0);
+ case 12:
+ _context.prev = 12;
+ _this7.loading = {
+ groups: false,
+ subadmins: false
+ };
+ return _context.finish(12);
+ case 15:
+ return _context.abrupt("return", _this7.$store.getters.getGroups[_this7.groups.length]);
+ case 16:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, null, [[1, 9, 12, 15]]);
+ }))();
+ },
+ /**
+ * Add user to group
+ *
+ * @param {object} group Group object
+ */
+ addUserGroup: function addUserGroup(group) {
+ var _this8 = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
+ var userid, gid;
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
+ while (1) {
+ switch (_context2.prev = _context2.next) {
+ case 0:
+ if (!(group.canAdd === false)) {
+ _context2.next = 2;
+ break;
+ }
+ return _context2.abrupt("return", false);
+ case 2:
+ _this8.loading.groups = true;
+ userid = _this8.user.id;
+ gid = group.id;
+ _context2.prev = 5;
+ _context2.next = 8;
+ return _this8.$store.dispatch('addUserGroup', {
+ userid: userid,
+ gid: gid
+ });
+ case 8:
+ _context2.next = 13;
+ break;
+ case 10:
+ _context2.prev = 10;
+ _context2.t0 = _context2["catch"](5);
+ console.error(_context2.t0);
+ case 13:
+ _context2.prev = 13;
+ _this8.loading.groups = false;
+ return _context2.finish(13);
+ case 16:
+ case "end":
+ return _context2.stop();
+ }
+ }
+ }, _callee2, null, [[5, 10, 13, 16]]);
+ }))();
+ },
+ /**
+ * Remove user from group
+ *
+ * @param {object} group Group object
+ */
+ removeUserGroup: function removeUserGroup(group) {
+ var _this9 = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
+ var userid, gid;
+ return regeneratorRuntime.wrap(function _callee3$(_context3) {
+ while (1) {
+ switch (_context3.prev = _context3.next) {
+ case 0:
+ if (!(group.canRemove === false)) {
+ _context3.next = 2;
+ break;
+ }
+ return _context3.abrupt("return", false);
+ case 2:
+ _this9.loading.groups = true;
+ userid = _this9.user.id;
+ gid = group.id;
+ _context3.prev = 5;
+ _context3.next = 8;
+ return _this9.$store.dispatch('removeUserGroup', {
+ userid: userid,
+ gid: gid
+ });
+ case 8:
+ _this9.loading.groups = false;
+ // remove user from current list if current list is the removed group
+ if (_this9.$route.params.selectedGroup === gid) {
+ _this9.$store.commit('deleteUser', userid);
+ }
+ _context3.next = 15;
+ break;
+ case 12:
+ _context3.prev = 12;
+ _context3.t0 = _context3["catch"](5);
+ _this9.loading.groups = false;
+ case 15:
+ case "end":
+ return _context3.stop();
+ }
+ }
+ }, _callee3, null, [[5, 12]]);
+ }))();
+ },
+ /**
+ * Add user to group
+ *
+ * @param {object} group Group object
+ */
+ addUserSubAdmin: function addUserSubAdmin(group) {
+ var _this10 = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {
+ var userid, gid;
+ return regeneratorRuntime.wrap(function _callee4$(_context4) {
+ while (1) {
+ switch (_context4.prev = _context4.next) {
+ case 0:
+ _this10.loading.subadmins = true;
+ userid = _this10.user.id;
+ gid = group.id;
+ _context4.prev = 3;
+ _context4.next = 6;
+ return _this10.$store.dispatch('addUserSubAdmin', {
+ userid: userid,
+ gid: gid
+ });
+ case 6:
+ _this10.loading.subadmins = false;
+ _context4.next = 12;
+ break;
+ case 9:
+ _context4.prev = 9;
+ _context4.t0 = _context4["catch"](3);
+ console.error(_context4.t0);
+ case 12:
+ case "end":
+ return _context4.stop();
+ }
+ }
+ }, _callee4, null, [[3, 9]]);
+ }))();
+ },
+ /**
+ * Remove user from group
+ *
+ * @param {object} group Group object
+ */
+ removeUserSubAdmin: function removeUserSubAdmin(group) {
+ var _this11 = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5() {
+ var userid, gid;
+ return regeneratorRuntime.wrap(function _callee5$(_context5) {
+ while (1) {
+ switch (_context5.prev = _context5.next) {
+ case 0:
+ _this11.loading.subadmins = true;
+ userid = _this11.user.id;
+ gid = group.id;
+ _context5.prev = 3;
+ _context5.next = 6;
+ return _this11.$store.dispatch('removeUserSubAdmin', {
+ userid: userid,
+ gid: gid
+ });
+ case 6:
+ _context5.next = 11;
+ break;
+ case 8:
+ _context5.prev = 8;
+ _context5.t0 = _context5["catch"](3);
+ console.error(_context5.t0);
+ case 11:
+ _context5.prev = 11;
+ _this11.loading.subadmins = false;
+ return _context5.finish(11);
+ case 14:
+ case "end":
+ return _context5.stop();
+ }
+ }
+ }, _callee5, null, [[3, 8, 11, 14]]);
+ }))();
+ },
+ /**
+ * Dispatch quota set request
+ *
+ * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}
+ * @return {string}
+ */
+ setUserQuota: function setUserQuota() {
+ var _arguments = arguments,
+ _this12 = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee6() {
+ var quota;
+ return regeneratorRuntime.wrap(function _callee6$(_context6) {
+ while (1) {
+ switch (_context6.prev = _context6.next) {
+ case 0:
+ quota = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : 'none';
+ _this12.loading.quota = true;
+ // ensure we only send the preset id
+ quota = quota.id ? quota.id : quota;
+ _context6.prev = 3;
+ _context6.next = 6;
+ return _this12.$store.dispatch('setUserData', {
+ userid: _this12.user.id,
+ key: 'quota',
+ value: quota
+ });
+ case 6:
+ _context6.next = 11;
+ break;
+ case 8:
+ _context6.prev = 8;
+ _context6.t0 = _context6["catch"](3);
+ console.error(_context6.t0);
+ case 11:
+ _context6.prev = 11;
+ _this12.loading.quota = false;
+ return _context6.finish(11);
+ case 14:
+ return _context6.abrupt("return", quota);
+ case 15:
+ case "end":
+ return _context6.stop();
+ }
+ }
+ }, _callee6, null, [[3, 8, 11, 14]]);
+ }))();
+ },
+ /**
+ * Validate quota string to make sure it's a valid human file size
+ *
+ * @param {string} quota Quota in readable format '5 GB'
+ * @return {Promise|boolean}
+ */
+ validateQuota: function validateQuota(quota) {
+ // only used for new presets sent through @Tag
+ var validQuota = OC.Util.computerFileSize(quota);
+ if (validQuota !== null && validQuota >= 0) {
+ // unify format output
+ return this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));
+ }
+ // if no valid do not change
+ return false;
+ },
+ /**
+ * Dispatch language set request
+ *
+ * @param {object} lang language object {code:'en', name:'English'}
+ * @return {object}
+ */
+ setUserLanguage: function setUserLanguage(lang) {
+ var _this13 = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee7() {
+ return regeneratorRuntime.wrap(function _callee7$(_context7) {
+ while (1) {
+ switch (_context7.prev = _context7.next) {
+ case 0:
+ _this13.loading.languages = true;
+ // ensure we only send the preset id
+ _context7.prev = 1;
+ _context7.next = 4;
+ return _this13.$store.dispatch('setUserData', {
+ userid: _this13.user.id,
+ key: 'language',
+ value: lang.code
+ });
+ case 4:
+ _context7.next = 9;
+ break;
+ case 6:
+ _context7.prev = 6;
+ _context7.t0 = _context7["catch"](1);
+ console.error(_context7.t0);
+ case 9:
+ _context7.prev = 9;
+ _this13.loading.languages = false;
+ return _context7.finish(9);
+ case 12:
+ return _context7.abrupt("return", lang);
+ case 13:
+ case "end":
+ return _context7.stop();
+ }
+ }
+ }, _callee7, null, [[1, 6, 9, 12]]);
+ }))();
+ },
+ /**
+ * Dispatch new welcome mail request
+ */
+ sendWelcomeMail: function sendWelcomeMail() {
+ var _this14 = this;
+ this.loading.all = true;
+ this.$store.dispatch('sendWelcomeMail', this.user.id).then(function (success) {
+ if (success) {
+ // Show feedback to indicate the success
+ _this14.feedbackMessage = t('setting', 'Welcome mail sent!');
+ setTimeout(function () {
+ _this14.feedbackMessage = '';
+ }, 2000);
+ }
+ _this14.loading.all = false;
+ });
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&":
+/*!**********************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js& ***!
+ \**********************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcPopoverMenu_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcPopoverMenu.js */ "./node_modules/@nextcloud/vue/dist/Components/NcPopoverMenu.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcPopoverMenu_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcPopoverMenu_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcActions_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcActions.js */ "./node_modules/@nextcloud/vue/dist/Components/NcActions.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcActions_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcActions_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcActionButton_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcActionButton.js */ "./node_modules/@nextcloud/vue/dist/Components/NcActionButton.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcActionButton_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcActionButton_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-click-outside */ "./node_modules/vue-click-outside/index.js");
+/* harmony import */ var vue_click_outside__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue_click_outside__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _nextcloud_auth__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/auth */ "./node_modules/@nextcloud/auth/dist/index.esm.js");
+/* harmony import */ var _mixins_UserRowMixin_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/UserRowMixin.js */ "./apps/settings/src/mixins/UserRowMixin.js");
+
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'UserRowSimple',
+ components: {
+ NcPopoverMenu: (_nextcloud_vue_dist_Components_NcPopoverMenu_js__WEBPACK_IMPORTED_MODULE_0___default()),
+ NcActionButton: (_nextcloud_vue_dist_Components_NcActionButton_js__WEBPACK_IMPORTED_MODULE_2___default()),
+ NcActions: (_nextcloud_vue_dist_Components_NcActions_js__WEBPACK_IMPORTED_MODULE_1___default())
+ },
+ directives: {
+ ClickOutside: (vue_click_outside__WEBPACK_IMPORTED_MODULE_3___default())
+ },
+ mixins: [_mixins_UserRowMixin_js__WEBPACK_IMPORTED_MODULE_5__["default"]],
+ props: {
+ user: {
+ type: Object,
+ required: true
+ },
+ loading: {
+ type: Object,
+ required: true
+ },
+ showConfig: {
+ type: Object,
+ required: true
+ },
+ userActions: {
+ type: Array,
+ required: true
+ },
+ openedMenu: {
+ type: Boolean,
+ required: true
+ },
+ feedbackMessage: {
+ type: String,
+ required: true
+ },
+ subAdminsGroups: {
+ type: Array,
+ required: true
+ },
+ settings: {
+ type: Object,
+ required: true
+ },
+ isDarkTheme: {
+ type: Boolean,
+ required: true
+ }
+ },
+ computed: {
+ userGroupsLabels: function userGroupsLabels() {
+ return this.userGroups.map(function (group) {
+ return group.name;
+ }).join(', ');
+ },
+ userSubAdminsGroupsLabels: function userSubAdminsGroupsLabels() {
+ return this.userSubAdminsGroups.map(function (group) {
+ return group.name;
+ }).join(', ');
+ },
+ usedSpace: function usedSpace() {
+ if (this.user.quota.used) {
+ return t('settings', '{size} used', {
+ size: OC.Util.humanFileSize(this.user.quota.used)
+ });
+ }
+ return t('settings', '{size} used', {
+ size: OC.Util.humanFileSize(0)
+ });
+ },
+ canEdit: function canEdit() {
+ return (0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_4__.getCurrentUser)().uid !== this.user.id || this.settings.isAdmin;
+ },
+ userQuota: function userQuota() {
+ var quota = this.user.quota.quota;
+ if (quota === 'default') {
+ quota = this.settings.defaultQuota;
+ if (quota !== 'none') {
+ // convert to numeric value to match what the server would usually return
+ quota = OC.Util.computerFileSize(quota);
+ }
+ }
+
+ // when the default quota is unlimited, the server returns -3 here, map it to "none"
+ if (quota === 'none' || quota === -3) {
+ return t('settings', 'Unlimited');
+ } else if (quota >= 0) {
+ return OC.Util.humanFileSize(quota);
+ }
+ return OC.Util.humanFileSize(0);
+ }
+ },
+ methods: {
+ toggleMenu: function toggleMenu() {
+ this.$emit('update:openedMenu', !this.openedMenu);
+ },
+ hideMenu: function hideMenu() {
+ this.$emit('update:openedMenu', false);
+ },
+ toggleEdit: function toggleEdit() {
+ this.$emit('update:editing', true);
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=script&lang=js&":
+/*!************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppContent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppContent.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppContent.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppContent_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppContent_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppNavigation.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppNavigation.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigation_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppNavigation_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationCaption_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppNavigationCaption.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppNavigationCaption.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationCaption_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppNavigationCaption_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationCounter_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppNavigationCounter.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppNavigationCounter.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationCounter_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppNavigationCounter_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationItem_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppNavigationItem.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppNavigationItem.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationItem_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppNavigationItem_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationNew_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppNavigationNew.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppNavigationNew.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationNew_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppNavigationNew_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationSettings_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcAppNavigationSettings.js */ "./node_modules/@nextcloud/vue/dist/Components/NcAppNavigationSettings.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcAppNavigationSettings_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcAppNavigationSettings_js__WEBPACK_IMPORTED_MODULE_6__);
+/* harmony import */ var _nextcloud_axios__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nextcloud/axios */ "./node_modules/@nextcloud/axios/dist/index.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcContent_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcContent.js */ "./node_modules/@nextcloud/vue/dist/Components/NcContent.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcContent_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcContent_js__WEBPACK_IMPORTED_MODULE_8__);
+/* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcMultiselect_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcMultiselect.js */ "./node_modules/@nextcloud/vue/dist/Components/NcMultiselect.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcMultiselect_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcMultiselect_js__WEBPACK_IMPORTED_MODULE_10__);
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.runtime.esm.js");
+/* harmony import */ var vue_localstorage__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! vue-localstorage */ "./node_modules/vue-localstorage/dist/vue-local-storage.js");
+/* harmony import */ var vue_localstorage__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(vue_localstorage__WEBPACK_IMPORTED_MODULE_11__);
+/* harmony import */ var _components_GroupListItem_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../components/GroupListItem.vue */ "./apps/settings/src/components/GroupListItem.vue");
+/* harmony import */ var _components_UserList_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../components/UserList.vue */ "./apps/settings/src/components/UserList.vue");
+/* provided dependency */ var console = __webpack_require__(/*! ./node_modules/console-browserify/index.js */ "./node_modules/console-browserify/index.js");
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
+function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+vue__WEBPACK_IMPORTED_MODULE_14__["default"].use((vue_localstorage__WEBPACK_IMPORTED_MODULE_11___default()));
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'Users',
+ components: {
+ NcAppContent: (_nextcloud_vue_dist_Components_NcAppContent_js__WEBPACK_IMPORTED_MODULE_0___default()),
+ NcAppNavigation: (_nextcloud_vue_dist_Components_NcAppNavigation_js__WEBPACK_IMPORTED_MODULE_1___default()),
+ NcAppNavigationCaption: (_nextcloud_vue_dist_Components_NcAppNavigationCaption_js__WEBPACK_IMPORTED_MODULE_2___default()),
+ NcAppNavigationCounter: (_nextcloud_vue_dist_Components_NcAppNavigationCounter_js__WEBPACK_IMPORTED_MODULE_3___default()),
+ NcAppNavigationItem: (_nextcloud_vue_dist_Components_NcAppNavigationItem_js__WEBPACK_IMPORTED_MODULE_4___default()),
+ NcAppNavigationNew: (_nextcloud_vue_dist_Components_NcAppNavigationNew_js__WEBPACK_IMPORTED_MODULE_5___default()),
+ NcAppNavigationSettings: (_nextcloud_vue_dist_Components_NcAppNavigationSettings_js__WEBPACK_IMPORTED_MODULE_6___default()),
+ NcContent: (_nextcloud_vue_dist_Components_NcContent_js__WEBPACK_IMPORTED_MODULE_8___default()),
+ GroupListItem: _components_GroupListItem_vue__WEBPACK_IMPORTED_MODULE_12__["default"],
+ NcMultiselect: (_nextcloud_vue_dist_Components_NcMultiselect_js__WEBPACK_IMPORTED_MODULE_10___default()),
+ UserList: _components_UserList_vue__WEBPACK_IMPORTED_MODULE_13__["default"]
+ },
+ props: {
+ selectedGroup: {
+ type: String,
+ default: null
+ }
+ },
+ data: function data() {
+ return {
+ // default quota is set to unlimited
+ unlimitedQuota: {
+ id: 'none',
+ label: t('settings', 'Unlimited')
+ },
+ // temporary value used for multiselect change
+ selectedQuota: false,
+ externalActions: [],
+ loadingAddGroup: false,
+ loadingSendMail: false,
+ showConfig: {
+ showStoragePath: false,
+ showUserBackend: false,
+ showLastLogin: false,
+ showNewUserForm: false,
+ showLanguages: false
+ }
+ };
+ },
+ computed: {
+ selectedGroupDecoded: function selectedGroupDecoded() {
+ return this.selectedGroup ? decodeURIComponent(this.selectedGroup) : null;
+ },
+ users: function users() {
+ return this.$store.getters.getUsers;
+ },
+ groups: function groups() {
+ return this.$store.getters.getGroups;
+ },
+ usersOffset: function usersOffset() {
+ return this.$store.getters.getUsersOffset;
+ },
+ usersLimit: function usersLimit() {
+ return this.$store.getters.getUsersLimit;
+ },
+ // Local settings
+ showLanguages: {
+ get: function get() {
+ return this.getLocalstorage('showLanguages');
+ },
+ set: function set(status) {
+ this.setLocalStorage('showLanguages', status);
+ }
+ },
+ showLastLogin: {
+ get: function get() {
+ return this.getLocalstorage('showLastLogin');
+ },
+ set: function set(status) {
+ this.setLocalStorage('showLastLogin', status);
+ }
+ },
+ showUserBackend: {
+ get: function get() {
+ return this.getLocalstorage('showUserBackend');
+ },
+ set: function set(status) {
+ this.setLocalStorage('showUserBackend', status);
+ }
+ },
+ showStoragePath: {
+ get: function get() {
+ return this.getLocalstorage('showStoragePath');
+ },
+ set: function set(status) {
+ this.setLocalStorage('showStoragePath', status);
+ }
+ },
+ userCount: function userCount() {
+ return this.$store.getters.getUserCount;
+ },
+ settings: function settings() {
+ return this.$store.getters.getServerData;
+ },
+ // default quota
+ quotaOptions: function quotaOptions() {
+ // convert the preset array into objects
+ var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {
+ return acc.concat({
+ id: cur,
+ label: cur
+ });
+ }, []);
+ // add default presets
+ if (this.settings.allowUnlimitedQuota) {
+ quotaPreset.unshift(this.unlimitedQuota);
+ }
+ return quotaPreset;
+ },
+ // mapping saved values to objects
+ defaultQuota: {
+ get: function get() {
+ if (this.selectedQuota !== false) {
+ return this.selectedQuota;
+ }
+ if (this.settings.defaultQuota !== this.unlimitedQuota.id && OC.Util.computerFileSize(this.settings.defaultQuota) >= 0) {
+ // if value is valid, let's map the quotaOptions or return custom quota
+ return {
+ id: this.settings.defaultQuota,
+ label: this.settings.defaultQuota
+ };
+ }
+ return this.unlimitedQuota; // unlimited
+ },
+ set: function set(quota) {
+ this.selectedQuota = quota;
+ }
+ },
+ sendWelcomeMail: {
+ get: function get() {
+ return this.settings.newUserSendEmail;
+ },
+ set: function set(value) {
+ var _this = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
+ return regeneratorRuntime.wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ _context.prev = 0;
+ _this.loadingSendMail = true;
+ _this.$store.commit('setServerData', _objectSpread(_objectSpread({}, _this.settings), {}, {
+ newUserSendEmail: value
+ }));
+ _context.next = 5;
+ return _nextcloud_axios__WEBPACK_IMPORTED_MODULE_7__["default"].post((0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_9__.generateUrl)('/settings/users/preferences/newUser.sendEmail'), {
+ value: value ? 'yes' : 'no'
+ });
+ case 5:
+ _context.next = 10;
+ break;
+ case 7:
+ _context.prev = 7;
+ _context.t0 = _context["catch"](0);
+ console.error('could not update newUser.sendEmail preference: ' + _context.t0.message, _context.t0);
+ case 10:
+ _context.prev = 10;
+ _this.loadingSendMail = false;
+ return _context.finish(10);
+ case 13:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, null, [[0, 7, 10, 13]]);
+ }))();
+ }
+ },
+ groupList: function groupList() {
+ var _this2 = this;
+ var groups = Array.isArray(this.groups) ? this.groups : [];
+ return groups
+ // filter out disabled and admin
+ .filter(function (group) {
+ return group.id !== 'disabled' && group.id !== 'admin';
+ }).map(function (group) {
+ return _this2.formatGroupMenu(group);
+ });
+ },
+ adminGroupMenu: function adminGroupMenu() {
+ return this.formatGroupMenu(this.groups.find(function (group) {
+ return group.id === 'admin';
+ }));
+ },
+ disabledGroupMenu: function disabledGroupMenu() {
+ return this.formatGroupMenu(this.groups.find(function (group) {
+ return group.id === 'disabled';
+ }));
+ }
+ },
+ beforeMount: function beforeMount() {
+ this.$store.commit('initGroups', {
+ groups: this.$store.getters.getServerData.groups,
+ orderBy: this.$store.getters.getServerData.sortGroups,
+ userCount: this.$store.getters.getServerData.userCount
+ });
+ this.$store.dispatch('getPasswordPolicyMinLength');
+ },
+ created: function created() {
+ // init the OCA.Settings.UserList object
+ // and add the registerAction method
+ Object.assign(OCA, {
+ Settings: {
+ UserList: {
+ registerAction: this.registerAction
+ }
+ }
+ });
+ },
+ methods: {
+ showNewUserMenu: function showNewUserMenu() {
+ this.showConfig.showNewUserForm = true;
+ if (this.showConfig.showNewUserForm) {
+ vue__WEBPACK_IMPORTED_MODULE_14__["default"].nextTick(function () {
+ window.newusername.focus();
+ });
+ }
+ },
+ getLocalstorage: function getLocalstorage(key) {
+ // force initialization
+ var localConfig = this.$localStorage.get(key);
+ // if localstorage is null, fallback to original values
+ this.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key];
+ return this.showConfig[key];
+ },
+ setLocalStorage: function setLocalStorage(key, status) {
+ this.showConfig[key] = status;
+ this.$localStorage.set(key, status);
+ return status;
+ },
+ /**
+ * Dispatch default quota set request
+ *
+ * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}
+ */
+ setDefaultQuota: function setDefaultQuota() {
+ var _this3 = this;
+ var quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';
+ this.$store.dispatch('setAppConfig', {
+ app: 'files',
+ key: 'default_quota',
+ // ensure we only send the preset id
+ value: quota.id ? quota.id : quota
+ }).then(function () {
+ if (_typeof(quota) !== 'object') {
+ quota = {
+ id: quota,
+ label: quota
+ };
+ }
+ _this3.defaultQuota = quota;
+ });
+ },
+ /**
+ * Validate quota string to make sure it's a valid human file size
+ *
+ * @param {string} quota Quota in readable format '5 GB'
+ * @return {Promise|boolean}
+ */
+ validateQuota: function validateQuota(quota) {
+ // only used for new presets sent through @Tag
+ var validQuota = OC.Util.computerFileSize(quota);
+ if (validQuota === null) {
+ return this.setDefaultQuota('none');
+ } else {
+ // unify format output
+ return this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));
+ }
+ },
+ /**
+ * Register a new action for the user menu
+ *
+ * @param {string} icon the icon class
+ * @param {string} text the text to display
+ * @param {Function} action the function to run
+ * @return {Array}
+ */
+ registerAction: function registerAction(icon, text, action) {
+ this.externalActions.push({
+ icon: icon,
+ text: text,
+ action: action
+ });
+ return this.externalActions;
+ },
+ /**
+ * Create a new group
+ *
+ * @param {string} gid The group id
+ */
+ createGroup: function createGroup(gid) {
+ var _this4 = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
+ while (1) {
+ switch (_context2.prev = _context2.next) {
+ case 0:
+ if (!(gid.trim() === '')) {
+ _context2.next = 2;
+ break;
+ }
+ return _context2.abrupt("return");
+ case 2:
+ _context2.prev = 2;
+ _this4.loadingAddGroup = true;
+ _context2.next = 6;
+ return _this4.$store.dispatch('addGroup', gid.trim());
+ case 6:
+ _this4.hideAddGroupForm();
+ _context2.next = 9;
+ return _this4.$router.push({
+ name: 'group',
+ params: {
+ selectedGroup: encodeURIComponent(gid.trim())
+ }
+ });
+ case 9:
+ _context2.next = 14;
+ break;
+ case 11:
+ _context2.prev = 11;
+ _context2.t0 = _context2["catch"](2);
+ _this4.showAddGroupForm();
+ case 14:
+ _context2.prev = 14;
+ _this4.loadingAddGroup = false;
+ return _context2.finish(14);
+ case 17:
+ case "end":
+ return _context2.stop();
+ }
+ }
+ }, _callee2, null, [[2, 11, 14, 17]]);
+ }))();
+ },
+ showAddGroupForm: function showAddGroupForm() {
+ var _this5 = this;
+ this.$refs.addGroup.editingActive = true;
+ this.$refs.addGroup.onMenuToggle(false);
+ this.$nextTick(function () {
+ _this5.$refs.addGroup.$refs.editingInput.focusInput();
+ });
+ },
+ hideAddGroupForm: function hideAddGroupForm() {
+ this.$refs.addGroup.editingActive = false;
+ this.$refs.addGroup.editingValue = '';
+ },
+ /**
+ * Format a group to a menu entry
+ *
+ * @param {object} group the group
+ * @return {object}
+ */
+ formatGroupMenu: function formatGroupMenu(group) {
+ var item = {};
+ if (typeof group === 'undefined') {
+ return {};
+ }
+ item.id = group.id;
+ item.title = group.name;
+ item.usercount = group.usercount;
+
+ // users count for all groups
+ if (group.usercount - group.disabled > 0) {
+ item.count = group.usercount - group.disabled;
+ }
+ return item;
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/GroupListItem.vue?vue&type=template&id=b3f9b202&":
+/*!************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/GroupListItem.vue?vue&type=template&id=b3f9b202& ***!
+ \************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("NcAppNavigationItem", {
+ key: _vm.id,
+ attrs: {
+ exact: true,
+ title: _vm.title,
+ to: {
+ name: "group",
+ params: {
+ selectedGroup: encodeURIComponent(_vm.id)
+ }
+ },
+ icon: "icon-group",
+ loading: _vm.loadingRenameGroup,
+ "menu-open": _vm.openGroupMenu
+ },
+ on: {
+ "update:menuOpen": _vm.handleGroupMenuOpen
+ },
+ scopedSlots: _vm._u([{
+ key: "counter",
+ fn: function fn() {
+ return [_vm.count ? _c("NcCounterBubble", [_vm._v("\n\t\t\t" + _vm._s(_vm.count) + "\n\t\t")]) : _vm._e()];
+ },
+ proxy: true
+ }, {
+ key: "actions",
+ fn: function fn() {
+ return [_vm.id !== "admin" && _vm.id !== "disabled" && _vm.settings.isAdmin ? _c("NcActionInput", {
+ ref: "displayNameInput",
+ attrs: {
+ icon: "icon-edit",
+ type: "text",
+ value: _vm.title
+ },
+ on: {
+ submit: function submit($event) {
+ return _vm.renameGroup(_vm.id);
+ }
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Rename group")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.id !== "admin" && _vm.id !== "disabled" && _vm.settings.isAdmin ? _c("NcActionButton", {
+ attrs: {
+ icon: "icon-delete"
+ },
+ on: {
+ click: function click($event) {
+ return _vm.removeGroup(_vm.id);
+ }
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Remove group")) + "\n\t\t")]) : _vm._e()];
+ },
+ proxy: true
+ }])
+ });
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca&scoped=true&":
+/*!*******************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca&scoped=true& ***!
+ \*******************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("div", {
+ staticClass: "user-list-grid",
+ attrs: {
+ id: "app-content"
+ },
+ on: {
+ "&scroll": function scroll($event) {
+ return _vm.onScroll.apply(null, arguments);
+ }
+ }
+ }, [_vm.showConfig.showNewUserForm ? _c("NcModal", {
+ attrs: {
+ size: "small"
+ },
+ on: {
+ close: _vm.closeModal
+ }
+ }, [_c("form", {
+ staticClass: "modal__content",
+ attrs: {
+ id: "new-user",
+ disabled: _vm.loading.all
+ },
+ on: {
+ submit: function submit($event) {
+ $event.preventDefault();
+ return _vm.createUser.apply(null, arguments);
+ }
+ }
+ }, [_c("h2", [_vm._v(_vm._s(_vm.t("settings", "New user")))]), _vm._v(" "), _c("input", {
+ directives: [{
+ name: "model",
+ rawName: "v-model",
+ value: _vm.newUser.id,
+ expression: "newUser.id"
+ }],
+ ref: "newusername",
+ staticClass: "modal__item",
+ attrs: {
+ id: "newusername",
+ disabled: _vm.settings.newUserGenerateUserID,
+ placeholder: _vm.settings.newUserGenerateUserID ? _vm.t("settings", "Will be autogenerated") : _vm.t("settings", "Username"),
+ autocapitalize: "none",
+ autocomplete: "off",
+ autocorrect: "off",
+ name: "username",
+ pattern: "[a-zA-Z0-9 _\\.@\\-']+",
+ required: "",
+ type: "text"
+ },
+ domProps: {
+ value: _vm.newUser.id
+ },
+ on: {
+ input: function input($event) {
+ if ($event.target.composing) return;
+ _vm.$set(_vm.newUser, "id", $event.target.value);
+ }
+ }
+ }), _vm._v(" "), _c("input", {
+ directives: [{
+ name: "model",
+ rawName: "v-model",
+ value: _vm.newUser.displayName,
+ expression: "newUser.displayName"
+ }],
+ staticClass: "modal__item",
+ attrs: {
+ id: "newdisplayname",
+ placeholder: _vm.t("settings", "Display name"),
+ autocapitalize: "none",
+ autocomplete: "off",
+ autocorrect: "off",
+ name: "displayname",
+ type: "text"
+ },
+ domProps: {
+ value: _vm.newUser.displayName
+ },
+ on: {
+ input: function input($event) {
+ if ($event.target.composing) return;
+ _vm.$set(_vm.newUser, "displayName", $event.target.value);
+ }
+ }
+ }), _vm._v(" "), _c("input", {
+ directives: [{
+ name: "model",
+ rawName: "v-model",
+ value: _vm.newUser.password,
+ expression: "newUser.password"
+ }],
+ ref: "newuserpassword",
+ staticClass: "modal__item",
+ attrs: {
+ id: "newuserpassword",
+ minlength: _vm.minPasswordLength,
+ maxlength: 469,
+ placeholder: _vm.t("settings", "Password"),
+ required: _vm.newUser.mailAddress === "",
+ autocapitalize: "none",
+ autocomplete: "new-password",
+ autocorrect: "off",
+ name: "password",
+ type: "password"
+ },
+ domProps: {
+ value: _vm.newUser.password
+ },
+ on: {
+ input: function input($event) {
+ if ($event.target.composing) return;
+ _vm.$set(_vm.newUser, "password", $event.target.value);
+ }
+ }
+ }), _vm._v(" "), _c("input", {
+ directives: [{
+ name: "model",
+ rawName: "v-model",
+ value: _vm.newUser.mailAddress,
+ expression: "newUser.mailAddress"
+ }],
+ staticClass: "modal__item",
+ attrs: {
+ id: "newemail",
+ placeholder: _vm.t("settings", "Email"),
+ required: _vm.newUser.password === "" || _vm.settings.newUserRequireEmail,
+ autocapitalize: "none",
+ autocomplete: "off",
+ autocorrect: "off",
+ name: "email",
+ type: "email"
+ },
+ domProps: {
+ value: _vm.newUser.mailAddress
+ },
+ on: {
+ input: function input($event) {
+ if ($event.target.composing) return;
+ _vm.$set(_vm.newUser, "mailAddress", $event.target.value);
+ }
+ }
+ }), _vm._v(" "), _c("div", {
+ staticClass: "groups modal__item"
+ }, [!_vm.settings.isAdmin ? _c("input", {
+ class: {
+ "icon-loading-small": _vm.loading.groups
+ },
+ attrs: {
+ id: "newgroups",
+ required: !_vm.settings.isAdmin,
+ tabindex: "-1",
+ type: "text"
+ },
+ domProps: {
+ value: _vm.newUser.groups
+ }
+ }) : _vm._e(), _vm._v(" "), _c("NcMultiselect", {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "close-on-select": false,
+ disabled: _vm.loading.groups || _vm.loading.all,
+ multiple: true,
+ options: _vm.canAddGroups,
+ placeholder: _vm.t("settings", "Add user to group"),
+ "tag-width": 60,
+ taggable: true,
+ label: "name",
+ "tag-placeholder": "create",
+ "track-by": "id"
+ },
+ on: {
+ tag: _vm.createGroup
+ },
+ model: {
+ value: _vm.newUser.groups,
+ callback: function callback($$v) {
+ _vm.$set(_vm.newUser, "groups", $$v);
+ },
+ expression: "newUser.groups"
+ }
+ }, [_c("span", {
+ attrs: {
+ slot: "noResult"
+ },
+ slot: "noResult"
+ }, [_vm._v(_vm._s(_vm.t("settings", "No results")))])])], 1), _vm._v(" "), _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin ? _c("div", {
+ staticClass: "subadmins modal__item"
+ }, [_c("NcMultiselect", {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "close-on-select": false,
+ multiple: true,
+ options: _vm.subAdminsGroups,
+ placeholder: _vm.t("settings", "Set user as admin for"),
+ "tag-width": 60,
+ label: "name",
+ "track-by": "id"
+ },
+ model: {
+ value: _vm.newUser.subAdminsGroups,
+ callback: function callback($$v) {
+ _vm.$set(_vm.newUser, "subAdminsGroups", $$v);
+ },
+ expression: "newUser.subAdminsGroups"
+ }
+ }, [_c("span", {
+ attrs: {
+ slot: "noResult"
+ },
+ slot: "noResult"
+ }, [_vm._v(_vm._s(_vm.t("settings", "No results")))])])], 1) : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "quota modal__item"
+ }, [_c("NcMultiselect", {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "allow-empty": false,
+ options: _vm.quotaOptions,
+ placeholder: _vm.t("settings", "Select user quota"),
+ taggable: true,
+ label: "label",
+ "track-by": "id"
+ },
+ on: {
+ tag: _vm.validateQuota
+ },
+ model: {
+ value: _vm.newUser.quota,
+ callback: function callback($$v) {
+ _vm.$set(_vm.newUser, "quota", $$v);
+ },
+ expression: "newUser.quota"
+ }
+ })], 1), _vm._v(" "), _vm.showConfig.showLanguages ? _c("div", {
+ staticClass: "languages modal__item"
+ }, [_c("NcMultiselect", {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "allow-empty": false,
+ options: _vm.languages,
+ placeholder: _vm.t("settings", "Default language"),
+ "group-label": "label",
+ "group-values": "languages",
+ label: "name",
+ "track-by": "code"
+ },
+ model: {
+ value: _vm.newUser.language,
+ callback: function callback($$v) {
+ _vm.$set(_vm.newUser, "language", $$v);
+ },
+ expression: "newUser.language"
+ }
+ })], 1) : _vm._e(), _vm._v(" "), _vm.showConfig.showStoragePath ? _c("div", {
+ staticClass: "storageLocation"
+ }) : _vm._e(), _vm._v(" "), _vm.showConfig.showUserBackend ? _c("div", {
+ staticClass: "userBackend"
+ }) : _vm._e(), _vm._v(" "), _vm.showConfig.showLastLogin ? _c("div", {
+ staticClass: "lastLogin"
+ }) : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "user-actions"
+ }, [_c("NcButton", {
+ attrs: {
+ id: "newsubmit",
+ type: "primary",
+ "native-type": "submit",
+ value: ""
+ }
+ }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.t("settings", "Add a new user")) + "\n\t\t\t\t")])], 1)])]) : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "row",
+ class: {
+ sticky: _vm.scrolled && !_vm.showConfig.showNewUserForm
+ },
+ attrs: {
+ id: "grid-header"
+ }
+ }, [_c("div", {
+ staticClass: "avatar",
+ attrs: {
+ id: "headerAvatar"
+ }
+ }), _vm._v(" "), _c("div", {
+ staticClass: "name",
+ attrs: {
+ id: "headerName"
+ }
+ }, [_c("div", {
+ staticClass: "subtitle"
+ }, [_c("strong", [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.t("settings", "Display name")) + "\n\t\t\t\t")])]), _vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Username")) + "\n\t\t")]), _vm._v(" "), _c("div", {
+ staticClass: "password",
+ attrs: {
+ id: "headerPassword"
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Password")) + "\n\t\t")]), _vm._v(" "), _c("div", {
+ staticClass: "mailAddress",
+ attrs: {
+ id: "headerAddress"
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Email")) + "\n\t\t")]), _vm._v(" "), _c("div", {
+ staticClass: "groups",
+ attrs: {
+ id: "headerGroups"
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Groups")) + "\n\t\t")]), _vm._v(" "), _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin ? _c("div", {
+ staticClass: "subadmins",
+ attrs: {
+ id: "headerSubAdmins"
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Group admin for")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "quota",
+ attrs: {
+ id: "headerQuota"
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Quota")) + "\n\t\t")]), _vm._v(" "), _vm.showConfig.showLanguages ? _c("div", {
+ staticClass: "languages",
+ attrs: {
+ id: "headerLanguages"
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Language")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath ? _c("div", {
+ staticClass: "headerUserBackend userBackend"
+ }, [_vm.showConfig.showUserBackend ? _c("div", {
+ staticClass: "userBackend"
+ }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("settings", "User backend")) + "\n\t\t\t")]) : _vm._e(), _vm._v(" "), _vm.showConfig.showStoragePath ? _c("div", {
+ staticClass: "subtitle storageLocation"
+ }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.t("settings", "Storage location")) + "\n\t\t\t")]) : _vm._e()]) : _vm._e(), _vm._v(" "), _vm.showConfig.showLastLogin ? _c("div", {
+ staticClass: "headerLastLogin lastLogin"
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("settings", "Last login")) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "userActions"
+ })]), _vm._v(" "), _vm._l(_vm.filteredUsers, function (user) {
+ return _c("user-row", {
+ key: user.id,
+ attrs: {
+ "external-actions": _vm.externalActions,
+ groups: _vm.groups,
+ languages: _vm.languages,
+ "quota-options": _vm.quotaOptions,
+ settings: _vm.settings,
+ "show-config": _vm.showConfig,
+ "sub-admins-groups": _vm.subAdminsGroups,
+ user: user,
+ "is-dark-theme": _vm.isDarkTheme
+ }
+ });
+ }), _vm._v(" "), _c("InfiniteLoading", {
+ ref: "infiniteLoading",
+ on: {
+ infinite: _vm.infiniteHandler
+ }
+ }, [_c("div", {
+ attrs: {
+ slot: "spinner"
+ },
+ slot: "spinner"
+ }, [_c("div", {
+ staticClass: "users-icon-loading icon-loading"
+ })]), _vm._v(" "), _c("div", {
+ attrs: {
+ slot: "no-more"
+ },
+ slot: "no-more"
+ }, [_c("div", {
+ staticClass: "users-list-end"
+ })]), _vm._v(" "), _c("div", {
+ attrs: {
+ slot: "no-results"
+ },
+ slot: "no-results"
+ }, [_c("div", {
+ attrs: {
+ id: "emptycontent"
+ }
+ }, [_c("div", {
+ staticClass: "icon-contacts-dark"
+ }), _vm._v(" "), _c("h2", [_vm._v(_vm._s(_vm.t("settings", "No users in here")))])])])])], 2);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa&scoped=true&":
+/*!***************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa&scoped=true& ***!
+ \***************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return Object.keys(_vm.user).length === 1 ? _c("div", {
+ staticClass: "row",
+ attrs: {
+ "data-id": _vm.user.id
+ }
+ }, [_c("div", {
+ staticClass: "avatar",
+ class: {
+ "icon-loading-small": _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe
+ }
+ }, [!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe ? _c("img", {
+ attrs: {
+ src: _vm.generateAvatar(_vm.user.id, _vm.isDarkTheme),
+ alt: "",
+ height: "32",
+ width: "32"
+ }
+ }) : _vm._e()]), _vm._v(" "), _c("div", {
+ staticClass: "name"
+ }, [_vm._v("\n\t\t" + _vm._s(_vm.user.id) + "\n\t")]), _vm._v(" "), _c("div", {
+ staticClass: "obfuscated"
+ }, [_vm._v("\n\t\t" + _vm._s(_vm.t("settings", "You do not have permissions to see the details of this user")) + "\n\t")])]) : !_vm.editing ? _c("UserRowSimple", {
+ class: {
+ "row--menu-opened": _vm.openedMenu
+ },
+ attrs: {
+ editing: _vm.editing,
+ "feedback-message": _vm.feedbackMessage,
+ groups: _vm.groups,
+ languages: _vm.languages,
+ loading: _vm.loading,
+ "opened-menu": _vm.openedMenu,
+ settings: _vm.settings,
+ "show-config": _vm.showConfig,
+ "sub-admins-groups": _vm.subAdminsGroups,
+ "user-actions": _vm.userActions,
+ user: _vm.user,
+ "is-dark-theme": _vm.isDarkTheme
+ },
+ on: {
+ "update:editing": function updateEditing($event) {
+ _vm.editing = $event;
+ },
+ "update:openedMenu": function updateOpenedMenu($event) {
+ _vm.openedMenu = $event;
+ },
+ "update:opened-menu": function updateOpenedMenu($event) {
+ _vm.openedMenu = $event;
+ }
+ }
+ }) : _c("div", {
+ staticClass: "row row--editable",
+ class: {
+ disabled: _vm.loading.delete || _vm.loading.disable,
+ "row--menu-opened": _vm.openedMenu
+ },
+ attrs: {
+ "data-id": _vm.user.id
+ }
+ }, [_c("div", {
+ staticClass: "avatar",
+ class: {
+ "icon-loading-small": _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe
+ }
+ }, [!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe ? _c("img", {
+ attrs: {
+ src: _vm.generateAvatar(_vm.user.id, _vm.isDarkTheme),
+ alt: "",
+ height: "32",
+ width: "32"
+ }
+ }) : _vm._e()]), _vm._v(" "), _vm.user.backendCapabilities.setDisplayName ? _c("div", {
+ staticClass: "displayName"
+ }, [_c("form", {
+ staticClass: "displayName",
+ class: {
+ "icon-loading-small": _vm.loading.displayName
+ },
+ on: {
+ submit: function submit($event) {
+ $event.preventDefault();
+ return _vm.updateDisplayName.apply(null, arguments);
+ }
+ }
+ }, [_c("input", {
+ ref: "displayName",
+ attrs: {
+ id: "displayName" + _vm.user.id + _vm.rand,
+ disabled: _vm.loading.displayName || _vm.loading.all,
+ autocapitalize: "off",
+ autocomplete: "off",
+ autocorrect: "off",
+ spellcheck: "false",
+ type: "text"
+ },
+ domProps: {
+ value: _vm.user.displayname
+ }
+ }), _vm._v(" "), _c("input", {
+ staticClass: "icon-confirm",
+ attrs: {
+ type: "submit",
+ value: ""
+ }
+ })])]) : _c("div", {
+ staticClass: "name"
+ }, [_vm._v("\n\t\t" + _vm._s(_vm.user.id) + "\n\t\t"), _c("div", {
+ staticClass: "displayName subtitle"
+ }, [_c("div", {
+ staticClass: "cellText",
+ attrs: {
+ title: _vm.user.displayname.length > 20 ? _vm.user.displayname : ""
+ }
+ }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.user.displayname) + "\n\t\t\t")])])]), _vm._v(" "), _vm.settings.canChangePassword && _vm.user.backendCapabilities.setPassword ? _c("form", {
+ staticClass: "password",
+ class: {
+ "icon-loading-small": _vm.loading.password
+ },
+ on: {
+ submit: function submit($event) {
+ $event.preventDefault();
+ return _vm.updatePassword.apply(null, arguments);
+ }
+ }
+ }, [_c("input", {
+ ref: "password",
+ attrs: {
+ id: "password" + _vm.user.id + _vm.rand,
+ disabled: _vm.loading.password || _vm.loading.all,
+ minlength: _vm.minPasswordLength,
+ maxlength: "469",
+ placeholder: _vm.t("settings", "Add new password"),
+ autocapitalize: "off",
+ autocomplete: "new-password",
+ autocorrect: "off",
+ required: "",
+ spellcheck: "false",
+ type: "password",
+ value: ""
+ }
+ }), _vm._v(" "), _c("input", {
+ staticClass: "icon-confirm",
+ attrs: {
+ type: "submit",
+ value: ""
+ }
+ })]) : _c("div"), _vm._v(" "), _c("form", {
+ staticClass: "mailAddress",
+ class: {
+ "icon-loading-small": _vm.loading.mailAddress
+ },
+ on: {
+ submit: function submit($event) {
+ $event.preventDefault();
+ return _vm.updateEmail.apply(null, arguments);
+ }
+ }
+ }, [_c("input", {
+ ref: "mailAddress",
+ attrs: {
+ id: "mailAddress" + _vm.user.id + _vm.rand,
+ disabled: _vm.loading.mailAddress || _vm.loading.all,
+ placeholder: _vm.t("settings", "Add new email address"),
+ autocapitalize: "off",
+ autocomplete: "new-password",
+ autocorrect: "off",
+ spellcheck: "false",
+ type: "email"
+ },
+ domProps: {
+ value: _vm.user.email
+ }
+ }), _vm._v(" "), _c("input", {
+ staticClass: "icon-confirm",
+ attrs: {
+ type: "submit",
+ value: ""
+ }
+ })]), _vm._v(" "), _c("div", {
+ staticClass: "groups",
+ class: {
+ "icon-loading-small": _vm.loading.groups
+ }
+ }, [_c("NcMultiselect", {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "close-on-select": false,
+ disabled: _vm.loading.groups || _vm.loading.all,
+ limit: 2,
+ multiple: true,
+ options: _vm.availableGroups,
+ placeholder: _vm.t("settings", "Add user to group"),
+ "tag-width": 60,
+ taggable: _vm.settings.isAdmin,
+ value: _vm.userGroups,
+ label: "name",
+ "tag-placeholder": "create",
+ "track-by": "id"
+ },
+ on: {
+ remove: _vm.removeUserGroup,
+ select: _vm.addUserGroup,
+ tag: _vm.createGroup
+ }
+ }, [_c("span", {
+ attrs: {
+ slot: "noResult"
+ },
+ slot: "noResult"
+ }, [_vm._v(_vm._s(_vm.t("settings", "No results")))])])], 1), _vm._v(" "), _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin ? _c("div", {
+ staticClass: "subadmins",
+ class: {
+ "icon-loading-small": _vm.loading.subadmins
+ }
+ }, [_c("NcMultiselect", {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "close-on-select": false,
+ disabled: _vm.loading.subadmins || _vm.loading.all,
+ limit: 2,
+ multiple: true,
+ options: _vm.subAdminsGroups,
+ placeholder: _vm.t("settings", "Set user as admin for"),
+ "tag-width": 60,
+ value: _vm.userSubAdminsGroups,
+ label: "name",
+ "track-by": "id"
+ },
+ on: {
+ remove: _vm.removeUserSubAdmin,
+ select: _vm.addUserSubAdmin
+ }
+ }, [_c("span", {
+ attrs: {
+ slot: "noResult"
+ },
+ slot: "noResult"
+ }, [_vm._v(_vm._s(_vm.t("settings", "No results")))])])], 1) : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "quota",
+ class: {
+ "icon-loading-small": _vm.loading.quota
+ },
+ attrs: {
+ title: _vm.usedSpace
+ }
+ }, [_c("NcMultiselect", {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "allow-empty": false,
+ disabled: _vm.loading.quota || _vm.loading.all,
+ options: _vm.quotaOptions,
+ placeholder: _vm.t("settings", "Select user quota"),
+ taggable: true,
+ value: _vm.userQuota,
+ label: "label",
+ "tag-placeholder": "create",
+ "track-by": "id"
+ },
+ on: {
+ input: _vm.setUserQuota,
+ tag: _vm.validateQuota
+ }
+ })], 1), _vm._v(" "), _vm.showConfig.showLanguages ? _c("div", {
+ staticClass: "languages",
+ class: {
+ "icon-loading-small": _vm.loading.languages
+ }
+ }, [_c("NcMultiselect", {
+ staticClass: "multiselect-vue",
+ attrs: {
+ "allow-empty": false,
+ disabled: _vm.loading.languages || _vm.loading.all,
+ options: _vm.languages,
+ placeholder: _vm.t("settings", "No language set"),
+ value: _vm.userLanguage,
+ "group-label": "label",
+ "group-values": "languages",
+ label: "name",
+ "track-by": "code"
+ },
+ on: {
+ input: _vm.setUserLanguage
+ }
+ })], 1) : _vm._e(), _vm._v(" "), _vm.showConfig.showStoragePath || _vm.showConfig.showUserBackend ? _c("div", {
+ staticClass: "storageLocation"
+ }) : _vm._e(), _vm._v(" "), _vm.showConfig.showLastLogin ? _c("div") : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "userActions"
+ }, [!_vm.loading.all ? _c("div", {
+ staticClass: "toggleUserActions"
+ }, [_c("NcActions", [_c("NcActionButton", {
+ attrs: {
+ icon: "icon-checkmark",
+ title: _vm.t("settings", "Done"),
+ "aria-label": _vm.t("settings", "Done")
+ },
+ on: {
+ click: function click($event) {
+ _vm.editing = false;
+ }
+ }
+ })], 1), _vm._v(" "), _c("div", {
+ directives: [{
+ name: "click-outside",
+ rawName: "v-click-outside",
+ value: _vm.hideMenu,
+ expression: "hideMenu"
+ }],
+ staticClass: "userPopoverMenuWrapper"
+ }, [_c("button", {
+ staticClass: "icon-more",
+ on: {
+ click: function click($event) {
+ $event.preventDefault();
+ return _vm.toggleMenu.apply(null, arguments);
+ }
+ }
+ }), _vm._v(" "), _c("div", {
+ staticClass: "popovermenu",
+ class: {
+ open: _vm.openedMenu
+ }
+ }, [_c("NcPopoverMenu", {
+ attrs: {
+ menu: _vm.userActions
+ }
+ })], 1)])], 1) : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "feedback",
+ style: {
+ opacity: _vm.feedbackMessage !== "" ? 1 : 0
+ }
+ }, [_c("div", {
+ staticClass: "icon-checkmark"
+ }), _vm._v("\n\t\t\t" + _vm._s(_vm.feedbackMessage) + "\n\t\t")])])]);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08&":
+/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08& ***!
+ \*********************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("div", {
+ staticClass: "row",
+ class: {
+ disabled: _vm.loading.delete || _vm.loading.disable
+ },
+ attrs: {
+ "data-id": _vm.user.id
+ }
+ }, [_c("div", {
+ staticClass: "avatar",
+ class: {
+ "icon-loading-small": _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe
+ }
+ }, [!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe ? _c("img", {
+ attrs: {
+ alt: "",
+ width: "32",
+ height: "32",
+ src: _vm.generateAvatar(_vm.user.id, _vm.isDarkTheme)
+ }
+ }) : _vm._e()]), _vm._v(" "), _c("div", {
+ staticClass: "name"
+ }, [_c("div", {
+ staticClass: "displayName subtitle"
+ }, [_c("div", {
+ staticClass: "cellText",
+ attrs: {
+ title: _vm.user.displayname.length > 20 ? _vm.user.displayname : ""
+ }
+ }, [_c("strong", [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.user.displayname) + "\n\t\t\t\t")])])]), _vm._v("\n\t\t" + _vm._s(_vm.user.id) + "\n\t")]), _vm._v(" "), _c("div"), _vm._v(" "), _c("div", {
+ staticClass: "mailAddress"
+ }, [_c("div", {
+ staticClass: "cellText",
+ attrs: {
+ title: _vm.user.email !== null && _vm.user.email.length > 20 ? _vm.user.email : ""
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.user.email) + "\n\t\t")])]), _vm._v(" "), _c("div", {
+ staticClass: "groups"
+ }, [_vm._v("\n\t\t" + _vm._s(_vm.userGroupsLabels) + "\n\t")]), _vm._v(" "), _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin ? _c("div", {
+ staticClass: "subAdminsGroups"
+ }, [_vm._v("\n\t\t" + _vm._s(_vm.userSubAdminsGroupsLabels) + "\n\t")]) : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "userQuota"
+ }, [_c("div", {
+ staticClass: "quota"
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.userQuota) + " (" + _vm._s(_vm.usedSpace) + ")\n\t\t\t"), _c("progress", {
+ staticClass: "quota-user-progress",
+ class: {
+ warn: _vm.usedQuota > 80
+ },
+ attrs: {
+ max: "100"
+ },
+ domProps: {
+ value: _vm.usedQuota
+ }
+ })])]), _vm._v(" "), _vm.showConfig.showLanguages ? _c("div", {
+ staticClass: "languages"
+ }, [_vm._v("\n\t\t" + _vm._s(_vm.userLanguage.name) + "\n\t")]) : _vm._e(), _vm._v(" "), _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath ? _c("div", {
+ staticClass: "userBackend"
+ }, [_vm.showConfig.showUserBackend ? _c("div", {
+ staticClass: "userBackend"
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.user.backend) + "\n\t\t")]) : _vm._e(), _vm._v(" "), _vm.showConfig.showStoragePath ? _c("div", {
+ staticClass: "storageLocation subtitle",
+ attrs: {
+ title: _vm.user.storageLocation
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.user.storageLocation) + "\n\t\t")]) : _vm._e()]) : _vm._e(), _vm._v(" "), _vm.showConfig.showLastLogin ? _c("div", {
+ staticClass: "lastLogin",
+ attrs: {
+ title: _vm.userLastLoginTooltip
+ }
+ }, [_vm._v("\n\t\t" + _vm._s(_vm.userLastLogin) + "\n\t")]) : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "userActions"
+ }, [_vm.canEdit && !_vm.loading.all ? _c("div", {
+ staticClass: "toggleUserActions"
+ }, [_c("NcActions", [_c("NcActionButton", {
+ attrs: {
+ icon: "icon-rename",
+ title: _vm.t("settings", "Edit User"),
+ "aria-label": _vm.t("settings", "Edit User")
+ },
+ on: {
+ click: _vm.toggleEdit
+ }
+ })], 1), _vm._v(" "), _c("div", {
+ staticClass: "userPopoverMenuWrapper"
+ }, [_c("button", {
+ directives: [{
+ name: "click-outside",
+ rawName: "v-click-outside",
+ value: _vm.hideMenu,
+ expression: "hideMenu"
+ }],
+ staticClass: "icon-more",
+ attrs: {
+ "aria-label": _vm.t("settings", "Toggle user actions menu")
+ },
+ on: {
+ click: function click($event) {
+ $event.preventDefault();
+ return _vm.toggleMenu.apply(null, arguments);
+ }
+ }
+ }), _vm._v(" "), _c("div", {
+ staticClass: "popovermenu",
+ class: {
+ open: _vm.openedMenu
+ },
+ attrs: {
+ "aria-expanded": _vm.openedMenu
+ }
+ }, [_c("NcPopoverMenu", {
+ attrs: {
+ menu: _vm.userActions
+ }
+ })], 1)])], 1) : _vm._e(), _vm._v(" "), _c("div", {
+ staticClass: "feedback",
+ style: {
+ opacity: _vm.feedbackMessage !== "" ? 1 : 0
+ }
+ }, [_c("div", {
+ staticClass: "icon-checkmark"
+ }), _vm._v("\n\t\t\t" + _vm._s(_vm.feedbackMessage) + "\n\t\t")])])]);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=template&id=889b7562&scoped=true&":
+/*!***********************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=template&id=889b7562&scoped=true& ***!
+ \***********************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("NcContent", {
+ attrs: {
+ "app-name": "settings",
+ "navigation-class": {
+ "icon-loading": _vm.loadingAddGroup
+ }
+ }
+ }, [_c("NcAppNavigation", {
+ scopedSlots: _vm._u([{
+ key: "list",
+ fn: function fn() {
+ return [_c("NcAppNavigationItem", {
+ ref: "addGroup",
+ attrs: {
+ id: "addgroup",
+ "edit-placeholder": _vm.t("settings", "Enter group name"),
+ editable: true,
+ loading: _vm.loadingAddGroup,
+ title: _vm.t("settings", "Add group"),
+ icon: "icon-add"
+ },
+ on: {
+ click: _vm.showAddGroupForm,
+ "update:title": _vm.createGroup
+ }
+ }), _vm._v(" "), _c("NcAppNavigationItem", {
+ attrs: {
+ id: "everyone",
+ exact: true,
+ title: _vm.t("settings", "Active users"),
+ to: {
+ name: "users"
+ },
+ icon: "icon-contacts-dark"
+ }
+ }, [_vm.userCount > 0 ? _c("NcAppNavigationCounter", {
+ attrs: {
+ slot: "counter"
+ },
+ slot: "counter"
+ }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.userCount) + "\n\t\t\t\t")]) : _vm._e()], 1), _vm._v(" "), _vm.settings.isAdmin ? _c("NcAppNavigationItem", {
+ attrs: {
+ id: "admin",
+ exact: true,
+ title: _vm.t("settings", "Admins"),
+ to: {
+ name: "group",
+ params: {
+ selectedGroup: "admin"
+ }
+ },
+ icon: "icon-user-admin"
+ }
+ }, [_vm.adminGroupMenu.count ? _c("NcAppNavigationCounter", {
+ attrs: {
+ slot: "counter"
+ },
+ slot: "counter"
+ }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.adminGroupMenu.count) + "\n\t\t\t\t")]) : _vm._e()], 1) : _vm._e(), _vm._v(" "), _vm.disabledGroupMenu.usercount > 0 || _vm.disabledGroupMenu.usercount === -1 ? _c("NcAppNavigationItem", {
+ attrs: {
+ id: "disabled",
+ exact: true,
+ title: _vm.t("settings", "Disabled users"),
+ to: {
+ name: "group",
+ params: {
+ selectedGroup: "disabled"
+ }
+ },
+ icon: "icon-disabled-users"
+ }
+ }, [_vm.disabledGroupMenu.usercount > 0 ? _c("NcAppNavigationCounter", {
+ attrs: {
+ slot: "counter"
+ },
+ slot: "counter"
+ }, [_vm._v("\n\t\t\t\t\t" + _vm._s(_vm.disabledGroupMenu.usercount) + "\n\t\t\t\t")]) : _vm._e()], 1) : _vm._e(), _vm._v(" "), _vm.groupList.length > 0 ? _c("NcAppNavigationCaption", {
+ attrs: {
+ title: _vm.t("settings", "Groups")
+ }
+ }) : _vm._e(), _vm._v(" "), _vm._l(_vm.groupList, function (group) {
+ return _c("GroupListItem", {
+ key: group.id,
+ attrs: {
+ id: group.id,
+ title: group.title,
+ count: group.count
+ }
+ });
+ })];
+ },
+ proxy: true
+ }, {
+ key: "footer",
+ fn: function fn() {
+ return [_c("NcAppNavigationSettings", [_c("div", [_c("p", [_vm._v(_vm._s(_vm.t("settings", "Default quota:")))]), _vm._v(" "), _c("NcMultiselect", {
+ attrs: {
+ value: _vm.defaultQuota,
+ options: _vm.quotaOptions,
+ "tag-placeholder": "create",
+ placeholder: _vm.t("settings", "Select default quota"),
+ label: "label",
+ "track-by": "id",
+ "allow-empty": false,
+ taggable: true
+ },
+ on: {
+ tag: _vm.validateQuota,
+ input: _vm.setDefaultQuota
+ }
+ })], 1), _vm._v(" "), _c("div", [_c("input", {
+ directives: [{
+ name: "model",
+ rawName: "v-model",
+ value: _vm.showLanguages,
+ expression: "showLanguages"
+ }],
+ staticClass: "checkbox",
+ attrs: {
+ id: "showLanguages",
+ type: "checkbox"
+ },
+ domProps: {
+ checked: Array.isArray(_vm.showLanguages) ? _vm._i(_vm.showLanguages, null) > -1 : _vm.showLanguages
+ },
+ on: {
+ change: function change($event) {
+ var $$a = _vm.showLanguages,
+ $$el = $event.target,
+ $$c = $$el.checked ? true : false;
+ if (Array.isArray($$a)) {
+ var $$v = null,
+ $$i = _vm._i($$a, $$v);
+ if ($$el.checked) {
+ $$i < 0 && (_vm.showLanguages = $$a.concat([$$v]));
+ } else {
+ $$i > -1 && (_vm.showLanguages = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));
+ }
+ } else {
+ _vm.showLanguages = $$c;
+ }
+ }
+ }
+ }), _vm._v(" "), _c("label", {
+ attrs: {
+ for: "showLanguages"
+ }
+ }, [_vm._v(_vm._s(_vm.t("settings", "Show Languages")))])]), _vm._v(" "), _c("div", [_c("input", {
+ directives: [{
+ name: "model",
+ rawName: "v-model",
+ value: _vm.showLastLogin,
+ expression: "showLastLogin"
+ }],
+ staticClass: "checkbox",
+ attrs: {
+ id: "showLastLogin",
+ type: "checkbox"
+ },
+ domProps: {
+ checked: Array.isArray(_vm.showLastLogin) ? _vm._i(_vm.showLastLogin, null) > -1 : _vm.showLastLogin
+ },
+ on: {
+ change: function change($event) {
+ var $$a = _vm.showLastLogin,
+ $$el = $event.target,
+ $$c = $$el.checked ? true : false;
+ if (Array.isArray($$a)) {
+ var $$v = null,
+ $$i = _vm._i($$a, $$v);
+ if ($$el.checked) {
+ $$i < 0 && (_vm.showLastLogin = $$a.concat([$$v]));
+ } else {
+ $$i > -1 && (_vm.showLastLogin = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));
+ }
+ } else {
+ _vm.showLastLogin = $$c;
+ }
+ }
+ }
+ }), _vm._v(" "), _c("label", {
+ attrs: {
+ for: "showLastLogin"
+ }
+ }, [_vm._v(_vm._s(_vm.t("settings", "Show last login")))])]), _vm._v(" "), _c("div", [_c("input", {
+ directives: [{
+ name: "model",
+ rawName: "v-model",
+ value: _vm.showUserBackend,
+ expression: "showUserBackend"
+ }],
+ staticClass: "checkbox",
+ attrs: {
+ id: "showUserBackend",
+ type: "checkbox"
+ },
+ domProps: {
+ checked: Array.isArray(_vm.showUserBackend) ? _vm._i(_vm.showUserBackend, null) > -1 : _vm.showUserBackend
+ },
+ on: {
+ change: function change($event) {
+ var $$a = _vm.showUserBackend,
+ $$el = $event.target,
+ $$c = $$el.checked ? true : false;
+ if (Array.isArray($$a)) {
+ var $$v = null,
+ $$i = _vm._i($$a, $$v);
+ if ($$el.checked) {
+ $$i < 0 && (_vm.showUserBackend = $$a.concat([$$v]));
+ } else {
+ $$i > -1 && (_vm.showUserBackend = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));
+ }
+ } else {
+ _vm.showUserBackend = $$c;
+ }
+ }
+ }
+ }), _vm._v(" "), _c("label", {
+ attrs: {
+ for: "showUserBackend"
+ }
+ }, [_vm._v(_vm._s(_vm.t("settings", "Show user backend")))])]), _vm._v(" "), _c("div", [_c("input", {
+ directives: [{
+ name: "model",
+ rawName: "v-model",
+ value: _vm.showStoragePath,
+ expression: "showStoragePath"
+ }],
+ staticClass: "checkbox",
+ attrs: {
+ id: "showStoragePath",
+ type: "checkbox"
+ },
+ domProps: {
+ checked: Array.isArray(_vm.showStoragePath) ? _vm._i(_vm.showStoragePath, null) > -1 : _vm.showStoragePath
+ },
+ on: {
+ change: function change($event) {
+ var $$a = _vm.showStoragePath,
+ $$el = $event.target,
+ $$c = $$el.checked ? true : false;
+ if (Array.isArray($$a)) {
+ var $$v = null,
+ $$i = _vm._i($$a, $$v);
+ if ($$el.checked) {
+ $$i < 0 && (_vm.showStoragePath = $$a.concat([$$v]));
+ } else {
+ $$i > -1 && (_vm.showStoragePath = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));
+ }
+ } else {
+ _vm.showStoragePath = $$c;
+ }
+ }
+ }
+ }), _vm._v(" "), _c("label", {
+ attrs: {
+ for: "showStoragePath"
+ }
+ }, [_vm._v(_vm._s(_vm.t("settings", "Show storage path")))])]), _vm._v(" "), _c("div", [_c("input", {
+ directives: [{
+ name: "model",
+ rawName: "v-model",
+ value: _vm.sendWelcomeMail,
+ expression: "sendWelcomeMail"
+ }],
+ staticClass: "checkbox",
+ attrs: {
+ id: "sendWelcomeMail",
+ disabled: _vm.loadingSendMail,
+ type: "checkbox"
+ },
+ domProps: {
+ checked: Array.isArray(_vm.sendWelcomeMail) ? _vm._i(_vm.sendWelcomeMail, null) > -1 : _vm.sendWelcomeMail
+ },
+ on: {
+ change: function change($event) {
+ var $$a = _vm.sendWelcomeMail,
+ $$el = $event.target,
+ $$c = $$el.checked ? true : false;
+ if (Array.isArray($$a)) {
+ var $$v = null,
+ $$i = _vm._i($$a, $$v);
+ if ($$el.checked) {
+ $$i < 0 && (_vm.sendWelcomeMail = $$a.concat([$$v]));
+ } else {
+ $$i > -1 && (_vm.sendWelcomeMail = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));
+ }
+ } else {
+ _vm.sendWelcomeMail = $$c;
+ }
+ }
+ }
+ }), _vm._v(" "), _c("label", {
+ attrs: {
+ for: "sendWelcomeMail"
+ }
+ }, [_vm._v(_vm._s(_vm.t("settings", "Send email to new user")))])])])];
+ },
+ proxy: true
+ }])
+ }, [_c("NcAppNavigationNew", {
+ attrs: {
+ "button-id": "new-user-button",
+ text: _vm.t("settings", "New user"),
+ "button-class": "icon-add"
+ },
+ on: {
+ click: _vm.showNewUserMenu,
+ keyup: [function ($event) {
+ if (!$event.type.indexOf("key") && _vm._k($event.keyCode, "enter", 13, $event.key, "Enter")) return null;
+ return _vm.showNewUserMenu.apply(null, arguments);
+ }, function ($event) {
+ if (!$event.type.indexOf("key") && _vm._k($event.keyCode, "space", 32, $event.key, [" ", "Spacebar"])) return null;
+ return _vm.showNewUserMenu.apply(null, arguments);
+ }]
+ }
+ })], 1), _vm._v(" "), _c("NcAppContent", [_c("UserList", {
+ attrs: {
+ users: _vm.users,
+ "show-config": _vm.showConfig,
+ "selected-group": _vm.selectedGroupDecoded,
+ "external-actions": _vm.externalActions
+ }
+ })], 1)], 1);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&":
+/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss& ***!
+ \**********************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, ".row--menu-opened[data-v-77960baa] {\n z-index: 1 !important;\n}\n.row[data-v-77960baa] .multiselect__single {\n z-index: auto !important;\n}", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss&":
+/*!****************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss& ***!
+ \****************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, ".cellText {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.icon-more {\n background-color: var(--color-main-background);\n border: 0;\n}", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&":
+/*!******************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true& ***!
+ \******************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, ".app-navigation__list #addgroup[data-v-889b7562] .app-navigation-entry__utils {\n display: none;\n}", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&":
+/*!**********************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css& ***!
+ \**********************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, "\n.modal-wrapper[data-v-6cba3aca] {\n\tmargin: 2vh 0;\n\talign-items: flex-start;\n}\n.modal__content[data-v-6cba3aca] {\n\tdisplay: flex;\n\tpadding: 20px;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n}\n.modal__item[data-v-6cba3aca] {\n\tmargin-bottom: 16px;\n\twidth: 100%;\n}\n.modal__item[data-v-6cba3aca]:not(:focus):not(:active) {\n\tborder-color: var(--color-border-dark);\n}\n.modal__item[data-v-6cba3aca] .multiselect {\n\twidth: 100%;\n}\n.user-actions[data-v-6cba3aca] {\n\tmargin-top: 20px;\n}\n.modal__content[data-v-6cba3aca] .multiselect__single {\n\ttext-align: left;\n\tbox-sizing: border-box;\n}\n.modal__content[data-v-6cba3aca] .multiselect__content-wrapper {\n\tbox-sizing: border-box;\n}\n.row[data-v-6cba3aca] .multiselect__single {\n\tz-index: auto !important;\n}\n\n/* fake input for groups validation */\ninput#newgroups[data-v-6cba3aca] {\n\tposition: absolute;\n\topacity: 0;\n\t/* The \"hidden\" input is behind the Multiselect, so in general it does\n\t * not receives clicks. However, with Firefox, after the validation\n\t * fails, it will receive the first click done on it, so its width needs\n\t * to be set to 0 to prevent that (\"pointer-events: none\" does not\n\t * prevent it). */\n\twidth: 0;\n}\n", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&":
+/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss& ***!
+ \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_style_index_0_id_77960baa_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_style_index_0_id_77960baa_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_style_index_0_id_77960baa_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_style_index_0_id_77960baa_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_style_index_0_id_77960baa_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss&":
+/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss& ***!
+ \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_style_index_0_id_ff154a08_lang_scss___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_style_index_0_id_ff154a08_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_style_index_0_id_ff154a08_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_style_index_0_id_ff154a08_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_style_index_0_id_ff154a08_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&":
+/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true& ***!
+ \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_style_index_0_id_889b7562_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_style_index_0_id_889b7562_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_style_index_0_id_889b7562_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_style_index_0_id_889b7562_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_style_index_0_id_889b7562_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&":
+/*!**************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css& ***!
+ \**************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_style_index_0_id_6cba3aca_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_style_index_0_id_6cba3aca_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_style_index_0_id_6cba3aca_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_style_index_0_id_6cba3aca_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_style_index_0_id_6cba3aca_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/GroupListItem.vue":
+/*!********************************************************!*\
+ !*** ./apps/settings/src/components/GroupListItem.vue ***!
+ \********************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _GroupListItem_vue_vue_type_template_id_b3f9b202___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GroupListItem.vue?vue&type=template&id=b3f9b202& */ "./apps/settings/src/components/GroupListItem.vue?vue&type=template&id=b3f9b202&");
+/* harmony import */ var _GroupListItem_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./GroupListItem.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/GroupListItem.vue?vue&type=script&lang=js&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+
+
+/* normalize component */
+;
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
+ _GroupListItem_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _GroupListItem_vue_vue_type_template_id_b3f9b202___WEBPACK_IMPORTED_MODULE_0__.render,
+ _GroupListItem_vue_vue_type_template_id_b3f9b202___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/GroupListItem.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList.vue":
+/*!***************************************************!*\
+ !*** ./apps/settings/src/components/UserList.vue ***!
+ \***************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _UserList_vue_vue_type_template_id_6cba3aca_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UserList.vue?vue&type=template&id=6cba3aca&scoped=true& */ "./apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca&scoped=true&");
+/* harmony import */ var _UserList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./UserList.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/UserList.vue?vue&type=script&lang=js&");
+/* harmony import */ var _UserList_vue_vue_type_style_index_0_id_6cba3aca_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css& */ "./apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _UserList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _UserList_vue_vue_type_template_id_6cba3aca_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
+ _UserList_vue_vue_type_template_id_6cba3aca_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ "6cba3aca",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/UserList.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRow.vue":
+/*!***********************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRow.vue ***!
+ \***********************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _UserRow_vue_vue_type_template_id_77960baa_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UserRow.vue?vue&type=template&id=77960baa&scoped=true& */ "./apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa&scoped=true&");
+/* harmony import */ var _UserRow_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./UserRow.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&");
+/* harmony import */ var _UserRow_vue_vue_type_style_index_0_id_77960baa_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss& */ "./apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _UserRow_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _UserRow_vue_vue_type_template_id_77960baa_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
+ _UserRow_vue_vue_type_template_id_77960baa_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ "77960baa",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/UserList/UserRow.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRowSimple.vue":
+/*!*****************************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRowSimple.vue ***!
+ \*****************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _UserRowSimple_vue_vue_type_template_id_ff154a08___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UserRowSimple.vue?vue&type=template&id=ff154a08& */ "./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08&");
+/* harmony import */ var _UserRowSimple_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./UserRowSimple.vue?vue&type=script&lang=js& */ "./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&");
+/* harmony import */ var _UserRowSimple_vue_vue_type_style_index_0_id_ff154a08_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss& */ "./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _UserRowSimple_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _UserRowSimple_vue_vue_type_template_id_ff154a08___WEBPACK_IMPORTED_MODULE_0__.render,
+ _UserRowSimple_vue_vue_type_template_id_ff154a08___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ null,
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/components/UserList/UserRowSimple.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/views/Users.vue":
+/*!*******************************************!*\
+ !*** ./apps/settings/src/views/Users.vue ***!
+ \*******************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _Users_vue_vue_type_template_id_889b7562_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Users.vue?vue&type=template&id=889b7562&scoped=true& */ "./apps/settings/src/views/Users.vue?vue&type=template&id=889b7562&scoped=true&");
+/* harmony import */ var _Users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Users.vue?vue&type=script&lang=js& */ "./apps/settings/src/views/Users.vue?vue&type=script&lang=js&");
+/* harmony import */ var _Users_vue_vue_type_style_index_0_id_889b7562_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true& */ "./apps/settings/src/views/Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _Users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _Users_vue_vue_type_template_id_889b7562_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
+ _Users_vue_vue_type_template_id_889b7562_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ "889b7562",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/settings/src/views/Users.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/GroupListItem.vue?vue&type=script&lang=js&":
+/*!*********************************************************************************!*\
+ !*** ./apps/settings/src/components/GroupListItem.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_GroupListItem_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/GroupListItem.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_GroupListItem_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList.vue?vue&type=script&lang=js&":
+/*!****************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&":
+/*!************************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&":
+/*!******************************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js& ***!
+ \******************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/views/Users.vue?vue&type=script&lang=js&":
+/*!********************************************************************!*\
+ !*** ./apps/settings/src/views/Users.vue?vue&type=script&lang=js& ***!
+ \********************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/GroupListItem.vue?vue&type=template&id=b3f9b202&":
+/*!***************************************************************************************!*\
+ !*** ./apps/settings/src/components/GroupListItem.vue?vue&type=template&id=b3f9b202& ***!
+ \***************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_GroupListItem_vue_vue_type_template_id_b3f9b202___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_GroupListItem_vue_vue_type_template_id_b3f9b202___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_GroupListItem_vue_vue_type_template_id_b3f9b202___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=template&id=b3f9b202& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/GroupListItem.vue?vue&type=template&id=b3f9b202&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca&scoped=true&":
+/*!**********************************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca&scoped=true& ***!
+ \**********************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_template_id_6cba3aca_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_template_id_6cba3aca_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_template_id_6cba3aca_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=template&id=6cba3aca&scoped=true& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa&scoped=true&":
+/*!******************************************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa&scoped=true& ***!
+ \******************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_template_id_77960baa_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_template_id_77960baa_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_template_id_77960baa_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=template&id=77960baa&scoped=true& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08&":
+/*!************************************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08& ***!
+ \************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_template_id_ff154a08___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_template_id_ff154a08___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_template_id_ff154a08___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=template&id=ff154a08& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/views/Users.vue?vue&type=template&id=889b7562&scoped=true&":
+/*!**************************************************************************************!*\
+ !*** ./apps/settings/src/views/Users.vue?vue&type=template&id=889b7562&scoped=true& ***!
+ \**************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_template_id_889b7562_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_template_id_889b7562_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_template_id_889b7562_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=template&id=889b7562&scoped=true& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=template&id=889b7562&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&":
+/*!*********************************************************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss& ***!
+ \*********************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRow_vue_vue_type_style_index_0_id_77960baa_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/style-loader/dist/cjs.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss&":
+/*!***************************************************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss& ***!
+ \***************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserRowSimple_vue_vue_type_style_index_0_id_ff154a08_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../../node_modules/style-loader/dist/cjs.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/views/Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&":
+/*!*****************************************************************************************************!*\
+ !*** ./apps/settings/src/views/Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true& ***!
+ \*****************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Users_vue_vue_type_style_index_0_id_889b7562_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/views/Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&":
+/*!************************************************************************************************************!*\
+ !*** ./apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css& ***!
+ \************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_UserList_vue_vue_type_style_index_0_id_6cba3aca_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&");
+
+
+/***/ })
+
+}]);
+//# sourceMappingURL=settings-users-settings-users.js.map?v=0c06c64ad06207fb95aa \ No newline at end of file
diff --git a/dist/settings-users-settings-users.js.map b/dist/settings-users-settings-users.js.map
new file mode 100644
index 00000000000..5ba0e1fdae0
--- /dev/null
+++ b/dist/settings-users-settings-users.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"settings-users-settings-users.js?v=0c06c64ad06207fb95aa","mappings":";;;;;;;;;;;AAAA;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;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;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;;;;;;;;;;;;;;;;;;;ACnMA;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;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;;;;;;;;;;;;;;;;;;;;;;ACrGA;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;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;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;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;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;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AChXA;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;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;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;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;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;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;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;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;AACA;;;;;;;;;;;;;;;;;;;;;ACzkBA;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;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7GA;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;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;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;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;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;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;;;;;;;;;;;;;;;AC5YA;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;;;;;;;;;;;;;;;;AC1DA;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC3XA;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;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;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;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;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;;;;;;;;;;;;;;;;AClVA;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;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;;;;;;;;;;;;;;;;AChIA;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;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;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;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;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;;;;;;;;;;;;;;;;ACzUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;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;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;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;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;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;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;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;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;ACvCA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA","sources":["webpack:///nextcloud/apps/settings/src/mixins/UserRowMixin.js","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=template&id=b3f9b202&","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=77960baa&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=ff154a08&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=template&id=889b7562&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?bf83","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?a636","webpack://nextcloud/./apps/settings/src/views/Users.vue?f7e6","webpack://nextcloud/./apps/settings/src/components/UserList.vue?9479","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue","webpack:///nextcloud/apps/settings/src/components/UserList.vue","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue","webpack:///nextcloud/apps/settings/src/views/Users.vue","webpack://nextcloud/./apps/settings/src/components/GroupListItem.vue?12a8","webpack://nextcloud/./apps/settings/src/components/UserList.vue?e4c2","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?8c35","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?8366","webpack://nextcloud/./apps/settings/src/views/Users.vue?083d","webpack://nextcloud/./apps/settings/src/components/GroupListItem.vue?22f4","webpack://nextcloud/./apps/settings/src/components/UserList.vue?b1e9","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?be62","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?2d27","webpack://nextcloud/./apps/settings/src/views/Users.vue?42fc","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?d28c","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?6d9a","webpack://nextcloud/./apps/settings/src/views/Users.vue?e9cb","webpack://nextcloud/./apps/settings/src/components/UserList.vue?a675"],"sourcesContent":["function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Greta Doci <gretadoci@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateUrl } from '@nextcloud/router';\nexport default {\n props: {\n user: {\n type: Object,\n required: true\n },\n settings: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n groups: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n subAdminsGroups: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n quotaOptions: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n showConfig: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n languages: {\n type: Array,\n required: true\n },\n externalActions: {\n type: Array,\n default: function _default() {\n return [];\n }\n }\n },\n computed: {\n /* GROUPS MANAGEMENT */userGroups: function userGroups() {\n var _this = this;\n var userGroups = this.groups.filter(function (group) {\n return _this.user.groups.includes(group.id);\n });\n return userGroups;\n },\n userSubAdminsGroups: function userSubAdminsGroups() {\n var _this2 = this;\n var userSubAdminsGroups = this.subAdminsGroups.filter(function (group) {\n return _this2.user.subadmin.includes(group.id);\n });\n return userSubAdminsGroups;\n },\n availableGroups: function availableGroups() {\n var _this3 = this;\n return this.groups.map(function (group) {\n // clone object because we don't want\n // to edit the original groups\n var groupClone = Object.assign({}, group);\n\n // two settings here:\n // 1. user NOT in group but no permission to add\n // 2. user is in group but no permission to remove\n groupClone.$isDisabled = group.canAdd === false && !_this3.user.groups.includes(group.id) || group.canRemove === false && _this3.user.groups.includes(group.id);\n return groupClone;\n });\n },\n /* QUOTA MANAGEMENT */usedSpace: function usedSpace() {\n if (this.user.quota.used) {\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(this.user.quota.used)\n });\n }\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(0)\n });\n },\n usedQuota: function usedQuota() {\n var quota = this.user.quota.quota;\n if (quota > 0) {\n quota = Math.min(100, Math.round(this.user.quota.used / quota * 100));\n } else {\n var usedInGB = this.user.quota.used / (10 * Math.pow(2, 30));\n // asymptotic curve approaching 50% at 10GB to visualize used stace with infinite quota\n quota = 95 * (1 - 1 / (usedInGB + 1));\n }\n return isNaN(quota) ? 0 : quota;\n },\n // Mapping saved values to objects\n userQuota: function userQuota() {\n if (this.user.quota.quota >= 0) {\n // if value is valid, let's map the quotaOptions or return custom quota\n var humanQuota = OC.Util.humanFileSize(this.user.quota.quota);\n var userQuota = this.quotaOptions.find(function (quota) {\n return quota.id === humanQuota;\n });\n return userQuota || {\n id: humanQuota,\n label: humanQuota\n };\n } else if (this.user.quota.quota === 'default') {\n // default quota is replaced by the proper value on load\n return this.quotaOptions[0];\n }\n return this.quotaOptions[1]; // unlimited\n },\n /* PASSWORD POLICY? */minPasswordLength: function minPasswordLength() {\n return this.$store.getters.getPasswordPolicyMinLength;\n },\n /* LANGUAGE */userLanguage: function userLanguage() {\n var _this4 = this;\n var availableLanguages = this.languages[0].languages.concat(this.languages[1].languages);\n var userLang = availableLanguages.find(function (lang) {\n return lang.code === _this4.user.language;\n });\n if (_typeof(userLang) !== 'object' && this.user.language !== '') {\n return {\n code: this.user.language,\n name: this.user.language\n };\n } else if (this.user.language === '') {\n return false;\n }\n return userLang;\n },\n /* LAST LOGIN */userLastLoginTooltip: function userLastLoginTooltip() {\n if (this.user.lastLogin > 0) {\n return OC.Util.formatDate(this.user.lastLogin);\n }\n return '';\n },\n userLastLogin: function userLastLogin() {\n if (this.user.lastLogin > 0) {\n return OC.Util.relativeModifiedDate(this.user.lastLogin);\n }\n return t('settings', 'Never');\n }\n },\n methods: {\n /**\n * Generate avatar url\n *\n * @param {string} user The user name\n * @param {bool} isDarkTheme Whether the avatar should be the dark version\n * @return {string}\n */\n generateAvatar: function generateAvatar(user, isDarkTheme) {\n if (isDarkTheme) {\n return generateUrl('/avatar/{user}/64/dark?v={version}', {\n user: user,\n version: oc_userconfig.avatar.version\n });\n } else {\n return generateUrl('/avatar/{user}/64?v={version}', {\n user: user,\n version: oc_userconfig.avatar.version\n });\n }\n }\n }\n};","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput.js';\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js';\nimport NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js';\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js';\nexport default {\n name: 'GroupListItem',\n components: {\n NcActionInput: NcActionInput,\n NcActionButton: NcActionButton,\n NcCounterBubble: NcCounterBubble,\n NcAppNavigationItem: NcAppNavigationItem\n },\n props: {\n id: {\n type: String,\n required: true\n },\n title: {\n type: String,\n required: true\n },\n count: {\n type: Number,\n required: false\n }\n },\n data: function data() {\n return {\n loadingRenameGroup: false,\n openGroupMenu: false\n };\n },\n computed: {\n settings: function settings() {\n return this.$store.getters.getServerData;\n }\n },\n methods: {\n handleGroupMenuOpen: function handleGroupMenuOpen() {\n this.openGroupMenu = true;\n },\n renameGroup: function renameGroup(gid) {\n var _this = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n var displayName;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(gid.trim() === '')) {\n _context.next = 2;\n break;\n }\n return _context.abrupt(\"return\");\n case 2:\n displayName = _this.$refs.displayNameInput.$el.querySelector('input[type=\"text\"]').value; // check if group name is valid\n if (!(displayName.trim() === '')) {\n _context.next = 5;\n break;\n }\n return _context.abrupt(\"return\");\n case 5:\n _context.prev = 5;\n _this.openGroupMenu = false;\n _this.loadingRenameGroup = true;\n _context.next = 10;\n return _this.$store.dispatch('renameGroup', {\n groupid: gid.trim(),\n displayName: displayName.trim()\n });\n case 10:\n _this.loadingRenameGroup = false;\n _context.next = 17;\n break;\n case 13:\n _context.prev = 13;\n _context.t0 = _context[\"catch\"](5);\n _this.openGroupMenu = true;\n _this.loadingRenameGroup = false;\n case 17:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, null, [[5, 13]]);\n }))();\n },\n removeGroup: function removeGroup(groupid) {\n var self = this;\n // TODO migrate to a vue js confirm dialog component\n OC.dialogs.confirm(t('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', {\n group: groupid\n }), t('settings', 'Please confirm the group removal '), function (success) {\n if (success) {\n self.$store.dispatch('removeGroup', groupid);\n }\n });\n }\n }\n};","import { subscribe, unsubscribe } from '@nextcloud/event-bus';\nimport InfiniteLoading from 'vue-infinite-loading';\nimport Vue from 'vue';\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal.js';\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js';\nimport NcMultiselect from '@nextcloud/vue/dist/Components/NcMultiselect.js';\nimport userRow from './UserList/UserRow.vue';\nvar unlimitedQuota = {\n id: 'none',\n label: t('settings', 'Unlimited')\n};\nvar defaultQuota = {\n id: 'default',\n label: t('settings', 'Default quota')\n};\nvar newUser = {\n id: '',\n displayName: '',\n password: '',\n mailAddress: '',\n groups: [],\n subAdminsGroups: [],\n quota: defaultQuota,\n language: {\n code: 'en',\n name: t('settings', 'Default language')\n }\n};\nexport default {\n name: 'UserList',\n components: {\n NcModal: NcModal,\n userRow: userRow,\n NcMultiselect: NcMultiselect,\n InfiniteLoading: InfiniteLoading,\n NcButton: NcButton\n },\n props: {\n users: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n showConfig: {\n type: Object,\n required: true\n },\n selectedGroup: {\n type: String,\n default: null\n },\n externalActions: {\n type: Array,\n default: function _default() {\n return [];\n }\n }\n },\n data: function data() {\n return {\n unlimitedQuota: unlimitedQuota,\n defaultQuota: defaultQuota,\n loading: {\n all: false,\n groups: false\n },\n scrolled: false,\n searchQuery: '',\n newUser: Object.assign({}, newUser)\n };\n },\n computed: {\n settings: function settings() {\n return this.$store.getters.getServerData;\n },\n selectedGroupDecoded: function selectedGroupDecoded() {\n return decodeURIComponent(this.selectedGroup);\n },\n filteredUsers: function filteredUsers() {\n if (this.selectedGroup === 'disabled') {\n return this.users.filter(function (user) {\n return user.enabled === false;\n });\n }\n if (!this.settings.isAdmin) {\n // we don't want subadmins to edit themselves\n return this.users.filter(function (user) {\n return user.enabled !== false;\n });\n }\n return this.users.filter(function (user) {\n return user.enabled !== false;\n });\n },\n groups: function groups() {\n // data provided php side + remove the disabled group\n return this.$store.getters.getGroups.filter(function (group) {\n return group.id !== 'disabled';\n }).sort(function (a, b) {\n return a.name.localeCompare(b.name);\n });\n },\n canAddGroups: function canAddGroups() {\n // disabled if no permission to add new users to group\n return this.groups.map(function (group) {\n // clone object because we don't want\n // to edit the original groups\n group = Object.assign({}, group);\n group.$isDisabled = group.canAdd === false;\n return group;\n });\n },\n subAdminsGroups: function subAdminsGroups() {\n // data provided php side\n return this.$store.getters.getSubadminGroups;\n },\n quotaOptions: function quotaOptions() {\n // convert the preset array into objects\n var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n return acc.concat({\n id: cur,\n label: cur\n });\n }, []);\n // add default presets\n if (this.settings.allowUnlimitedQuota) {\n quotaPreset.unshift(this.unlimitedQuota);\n }\n quotaPreset.unshift(this.defaultQuota);\n return quotaPreset;\n },\n minPasswordLength: function minPasswordLength() {\n return this.$store.getters.getPasswordPolicyMinLength;\n },\n usersOffset: function usersOffset() {\n return this.$store.getters.getUsersOffset;\n },\n usersLimit: function usersLimit() {\n return this.$store.getters.getUsersLimit;\n },\n usersCount: function usersCount() {\n return this.users.length;\n },\n /* LANGUAGES */languages: function languages() {\n return [{\n label: t('settings', 'Common languages'),\n languages: this.settings.languages.commonLanguages\n }, {\n label: t('settings', 'Other languages'),\n languages: this.settings.languages.otherLanguages\n }];\n },\n isDarkTheme: function isDarkTheme() {\n return window.getComputedStyle(this.$el).getPropertyValue('--background-invert-if-dark') === 'invert(100%)';\n }\n },\n watch: {\n // watch url change and group select\n selectedGroup: function selectedGroup(val, old) {\n // if selected is the disabled group but it's empty\n this.redirectIfDisabled();\n this.$store.commit('resetUsers');\n this.$refs.infiniteLoading.stateChanger.reset();\n this.setNewUserDefaultGroup(val);\n },\n // make sure the infiniteLoading state is changed if we manually\n // add/remove data from the store\n usersCount: function usersCount(val, old) {\n // deleting the last user, reset the list\n if (val === 0 && old === 1) {\n this.$refs.infiniteLoading.stateChanger.reset();\n // adding the first user, warn the infiniteLoader that\n // the list is not empty anymore (we don't fetch the newly\n // added user as we already have all the info we need)\n } else if (val === 1 && old === 0) {\n this.$refs.infiniteLoading.stateChanger.loaded();\n }\n }\n },\n mounted: function mounted() {\n if (!this.settings.canChangePassword) {\n OC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'));\n }\n\n /**\n * Reset and init new user form\n */\n this.resetForm();\n\n /**\n * Register search\n */\n subscribe('nextcloud:unified-search.search', this.search);\n subscribe('nextcloud:unified-search.reset', this.resetSearch);\n\n /**\n * If disabled group but empty, redirect\n */\n this.redirectIfDisabled();\n },\n beforeDestroy: function beforeDestroy() {\n unsubscribe('nextcloud:unified-search.search', this.search);\n unsubscribe('nextcloud:unified-search.reset', this.resetSearch);\n },\n methods: {\n onScroll: function onScroll(event) {\n this.scrolled = event.target.scrollTo > 0;\n },\n /**\n * Validate quota string to make sure it's a valid human file size\n *\n * @param {string} quota Quota in readable format '5 GB'\n * @return {object}\n */\n validateQuota: function validateQuota(quota) {\n // only used for new presets sent through @Tag\n var validQuota = OC.Util.computerFileSize(quota);\n if (validQuota !== null && validQuota >= 0) {\n // unify format output\n quota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota));\n this.newUser.quota = {\n id: quota,\n label: quota\n };\n return this.newUser.quota;\n }\n // Default is unlimited\n this.newUser.quota = this.quotaOptions[0];\n return this.quotaOptions[0];\n },\n infiniteHandler: function infiniteHandler($state) {\n var _this = this;\n this.$store.dispatch('getUsers', {\n offset: this.usersOffset,\n limit: this.usersLimit,\n group: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\n search: this.searchQuery\n }).then(function (usersCount) {\n if (usersCount > 0) {\n $state.loaded();\n }\n if (usersCount < _this.usersLimit) {\n $state.complete();\n }\n });\n },\n /* SEARCH */search: function search(_ref) {\n var query = _ref.query;\n this.searchQuery = query;\n this.$store.commit('resetUsers');\n this.$refs.infiniteLoading.stateChanger.reset();\n },\n resetSearch: function resetSearch() {\n this.search({\n query: ''\n });\n },\n resetForm: function resetForm() {\n // revert form to original state\n this.newUser = Object.assign({}, newUser);\n\n /**\n * Init default language from server data. The use of this.settings\n * requires a computed variable, which break the v-model binding of the form,\n * this is a much easier solution than getter and setter on a computed var\n */\n if (this.settings.defaultLanguage) {\n Vue.set(this.newUser.language, 'code', this.settings.defaultLanguage);\n }\n\n /**\n * In case the user directly loaded the user list within a group\n * the watch won't be triggered. We need to initialize it.\n */\n this.setNewUserDefaultGroup(this.selectedGroup);\n this.loading.all = false;\n },\n createUser: function createUser() {\n var _this2 = this;\n this.loading.all = true;\n this.$store.dispatch('addUser', {\n userid: this.newUser.id,\n password: this.newUser.password,\n displayName: this.newUser.displayName,\n email: this.newUser.mailAddress,\n groups: this.newUser.groups.map(function (group) {\n return group.id;\n }),\n subadmin: this.newUser.subAdminsGroups.map(function (group) {\n return group.id;\n }),\n quota: this.newUser.quota.id,\n language: this.newUser.language.code\n }).then(function () {\n _this2.resetForm();\n _this2.$refs.newusername.focus();\n _this2.closeModal();\n }).catch(function (error) {\n _this2.loading.all = false;\n if (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n var statuscode = error.response.data.ocs.meta.statuscode;\n if (statuscode === 102) {\n // wrong username\n _this2.$refs.newusername.focus();\n } else if (statuscode === 107) {\n // wrong password\n _this2.$refs.newuserpassword.focus();\n }\n }\n });\n },\n setNewUserDefaultGroup: function setNewUserDefaultGroup(value) {\n if (value && value.length > 0) {\n // setting new user default group to the current selected one\n var currentGroup = this.groups.find(function (group) {\n return group.id === value;\n });\n if (currentGroup) {\n this.newUser.groups = [currentGroup];\n return;\n }\n }\n // fallback, empty selected group\n this.newUser.groups = [];\n },\n /**\n * Create a new group\n *\n * @param {string} gid Group id\n * @return {Promise}\n */\n createGroup: function createGroup(gid) {\n var _this3 = this;\n this.loading.groups = true;\n this.$store.dispatch('addGroup', gid).then(function (group) {\n _this3.newUser.groups.push(_this3.groups.find(function (group) {\n return group.id === gid;\n }));\n _this3.loading.groups = false;\n }).catch(function () {\n _this3.loading.groups = false;\n });\n return this.$store.getters.getGroups[this.groups.length];\n },\n /**\n * If the selected group is the disabled group but the count is 0\n * redirect to the all users page.\n * we only check for 0 because we don't have the count on ldap\n * and we therefore set the usercount to -1 in this specific case\n */\n redirectIfDisabled: function redirectIfDisabled() {\n var allGroups = this.$store.getters.getGroups;\n if (this.selectedGroup === 'disabled' && allGroups.findIndex(function (group) {\n return group.id === 'disabled' && group.usercount === 0;\n }) > -1) {\n // disabled group is empty, redirection to all users\n this.$router.push({\n name: 'users'\n });\n this.$refs.infiniteLoading.stateChanger.reset();\n }\n },\n closeModal: function closeModal() {\n // eslint-disable-next-line vue/no-mutating-props\n this.showConfig.showNewUserForm = false;\n }\n }\n};","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport ClickOutside from 'vue-click-outside';\nimport { NcPopoverMenu, NcMultiselect, NcActions, NcActionButton } from '@nextcloud/vue';\nimport UserRowSimple from './UserRowSimple.vue';\nimport UserRowMixin from '../../mixins/UserRowMixin.js';\nexport default {\n name: 'UserRow',\n components: {\n UserRowSimple: UserRowSimple,\n NcPopoverMenu: NcPopoverMenu,\n NcActions: NcActions,\n NcActionButton: NcActionButton,\n NcMultiselect: NcMultiselect\n },\n directives: {\n ClickOutside: ClickOutside\n },\n mixins: [UserRowMixin],\n props: {\n user: {\n type: Object,\n required: true\n },\n settings: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n groups: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n subAdminsGroups: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n quotaOptions: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n showConfig: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n languages: {\n type: Array,\n required: true\n },\n externalActions: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n isDarkTheme: {\n type: Boolean,\n required: true\n }\n },\n data: function data() {\n return {\n rand: parseInt(Math.random() * 1000),\n openedMenu: false,\n feedbackMessage: '',\n editing: false,\n loading: {\n all: false,\n displayName: false,\n password: false,\n mailAddress: false,\n groups: false,\n subadmins: false,\n quota: false,\n delete: false,\n disable: false,\n languages: false,\n wipe: false\n }\n };\n },\n computed: {\n /* USER POPOVERMENU ACTIONS */userActions: function userActions() {\n var actions = [{\n icon: 'icon-delete',\n text: t('settings', 'Delete user'),\n action: this.deleteUser\n }, {\n icon: 'icon-delete',\n text: t('settings', 'Wipe all devices'),\n action: this.wipeUserDevices\n }, {\n icon: this.user.enabled ? 'icon-close' : 'icon-add',\n text: this.user.enabled ? t('settings', 'Disable user') : t('settings', 'Enable user'),\n action: this.enableDisableUser\n }];\n if (this.user.email !== null && this.user.email !== '') {\n actions.push({\n icon: 'icon-mail',\n text: t('settings', 'Resend welcome email'),\n action: this.sendWelcomeMail\n });\n }\n return actions.concat(this.externalActions);\n }\n },\n methods: {\n /* MENU HANDLING */toggleMenu: function toggleMenu() {\n this.openedMenu = !this.openedMenu;\n },\n hideMenu: function hideMenu() {\n this.openedMenu = false;\n },\n wipeUserDevices: function wipeUserDevices() {\n var _this = this;\n var userid = this.user.id;\n OC.dialogs.confirmDestructive(t('settings', 'In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.', {\n userid: userid\n }), t('settings', 'Remote wipe of devices'), {\n type: OC.dialogs.YES_NO_BUTTONS,\n confirm: t('settings', 'Wipe {userid}\\'s devices', {\n userid: userid\n }),\n confirmClasses: 'error',\n cancel: t('settings', 'Cancel')\n }, function (result) {\n if (result) {\n _this.loading.wipe = true;\n _this.loading.all = true;\n _this.$store.dispatch('wipeUserDevices', userid).then(function () {\n _this.loading.wipe = false;\n _this.loading.all = false;\n });\n }\n }, true);\n },\n deleteUser: function deleteUser() {\n var _this2 = this;\n var userid = this.user.id;\n OC.dialogs.confirmDestructive(t('settings', 'Fully delete {userid}\\'s account including all their personal files, app data, etc.', {\n userid: userid\n }), t('settings', 'Account deletion'), {\n type: OC.dialogs.YES_NO_BUTTONS,\n confirm: t('settings', 'Delete {userid}\\'s account', {\n userid: userid\n }),\n confirmClasses: 'error',\n cancel: t('settings', 'Cancel')\n }, function (result) {\n if (result) {\n _this2.loading.delete = true;\n _this2.loading.all = true;\n return _this2.$store.dispatch('deleteUser', userid).then(function () {\n _this2.loading.delete = false;\n _this2.loading.all = false;\n });\n }\n }, true);\n },\n enableDisableUser: function enableDisableUser() {\n var _this3 = this;\n this.loading.delete = true;\n this.loading.all = true;\n var userid = this.user.id;\n var enabled = !this.user.enabled;\n return this.$store.dispatch('enableDisableUser', {\n userid: userid,\n enabled: enabled\n }).then(function () {\n _this3.loading.delete = false;\n _this3.loading.all = false;\n });\n },\n /**\n * Set user displayName\n *\n * @param {string} displayName The display name\n */\n updateDisplayName: function updateDisplayName() {\n var _this4 = this;\n var displayName = this.$refs.displayName.value;\n this.loading.displayName = true;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'displayname',\n value: displayName\n }).then(function () {\n _this4.loading.displayName = false;\n _this4.$refs.displayName.value = displayName;\n });\n },\n /**\n * Set user password\n *\n * @param {string} password The email address\n */\n updatePassword: function updatePassword() {\n var _this5 = this;\n var password = this.$refs.password.value;\n this.loading.password = true;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'password',\n value: password\n }).then(function () {\n _this5.loading.password = false;\n _this5.$refs.password.value = ''; // empty & show placeholder\n });\n },\n /**\n * Set user mailAddress\n *\n * @param {string} mailAddress The email address\n */\n updateEmail: function updateEmail() {\n var _this6 = this;\n var mailAddress = this.$refs.mailAddress.value;\n this.loading.mailAddress = true;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'email',\n value: mailAddress\n }).then(function () {\n _this6.loading.mailAddress = false;\n _this6.$refs.mailAddress.value = mailAddress;\n });\n },\n /**\n * Create a new group and add user to it\n *\n * @param {string} gid Group id\n */\n createGroup: function createGroup(gid) {\n var _this7 = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n var userid;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _this7.loading = {\n groups: true,\n subadmins: true\n };\n _context.prev = 1;\n _context.next = 4;\n return _this7.$store.dispatch('addGroup', gid);\n case 4:\n userid = _this7.user.id;\n _context.next = 7;\n return _this7.$store.dispatch('addUserGroup', {\n userid: userid,\n gid: gid\n });\n case 7:\n _context.next = 12;\n break;\n case 9:\n _context.prev = 9;\n _context.t0 = _context[\"catch\"](1);\n console.error(_context.t0);\n case 12:\n _context.prev = 12;\n _this7.loading = {\n groups: false,\n subadmins: false\n };\n return _context.finish(12);\n case 15:\n return _context.abrupt(\"return\", _this7.$store.getters.getGroups[_this7.groups.length]);\n case 16:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, null, [[1, 9, 12, 15]]);\n }))();\n },\n /**\n * Add user to group\n *\n * @param {object} group Group object\n */\n addUserGroup: function addUserGroup(group) {\n var _this8 = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n var userid, gid;\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(group.canAdd === false)) {\n _context2.next = 2;\n break;\n }\n return _context2.abrupt(\"return\", false);\n case 2:\n _this8.loading.groups = true;\n userid = _this8.user.id;\n gid = group.id;\n _context2.prev = 5;\n _context2.next = 8;\n return _this8.$store.dispatch('addUserGroup', {\n userid: userid,\n gid: gid\n });\n case 8:\n _context2.next = 13;\n break;\n case 10:\n _context2.prev = 10;\n _context2.t0 = _context2[\"catch\"](5);\n console.error(_context2.t0);\n case 13:\n _context2.prev = 13;\n _this8.loading.groups = false;\n return _context2.finish(13);\n case 16:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, null, [[5, 10, 13, 16]]);\n }))();\n },\n /**\n * Remove user from group\n *\n * @param {object} group Group object\n */\n removeUserGroup: function removeUserGroup(group) {\n var _this9 = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {\n var userid, gid;\n return regeneratorRuntime.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(group.canRemove === false)) {\n _context3.next = 2;\n break;\n }\n return _context3.abrupt(\"return\", false);\n case 2:\n _this9.loading.groups = true;\n userid = _this9.user.id;\n gid = group.id;\n _context3.prev = 5;\n _context3.next = 8;\n return _this9.$store.dispatch('removeUserGroup', {\n userid: userid,\n gid: gid\n });\n case 8:\n _this9.loading.groups = false;\n // remove user from current list if current list is the removed group\n if (_this9.$route.params.selectedGroup === gid) {\n _this9.$store.commit('deleteUser', userid);\n }\n _context3.next = 15;\n break;\n case 12:\n _context3.prev = 12;\n _context3.t0 = _context3[\"catch\"](5);\n _this9.loading.groups = false;\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, null, [[5, 12]]);\n }))();\n },\n /**\n * Add user to group\n *\n * @param {object} group Group object\n */\n addUserSubAdmin: function addUserSubAdmin(group) {\n var _this10 = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {\n var userid, gid;\n return regeneratorRuntime.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _this10.loading.subadmins = true;\n userid = _this10.user.id;\n gid = group.id;\n _context4.prev = 3;\n _context4.next = 6;\n return _this10.$store.dispatch('addUserSubAdmin', {\n userid: userid,\n gid: gid\n });\n case 6:\n _this10.loading.subadmins = false;\n _context4.next = 12;\n break;\n case 9:\n _context4.prev = 9;\n _context4.t0 = _context4[\"catch\"](3);\n console.error(_context4.t0);\n case 12:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, null, [[3, 9]]);\n }))();\n },\n /**\n * Remove user from group\n *\n * @param {object} group Group object\n */\n removeUserSubAdmin: function removeUserSubAdmin(group) {\n var _this11 = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5() {\n var userid, gid;\n return regeneratorRuntime.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n _this11.loading.subadmins = true;\n userid = _this11.user.id;\n gid = group.id;\n _context5.prev = 3;\n _context5.next = 6;\n return _this11.$store.dispatch('removeUserSubAdmin', {\n userid: userid,\n gid: gid\n });\n case 6:\n _context5.next = 11;\n break;\n case 8:\n _context5.prev = 8;\n _context5.t0 = _context5[\"catch\"](3);\n console.error(_context5.t0);\n case 11:\n _context5.prev = 11;\n _this11.loading.subadmins = false;\n return _context5.finish(11);\n case 14:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5, null, [[3, 8, 11, 14]]);\n }))();\n },\n /**\n * Dispatch quota set request\n *\n * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n * @return {string}\n */\n setUserQuota: function setUserQuota() {\n var _arguments = arguments,\n _this12 = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee6() {\n var quota;\n return regeneratorRuntime.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n quota = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : 'none';\n _this12.loading.quota = true;\n // ensure we only send the preset id\n quota = quota.id ? quota.id : quota;\n _context6.prev = 3;\n _context6.next = 6;\n return _this12.$store.dispatch('setUserData', {\n userid: _this12.user.id,\n key: 'quota',\n value: quota\n });\n case 6:\n _context6.next = 11;\n break;\n case 8:\n _context6.prev = 8;\n _context6.t0 = _context6[\"catch\"](3);\n console.error(_context6.t0);\n case 11:\n _context6.prev = 11;\n _this12.loading.quota = false;\n return _context6.finish(11);\n case 14:\n return _context6.abrupt(\"return\", quota);\n case 15:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6, null, [[3, 8, 11, 14]]);\n }))();\n },\n /**\n * Validate quota string to make sure it's a valid human file size\n *\n * @param {string} quota Quota in readable format '5 GB'\n * @return {Promise|boolean}\n */\n validateQuota: function validateQuota(quota) {\n // only used for new presets sent through @Tag\n var validQuota = OC.Util.computerFileSize(quota);\n if (validQuota !== null && validQuota >= 0) {\n // unify format output\n return this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n }\n // if no valid do not change\n return false;\n },\n /**\n * Dispatch language set request\n *\n * @param {object} lang language object {code:'en', name:'English'}\n * @return {object}\n */\n setUserLanguage: function setUserLanguage(lang) {\n var _this13 = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee7() {\n return regeneratorRuntime.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n _this13.loading.languages = true;\n // ensure we only send the preset id\n _context7.prev = 1;\n _context7.next = 4;\n return _this13.$store.dispatch('setUserData', {\n userid: _this13.user.id,\n key: 'language',\n value: lang.code\n });\n case 4:\n _context7.next = 9;\n break;\n case 6:\n _context7.prev = 6;\n _context7.t0 = _context7[\"catch\"](1);\n console.error(_context7.t0);\n case 9:\n _context7.prev = 9;\n _this13.loading.languages = false;\n return _context7.finish(9);\n case 12:\n return _context7.abrupt(\"return\", lang);\n case 13:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7, null, [[1, 6, 9, 12]]);\n }))();\n },\n /**\n * Dispatch new welcome mail request\n */\n sendWelcomeMail: function sendWelcomeMail() {\n var _this14 = this;\n this.loading.all = true;\n this.$store.dispatch('sendWelcomeMail', this.user.id).then(function (success) {\n if (success) {\n // Show feedback to indicate the success\n _this14.feedbackMessage = t('setting', 'Welcome mail sent!');\n setTimeout(function () {\n _this14.feedbackMessage = '';\n }, 2000);\n }\n _this14.loading.all = false;\n });\n }\n }\n};","import NcPopoverMenu from '@nextcloud/vue/dist/Components/NcPopoverMenu.js';\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js';\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js';\nimport ClickOutside from 'vue-click-outside';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport UserRowMixin from '../../mixins/UserRowMixin.js';\nexport default {\n name: 'UserRowSimple',\n components: {\n NcPopoverMenu: NcPopoverMenu,\n NcActionButton: NcActionButton,\n NcActions: NcActions\n },\n directives: {\n ClickOutside: ClickOutside\n },\n mixins: [UserRowMixin],\n props: {\n user: {\n type: Object,\n required: true\n },\n loading: {\n type: Object,\n required: true\n },\n showConfig: {\n type: Object,\n required: true\n },\n userActions: {\n type: Array,\n required: true\n },\n openedMenu: {\n type: Boolean,\n required: true\n },\n feedbackMessage: {\n type: String,\n required: true\n },\n subAdminsGroups: {\n type: Array,\n required: true\n },\n settings: {\n type: Object,\n required: true\n },\n isDarkTheme: {\n type: Boolean,\n required: true\n }\n },\n computed: {\n userGroupsLabels: function userGroupsLabels() {\n return this.userGroups.map(function (group) {\n return group.name;\n }).join(', ');\n },\n userSubAdminsGroupsLabels: function userSubAdminsGroupsLabels() {\n return this.userSubAdminsGroups.map(function (group) {\n return group.name;\n }).join(', ');\n },\n usedSpace: function usedSpace() {\n if (this.user.quota.used) {\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(this.user.quota.used)\n });\n }\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(0)\n });\n },\n canEdit: function canEdit() {\n return getCurrentUser().uid !== this.user.id || this.settings.isAdmin;\n },\n userQuota: function userQuota() {\n var quota = this.user.quota.quota;\n if (quota === 'default') {\n quota = this.settings.defaultQuota;\n if (quota !== 'none') {\n // convert to numeric value to match what the server would usually return\n quota = OC.Util.computerFileSize(quota);\n }\n }\n\n // when the default quota is unlimited, the server returns -3 here, map it to \"none\"\n if (quota === 'none' || quota === -3) {\n return t('settings', 'Unlimited');\n } else if (quota >= 0) {\n return OC.Util.humanFileSize(quota);\n }\n return OC.Util.humanFileSize(0);\n }\n },\n methods: {\n toggleMenu: function toggleMenu() {\n this.$emit('update:openedMenu', !this.openedMenu);\n },\n hideMenu: function hideMenu() {\n this.$emit('update:openedMenu', false);\n },\n toggleEdit: function toggleEdit() {\n this.$emit('update:editing', true);\n }\n }\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js';\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js';\nimport NcAppNavigationCaption from '@nextcloud/vue/dist/Components/NcAppNavigationCaption.js';\nimport NcAppNavigationCounter from '@nextcloud/vue/dist/Components/NcAppNavigationCounter.js';\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js';\nimport NcAppNavigationNew from '@nextcloud/vue/dist/Components/NcAppNavigationNew.js';\nimport NcAppNavigationSettings from '@nextcloud/vue/dist/Components/NcAppNavigationSettings.js';\nimport axios from '@nextcloud/axios';\nimport NcContent from '@nextcloud/vue/dist/Components/NcContent.js';\nimport { generateUrl } from '@nextcloud/router';\nimport NcMultiselect from '@nextcloud/vue/dist/Components/NcMultiselect.js';\nimport Vue from 'vue';\nimport VueLocalStorage from 'vue-localstorage';\nimport GroupListItem from '../components/GroupListItem.vue';\nimport UserList from '../components/UserList.vue';\nVue.use(VueLocalStorage);\nexport default {\n name: 'Users',\n components: {\n NcAppContent: NcAppContent,\n NcAppNavigation: NcAppNavigation,\n NcAppNavigationCaption: NcAppNavigationCaption,\n NcAppNavigationCounter: NcAppNavigationCounter,\n NcAppNavigationItem: NcAppNavigationItem,\n NcAppNavigationNew: NcAppNavigationNew,\n NcAppNavigationSettings: NcAppNavigationSettings,\n NcContent: NcContent,\n GroupListItem: GroupListItem,\n NcMultiselect: NcMultiselect,\n UserList: UserList\n },\n props: {\n selectedGroup: {\n type: String,\n default: null\n }\n },\n data: function data() {\n return {\n // default quota is set to unlimited\n unlimitedQuota: {\n id: 'none',\n label: t('settings', 'Unlimited')\n },\n // temporary value used for multiselect change\n selectedQuota: false,\n externalActions: [],\n loadingAddGroup: false,\n loadingSendMail: false,\n showConfig: {\n showStoragePath: false,\n showUserBackend: false,\n showLastLogin: false,\n showNewUserForm: false,\n showLanguages: false\n }\n };\n },\n computed: {\n selectedGroupDecoded: function selectedGroupDecoded() {\n return this.selectedGroup ? decodeURIComponent(this.selectedGroup) : null;\n },\n users: function users() {\n return this.$store.getters.getUsers;\n },\n groups: function groups() {\n return this.$store.getters.getGroups;\n },\n usersOffset: function usersOffset() {\n return this.$store.getters.getUsersOffset;\n },\n usersLimit: function usersLimit() {\n return this.$store.getters.getUsersLimit;\n },\n // Local settings\n showLanguages: {\n get: function get() {\n return this.getLocalstorage('showLanguages');\n },\n set: function set(status) {\n this.setLocalStorage('showLanguages', status);\n }\n },\n showLastLogin: {\n get: function get() {\n return this.getLocalstorage('showLastLogin');\n },\n set: function set(status) {\n this.setLocalStorage('showLastLogin', status);\n }\n },\n showUserBackend: {\n get: function get() {\n return this.getLocalstorage('showUserBackend');\n },\n set: function set(status) {\n this.setLocalStorage('showUserBackend', status);\n }\n },\n showStoragePath: {\n get: function get() {\n return this.getLocalstorage('showStoragePath');\n },\n set: function set(status) {\n this.setLocalStorage('showStoragePath', status);\n }\n },\n userCount: function userCount() {\n return this.$store.getters.getUserCount;\n },\n settings: function settings() {\n return this.$store.getters.getServerData;\n },\n // default quota\n quotaOptions: function quotaOptions() {\n // convert the preset array into objects\n var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n return acc.concat({\n id: cur,\n label: cur\n });\n }, []);\n // add default presets\n if (this.settings.allowUnlimitedQuota) {\n quotaPreset.unshift(this.unlimitedQuota);\n }\n return quotaPreset;\n },\n // mapping saved values to objects\n defaultQuota: {\n get: function get() {\n if (this.selectedQuota !== false) {\n return this.selectedQuota;\n }\n if (this.settings.defaultQuota !== this.unlimitedQuota.id && OC.Util.computerFileSize(this.settings.defaultQuota) >= 0) {\n // if value is valid, let's map the quotaOptions or return custom quota\n return {\n id: this.settings.defaultQuota,\n label: this.settings.defaultQuota\n };\n }\n return this.unlimitedQuota; // unlimited\n },\n set: function set(quota) {\n this.selectedQuota = quota;\n }\n },\n sendWelcomeMail: {\n get: function get() {\n return this.settings.newUserSendEmail;\n },\n set: function set(value) {\n var _this = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.prev = 0;\n _this.loadingSendMail = true;\n _this.$store.commit('setServerData', _objectSpread(_objectSpread({}, _this.settings), {}, {\n newUserSendEmail: value\n }));\n _context.next = 5;\n return axios.post(generateUrl('/settings/users/preferences/newUser.sendEmail'), {\n value: value ? 'yes' : 'no'\n });\n case 5:\n _context.next = 10;\n break;\n case 7:\n _context.prev = 7;\n _context.t0 = _context[\"catch\"](0);\n console.error('could not update newUser.sendEmail preference: ' + _context.t0.message, _context.t0);\n case 10:\n _context.prev = 10;\n _this.loadingSendMail = false;\n return _context.finish(10);\n case 13:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, null, [[0, 7, 10, 13]]);\n }))();\n }\n },\n groupList: function groupList() {\n var _this2 = this;\n var groups = Array.isArray(this.groups) ? this.groups : [];\n return groups\n // filter out disabled and admin\n .filter(function (group) {\n return group.id !== 'disabled' && group.id !== 'admin';\n }).map(function (group) {\n return _this2.formatGroupMenu(group);\n });\n },\n adminGroupMenu: function adminGroupMenu() {\n return this.formatGroupMenu(this.groups.find(function (group) {\n return group.id === 'admin';\n }));\n },\n disabledGroupMenu: function disabledGroupMenu() {\n return this.formatGroupMenu(this.groups.find(function (group) {\n return group.id === 'disabled';\n }));\n }\n },\n beforeMount: function beforeMount() {\n this.$store.commit('initGroups', {\n groups: this.$store.getters.getServerData.groups,\n orderBy: this.$store.getters.getServerData.sortGroups,\n userCount: this.$store.getters.getServerData.userCount\n });\n this.$store.dispatch('getPasswordPolicyMinLength');\n },\n created: function created() {\n // init the OCA.Settings.UserList object\n // and add the registerAction method\n Object.assign(OCA, {\n Settings: {\n UserList: {\n registerAction: this.registerAction\n }\n }\n });\n },\n methods: {\n showNewUserMenu: function showNewUserMenu() {\n this.showConfig.showNewUserForm = true;\n if (this.showConfig.showNewUserForm) {\n Vue.nextTick(function () {\n window.newusername.focus();\n });\n }\n },\n getLocalstorage: function getLocalstorage(key) {\n // force initialization\n var localConfig = this.$localStorage.get(key);\n // if localstorage is null, fallback to original values\n this.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key];\n return this.showConfig[key];\n },\n setLocalStorage: function setLocalStorage(key, status) {\n this.showConfig[key] = status;\n this.$localStorage.set(key, status);\n return status;\n },\n /**\n * Dispatch default quota set request\n *\n * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n */\n setDefaultQuota: function setDefaultQuota() {\n var _this3 = this;\n var quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';\n this.$store.dispatch('setAppConfig', {\n app: 'files',\n key: 'default_quota',\n // ensure we only send the preset id\n value: quota.id ? quota.id : quota\n }).then(function () {\n if (_typeof(quota) !== 'object') {\n quota = {\n id: quota,\n label: quota\n };\n }\n _this3.defaultQuota = quota;\n });\n },\n /**\n * Validate quota string to make sure it's a valid human file size\n *\n * @param {string} quota Quota in readable format '5 GB'\n * @return {Promise|boolean}\n */\n validateQuota: function validateQuota(quota) {\n // only used for new presets sent through @Tag\n var validQuota = OC.Util.computerFileSize(quota);\n if (validQuota === null) {\n return this.setDefaultQuota('none');\n } else {\n // unify format output\n return this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n }\n },\n /**\n * Register a new action for the user menu\n *\n * @param {string} icon the icon class\n * @param {string} text the text to display\n * @param {Function} action the function to run\n * @return {Array}\n */\n registerAction: function registerAction(icon, text, action) {\n this.externalActions.push({\n icon: icon,\n text: text,\n action: action\n });\n return this.externalActions;\n },\n /**\n * Create a new group\n *\n * @param {string} gid The group id\n */\n createGroup: function createGroup(gid) {\n var _this4 = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(gid.trim() === '')) {\n _context2.next = 2;\n break;\n }\n return _context2.abrupt(\"return\");\n case 2:\n _context2.prev = 2;\n _this4.loadingAddGroup = true;\n _context2.next = 6;\n return _this4.$store.dispatch('addGroup', gid.trim());\n case 6:\n _this4.hideAddGroupForm();\n _context2.next = 9;\n return _this4.$router.push({\n name: 'group',\n params: {\n selectedGroup: encodeURIComponent(gid.trim())\n }\n });\n case 9:\n _context2.next = 14;\n break;\n case 11:\n _context2.prev = 11;\n _context2.t0 = _context2[\"catch\"](2);\n _this4.showAddGroupForm();\n case 14:\n _context2.prev = 14;\n _this4.loadingAddGroup = false;\n return _context2.finish(14);\n case 17:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, null, [[2, 11, 14, 17]]);\n }))();\n },\n showAddGroupForm: function showAddGroupForm() {\n var _this5 = this;\n this.$refs.addGroup.editingActive = true;\n this.$refs.addGroup.onMenuToggle(false);\n this.$nextTick(function () {\n _this5.$refs.addGroup.$refs.editingInput.focusInput();\n });\n },\n hideAddGroupForm: function hideAddGroupForm() {\n this.$refs.addGroup.editingActive = false;\n this.$refs.addGroup.editingValue = '';\n },\n /**\n * Format a group to a menu entry\n *\n * @param {object} group the group\n * @return {object}\n */\n formatGroupMenu: function formatGroupMenu(group) {\n var item = {};\n if (typeof group === 'undefined') {\n return {};\n }\n item.id = group.id;\n item.title = group.name;\n item.usercount = group.usercount;\n\n // users count for all groups\n if (group.usercount - group.disabled > 0) {\n item.count = group.usercount - group.disabled;\n }\n return item;\n }\n }\n};","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"NcAppNavigationItem\", {\n key: _vm.id,\n attrs: {\n exact: true,\n title: _vm.title,\n to: {\n name: \"group\",\n params: {\n selectedGroup: encodeURIComponent(_vm.id)\n }\n },\n icon: \"icon-group\",\n loading: _vm.loadingRenameGroup,\n \"menu-open\": _vm.openGroupMenu\n },\n on: {\n \"update:menuOpen\": _vm.handleGroupMenuOpen\n },\n scopedSlots: _vm._u([{\n key: \"counter\",\n fn: function fn() {\n return [_vm.count ? _c(\"NcCounterBubble\", [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.count) + \"\\n\\t\\t\")]) : _vm._e()];\n },\n proxy: true\n }, {\n key: \"actions\",\n fn: function fn() {\n return [_vm.id !== \"admin\" && _vm.id !== \"disabled\" && _vm.settings.isAdmin ? _c(\"NcActionInput\", {\n ref: \"displayNameInput\",\n attrs: {\n icon: \"icon-edit\",\n type: \"text\",\n value: _vm.title\n },\n on: {\n submit: function submit($event) {\n return _vm.renameGroup(_vm.id);\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Rename group\")) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _vm.id !== \"admin\" && _vm.id !== \"disabled\" && _vm.settings.isAdmin ? _c(\"NcActionButton\", {\n attrs: {\n icon: \"icon-delete\"\n },\n on: {\n click: function click($event) {\n return _vm.removeGroup(_vm.id);\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Remove group\")) + \"\\n\\t\\t\")]) : _vm._e()];\n },\n proxy: true\n }])\n });\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"user-list-grid\",\n attrs: {\n id: \"app-content\"\n },\n on: {\n \"&scroll\": function scroll($event) {\n return _vm.onScroll.apply(null, arguments);\n }\n }\n }, [_vm.showConfig.showNewUserForm ? _c(\"NcModal\", {\n attrs: {\n size: \"small\"\n },\n on: {\n close: _vm.closeModal\n }\n }, [_c(\"form\", {\n staticClass: \"modal__content\",\n attrs: {\n id: \"new-user\",\n disabled: _vm.loading.all\n },\n on: {\n submit: function submit($event) {\n $event.preventDefault();\n return _vm.createUser.apply(null, arguments);\n }\n }\n }, [_c(\"h2\", [_vm._v(_vm._s(_vm.t(\"settings\", \"New user\")))]), _vm._v(\" \"), _c(\"input\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.id,\n expression: \"newUser.id\"\n }],\n ref: \"newusername\",\n staticClass: \"modal__item\",\n attrs: {\n id: \"newusername\",\n disabled: _vm.settings.newUserGenerateUserID,\n placeholder: _vm.settings.newUserGenerateUserID ? _vm.t(\"settings\", \"Will be autogenerated\") : _vm.t(\"settings\", \"Username\"),\n autocapitalize: \"none\",\n autocomplete: \"off\",\n autocorrect: \"off\",\n name: \"username\",\n pattern: \"[a-zA-Z0-9 _\\\\.@\\\\-']+\",\n required: \"\",\n type: \"text\"\n },\n domProps: {\n value: _vm.newUser.id\n },\n on: {\n input: function input($event) {\n if ($event.target.composing) return;\n _vm.$set(_vm.newUser, \"id\", $event.target.value);\n }\n }\n }), _vm._v(\" \"), _c(\"input\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.displayName,\n expression: \"newUser.displayName\"\n }],\n staticClass: \"modal__item\",\n attrs: {\n id: \"newdisplayname\",\n placeholder: _vm.t(\"settings\", \"Display name\"),\n autocapitalize: \"none\",\n autocomplete: \"off\",\n autocorrect: \"off\",\n name: \"displayname\",\n type: \"text\"\n },\n domProps: {\n value: _vm.newUser.displayName\n },\n on: {\n input: function input($event) {\n if ($event.target.composing) return;\n _vm.$set(_vm.newUser, \"displayName\", $event.target.value);\n }\n }\n }), _vm._v(\" \"), _c(\"input\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.password,\n expression: \"newUser.password\"\n }],\n ref: \"newuserpassword\",\n staticClass: \"modal__item\",\n attrs: {\n id: \"newuserpassword\",\n minlength: _vm.minPasswordLength,\n maxlength: 469,\n placeholder: _vm.t(\"settings\", \"Password\"),\n required: _vm.newUser.mailAddress === \"\",\n autocapitalize: \"none\",\n autocomplete: \"new-password\",\n autocorrect: \"off\",\n name: \"password\",\n type: \"password\"\n },\n domProps: {\n value: _vm.newUser.password\n },\n on: {\n input: function input($event) {\n if ($event.target.composing) return;\n _vm.$set(_vm.newUser, \"password\", $event.target.value);\n }\n }\n }), _vm._v(\" \"), _c(\"input\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.mailAddress,\n expression: \"newUser.mailAddress\"\n }],\n staticClass: \"modal__item\",\n attrs: {\n id: \"newemail\",\n placeholder: _vm.t(\"settings\", \"Email\"),\n required: _vm.newUser.password === \"\" || _vm.settings.newUserRequireEmail,\n autocapitalize: \"none\",\n autocomplete: \"off\",\n autocorrect: \"off\",\n name: \"email\",\n type: \"email\"\n },\n domProps: {\n value: _vm.newUser.mailAddress\n },\n on: {\n input: function input($event) {\n if ($event.target.composing) return;\n _vm.$set(_vm.newUser, \"mailAddress\", $event.target.value);\n }\n }\n }), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"groups modal__item\"\n }, [!_vm.settings.isAdmin ? _c(\"input\", {\n class: {\n \"icon-loading-small\": _vm.loading.groups\n },\n attrs: {\n id: \"newgroups\",\n required: !_vm.settings.isAdmin,\n tabindex: \"-1\",\n type: \"text\"\n },\n domProps: {\n value: _vm.newUser.groups\n }\n }) : _vm._e(), _vm._v(\" \"), _c(\"NcMultiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"close-on-select\": false,\n disabled: _vm.loading.groups || _vm.loading.all,\n multiple: true,\n options: _vm.canAddGroups,\n placeholder: _vm.t(\"settings\", \"Add user to group\"),\n \"tag-width\": 60,\n taggable: true,\n label: \"name\",\n \"tag-placeholder\": \"create\",\n \"track-by\": \"id\"\n },\n on: {\n tag: _vm.createGroup\n },\n model: {\n value: _vm.newUser.groups,\n callback: function callback($$v) {\n _vm.$set(_vm.newUser, \"groups\", $$v);\n },\n expression: \"newUser.groups\"\n }\n }, [_c(\"span\", {\n attrs: {\n slot: \"noResult\"\n },\n slot: \"noResult\"\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))])])], 1), _vm._v(\" \"), _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin ? _c(\"div\", {\n staticClass: \"subadmins modal__item\"\n }, [_c(\"NcMultiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"close-on-select\": false,\n multiple: true,\n options: _vm.subAdminsGroups,\n placeholder: _vm.t(\"settings\", \"Set user as admin for\"),\n \"tag-width\": 60,\n label: \"name\",\n \"track-by\": \"id\"\n },\n model: {\n value: _vm.newUser.subAdminsGroups,\n callback: function callback($$v) {\n _vm.$set(_vm.newUser, \"subAdminsGroups\", $$v);\n },\n expression: \"newUser.subAdminsGroups\"\n }\n }, [_c(\"span\", {\n attrs: {\n slot: \"noResult\"\n },\n slot: \"noResult\"\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))])])], 1) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"quota modal__item\"\n }, [_c(\"NcMultiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"allow-empty\": false,\n options: _vm.quotaOptions,\n placeholder: _vm.t(\"settings\", \"Select user quota\"),\n taggable: true,\n label: \"label\",\n \"track-by\": \"id\"\n },\n on: {\n tag: _vm.validateQuota\n },\n model: {\n value: _vm.newUser.quota,\n callback: function callback($$v) {\n _vm.$set(_vm.newUser, \"quota\", $$v);\n },\n expression: \"newUser.quota\"\n }\n })], 1), _vm._v(\" \"), _vm.showConfig.showLanguages ? _c(\"div\", {\n staticClass: \"languages modal__item\"\n }, [_c(\"NcMultiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"allow-empty\": false,\n options: _vm.languages,\n placeholder: _vm.t(\"settings\", \"Default language\"),\n \"group-label\": \"label\",\n \"group-values\": \"languages\",\n label: \"name\",\n \"track-by\": \"code\"\n },\n model: {\n value: _vm.newUser.language,\n callback: function callback($$v) {\n _vm.$set(_vm.newUser, \"language\", $$v);\n },\n expression: \"newUser.language\"\n }\n })], 1) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showStoragePath ? _c(\"div\", {\n staticClass: \"storageLocation\"\n }) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showUserBackend ? _c(\"div\", {\n staticClass: \"userBackend\"\n }) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showLastLogin ? _c(\"div\", {\n staticClass: \"lastLogin\"\n }) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"user-actions\"\n }, [_c(\"NcButton\", {\n attrs: {\n id: \"newsubmit\",\n type: \"primary\",\n \"native-type\": \"submit\",\n value: \"\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Add a new user\")) + \"\\n\\t\\t\\t\\t\")])], 1)])]) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"row\",\n class: {\n sticky: _vm.scrolled && !_vm.showConfig.showNewUserForm\n },\n attrs: {\n id: \"grid-header\"\n }\n }, [_c(\"div\", {\n staticClass: \"avatar\",\n attrs: {\n id: \"headerAvatar\"\n }\n }), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"name\",\n attrs: {\n id: \"headerName\"\n }\n }, [_c(\"div\", {\n staticClass: \"subtitle\"\n }, [_c(\"strong\", [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Display name\")) + \"\\n\\t\\t\\t\\t\")])]), _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Username\")) + \"\\n\\t\\t\")]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"password\",\n attrs: {\n id: \"headerPassword\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Password\")) + \"\\n\\t\\t\")]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"mailAddress\",\n attrs: {\n id: \"headerAddress\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Email\")) + \"\\n\\t\\t\")]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"groups\",\n attrs: {\n id: \"headerGroups\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Groups\")) + \"\\n\\t\\t\")]), _vm._v(\" \"), _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin ? _c(\"div\", {\n staticClass: \"subadmins\",\n attrs: {\n id: \"headerSubAdmins\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Group admin for\")) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"quota\",\n attrs: {\n id: \"headerQuota\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Quota\")) + \"\\n\\t\\t\")]), _vm._v(\" \"), _vm.showConfig.showLanguages ? _c(\"div\", {\n staticClass: \"languages\",\n attrs: {\n id: \"headerLanguages\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Language\")) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath ? _c(\"div\", {\n staticClass: \"headerUserBackend userBackend\"\n }, [_vm.showConfig.showUserBackend ? _c(\"div\", {\n staticClass: \"userBackend\"\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"User backend\")) + \"\\n\\t\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showStoragePath ? _c(\"div\", {\n staticClass: \"subtitle storageLocation\"\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Storage location\")) + \"\\n\\t\\t\\t\")]) : _vm._e()]) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showLastLogin ? _c(\"div\", {\n staticClass: \"headerLastLogin lastLogin\"\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Last login\")) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"userActions\"\n })]), _vm._v(\" \"), _vm._l(_vm.filteredUsers, function (user) {\n return _c(\"user-row\", {\n key: user.id,\n attrs: {\n \"external-actions\": _vm.externalActions,\n groups: _vm.groups,\n languages: _vm.languages,\n \"quota-options\": _vm.quotaOptions,\n settings: _vm.settings,\n \"show-config\": _vm.showConfig,\n \"sub-admins-groups\": _vm.subAdminsGroups,\n user: user,\n \"is-dark-theme\": _vm.isDarkTheme\n }\n });\n }), _vm._v(\" \"), _c(\"InfiniteLoading\", {\n ref: \"infiniteLoading\",\n on: {\n infinite: _vm.infiniteHandler\n }\n }, [_c(\"div\", {\n attrs: {\n slot: \"spinner\"\n },\n slot: \"spinner\"\n }, [_c(\"div\", {\n staticClass: \"users-icon-loading icon-loading\"\n })]), _vm._v(\" \"), _c(\"div\", {\n attrs: {\n slot: \"no-more\"\n },\n slot: \"no-more\"\n }, [_c(\"div\", {\n staticClass: \"users-list-end\"\n })]), _vm._v(\" \"), _c(\"div\", {\n attrs: {\n slot: \"no-results\"\n },\n slot: \"no-results\"\n }, [_c(\"div\", {\n attrs: {\n id: \"emptycontent\"\n }\n }, [_c(\"div\", {\n staticClass: \"icon-contacts-dark\"\n }), _vm._v(\" \"), _c(\"h2\", [_vm._v(_vm._s(_vm.t(\"settings\", \"No users in here\")))])])])])], 2);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return Object.keys(_vm.user).length === 1 ? _c(\"div\", {\n staticClass: \"row\",\n attrs: {\n \"data-id\": _vm.user.id\n }\n }, [_c(\"div\", {\n staticClass: \"avatar\",\n class: {\n \"icon-loading-small\": _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe\n }\n }, [!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe ? _c(\"img\", {\n attrs: {\n src: _vm.generateAvatar(_vm.user.id, _vm.isDarkTheme),\n alt: \"\",\n height: \"32\",\n width: \"32\"\n }\n }) : _vm._e()]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"name\"\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.user.id) + \"\\n\\t\")]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"obfuscated\"\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.t(\"settings\", \"You do not have permissions to see the details of this user\")) + \"\\n\\t\")])]) : !_vm.editing ? _c(\"UserRowSimple\", {\n class: {\n \"row--menu-opened\": _vm.openedMenu\n },\n attrs: {\n editing: _vm.editing,\n \"feedback-message\": _vm.feedbackMessage,\n groups: _vm.groups,\n languages: _vm.languages,\n loading: _vm.loading,\n \"opened-menu\": _vm.openedMenu,\n settings: _vm.settings,\n \"show-config\": _vm.showConfig,\n \"sub-admins-groups\": _vm.subAdminsGroups,\n \"user-actions\": _vm.userActions,\n user: _vm.user,\n \"is-dark-theme\": _vm.isDarkTheme\n },\n on: {\n \"update:editing\": function updateEditing($event) {\n _vm.editing = $event;\n },\n \"update:openedMenu\": function updateOpenedMenu($event) {\n _vm.openedMenu = $event;\n },\n \"update:opened-menu\": function updateOpenedMenu($event) {\n _vm.openedMenu = $event;\n }\n }\n }) : _c(\"div\", {\n staticClass: \"row row--editable\",\n class: {\n disabled: _vm.loading.delete || _vm.loading.disable,\n \"row--menu-opened\": _vm.openedMenu\n },\n attrs: {\n \"data-id\": _vm.user.id\n }\n }, [_c(\"div\", {\n staticClass: \"avatar\",\n class: {\n \"icon-loading-small\": _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe\n }\n }, [!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe ? _c(\"img\", {\n attrs: {\n src: _vm.generateAvatar(_vm.user.id, _vm.isDarkTheme),\n alt: \"\",\n height: \"32\",\n width: \"32\"\n }\n }) : _vm._e()]), _vm._v(\" \"), _vm.user.backendCapabilities.setDisplayName ? _c(\"div\", {\n staticClass: \"displayName\"\n }, [_c(\"form\", {\n staticClass: \"displayName\",\n class: {\n \"icon-loading-small\": _vm.loading.displayName\n },\n on: {\n submit: function submit($event) {\n $event.preventDefault();\n return _vm.updateDisplayName.apply(null, arguments);\n }\n }\n }, [_c(\"input\", {\n ref: \"displayName\",\n attrs: {\n id: \"displayName\" + _vm.user.id + _vm.rand,\n disabled: _vm.loading.displayName || _vm.loading.all,\n autocapitalize: \"off\",\n autocomplete: \"off\",\n autocorrect: \"off\",\n spellcheck: \"false\",\n type: \"text\"\n },\n domProps: {\n value: _vm.user.displayname\n }\n }), _vm._v(\" \"), _c(\"input\", {\n staticClass: \"icon-confirm\",\n attrs: {\n type: \"submit\",\n value: \"\"\n }\n })])]) : _c(\"div\", {\n staticClass: \"name\"\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.user.id) + \"\\n\\t\\t\"), _c(\"div\", {\n staticClass: \"displayName subtitle\"\n }, [_c(\"div\", {\n staticClass: \"cellText\",\n attrs: {\n title: _vm.user.displayname.length > 20 ? _vm.user.displayname : \"\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.user.displayname) + \"\\n\\t\\t\\t\")])])]), _vm._v(\" \"), _vm.settings.canChangePassword && _vm.user.backendCapabilities.setPassword ? _c(\"form\", {\n staticClass: \"password\",\n class: {\n \"icon-loading-small\": _vm.loading.password\n },\n on: {\n submit: function submit($event) {\n $event.preventDefault();\n return _vm.updatePassword.apply(null, arguments);\n }\n }\n }, [_c(\"input\", {\n ref: \"password\",\n attrs: {\n id: \"password\" + _vm.user.id + _vm.rand,\n disabled: _vm.loading.password || _vm.loading.all,\n minlength: _vm.minPasswordLength,\n maxlength: \"469\",\n placeholder: _vm.t(\"settings\", \"Add new password\"),\n autocapitalize: \"off\",\n autocomplete: \"new-password\",\n autocorrect: \"off\",\n required: \"\",\n spellcheck: \"false\",\n type: \"password\",\n value: \"\"\n }\n }), _vm._v(\" \"), _c(\"input\", {\n staticClass: \"icon-confirm\",\n attrs: {\n type: \"submit\",\n value: \"\"\n }\n })]) : _c(\"div\"), _vm._v(\" \"), _c(\"form\", {\n staticClass: \"mailAddress\",\n class: {\n \"icon-loading-small\": _vm.loading.mailAddress\n },\n on: {\n submit: function submit($event) {\n $event.preventDefault();\n return _vm.updateEmail.apply(null, arguments);\n }\n }\n }, [_c(\"input\", {\n ref: \"mailAddress\",\n attrs: {\n id: \"mailAddress\" + _vm.user.id + _vm.rand,\n disabled: _vm.loading.mailAddress || _vm.loading.all,\n placeholder: _vm.t(\"settings\", \"Add new email address\"),\n autocapitalize: \"off\",\n autocomplete: \"new-password\",\n autocorrect: \"off\",\n spellcheck: \"false\",\n type: \"email\"\n },\n domProps: {\n value: _vm.user.email\n }\n }), _vm._v(\" \"), _c(\"input\", {\n staticClass: \"icon-confirm\",\n attrs: {\n type: \"submit\",\n value: \"\"\n }\n })]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"groups\",\n class: {\n \"icon-loading-small\": _vm.loading.groups\n }\n }, [_c(\"NcMultiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"close-on-select\": false,\n disabled: _vm.loading.groups || _vm.loading.all,\n limit: 2,\n multiple: true,\n options: _vm.availableGroups,\n placeholder: _vm.t(\"settings\", \"Add user to group\"),\n \"tag-width\": 60,\n taggable: _vm.settings.isAdmin,\n value: _vm.userGroups,\n label: \"name\",\n \"tag-placeholder\": \"create\",\n \"track-by\": \"id\"\n },\n on: {\n remove: _vm.removeUserGroup,\n select: _vm.addUserGroup,\n tag: _vm.createGroup\n }\n }, [_c(\"span\", {\n attrs: {\n slot: \"noResult\"\n },\n slot: \"noResult\"\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))])])], 1), _vm._v(\" \"), _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin ? _c(\"div\", {\n staticClass: \"subadmins\",\n class: {\n \"icon-loading-small\": _vm.loading.subadmins\n }\n }, [_c(\"NcMultiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"close-on-select\": false,\n disabled: _vm.loading.subadmins || _vm.loading.all,\n limit: 2,\n multiple: true,\n options: _vm.subAdminsGroups,\n placeholder: _vm.t(\"settings\", \"Set user as admin for\"),\n \"tag-width\": 60,\n value: _vm.userSubAdminsGroups,\n label: \"name\",\n \"track-by\": \"id\"\n },\n on: {\n remove: _vm.removeUserSubAdmin,\n select: _vm.addUserSubAdmin\n }\n }, [_c(\"span\", {\n attrs: {\n slot: \"noResult\"\n },\n slot: \"noResult\"\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))])])], 1) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"quota\",\n class: {\n \"icon-loading-small\": _vm.loading.quota\n },\n attrs: {\n title: _vm.usedSpace\n }\n }, [_c(\"NcMultiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"allow-empty\": false,\n disabled: _vm.loading.quota || _vm.loading.all,\n options: _vm.quotaOptions,\n placeholder: _vm.t(\"settings\", \"Select user quota\"),\n taggable: true,\n value: _vm.userQuota,\n label: \"label\",\n \"tag-placeholder\": \"create\",\n \"track-by\": \"id\"\n },\n on: {\n input: _vm.setUserQuota,\n tag: _vm.validateQuota\n }\n })], 1), _vm._v(\" \"), _vm.showConfig.showLanguages ? _c(\"div\", {\n staticClass: \"languages\",\n class: {\n \"icon-loading-small\": _vm.loading.languages\n }\n }, [_c(\"NcMultiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n \"allow-empty\": false,\n disabled: _vm.loading.languages || _vm.loading.all,\n options: _vm.languages,\n placeholder: _vm.t(\"settings\", \"No language set\"),\n value: _vm.userLanguage,\n \"group-label\": \"label\",\n \"group-values\": \"languages\",\n label: \"name\",\n \"track-by\": \"code\"\n },\n on: {\n input: _vm.setUserLanguage\n }\n })], 1) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showStoragePath || _vm.showConfig.showUserBackend ? _c(\"div\", {\n staticClass: \"storageLocation\"\n }) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showLastLogin ? _c(\"div\") : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"userActions\"\n }, [!_vm.loading.all ? _c(\"div\", {\n staticClass: \"toggleUserActions\"\n }, [_c(\"NcActions\", [_c(\"NcActionButton\", {\n attrs: {\n icon: \"icon-checkmark\",\n title: _vm.t(\"settings\", \"Done\"),\n \"aria-label\": _vm.t(\"settings\", \"Done\")\n },\n on: {\n click: function click($event) {\n _vm.editing = false;\n }\n }\n })], 1), _vm._v(\" \"), _c(\"div\", {\n directives: [{\n name: \"click-outside\",\n rawName: \"v-click-outside\",\n value: _vm.hideMenu,\n expression: \"hideMenu\"\n }],\n staticClass: \"userPopoverMenuWrapper\"\n }, [_c(\"button\", {\n staticClass: \"icon-more\",\n on: {\n click: function click($event) {\n $event.preventDefault();\n return _vm.toggleMenu.apply(null, arguments);\n }\n }\n }), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"popovermenu\",\n class: {\n open: _vm.openedMenu\n }\n }, [_c(\"NcPopoverMenu\", {\n attrs: {\n menu: _vm.userActions\n }\n })], 1)])], 1) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"feedback\",\n style: {\n opacity: _vm.feedbackMessage !== \"\" ? 1 : 0\n }\n }, [_c(\"div\", {\n staticClass: \"icon-checkmark\"\n }), _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.feedbackMessage) + \"\\n\\t\\t\")])])]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"row\",\n class: {\n disabled: _vm.loading.delete || _vm.loading.disable\n },\n attrs: {\n \"data-id\": _vm.user.id\n }\n }, [_c(\"div\", {\n staticClass: \"avatar\",\n class: {\n \"icon-loading-small\": _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe\n }\n }, [!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe ? _c(\"img\", {\n attrs: {\n alt: \"\",\n width: \"32\",\n height: \"32\",\n src: _vm.generateAvatar(_vm.user.id, _vm.isDarkTheme)\n }\n }) : _vm._e()]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"name\"\n }, [_c(\"div\", {\n staticClass: \"displayName subtitle\"\n }, [_c(\"div\", {\n staticClass: \"cellText\",\n attrs: {\n title: _vm.user.displayname.length > 20 ? _vm.user.displayname : \"\"\n }\n }, [_c(\"strong\", [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_vm.user.displayname) + \"\\n\\t\\t\\t\\t\")])])]), _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.user.id) + \"\\n\\t\")]), _vm._v(\" \"), _c(\"div\"), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"mailAddress\"\n }, [_c(\"div\", {\n staticClass: \"cellText\",\n attrs: {\n title: _vm.user.email !== null && _vm.user.email.length > 20 ? _vm.user.email : \"\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.user.email) + \"\\n\\t\\t\")])]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"groups\"\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userGroupsLabels) + \"\\n\\t\")]), _vm._v(\" \"), _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin ? _c(\"div\", {\n staticClass: \"subAdminsGroups\"\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userSubAdminsGroupsLabels) + \"\\n\\t\")]) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"userQuota\"\n }, [_c(\"div\", {\n staticClass: \"quota\"\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.userQuota) + \" (\" + _vm._s(_vm.usedSpace) + \")\\n\\t\\t\\t\"), _c(\"progress\", {\n staticClass: \"quota-user-progress\",\n class: {\n warn: _vm.usedQuota > 80\n },\n attrs: {\n max: \"100\"\n },\n domProps: {\n value: _vm.usedQuota\n }\n })])]), _vm._v(\" \"), _vm.showConfig.showLanguages ? _c(\"div\", {\n staticClass: \"languages\"\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userLanguage.name) + \"\\n\\t\")]) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath ? _c(\"div\", {\n staticClass: \"userBackend\"\n }, [_vm.showConfig.showUserBackend ? _c(\"div\", {\n staticClass: \"userBackend\"\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.user.backend) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showStoragePath ? _c(\"div\", {\n staticClass: \"storageLocation subtitle\",\n attrs: {\n title: _vm.user.storageLocation\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.user.storageLocation) + \"\\n\\t\\t\")]) : _vm._e()]) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showLastLogin ? _c(\"div\", {\n staticClass: \"lastLogin\",\n attrs: {\n title: _vm.userLastLoginTooltip\n }\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.userLastLogin) + \"\\n\\t\")]) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"userActions\"\n }, [_vm.canEdit && !_vm.loading.all ? _c(\"div\", {\n staticClass: \"toggleUserActions\"\n }, [_c(\"NcActions\", [_c(\"NcActionButton\", {\n attrs: {\n icon: \"icon-rename\",\n title: _vm.t(\"settings\", \"Edit User\"),\n \"aria-label\": _vm.t(\"settings\", \"Edit User\")\n },\n on: {\n click: _vm.toggleEdit\n }\n })], 1), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"userPopoverMenuWrapper\"\n }, [_c(\"button\", {\n directives: [{\n name: \"click-outside\",\n rawName: \"v-click-outside\",\n value: _vm.hideMenu,\n expression: \"hideMenu\"\n }],\n staticClass: \"icon-more\",\n attrs: {\n \"aria-label\": _vm.t(\"settings\", \"Toggle user actions menu\")\n },\n on: {\n click: function click($event) {\n $event.preventDefault();\n return _vm.toggleMenu.apply(null, arguments);\n }\n }\n }), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"popovermenu\",\n class: {\n open: _vm.openedMenu\n },\n attrs: {\n \"aria-expanded\": _vm.openedMenu\n }\n }, [_c(\"NcPopoverMenu\", {\n attrs: {\n menu: _vm.userActions\n }\n })], 1)])], 1) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"feedback\",\n style: {\n opacity: _vm.feedbackMessage !== \"\" ? 1 : 0\n }\n }, [_c(\"div\", {\n staticClass: \"icon-checkmark\"\n }), _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.feedbackMessage) + \"\\n\\t\\t\")])])]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"NcContent\", {\n attrs: {\n \"app-name\": \"settings\",\n \"navigation-class\": {\n \"icon-loading\": _vm.loadingAddGroup\n }\n }\n }, [_c(\"NcAppNavigation\", {\n scopedSlots: _vm._u([{\n key: \"list\",\n fn: function fn() {\n return [_c(\"NcAppNavigationItem\", {\n ref: \"addGroup\",\n attrs: {\n id: \"addgroup\",\n \"edit-placeholder\": _vm.t(\"settings\", \"Enter group name\"),\n editable: true,\n loading: _vm.loadingAddGroup,\n title: _vm.t(\"settings\", \"Add group\"),\n icon: \"icon-add\"\n },\n on: {\n click: _vm.showAddGroupForm,\n \"update:title\": _vm.createGroup\n }\n }), _vm._v(\" \"), _c(\"NcAppNavigationItem\", {\n attrs: {\n id: \"everyone\",\n exact: true,\n title: _vm.t(\"settings\", \"Active users\"),\n to: {\n name: \"users\"\n },\n icon: \"icon-contacts-dark\"\n }\n }, [_vm.userCount > 0 ? _c(\"NcAppNavigationCounter\", {\n attrs: {\n slot: \"counter\"\n },\n slot: \"counter\"\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_vm.userCount) + \"\\n\\t\\t\\t\\t\")]) : _vm._e()], 1), _vm._v(\" \"), _vm.settings.isAdmin ? _c(\"NcAppNavigationItem\", {\n attrs: {\n id: \"admin\",\n exact: true,\n title: _vm.t(\"settings\", \"Admins\"),\n to: {\n name: \"group\",\n params: {\n selectedGroup: \"admin\"\n }\n },\n icon: \"icon-user-admin\"\n }\n }, [_vm.adminGroupMenu.count ? _c(\"NcAppNavigationCounter\", {\n attrs: {\n slot: \"counter\"\n },\n slot: \"counter\"\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_vm.adminGroupMenu.count) + \"\\n\\t\\t\\t\\t\")]) : _vm._e()], 1) : _vm._e(), _vm._v(\" \"), _vm.disabledGroupMenu.usercount > 0 || _vm.disabledGroupMenu.usercount === -1 ? _c(\"NcAppNavigationItem\", {\n attrs: {\n id: \"disabled\",\n exact: true,\n title: _vm.t(\"settings\", \"Disabled users\"),\n to: {\n name: \"group\",\n params: {\n selectedGroup: \"disabled\"\n }\n },\n icon: \"icon-disabled-users\"\n }\n }, [_vm.disabledGroupMenu.usercount > 0 ? _c(\"NcAppNavigationCounter\", {\n attrs: {\n slot: \"counter\"\n },\n slot: \"counter\"\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_vm.disabledGroupMenu.usercount) + \"\\n\\t\\t\\t\\t\")]) : _vm._e()], 1) : _vm._e(), _vm._v(\" \"), _vm.groupList.length > 0 ? _c(\"NcAppNavigationCaption\", {\n attrs: {\n title: _vm.t(\"settings\", \"Groups\")\n }\n }) : _vm._e(), _vm._v(\" \"), _vm._l(_vm.groupList, function (group) {\n return _c(\"GroupListItem\", {\n key: group.id,\n attrs: {\n id: group.id,\n title: group.title,\n count: group.count\n }\n });\n })];\n },\n proxy: true\n }, {\n key: \"footer\",\n fn: function fn() {\n return [_c(\"NcAppNavigationSettings\", [_c(\"div\", [_c(\"p\", [_vm._v(_vm._s(_vm.t(\"settings\", \"Default quota:\")))]), _vm._v(\" \"), _c(\"NcMultiselect\", {\n attrs: {\n value: _vm.defaultQuota,\n options: _vm.quotaOptions,\n \"tag-placeholder\": \"create\",\n placeholder: _vm.t(\"settings\", \"Select default quota\"),\n label: \"label\",\n \"track-by\": \"id\",\n \"allow-empty\": false,\n taggable: true\n },\n on: {\n tag: _vm.validateQuota,\n input: _vm.setDefaultQuota\n }\n })], 1), _vm._v(\" \"), _c(\"div\", [_c(\"input\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showLanguages,\n expression: \"showLanguages\"\n }],\n staticClass: \"checkbox\",\n attrs: {\n id: \"showLanguages\",\n type: \"checkbox\"\n },\n domProps: {\n checked: Array.isArray(_vm.showLanguages) ? _vm._i(_vm.showLanguages, null) > -1 : _vm.showLanguages\n },\n on: {\n change: function change($event) {\n var $$a = _vm.showLanguages,\n $$el = $event.target,\n $$c = $$el.checked ? true : false;\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v);\n if ($$el.checked) {\n $$i < 0 && (_vm.showLanguages = $$a.concat([$$v]));\n } else {\n $$i > -1 && (_vm.showLanguages = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));\n }\n } else {\n _vm.showLanguages = $$c;\n }\n }\n }\n }), _vm._v(\" \"), _c(\"label\", {\n attrs: {\n for: \"showLanguages\"\n }\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"Show Languages\")))])]), _vm._v(\" \"), _c(\"div\", [_c(\"input\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showLastLogin,\n expression: \"showLastLogin\"\n }],\n staticClass: \"checkbox\",\n attrs: {\n id: \"showLastLogin\",\n type: \"checkbox\"\n },\n domProps: {\n checked: Array.isArray(_vm.showLastLogin) ? _vm._i(_vm.showLastLogin, null) > -1 : _vm.showLastLogin\n },\n on: {\n change: function change($event) {\n var $$a = _vm.showLastLogin,\n $$el = $event.target,\n $$c = $$el.checked ? true : false;\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v);\n if ($$el.checked) {\n $$i < 0 && (_vm.showLastLogin = $$a.concat([$$v]));\n } else {\n $$i > -1 && (_vm.showLastLogin = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));\n }\n } else {\n _vm.showLastLogin = $$c;\n }\n }\n }\n }), _vm._v(\" \"), _c(\"label\", {\n attrs: {\n for: \"showLastLogin\"\n }\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"Show last login\")))])]), _vm._v(\" \"), _c(\"div\", [_c(\"input\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showUserBackend,\n expression: \"showUserBackend\"\n }],\n staticClass: \"checkbox\",\n attrs: {\n id: \"showUserBackend\",\n type: \"checkbox\"\n },\n domProps: {\n checked: Array.isArray(_vm.showUserBackend) ? _vm._i(_vm.showUserBackend, null) > -1 : _vm.showUserBackend\n },\n on: {\n change: function change($event) {\n var $$a = _vm.showUserBackend,\n $$el = $event.target,\n $$c = $$el.checked ? true : false;\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v);\n if ($$el.checked) {\n $$i < 0 && (_vm.showUserBackend = $$a.concat([$$v]));\n } else {\n $$i > -1 && (_vm.showUserBackend = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));\n }\n } else {\n _vm.showUserBackend = $$c;\n }\n }\n }\n }), _vm._v(\" \"), _c(\"label\", {\n attrs: {\n for: \"showUserBackend\"\n }\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"Show user backend\")))])]), _vm._v(\" \"), _c(\"div\", [_c(\"input\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showStoragePath,\n expression: \"showStoragePath\"\n }],\n staticClass: \"checkbox\",\n attrs: {\n id: \"showStoragePath\",\n type: \"checkbox\"\n },\n domProps: {\n checked: Array.isArray(_vm.showStoragePath) ? _vm._i(_vm.showStoragePath, null) > -1 : _vm.showStoragePath\n },\n on: {\n change: function change($event) {\n var $$a = _vm.showStoragePath,\n $$el = $event.target,\n $$c = $$el.checked ? true : false;\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v);\n if ($$el.checked) {\n $$i < 0 && (_vm.showStoragePath = $$a.concat([$$v]));\n } else {\n $$i > -1 && (_vm.showStoragePath = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));\n }\n } else {\n _vm.showStoragePath = $$c;\n }\n }\n }\n }), _vm._v(\" \"), _c(\"label\", {\n attrs: {\n for: \"showStoragePath\"\n }\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"Show storage path\")))])]), _vm._v(\" \"), _c(\"div\", [_c(\"input\", {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.sendWelcomeMail,\n expression: \"sendWelcomeMail\"\n }],\n staticClass: \"checkbox\",\n attrs: {\n id: \"sendWelcomeMail\",\n disabled: _vm.loadingSendMail,\n type: \"checkbox\"\n },\n domProps: {\n checked: Array.isArray(_vm.sendWelcomeMail) ? _vm._i(_vm.sendWelcomeMail, null) > -1 : _vm.sendWelcomeMail\n },\n on: {\n change: function change($event) {\n var $$a = _vm.sendWelcomeMail,\n $$el = $event.target,\n $$c = $$el.checked ? true : false;\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v);\n if ($$el.checked) {\n $$i < 0 && (_vm.sendWelcomeMail = $$a.concat([$$v]));\n } else {\n $$i > -1 && (_vm.sendWelcomeMail = $$a.slice(0, $$i).concat($$a.slice($$i + 1)));\n }\n } else {\n _vm.sendWelcomeMail = $$c;\n }\n }\n }\n }), _vm._v(\" \"), _c(\"label\", {\n attrs: {\n for: \"sendWelcomeMail\"\n }\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"Send email to new user\")))])])])];\n },\n proxy: true\n }])\n }, [_c(\"NcAppNavigationNew\", {\n attrs: {\n \"button-id\": \"new-user-button\",\n text: _vm.t(\"settings\", \"New user\"),\n \"button-class\": \"icon-add\"\n },\n on: {\n click: _vm.showNewUserMenu,\n keyup: [function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n return _vm.showNewUserMenu.apply(null, arguments);\n }, function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"space\", 32, $event.key, [\" \", \"Spacebar\"])) return null;\n return _vm.showNewUserMenu.apply(null, arguments);\n }]\n }\n })], 1), _vm._v(\" \"), _c(\"NcAppContent\", [_c(\"UserList\", {\n attrs: {\n users: _vm.users,\n \"show-config\": _vm.showConfig,\n \"selected-group\": _vm.selectedGroupDecoded,\n \"external-actions\": _vm.externalActions\n }\n })], 1)], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".row--menu-opened[data-v-77960baa] {\\n z-index: 1 !important;\\n}\\n.row[data-v-77960baa] .multiselect__single {\\n z-index: auto !important;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".cellText {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n}\\n.icon-more {\\n background-color: var(--color-main-background);\\n border: 0;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation__list #addgroup[data-v-889b7562] .app-navigation-entry__utils {\\n display: none;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.modal-wrapper[data-v-6cba3aca] {\\n\\tmargin: 2vh 0;\\n\\talign-items: flex-start;\\n}\\n.modal__content[data-v-6cba3aca] {\\n\\tdisplay: flex;\\n\\tpadding: 20px;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n\\ttext-align: center;\\n}\\n.modal__item[data-v-6cba3aca] {\\n\\tmargin-bottom: 16px;\\n\\twidth: 100%;\\n}\\n.modal__item[data-v-6cba3aca]:not(:focus):not(:active) {\\n\\tborder-color: var(--color-border-dark);\\n}\\n.modal__item[data-v-6cba3aca] .multiselect {\\n\\twidth: 100%;\\n}\\n.user-actions[data-v-6cba3aca] {\\n\\tmargin-top: 20px;\\n}\\n.modal__content[data-v-6cba3aca] .multiselect__single {\\n\\ttext-align: left;\\n\\tbox-sizing: border-box;\\n}\\n.modal__content[data-v-6cba3aca] .multiselect__content-wrapper {\\n\\tbox-sizing: border-box;\\n}\\n.row[data-v-6cba3aca] .multiselect__single {\\n\\tz-index: auto !important;\\n}\\n\\n/* fake input for groups validation */\\ninput#newgroups[data-v-6cba3aca] {\\n\\tposition: absolute;\\n\\topacity: 0;\\n\\t/* The \\\"hidden\\\" input is behind the Multiselect, so in general it does\\n\\t * not receives clicks. However, with Firefox, after the validation\\n\\t * fails, it will receive the first click done on it, so its width needs\\n\\t * to be set to 0 to prevent that (\\\"pointer-events: none\\\" does not\\n\\t * prevent it). */\\n\\twidth: 0;\\n}\\n\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./GroupListItem.vue?vue&type=template&id=b3f9b202&\"\nimport script from \"./GroupListItem.vue?vue&type=script&lang=js&\"\nexport * from \"./GroupListItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('b3f9b202')) {\n api.createRecord('b3f9b202', component.options)\n } else {\n api.reload('b3f9b202', component.options)\n }\n module.hot.accept(\"./GroupListItem.vue?vue&type=template&id=b3f9b202&\", function () {\n api.rerender('b3f9b202', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/GroupListItem.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=6cba3aca&scoped=true&\"\nimport script from \"./UserList.vue?vue&type=script&lang=js&\"\nexport * from \"./UserList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6cba3aca\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('6cba3aca')) {\n api.createRecord('6cba3aca', component.options)\n } else {\n api.reload('6cba3aca', component.options)\n }\n module.hot.accept(\"./UserList.vue?vue&type=template&id=6cba3aca&scoped=true&\", function () {\n api.rerender('6cba3aca', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/UserList.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=77960baa&scoped=true&\"\nimport script from \"./UserRow.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"77960baa\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('77960baa')) {\n api.createRecord('77960baa', component.options)\n } else {\n api.reload('77960baa', component.options)\n }\n module.hot.accept(\"./UserRow.vue?vue&type=template&id=77960baa&scoped=true&\", function () {\n api.rerender('77960baa', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/UserList/UserRow.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserRowSimple.vue?vue&type=template&id=ff154a08&\"\nimport script from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('ff154a08')) {\n api.createRecord('ff154a08', component.options)\n } else {\n api.reload('ff154a08', component.options)\n }\n module.hot.accept(\"./UserRowSimple.vue?vue&type=template&id=ff154a08&\", function () {\n api.rerender('ff154a08', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/UserList/UserRowSimple.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=889b7562&scoped=true&\"\nimport script from \"./Users.vue?vue&type=script&lang=js&\"\nexport * from \"./Users.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"889b7562\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('889b7562')) {\n api.createRecord('889b7562', component.options)\n } else {\n api.reload('889b7562', component.options)\n }\n module.hot.accept(\"./Users.vue?vue&type=template&id=889b7562&scoped=true&\", function () {\n api.rerender('889b7562', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/views/Users.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js&\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=template&id=b3f9b202&\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=template&id=6cba3aca&scoped=true&\"","export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=template&id=77960baa&scoped=true&\"","export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=template&id=ff154a08&\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=template&id=889b7562&scoped=true&\"","export * from \"-!../../../../../node_modules/style-loader/dist/cjs.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=77960baa&scoped=true&lang=scss&\"","export * from \"-!../../../../../node_modules/style-loader/dist/cjs.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&id=ff154a08&lang=scss&\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=style&index=0&id=889b7562&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=6cba3aca&scoped=true&lang=css&\""],"names":[],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/user-status-modal-user-status-modal.js b/dist/user-status-modal-user-status-modal.js
new file mode 100644
index 00000000000..d7e8d107b17
--- /dev/null
+++ b/dist/user-status-modal-user-status-modal.js
@@ -0,0 +1,1956 @@
+"use strict";
+(self["webpackChunknextcloud"] = self["webpackChunknextcloud"] || []).push([["user-status-modal"],{
+
+/***/ "./apps/user_status/src/filters/clearAtFilter.js":
+/*!*******************************************************!*\
+ !*** ./apps/user_status/src/filters/clearAtFilter.js ***!
+ \*******************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "clearAtFilter": function() { return /* binding */ clearAtFilter; }
+/* harmony export */ });
+/* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs");
+/* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/moment */ "./node_modules/@nextcloud/moment/dist/index.js");
+/* harmony import */ var _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_moment__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _services_dateService_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/dateService.js */ "./apps/user_status/src/services/dateService.js");
+/**
+ * @copyright Copyright (c) 2020 Georg Ehrke
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+
+
+
+/**
+ * Formats a clearAt object to be human readable
+ *
+ * @param {object} clearAt The clearAt object
+ * @return {string|null}
+ */
+var clearAtFilter = function clearAtFilter(clearAt) {
+ if (clearAt === null) {
+ return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', 'Don\'t clear');
+ }
+ if (clearAt.type === 'end-of') {
+ switch (clearAt.time) {
+ case 'day':
+ return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', 'Today');
+ case 'week':
+ return (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', 'This week');
+ default:
+ return null;
+ }
+ }
+ if (clearAt.type === 'period') {
+ return _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1___default().duration(clearAt.time * 1000).humanize();
+ }
+
+ // This is not an officially supported type
+ // but only used internally to show the remaining time
+ // in the Set Status Modal
+ if (clearAt.type === '_time') {
+ var momentNow = _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1___default()((0,_services_dateService_js__WEBPACK_IMPORTED_MODULE_2__.dateFactory)());
+ var momentClearAt = _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1___default()(clearAt.time, 'X');
+ return _nextcloud_moment__WEBPACK_IMPORTED_MODULE_1___default().duration(momentNow.diff(momentClearAt)).humanize();
+ }
+ return null;
+};
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/services/clearAtOptionsService.js":
+/*!****************************************************************!*\
+ !*** ./apps/user_status/src/services/clearAtOptionsService.js ***!
+ \****************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "getAllClearAtOptions": function() { return /* binding */ getAllClearAtOptions; }
+/* harmony export */ });
+/* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs");
+/**
+ * @copyright Copyright (c) 2020 Georg Ehrke
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+
+/**
+ * Returns an array
+ *
+ * @return {object[]}
+ */
+var getAllClearAtOptions = function getAllClearAtOptions() {
+ return [{
+ label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', 'Don\'t clear'),
+ clearAt: null
+ }, {
+ label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', '30 minutes'),
+ clearAt: {
+ type: 'period',
+ time: 1800
+ }
+ }, {
+ label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', '1 hour'),
+ clearAt: {
+ type: 'period',
+ time: 3600
+ }
+ }, {
+ label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', '4 hours'),
+ clearAt: {
+ type: 'period',
+ time: 14400
+ }
+ }, {
+ label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', 'Today'),
+ clearAt: {
+ type: 'end-of',
+ time: 'day'
+ }
+ }, {
+ label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', 'This week'),
+ clearAt: {
+ type: 'end-of',
+ time: 'week'
+ }
+ }];
+};
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/services/statusOptionsService.js":
+/*!***************************************************************!*\
+ !*** ./apps/user_status/src/services/statusOptionsService.js ***!
+ \***************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "getAllStatusOptions": function() { return /* binding */ getAllStatusOptions; }
+/* harmony export */ });
+/* harmony import */ var _nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/l10n */ "./node_modules/@nextcloud/l10n/dist/index.mjs");
+/**
+ * @copyright Copyright (c) 2020 Georg Ehrke
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ * @author Jan C. Borchardt <hey@jancborchardt.net>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+
+/**
+ * Returns a list of all user-definable statuses
+ *
+ * @return {object[]}
+ */
+var getAllStatusOptions = function getAllStatusOptions() {
+ return [{
+ type: 'online',
+ label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', 'Online'),
+ icon: 'icon-user-status-online'
+ }, {
+ type: 'away',
+ label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', 'Away'),
+ icon: 'icon-user-status-away'
+ }, {
+ type: 'dnd',
+ label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', 'Do not disturb'),
+ subline: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', 'Mute all notifications'),
+ icon: 'icon-user-status-dnd'
+ }, {
+ type: 'invisible',
+ label: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', 'Invisible'),
+ subline: (0,_nextcloud_l10n__WEBPACK_IMPORTED_MODULE_0__.translate)('user_status', 'Appear offline'),
+ icon: 'icon-user-status-invisible'
+ }];
+};
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/ClearAtSelect.vue?vue&type=script&lang=js&":
+/*!****************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/ClearAtSelect.vue?vue&type=script&lang=js& ***!
+ \****************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcSelect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcSelect.js */ "./node_modules/@nextcloud/vue/dist/Components/NcSelect.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcSelect_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcSelect_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _services_clearAtOptionsService_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/clearAtOptionsService.js */ "./apps/user_status/src/services/clearAtOptionsService.js");
+/* harmony import */ var _filters_clearAtFilter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../filters/clearAtFilter.js */ "./apps/user_status/src/filters/clearAtFilter.js");
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'ClearAtSelect',
+ components: {
+ NcSelect: (_nextcloud_vue_dist_Components_NcSelect_js__WEBPACK_IMPORTED_MODULE_0___default())
+ },
+ props: {
+ clearAt: {
+ type: Object,
+ default: null
+ }
+ },
+ data: function data() {
+ return {
+ options: (0,_services_clearAtOptionsService_js__WEBPACK_IMPORTED_MODULE_1__.getAllClearAtOptions)()
+ };
+ },
+ computed: {
+ /**
+ * Returns an object of the currently selected option
+ *
+ * @return {object}
+ */
+ option: function option() {
+ return {
+ clearAt: this.clearAt,
+ label: (0,_filters_clearAtFilter_js__WEBPACK_IMPORTED_MODULE_2__.clearAtFilter)(this.clearAt)
+ };
+ }
+ },
+ methods: {
+ /**
+ * Triggered when the user selects a new option.
+ *
+ * @param {object=} option The new selected option
+ */
+ select: function select(option) {
+ if (!option) {
+ return;
+ }
+ this.$emit('select-clear-at', option.clearAt);
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/CustomMessageInput.vue?vue&type=script&lang=js&":
+/*!*********************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/CustomMessageInput.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcButton.js */ "./node_modules/@nextcloud/vue/dist/Components/NcButton.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcEmojiPicker_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcEmojiPicker.js */ "./node_modules/@nextcloud/vue/dist/Components/NcEmojiPicker.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcEmojiPicker_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcEmojiPicker_js__WEBPACK_IMPORTED_MODULE_1__);
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'CustomMessageInput',
+ components: {
+ NcButton: (_nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_0___default()),
+ NcEmojiPicker: (_nextcloud_vue_dist_Components_NcEmojiPicker_js__WEBPACK_IMPORTED_MODULE_1___default())
+ },
+ props: {
+ icon: {
+ type: String,
+ default: '😀'
+ },
+ message: {
+ type: String,
+ required: true,
+ default: function _default() {
+ return '';
+ }
+ },
+ disabled: {
+ type: Boolean,
+ default: false
+ }
+ },
+ emits: ['change', 'submit', 'icon-selected'],
+ computed: {
+ /**
+ * Returns the user-set icon or a smiley in case no icon is set
+ *
+ * @return {string}
+ */
+ visibleIcon: function visibleIcon() {
+ return this.icon || '😀';
+ }
+ },
+ methods: {
+ focus: function focus() {
+ this.$refs.input.focus();
+ },
+ /**
+ * Notifies the parent component about a changed input
+ *
+ * @param {Event} event The Change Event
+ */
+ onKeyup: function onKeyup(event) {
+ this.$emit('change', event.target.value);
+ },
+ onChange: function onChange(event) {
+ this.$emit('submit', event.target.value);
+ },
+ setIcon: function setIcon(icon) {
+ this.$emit('select-icon', icon);
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=script&lang=js&":
+/*!*********************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'OnlineStatusSelect',
+ props: {
+ checked: {
+ type: Boolean,
+ default: false
+ },
+ icon: {
+ type: String,
+ required: true
+ },
+ type: {
+ type: String,
+ required: true
+ },
+ label: {
+ type: String,
+ required: true
+ },
+ subline: {
+ type: String,
+ default: null
+ }
+ },
+ computed: {
+ id: function id() {
+ return "user-status-online-status-".concat(this.type);
+ }
+ },
+ methods: {
+ onChange: function onChange() {
+ this.$emit('select', this.type);
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatus.vue?vue&type=script&lang=js&":
+/*!*******************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatus.vue?vue&type=script&lang=js& ***!
+ \*******************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _filters_clearAtFilter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../filters/clearAtFilter.js */ "./apps/user_status/src/filters/clearAtFilter.js");
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'PredefinedStatus',
+ filters: {
+ clearAtFilter: _filters_clearAtFilter_js__WEBPACK_IMPORTED_MODULE_0__.clearAtFilter
+ },
+ props: {
+ messageId: {
+ type: String,
+ required: true
+ },
+ icon: {
+ type: String,
+ required: true
+ },
+ message: {
+ type: String,
+ required: true
+ },
+ clearAt: {
+ type: Object,
+ required: false,
+ default: null
+ }
+ },
+ methods: {
+ /**
+ * Emits an event when the user clicks the row
+ */
+ select: function select() {
+ this.$emit('select');
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _PredefinedStatus_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PredefinedStatus.vue */ "./apps/user_status/src/components/PredefinedStatus.vue");
+/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
+function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
+function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'PredefinedStatusesList',
+ components: {
+ PredefinedStatus: _PredefinedStatus_vue__WEBPACK_IMPORTED_MODULE_0__["default"]
+ },
+ computed: _objectSpread(_objectSpread({}, (0,vuex__WEBPACK_IMPORTED_MODULE_1__.mapState)({
+ predefinedStatuses: function predefinedStatuses(state) {
+ return state.predefinedStatuses.predefinedStatuses;
+ }
+ })), {}, {
+ /**
+ * Indicator whether the predefined statuses have already been loaded
+ *
+ * @return {boolean}
+ */
+ hasLoaded: function hasLoaded() {
+ return this.predefinedStatuses.length > 0;
+ }
+ }),
+ /**
+ * Loads all predefined statuses from the server
+ * when this component is mounted
+ */
+ mounted: function mounted() {
+ this.$store.dispatch('loadAllPredefinedStatuses');
+ },
+ methods: {
+ /**
+ * Emits an event when the user selects a status
+ *
+ * @param {object} status The selected status
+ */
+ selectStatus: function selectStatus(status) {
+ this.$emit('select-status', status);
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/SetStatusModal.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/SetStatusModal.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.mjs");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcModal_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcModal.js */ "./node_modules/@nextcloud/vue/dist/Components/NcModal.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcModal_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcModal_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nextcloud/vue/dist/Components/NcButton.js */ "./node_modules/@nextcloud/vue/dist/Components/NcButton.js");
+/* harmony import */ var _nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _services_statusOptionsService_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../services/statusOptionsService.js */ "./apps/user_status/src/services/statusOptionsService.js");
+/* harmony import */ var _mixins_OnlineStatusMixin_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../mixins/OnlineStatusMixin.js */ "./apps/user_status/src/mixins/OnlineStatusMixin.js");
+/* harmony import */ var _PredefinedStatusesList_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./PredefinedStatusesList.vue */ "./apps/user_status/src/components/PredefinedStatusesList.vue");
+/* harmony import */ var _CustomMessageInput_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./CustomMessageInput.vue */ "./apps/user_status/src/components/CustomMessageInput.vue");
+/* harmony import */ var _ClearAtSelect_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ClearAtSelect.vue */ "./apps/user_status/src/components/ClearAtSelect.vue");
+/* harmony import */ var _OnlineStatusSelect_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./OnlineStatusSelect.vue */ "./apps/user_status/src/components/OnlineStatusSelect.vue");
+/* provided dependency */ var console = __webpack_require__(/*! ./node_modules/console-browserify/index.js */ "./node_modules/console-browserify/index.js");
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
+function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
+
+
+
+
+
+
+
+
+
+/* harmony default export */ __webpack_exports__["default"] = ({
+ name: 'SetStatusModal',
+ components: {
+ ClearAtSelect: _ClearAtSelect_vue__WEBPACK_IMPORTED_MODULE_7__["default"],
+ CustomMessageInput: _CustomMessageInput_vue__WEBPACK_IMPORTED_MODULE_6__["default"],
+ NcModal: (_nextcloud_vue_dist_Components_NcModal_js__WEBPACK_IMPORTED_MODULE_1___default()),
+ OnlineStatusSelect: _OnlineStatusSelect_vue__WEBPACK_IMPORTED_MODULE_8__["default"],
+ PredefinedStatusesList: _PredefinedStatusesList_vue__WEBPACK_IMPORTED_MODULE_5__["default"],
+ NcButton: (_nextcloud_vue_dist_Components_NcButton_js__WEBPACK_IMPORTED_MODULE_2___default())
+ },
+ mixins: [_mixins_OnlineStatusMixin_js__WEBPACK_IMPORTED_MODULE_4__["default"]],
+ data: function data() {
+ return {
+ clearAt: null,
+ icon: null,
+ message: '',
+ messageId: '',
+ isSavingStatus: false,
+ statuses: (0,_services_statusOptionsService_js__WEBPACK_IMPORTED_MODULE_3__.getAllStatusOptions)()
+ };
+ },
+ /**
+ * Loads the current status when a user opens dialog
+ */
+ mounted: function mounted() {
+ this.messageId = this.$store.state.userStatus.messageId;
+ this.icon = this.$store.state.userStatus.icon;
+ this.message = this.$store.state.userStatus.message || '';
+ if (this.$store.state.userStatus.clearAt !== null) {
+ this.clearAt = {
+ type: '_time',
+ time: this.$store.state.userStatus.clearAt
+ };
+ }
+ },
+ methods: {
+ /**
+ * Closes the Set Status modal
+ */
+ closeModal: function closeModal() {
+ this.$emit('close');
+ },
+ /**
+ * Sets a new icon
+ *
+ * @param {string} icon The new icon
+ */
+ setIcon: function setIcon(icon) {
+ var _this = this;
+ this.messageId = null;
+ this.icon = icon;
+ this.$nextTick(function () {
+ _this.$refs.customMessageInput.focus();
+ });
+ },
+ /**
+ * Sets a new message
+ *
+ * @param {string} message The new message
+ */
+ setMessage: function setMessage(message) {
+ this.messageId = null;
+ this.message = message;
+ },
+ /**
+ * Sets a new clearAt value
+ *
+ * @param {object} clearAt The new clearAt object
+ */
+ setClearAt: function setClearAt(clearAt) {
+ this.clearAt = clearAt;
+ },
+ /**
+ * Sets new icon/message/clearAt based on a predefined message
+ *
+ * @param {object} status The predefined status object
+ */
+ selectPredefinedMessage: function selectPredefinedMessage(status) {
+ this.messageId = status.id;
+ this.clearAt = status.clearAt;
+ this.icon = status.icon;
+ this.message = status.message;
+ },
+ /**
+ * Saves the status and closes the
+ *
+ * @return {Promise<void>}
+ */
+ saveStatus: function saveStatus() {
+ var _this2 = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
+ return regeneratorRuntime.wrap(function _callee$(_context) {
+ while (1) {
+ switch (_context.prev = _context.next) {
+ case 0:
+ if (!_this2.isSavingStatus) {
+ _context.next = 2;
+ break;
+ }
+ return _context.abrupt("return");
+ case 2:
+ _context.prev = 2;
+ _this2.isSavingStatus = true;
+ if (!(_this2.messageId !== undefined && _this2.messageId !== null)) {
+ _context.next = 9;
+ break;
+ }
+ _context.next = 7;
+ return _this2.$store.dispatch('setPredefinedMessage', {
+ messageId: _this2.messageId,
+ clearAt: _this2.clearAt
+ });
+ case 7:
+ _context.next = 11;
+ break;
+ case 9:
+ _context.next = 11;
+ return _this2.$store.dispatch('setCustomMessage', {
+ message: _this2.message,
+ icon: _this2.icon,
+ clearAt: _this2.clearAt
+ });
+ case 11:
+ _context.next = 19;
+ break;
+ case 13:
+ _context.prev = 13;
+ _context.t0 = _context["catch"](2);
+ (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__.showError)(_this2.$t('user_status', 'There was an error saving the status'));
+ console.debug(_context.t0);
+ _this2.isSavingStatus = false;
+ return _context.abrupt("return");
+ case 19:
+ _this2.isSavingStatus = false;
+ _this2.closeModal();
+ case 21:
+ case "end":
+ return _context.stop();
+ }
+ }
+ }, _callee, null, [[2, 13]]);
+ }))();
+ },
+ /**
+ *
+ * @return {Promise<void>}
+ */
+ clearStatus: function clearStatus() {
+ var _this3 = this;
+ return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
+ while (1) {
+ switch (_context2.prev = _context2.next) {
+ case 0:
+ _context2.prev = 0;
+ _this3.isSavingStatus = true;
+ _context2.next = 4;
+ return _this3.$store.dispatch('clearMessage');
+ case 4:
+ _context2.next = 12;
+ break;
+ case 6:
+ _context2.prev = 6;
+ _context2.t0 = _context2["catch"](0);
+ (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__.showError)(_this3.$t('user_status', 'There was an error clearing the status'));
+ console.debug(_context2.t0);
+ _this3.isSavingStatus = false;
+ return _context2.abrupt("return");
+ case 12:
+ _this3.isSavingStatus = false;
+ _this3.closeModal();
+ case 14:
+ case "end":
+ return _context2.stop();
+ }
+ }
+ }, _callee2, null, [[0, 6]]);
+ }))();
+ }
+ }
+});
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/ClearAtSelect.vue?vue&type=template&id=16308054&scoped=true&":
+/*!***************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/ClearAtSelect.vue?vue&type=template&id=16308054&scoped=true& ***!
+ \***************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("div", {
+ staticClass: "clear-at-select"
+ }, [_c("label", {
+ staticClass: "clear-at-select__label",
+ attrs: {
+ for: "clearStatus"
+ }
+ }, [_vm._v("\n\t\t" + _vm._s(_vm.$t("user_status", "Clear status after")) + "\n\t")]), _vm._v(" "), _c("NcSelect", {
+ staticClass: "clear-at-select__select",
+ attrs: {
+ "input-id": "clearStatus",
+ options: _vm.options,
+ value: _vm.option,
+ clearable: false,
+ placement: "top"
+ },
+ on: {
+ "option:selected": _vm.select
+ }
+ })], 1);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/CustomMessageInput.vue?vue&type=template&id=f8ff5dac&scoped=true&":
+/*!********************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/CustomMessageInput.vue?vue&type=template&id=f8ff5dac&scoped=true& ***!
+ \********************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("div", {
+ staticClass: "custom-input"
+ }, [_c("NcEmojiPicker", {
+ attrs: {
+ container: ".custom-input"
+ },
+ on: {
+ select: _vm.setIcon
+ }
+ }, [_c("NcButton", {
+ staticClass: "custom-input__emoji-button",
+ attrs: {
+ type: "tertiary"
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.visibleIcon) + "\n\t\t")])], 1), _vm._v(" "), _c("div", {
+ staticClass: "custom-input__container"
+ }, [_c("label", {
+ staticClass: "hidden-visually",
+ attrs: {
+ for: "user_status_message"
+ }
+ }, [_vm._v("\n\t\t\t" + _vm._s(_vm.t("user_status", "What is your status?")) + "\n\t\t")]), _vm._v(" "), _c("input", {
+ ref: "input",
+ attrs: {
+ id: "user_status_message",
+ maxlength: "80",
+ disabled: _vm.disabled,
+ placeholder: _vm.$t("user_status", "What is your status?"),
+ type: "text"
+ },
+ domProps: {
+ value: _vm.message
+ },
+ on: {
+ change: _vm.onChange,
+ keyup: _vm.onKeyup,
+ paste: _vm.onKeyup
+ }
+ })])], 1);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=template&id=08b51a17&scoped=true&":
+/*!********************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=template&id=08b51a17&scoped=true& ***!
+ \********************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("div", {
+ staticClass: "user-status-online-select"
+ }, [_c("input", {
+ staticClass: "user-status-online-select__input",
+ attrs: {
+ id: _vm.id,
+ type: "radio",
+ name: "user-status-online"
+ },
+ domProps: {
+ checked: _vm.checked
+ },
+ on: {
+ change: _vm.onChange
+ }
+ }), _vm._v(" "), _c("label", {
+ staticClass: "user-status-online-select__label",
+ attrs: {
+ for: _vm.id
+ }
+ }, [_vm._v("\n\t\t" + _vm._s(_vm.label) + "\n\t\t"), _c("span", {
+ class: _vm.icon,
+ attrs: {
+ role: "img"
+ }
+ }), _vm._v(" "), _c("em", {
+ staticClass: "user-status-online-select__subline"
+ }, [_vm._v(_vm._s(_vm.subline))])])]);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatus.vue?vue&type=template&id=2b4a822e&scoped=true&":
+/*!******************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatus.vue?vue&type=template&id=2b4a822e&scoped=true& ***!
+ \******************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("div", {
+ staticClass: "predefined-status",
+ attrs: {
+ tabindex: "0"
+ },
+ on: {
+ keyup: [function ($event) {
+ if (!$event.type.indexOf("key") && _vm._k($event.keyCode, "enter", 13, $event.key, "Enter")) return null;
+ return _vm.select.apply(null, arguments);
+ }, function ($event) {
+ if (!$event.type.indexOf("key") && _vm._k($event.keyCode, "space", 32, $event.key, [" ", "Spacebar"])) return null;
+ return _vm.select.apply(null, arguments);
+ }],
+ click: _vm.select
+ }
+ }, [_c("span", {
+ staticClass: "predefined-status__icon"
+ }, [_vm._v("\n\t\t" + _vm._s(_vm.icon) + "\n\t")]), _vm._v(" "), _c("span", {
+ staticClass: "predefined-status__message"
+ }, [_vm._v("\n\t\t" + _vm._s(_vm.message) + "\n\t")]), _vm._v(" "), _c("span", {
+ staticClass: "predefined-status__clear-at"
+ }, [_vm._v("\n\t\t" + _vm._s(_vm._f("clearAtFilter")(_vm.clearAt)) + "\n\t")])]);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=template&id=31790e1a&scoped=true&":
+/*!************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=template&id=31790e1a&scoped=true& ***!
+ \************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _vm.hasLoaded ? _c("div", {
+ staticClass: "predefined-statuses-list"
+ }, _vm._l(_vm.predefinedStatuses, function (status) {
+ return _c("PredefinedStatus", {
+ key: status.id,
+ attrs: {
+ "message-id": status.id,
+ icon: status.icon,
+ message: status.message,
+ "clear-at": status.clearAt
+ },
+ on: {
+ select: function select($event) {
+ return _vm.selectStatus(status);
+ }
+ }
+ });
+ }), 1) : _c("div", {
+ staticClass: "predefined-statuses-list"
+ }, [_c("div", {
+ staticClass: "icon icon-loading-small"
+ })]);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/SetStatusModal.vue?vue&type=template&id=1a4980a2&scoped=true&":
+/*!****************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/SetStatusModal.vue?vue&type=template&id=1a4980a2&scoped=true& ***!
+ \****************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* binding */ render; },
+/* harmony export */ "staticRenderFns": function() { return /* binding */ staticRenderFns; }
+/* harmony export */ });
+var render = function render() {
+ var _vm = this,
+ _c = _vm._self._c;
+ return _c("NcModal", {
+ attrs: {
+ size: "normal",
+ title: _vm.$t("user_status", "Set status")
+ },
+ on: {
+ close: _vm.closeModal
+ }
+ }, [_c("div", {
+ staticClass: "set-status-modal"
+ }, [_c("div", {
+ staticClass: "set-status-modal__header"
+ }, [_c("h2", [_vm._v(_vm._s(_vm.$t("user_status", "Online status")))])]), _vm._v(" "), _c("div", {
+ staticClass: "set-status-modal__online-status"
+ }, _vm._l(_vm.statuses, function (status) {
+ return _c("OnlineStatusSelect", _vm._b({
+ key: status.type,
+ attrs: {
+ checked: status.type === _vm.statusType
+ },
+ on: {
+ select: _vm.changeStatus
+ }
+ }, "OnlineStatusSelect", status, false));
+ }), 1), _vm._v(" "), _c("div", {
+ staticClass: "set-status-modal__header"
+ }, [_c("h2", [_vm._v(_vm._s(_vm.$t("user_status", "Status message")))])]), _vm._v(" "), _c("div", {
+ staticClass: "set-status-modal__custom-input"
+ }, [_c("CustomMessageInput", {
+ ref: "customMessageInput",
+ attrs: {
+ icon: _vm.icon,
+ message: _vm.message
+ },
+ on: {
+ change: _vm.setMessage,
+ submit: _vm.saveStatus,
+ "select-icon": _vm.setIcon
+ }
+ })], 1), _vm._v(" "), _c("PredefinedStatusesList", {
+ on: {
+ "select-status": _vm.selectPredefinedMessage
+ }
+ }), _vm._v(" "), _c("ClearAtSelect", {
+ attrs: {
+ "clear-at": _vm.clearAt
+ },
+ on: {
+ "select-clear-at": _vm.setClearAt
+ }
+ }), _vm._v(" "), _c("div", {
+ staticClass: "status-buttons"
+ }, [_c("NcButton", {
+ attrs: {
+ wide: true,
+ type: "tertiary",
+ text: _vm.$t("user_status", "Clear status message"),
+ disabled: _vm.isSavingStatus
+ },
+ on: {
+ click: _vm.clearStatus
+ }
+ }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("user_status", "Clear status message")) + "\n\t\t\t")]), _vm._v(" "), _c("NcButton", {
+ attrs: {
+ wide: true,
+ type: "primary",
+ text: _vm.$t("user_status", "Set status message"),
+ disabled: _vm.isSavingStatus
+ },
+ on: {
+ click: _vm.saveStatus
+ }
+ }, [_vm._v("\n\t\t\t\t" + _vm._s(_vm.$t("user_status", "Set status message")) + "\n\t\t\t")])], 1)], 1)]);
+};
+var staticRenderFns = [];
+render._withStripped = true;
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true&":
+/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true& ***!
+ \**********************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, ".clear-at-select[data-v-16308054] {\n display: flex;\n margin-bottom: 10px;\n align-items: center;\n}\n.clear-at-select__label[data-v-16308054] {\n margin-right: 12px;\n}\n.clear-at-select__select[data-v-16308054] {\n flex-grow: 1;\n}", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true&":
+/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true& ***!
+ \***************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, ".custom-input[data-v-f8ff5dac] {\n display: flex;\n width: 100%;\n}\n.custom-input__emoji-button[data-v-f8ff5dac] {\n min-height: 36px;\n padding: 0;\n border: 2px solid var(--color-border-maxcontrast);\n border-right: none;\n border-radius: var(--border-radius) 0 0 var(--border-radius);\n}\n.custom-input__emoji-button[data-v-f8ff5dac]:hover {\n border-color: var(--color-primary-element);\n}\n.custom-input__container[data-v-f8ff5dac] {\n width: 100%;\n}\n.custom-input__container input[data-v-f8ff5dac] {\n width: 100%;\n margin: 0;\n border-radius: 0 var(--border-radius) var(--border-radius) 0;\n}", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true&":
+/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true& ***!
+ \***************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, ".user-status-online-select__input[data-v-08b51a17] {\n position: absolute;\n top: auto;\n left: -10000px;\n overflow: hidden;\n width: 1px;\n height: 1px;\n}\n.user-status-online-select__label[data-v-08b51a17] {\n position: relative;\n display: block;\n margin: 8px;\n padding: 8px;\n padding-left: 40px;\n border: 2px solid var(--color-main-background);\n border-radius: var(--border-radius-large);\n background-color: var(--color-background-hover);\n background-position: 8px center;\n background-size: 24px;\n}\n.user-status-online-select__label span[data-v-08b51a17], .user-status-online-select__label[data-v-08b51a17] {\n cursor: pointer;\n}\n.user-status-online-select__label span[data-v-08b51a17] {\n position: absolute;\n top: calc(50% - 12px);\n left: 8px;\n display: block;\n width: 24px;\n height: 24px;\n}\n.user-status-online-select__input:checked + .user-status-online-select__label[data-v-08b51a17], .user-status-online-select__input:focus + .user-status-online-select__label[data-v-08b51a17], .user-status-online-select__label[data-v-08b51a17]:hover {\n border-color: var(--color-primary);\n}\n.user-status-online-select__label[data-v-08b51a17]:active {\n border-color: var(--color-border-dark);\n}\n.user-status-online-select__subline[data-v-08b51a17] {\n display: block;\n color: var(--color-text-lighter);\n}", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true&":
+/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true& ***!
+ \*************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, "@charset \"UTF-8\";\n.predefined-status[data-v-2b4a822e] {\n display: flex;\n flex-wrap: nowrap;\n justify-content: flex-start;\n flex-basis: 100%;\n border-radius: var(--border-radius);\n align-items: center;\n min-height: 44px;\n}\n.predefined-status[data-v-2b4a822e]:hover, .predefined-status[data-v-2b4a822e]:focus {\n background-color: var(--color-background-hover);\n}\n.predefined-status[data-v-2b4a822e]:active {\n background-color: var(--color-background-dark);\n}\n.predefined-status__icon[data-v-2b4a822e] {\n flex-basis: 40px;\n text-align: center;\n}\n.predefined-status__message[data-v-2b4a822e] {\n font-weight: bold;\n padding: 0 6px;\n}\n.predefined-status__clear-at[data-v-2b4a822e] {\n opacity: 0.7;\n}\n.predefined-status__clear-at[data-v-2b4a822e]::before {\n content: \" – \";\n}", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true&":
+/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true& ***!
+ \*******************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, ".predefined-statuses-list[data-v-31790e1a] {\n display: flex;\n flex-direction: column;\n margin-bottom: 10px;\n}", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true&":
+/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true& ***!
+ \***********************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
+/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
+// Imports
+
+
+var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
+// Module
+___CSS_LOADER_EXPORT___.push([module.id, ".set-status-modal[data-v-1a4980a2] {\n padding: 8px 20px 20px 20px;\n}\n.set-status-modal__header[data-v-1a4980a2] {\n text-align: center;\n font-weight: bold;\n margin: 15px 0;\n}\n.set-status-modal__online-status[data-v-1a4980a2] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n}\n.set-status-modal__custom-input[data-v-1a4980a2] {\n display: flex;\n width: 100%;\n margin-bottom: 10px;\n}\n.set-status-modal .status-buttons[data-v-1a4980a2] {\n display: flex;\n padding: 3px;\n padding-left: 0;\n gap: 3px;\n}\n@media only screen and (max-width: 500px) {\n.set-status-modal__online-status[data-v-1a4980a2] {\n grid-template-columns: none !important;\n}\n}", ""]);
+// Exports
+/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true&":
+/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true& ***!
+ \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_ClearAtSelect_vue_vue_type_style_index_0_id_16308054_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_ClearAtSelect_vue_vue_type_style_index_0_id_16308054_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_ClearAtSelect_vue_vue_type_style_index_0_id_16308054_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_ClearAtSelect_vue_vue_type_style_index_0_id_16308054_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_ClearAtSelect_vue_vue_type_style_index_0_id_16308054_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true&":
+/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true& ***!
+ \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_CustomMessageInput_vue_vue_type_style_index_0_id_f8ff5dac_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_CustomMessageInput_vue_vue_type_style_index_0_id_f8ff5dac_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_CustomMessageInput_vue_vue_type_style_index_0_id_f8ff5dac_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_CustomMessageInput_vue_vue_type_style_index_0_id_f8ff5dac_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_CustomMessageInput_vue_vue_type_style_index_0_id_f8ff5dac_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true&":
+/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true& ***!
+ \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OnlineStatusSelect_vue_vue_type_style_index_0_id_08b51a17_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OnlineStatusSelect_vue_vue_type_style_index_0_id_08b51a17_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OnlineStatusSelect_vue_vue_type_style_index_0_id_08b51a17_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OnlineStatusSelect_vue_vue_type_style_index_0_id_08b51a17_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OnlineStatusSelect_vue_vue_type_style_index_0_id_08b51a17_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true&":
+/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true& ***!
+ \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatus_vue_vue_type_style_index_0_id_2b4a822e_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatus_vue_vue_type_style_index_0_id_2b4a822e_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatus_vue_vue_type_style_index_0_id_2b4a822e_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatus_vue_vue_type_style_index_0_id_2b4a822e_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatus_vue_vue_type_style_index_0_id_2b4a822e_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true&":
+/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true& ***!
+ \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatusesList_vue_vue_type_style_index_0_id_31790e1a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatusesList_vue_vue_type_style_index_0_id_31790e1a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatusesList_vue_vue_type_style_index_0_id_31790e1a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatusesList_vue_vue_type_style_index_0_id_31790e1a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatusesList_vue_vue_type_style_index_0_id_31790e1a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true&":
+/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true& ***!
+ \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
+/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
+/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_SetStatusModal_vue_vue_type_style_index_0_id_1a4980a2_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true& */ "./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true&");
+
+
+
+
+
+
+
+
+
+
+
+var options = {};
+
+options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
+options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
+
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
+
+options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
+options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
+
+var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_SetStatusModal_vue_vue_type_style_index_0_id_1a4980a2_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"], options);
+
+
+
+
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_SetStatusModal_vue_vue_type_style_index_0_id_1a4980a2_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_SetStatusModal_vue_vue_type_style_index_0_id_1a4980a2_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_SetStatusModal_vue_vue_type_style_index_0_id_1a4980a2_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/ClearAtSelect.vue":
+/*!***********************************************************!*\
+ !*** ./apps/user_status/src/components/ClearAtSelect.vue ***!
+ \***********************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _ClearAtSelect_vue_vue_type_template_id_16308054_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ClearAtSelect.vue?vue&type=template&id=16308054&scoped=true& */ "./apps/user_status/src/components/ClearAtSelect.vue?vue&type=template&id=16308054&scoped=true&");
+/* harmony import */ var _ClearAtSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ClearAtSelect.vue?vue&type=script&lang=js& */ "./apps/user_status/src/components/ClearAtSelect.vue?vue&type=script&lang=js&");
+/* harmony import */ var _ClearAtSelect_vue_vue_type_style_index_0_id_16308054_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true& */ "./apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _ClearAtSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _ClearAtSelect_vue_vue_type_template_id_16308054_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
+ _ClearAtSelect_vue_vue_type_template_id_16308054_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ "16308054",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/user_status/src/components/ClearAtSelect.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/CustomMessageInput.vue":
+/*!****************************************************************!*\
+ !*** ./apps/user_status/src/components/CustomMessageInput.vue ***!
+ \****************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _CustomMessageInput_vue_vue_type_template_id_f8ff5dac_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CustomMessageInput.vue?vue&type=template&id=f8ff5dac&scoped=true& */ "./apps/user_status/src/components/CustomMessageInput.vue?vue&type=template&id=f8ff5dac&scoped=true&");
+/* harmony import */ var _CustomMessageInput_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CustomMessageInput.vue?vue&type=script&lang=js& */ "./apps/user_status/src/components/CustomMessageInput.vue?vue&type=script&lang=js&");
+/* harmony import */ var _CustomMessageInput_vue_vue_type_style_index_0_id_f8ff5dac_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true& */ "./apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _CustomMessageInput_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _CustomMessageInput_vue_vue_type_template_id_f8ff5dac_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
+ _CustomMessageInput_vue_vue_type_template_id_f8ff5dac_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ "f8ff5dac",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/user_status/src/components/CustomMessageInput.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/OnlineStatusSelect.vue":
+/*!****************************************************************!*\
+ !*** ./apps/user_status/src/components/OnlineStatusSelect.vue ***!
+ \****************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _OnlineStatusSelect_vue_vue_type_template_id_08b51a17_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./OnlineStatusSelect.vue?vue&type=template&id=08b51a17&scoped=true& */ "./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=template&id=08b51a17&scoped=true&");
+/* harmony import */ var _OnlineStatusSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OnlineStatusSelect.vue?vue&type=script&lang=js& */ "./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=script&lang=js&");
+/* harmony import */ var _OnlineStatusSelect_vue_vue_type_style_index_0_id_08b51a17_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true& */ "./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _OnlineStatusSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _OnlineStatusSelect_vue_vue_type_template_id_08b51a17_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
+ _OnlineStatusSelect_vue_vue_type_template_id_08b51a17_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ "08b51a17",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/user_status/src/components/OnlineStatusSelect.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/PredefinedStatus.vue":
+/*!**************************************************************!*\
+ !*** ./apps/user_status/src/components/PredefinedStatus.vue ***!
+ \**************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _PredefinedStatus_vue_vue_type_template_id_2b4a822e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PredefinedStatus.vue?vue&type=template&id=2b4a822e&scoped=true& */ "./apps/user_status/src/components/PredefinedStatus.vue?vue&type=template&id=2b4a822e&scoped=true&");
+/* harmony import */ var _PredefinedStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PredefinedStatus.vue?vue&type=script&lang=js& */ "./apps/user_status/src/components/PredefinedStatus.vue?vue&type=script&lang=js&");
+/* harmony import */ var _PredefinedStatus_vue_vue_type_style_index_0_id_2b4a822e_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true& */ "./apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _PredefinedStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _PredefinedStatus_vue_vue_type_template_id_2b4a822e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
+ _PredefinedStatus_vue_vue_type_template_id_2b4a822e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ "2b4a822e",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/user_status/src/components/PredefinedStatus.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/PredefinedStatusesList.vue":
+/*!********************************************************************!*\
+ !*** ./apps/user_status/src/components/PredefinedStatusesList.vue ***!
+ \********************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _PredefinedStatusesList_vue_vue_type_template_id_31790e1a_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PredefinedStatusesList.vue?vue&type=template&id=31790e1a&scoped=true& */ "./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=template&id=31790e1a&scoped=true&");
+/* harmony import */ var _PredefinedStatusesList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PredefinedStatusesList.vue?vue&type=script&lang=js& */ "./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=script&lang=js&");
+/* harmony import */ var _PredefinedStatusesList_vue_vue_type_style_index_0_id_31790e1a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true& */ "./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _PredefinedStatusesList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _PredefinedStatusesList_vue_vue_type_template_id_31790e1a_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
+ _PredefinedStatusesList_vue_vue_type_template_id_31790e1a_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ "31790e1a",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/user_status/src/components/PredefinedStatusesList.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/SetStatusModal.vue":
+/*!************************************************************!*\
+ !*** ./apps/user_status/src/components/SetStatusModal.vue ***!
+ \************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _SetStatusModal_vue_vue_type_template_id_1a4980a2_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SetStatusModal.vue?vue&type=template&id=1a4980a2&scoped=true& */ "./apps/user_status/src/components/SetStatusModal.vue?vue&type=template&id=1a4980a2&scoped=true&");
+/* harmony import */ var _SetStatusModal_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SetStatusModal.vue?vue&type=script&lang=js& */ "./apps/user_status/src/components/SetStatusModal.vue?vue&type=script&lang=js&");
+/* harmony import */ var _SetStatusModal_vue_vue_type_style_index_0_id_1a4980a2_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true& */ "./apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true&");
+/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
+
+
+
+;
+
+
+/* normalize component */
+
+var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
+ _SetStatusModal_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
+ _SetStatusModal_vue_vue_type_template_id_1a4980a2_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
+ _SetStatusModal_vue_vue_type_template_id_1a4980a2_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
+ false,
+ null,
+ "1a4980a2",
+ null
+
+)
+
+/* hot reload */
+if (false) { var api; }
+component.options.__file = "apps/user_status/src/components/SetStatusModal.vue"
+/* harmony default export */ __webpack_exports__["default"] = (component.exports);
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/ClearAtSelect.vue?vue&type=script&lang=js&":
+/*!************************************************************************************!*\
+ !*** ./apps/user_status/src/components/ClearAtSelect.vue?vue&type=script&lang=js& ***!
+ \************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_ClearAtSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/ClearAtSelect.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_ClearAtSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/CustomMessageInput.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************!*\
+ !*** ./apps/user_status/src/components/CustomMessageInput.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_CustomMessageInput_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/CustomMessageInput.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_CustomMessageInput_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=script&lang=js&":
+/*!*****************************************************************************************!*\
+ !*** ./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=script&lang=js& ***!
+ \*****************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OnlineStatusSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OnlineStatusSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/PredefinedStatus.vue?vue&type=script&lang=js&":
+/*!***************************************************************************************!*\
+ !*** ./apps/user_status/src/components/PredefinedStatus.vue?vue&type=script&lang=js& ***!
+ \***************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatus.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatus_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=script&lang=js&":
+/*!*********************************************************************************************!*\
+ !*** ./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=script&lang=js& ***!
+ \*********************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatusesList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatusesList_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/SetStatusModal.vue?vue&type=script&lang=js&":
+/*!*************************************************************************************!*\
+ !*** ./apps/user_status/src/components/SetStatusModal.vue?vue&type=script&lang=js& ***!
+ \*************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_SetStatusModal_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/SetStatusModal.vue?vue&type=script&lang=js&");
+ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_SetStatusModal_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/ClearAtSelect.vue?vue&type=template&id=16308054&scoped=true&":
+/*!******************************************************************************************************!*\
+ !*** ./apps/user_status/src/components/ClearAtSelect.vue?vue&type=template&id=16308054&scoped=true& ***!
+ \******************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_ClearAtSelect_vue_vue_type_template_id_16308054_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_ClearAtSelect_vue_vue_type_template_id_16308054_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_ClearAtSelect_vue_vue_type_template_id_16308054_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=template&id=16308054&scoped=true& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/ClearAtSelect.vue?vue&type=template&id=16308054&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/CustomMessageInput.vue?vue&type=template&id=f8ff5dac&scoped=true&":
+/*!***********************************************************************************************************!*\
+ !*** ./apps/user_status/src/components/CustomMessageInput.vue?vue&type=template&id=f8ff5dac&scoped=true& ***!
+ \***********************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_CustomMessageInput_vue_vue_type_template_id_f8ff5dac_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_CustomMessageInput_vue_vue_type_template_id_f8ff5dac_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_CustomMessageInput_vue_vue_type_template_id_f8ff5dac_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=template&id=f8ff5dac&scoped=true& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/CustomMessageInput.vue?vue&type=template&id=f8ff5dac&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=template&id=08b51a17&scoped=true&":
+/*!***********************************************************************************************************!*\
+ !*** ./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=template&id=08b51a17&scoped=true& ***!
+ \***********************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_OnlineStatusSelect_vue_vue_type_template_id_08b51a17_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_OnlineStatusSelect_vue_vue_type_template_id_08b51a17_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_OnlineStatusSelect_vue_vue_type_template_id_08b51a17_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=template&id=08b51a17&scoped=true& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=template&id=08b51a17&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/PredefinedStatus.vue?vue&type=template&id=2b4a822e&scoped=true&":
+/*!*********************************************************************************************************!*\
+ !*** ./apps/user_status/src/components/PredefinedStatus.vue?vue&type=template&id=2b4a822e&scoped=true& ***!
+ \*********************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatus_vue_vue_type_template_id_2b4a822e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatus_vue_vue_type_template_id_2b4a822e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatus_vue_vue_type_template_id_2b4a822e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=template&id=2b4a822e&scoped=true& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatus.vue?vue&type=template&id=2b4a822e&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=template&id=31790e1a&scoped=true&":
+/*!***************************************************************************************************************!*\
+ !*** ./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=template&id=31790e1a&scoped=true& ***!
+ \***************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatusesList_vue_vue_type_template_id_31790e1a_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatusesList_vue_vue_type_template_id_31790e1a_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatusesList_vue_vue_type_template_id_31790e1a_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=template&id=31790e1a&scoped=true& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=template&id=31790e1a&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/SetStatusModal.vue?vue&type=template&id=1a4980a2&scoped=true&":
+/*!*******************************************************************************************************!*\
+ !*** ./apps/user_status/src/components/SetStatusModal.vue?vue&type=template&id=1a4980a2&scoped=true& ***!
+ \*******************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_SetStatusModal_vue_vue_type_template_id_1a4980a2_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render; },
+/* harmony export */ "staticRenderFns": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_SetStatusModal_vue_vue_type_template_id_1a4980a2_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns; }
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_lib_index_js_vue_loader_options_SetStatusModal_vue_vue_type_template_id_1a4980a2_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=template&id=1a4980a2&scoped=true& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/SetStatusModal.vue?vue&type=template&id=1a4980a2&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true&":
+/*!*********************************************************************************************************************!*\
+ !*** ./apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true& ***!
+ \*********************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_ClearAtSelect_vue_vue_type_style_index_0_id_16308054_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true&":
+/*!**************************************************************************************************************************!*\
+ !*** ./apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true& ***!
+ \**************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_CustomMessageInput_vue_vue_type_style_index_0_id_f8ff5dac_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true&":
+/*!**************************************************************************************************************************!*\
+ !*** ./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true& ***!
+ \**************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_OnlineStatusSelect_vue_vue_type_style_index_0_id_08b51a17_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true&":
+/*!************************************************************************************************************************!*\
+ !*** ./apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true& ***!
+ \************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatus_vue_vue_type_style_index_0_id_2b4a822e_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true&":
+/*!******************************************************************************************************************************!*\
+ !*** ./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true& ***!
+ \******************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_PredefinedStatusesList_vue_vue_type_style_index_0_id_31790e1a_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true&");
+
+
+/***/ }),
+
+/***/ "./apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true&":
+/*!**********************************************************************************************************************!*\
+ !*** ./apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true& ***!
+ \**********************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_sass_loader_dist_cjs_js_node_modules_vue_loader_lib_index_js_vue_loader_options_SetStatusModal_vue_vue_type_style_index_0_id_1a4980a2_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true& */ "./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true&");
+
+
+/***/ })
+
+}]);
+//# sourceMappingURL=user-status-modal-user-status-modal.js.map?v=b4ebaf220df49eda7b48 \ No newline at end of file
diff --git a/dist/user-status-modal-user-status-modal.js.map b/dist/user-status-modal-user-status-modal.js.map
new file mode 100644
index 00000000000..2a9d59a7c81
--- /dev/null
+++ b/dist/user-status-modal-user-status-modal.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"user-status-modal-user-status-modal.js?v=b4ebaf220df49eda7b48","mappings":";;;;;;;;;;;;;;;;;AAAA;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;;;;;;;;;;;;;;;;AC3DA;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;;;;;;;;;;;;;;;;AChEA;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;;;;;;;;;;;;;;;;AClDA;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;;;;;;;;;;;;;;;AC7CA;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;;;;;;;;;;;ACvDA;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;;;;;;;;;;;;AClCA;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;;;;;;;;;;;;;ACjCA;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;;;;;;;;;;;;;;;;;;;;;;;AC5CA;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;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;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;;;;;;;;;;;;;;;AC/LA;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;;;;;;;;;;;;;;;;ACzBA;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;;;;;;;;;;;;;;;;AC5CA;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;;;;;;;;;;;;;;;;ACjCA;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;;;;;;;;;;;;;;;;AC3BA;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;;;;;;;;;;;;;;;;AC3BA;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;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;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;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;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;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;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;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;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;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;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;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;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;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;ACvCA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA","sources":["webpack:///nextcloud/apps/user_status/src/filters/clearAtFilter.js","webpack:///nextcloud/apps/user_status/src/services/clearAtOptionsService.js","webpack:///nextcloud/apps/user_status/src/services/statusOptionsService.js","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=template&id=16308054&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=template&id=f8ff5dac&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=template&id=08b51a17&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=template&id=2b4a822e&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=template&id=31790e1a&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=template&id=1a4980a2&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true&","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?2db7","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?9801","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?16ea","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?e97c","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?9d19","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?9478","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?65bb","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?8a67","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?0785","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?3443","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?17e0","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?6451","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?a7f2","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?5e7e","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?6d95","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?dd97","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?3ad5","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?708f","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?086c","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?13c0","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?e4e7","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?48da","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?fb04","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?be34"],"sourcesContent":["/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n';\nimport moment from '@nextcloud/moment';\nimport { dateFactory } from '../services/dateService.js';\n\n/**\n * Formats a clearAt object to be human readable\n *\n * @param {object} clearAt The clearAt object\n * @return {string|null}\n */\nvar clearAtFilter = function clearAtFilter(clearAt) {\n if (clearAt === null) {\n return t('user_status', 'Don\\'t clear');\n }\n if (clearAt.type === 'end-of') {\n switch (clearAt.time) {\n case 'day':\n return t('user_status', 'Today');\n case 'week':\n return t('user_status', 'This week');\n default:\n return null;\n }\n }\n if (clearAt.type === 'period') {\n return moment.duration(clearAt.time * 1000).humanize();\n }\n\n // This is not an officially supported type\n // but only used internally to show the remaining time\n // in the Set Status Modal\n if (clearAt.type === '_time') {\n var momentNow = moment(dateFactory());\n var momentClearAt = moment(clearAt.time, 'X');\n return moment.duration(momentNow.diff(momentClearAt)).humanize();\n }\n return null;\n};\nexport { clearAtFilter };","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n';\n\n/**\n * Returns an array\n *\n * @return {object[]}\n */\nvar getAllClearAtOptions = function getAllClearAtOptions() {\n return [{\n label: t('user_status', 'Don\\'t clear'),\n clearAt: null\n }, {\n label: t('user_status', '30 minutes'),\n clearAt: {\n type: 'period',\n time: 1800\n }\n }, {\n label: t('user_status', '1 hour'),\n clearAt: {\n type: 'period',\n time: 3600\n }\n }, {\n label: t('user_status', '4 hours'),\n clearAt: {\n type: 'period',\n time: 14400\n }\n }, {\n label: t('user_status', 'Today'),\n clearAt: {\n type: 'end-of',\n time: 'day'\n }\n }, {\n label: t('user_status', 'This week'),\n clearAt: {\n type: 'end-of',\n time: 'week'\n }\n }];\n};\nexport { getAllClearAtOptions };","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author Jan C. Borchardt <hey@jancborchardt.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n';\n\n/**\n * Returns a list of all user-definable statuses\n *\n * @return {object[]}\n */\nvar getAllStatusOptions = function getAllStatusOptions() {\n return [{\n type: 'online',\n label: t('user_status', 'Online'),\n icon: 'icon-user-status-online'\n }, {\n type: 'away',\n label: t('user_status', 'Away'),\n icon: 'icon-user-status-away'\n }, {\n type: 'dnd',\n label: t('user_status', 'Do not disturb'),\n subline: t('user_status', 'Mute all notifications'),\n icon: 'icon-user-status-dnd'\n }, {\n type: 'invisible',\n label: t('user_status', 'Invisible'),\n subline: t('user_status', 'Appear offline'),\n icon: 'icon-user-status-invisible'\n }];\n};\nexport { getAllStatusOptions };","import NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js';\nimport { getAllClearAtOptions } from '../services/clearAtOptionsService.js';\nimport { clearAtFilter } from '../filters/clearAtFilter.js';\nexport default {\n name: 'ClearAtSelect',\n components: {\n NcSelect: NcSelect\n },\n props: {\n clearAt: {\n type: Object,\n default: null\n }\n },\n data: function data() {\n return {\n options: getAllClearAtOptions()\n };\n },\n computed: {\n /**\n * Returns an object of the currently selected option\n *\n * @return {object}\n */\n option: function option() {\n return {\n clearAt: this.clearAt,\n label: clearAtFilter(this.clearAt)\n };\n }\n },\n methods: {\n /**\n * Triggered when the user selects a new option.\n *\n * @param {object=} option The new selected option\n */\n select: function select(option) {\n if (!option) {\n return;\n }\n this.$emit('select-clear-at', option.clearAt);\n }\n }\n};","import NcButton from '@nextcloud/vue/dist/Components/NcButton.js';\nimport NcEmojiPicker from '@nextcloud/vue/dist/Components/NcEmojiPicker.js';\nexport default {\n name: 'CustomMessageInput',\n components: {\n NcButton: NcButton,\n NcEmojiPicker: NcEmojiPicker\n },\n props: {\n icon: {\n type: String,\n default: '😀'\n },\n message: {\n type: String,\n required: true,\n default: function _default() {\n return '';\n }\n },\n disabled: {\n type: Boolean,\n default: false\n }\n },\n emits: ['change', 'submit', 'icon-selected'],\n computed: {\n /**\n * Returns the user-set icon or a smiley in case no icon is set\n *\n * @return {string}\n */\n visibleIcon: function visibleIcon() {\n return this.icon || '😀';\n }\n },\n methods: {\n focus: function focus() {\n this.$refs.input.focus();\n },\n /**\n * Notifies the parent component about a changed input\n *\n * @param {Event} event The Change Event\n */\n onKeyup: function onKeyup(event) {\n this.$emit('change', event.target.value);\n },\n onChange: function onChange(event) {\n this.$emit('submit', event.target.value);\n },\n setIcon: function setIcon(icon) {\n this.$emit('select-icon', icon);\n }\n }\n};","export default {\n name: 'OnlineStatusSelect',\n props: {\n checked: {\n type: Boolean,\n default: false\n },\n icon: {\n type: String,\n required: true\n },\n type: {\n type: String,\n required: true\n },\n label: {\n type: String,\n required: true\n },\n subline: {\n type: String,\n default: null\n }\n },\n computed: {\n id: function id() {\n return \"user-status-online-status-\".concat(this.type);\n }\n },\n methods: {\n onChange: function onChange() {\n this.$emit('select', this.type);\n }\n }\n};","import { clearAtFilter } from '../filters/clearAtFilter.js';\nexport default {\n name: 'PredefinedStatus',\n filters: {\n clearAtFilter: clearAtFilter\n },\n props: {\n messageId: {\n type: String,\n required: true\n },\n icon: {\n type: String,\n required: true\n },\n message: {\n type: String,\n required: true\n },\n clearAt: {\n type: Object,\n required: false,\n default: null\n }\n },\n methods: {\n /**\n * Emits an event when the user clicks the row\n */\n select: function select() {\n this.$emit('select');\n }\n }\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport PredefinedStatus from './PredefinedStatus.vue';\nimport { mapState } from 'vuex';\nexport default {\n name: 'PredefinedStatusesList',\n components: {\n PredefinedStatus: PredefinedStatus\n },\n computed: _objectSpread(_objectSpread({}, mapState({\n predefinedStatuses: function predefinedStatuses(state) {\n return state.predefinedStatuses.predefinedStatuses;\n }\n })), {}, {\n /**\n * Indicator whether the predefined statuses have already been loaded\n *\n * @return {boolean}\n */\n hasLoaded: function hasLoaded() {\n return this.predefinedStatuses.length > 0;\n }\n }),\n /**\n * Loads all predefined statuses from the server\n * when this component is mounted\n */\n mounted: function mounted() {\n this.$store.dispatch('loadAllPredefinedStatuses');\n },\n methods: {\n /**\n * Emits an event when the user selects a status\n *\n * @param {object} status The selected status\n */\n selectStatus: function selectStatus(status) {\n this.$emit('select-status', status);\n }\n }\n};","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { showError } from '@nextcloud/dialogs';\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal.js';\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js';\nimport { getAllStatusOptions } from '../services/statusOptionsService.js';\nimport OnlineStatusMixin from '../mixins/OnlineStatusMixin.js';\nimport PredefinedStatusesList from './PredefinedStatusesList.vue';\nimport CustomMessageInput from './CustomMessageInput.vue';\nimport ClearAtSelect from './ClearAtSelect.vue';\nimport OnlineStatusSelect from './OnlineStatusSelect.vue';\nexport default {\n name: 'SetStatusModal',\n components: {\n ClearAtSelect: ClearAtSelect,\n CustomMessageInput: CustomMessageInput,\n NcModal: NcModal,\n OnlineStatusSelect: OnlineStatusSelect,\n PredefinedStatusesList: PredefinedStatusesList,\n NcButton: NcButton\n },\n mixins: [OnlineStatusMixin],\n data: function data() {\n return {\n clearAt: null,\n icon: null,\n message: '',\n messageId: '',\n isSavingStatus: false,\n statuses: getAllStatusOptions()\n };\n },\n /**\n * Loads the current status when a user opens dialog\n */\n mounted: function mounted() {\n this.messageId = this.$store.state.userStatus.messageId;\n this.icon = this.$store.state.userStatus.icon;\n this.message = this.$store.state.userStatus.message || '';\n if (this.$store.state.userStatus.clearAt !== null) {\n this.clearAt = {\n type: '_time',\n time: this.$store.state.userStatus.clearAt\n };\n }\n },\n methods: {\n /**\n * Closes the Set Status modal\n */\n closeModal: function closeModal() {\n this.$emit('close');\n },\n /**\n * Sets a new icon\n *\n * @param {string} icon The new icon\n */\n setIcon: function setIcon(icon) {\n var _this = this;\n this.messageId = null;\n this.icon = icon;\n this.$nextTick(function () {\n _this.$refs.customMessageInput.focus();\n });\n },\n /**\n * Sets a new message\n *\n * @param {string} message The new message\n */\n setMessage: function setMessage(message) {\n this.messageId = null;\n this.message = message;\n },\n /**\n * Sets a new clearAt value\n *\n * @param {object} clearAt The new clearAt object\n */\n setClearAt: function setClearAt(clearAt) {\n this.clearAt = clearAt;\n },\n /**\n * Sets new icon/message/clearAt based on a predefined message\n *\n * @param {object} status The predefined status object\n */\n selectPredefinedMessage: function selectPredefinedMessage(status) {\n this.messageId = status.id;\n this.clearAt = status.clearAt;\n this.icon = status.icon;\n this.message = status.message;\n },\n /**\n * Saves the status and closes the\n *\n * @return {Promise<void>}\n */\n saveStatus: function saveStatus() {\n var _this2 = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!_this2.isSavingStatus) {\n _context.next = 2;\n break;\n }\n return _context.abrupt(\"return\");\n case 2:\n _context.prev = 2;\n _this2.isSavingStatus = true;\n if (!(_this2.messageId !== undefined && _this2.messageId !== null)) {\n _context.next = 9;\n break;\n }\n _context.next = 7;\n return _this2.$store.dispatch('setPredefinedMessage', {\n messageId: _this2.messageId,\n clearAt: _this2.clearAt\n });\n case 7:\n _context.next = 11;\n break;\n case 9:\n _context.next = 11;\n return _this2.$store.dispatch('setCustomMessage', {\n message: _this2.message,\n icon: _this2.icon,\n clearAt: _this2.clearAt\n });\n case 11:\n _context.next = 19;\n break;\n case 13:\n _context.prev = 13;\n _context.t0 = _context[\"catch\"](2);\n showError(_this2.$t('user_status', 'There was an error saving the status'));\n console.debug(_context.t0);\n _this2.isSavingStatus = false;\n return _context.abrupt(\"return\");\n case 19:\n _this2.isSavingStatus = false;\n _this2.closeModal();\n case 21:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, null, [[2, 13]]);\n }))();\n },\n /**\n *\n * @return {Promise<void>}\n */\n clearStatus: function clearStatus() {\n var _this3 = this;\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.prev = 0;\n _this3.isSavingStatus = true;\n _context2.next = 4;\n return _this3.$store.dispatch('clearMessage');\n case 4:\n _context2.next = 12;\n break;\n case 6:\n _context2.prev = 6;\n _context2.t0 = _context2[\"catch\"](0);\n showError(_this3.$t('user_status', 'There was an error clearing the status'));\n console.debug(_context2.t0);\n _this3.isSavingStatus = false;\n return _context2.abrupt(\"return\");\n case 12:\n _this3.isSavingStatus = false;\n _this3.closeModal();\n case 14:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, null, [[0, 6]]);\n }))();\n }\n }\n};","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"clear-at-select\"\n }, [_c(\"label\", {\n staticClass: \"clear-at-select__label\",\n attrs: {\n for: \"clearStatus\"\n }\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.$t(\"user_status\", \"Clear status after\")) + \"\\n\\t\")]), _vm._v(\" \"), _c(\"NcSelect\", {\n staticClass: \"clear-at-select__select\",\n attrs: {\n \"input-id\": \"clearStatus\",\n options: _vm.options,\n value: _vm.option,\n clearable: false,\n placement: \"top\"\n },\n on: {\n \"option:selected\": _vm.select\n }\n })], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"custom-input\"\n }, [_c(\"NcEmojiPicker\", {\n attrs: {\n container: \".custom-input\"\n },\n on: {\n select: _vm.setIcon\n }\n }, [_c(\"NcButton\", {\n staticClass: \"custom-input__emoji-button\",\n attrs: {\n type: \"tertiary\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.visibleIcon) + \"\\n\\t\\t\")])], 1), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"custom-input__container\"\n }, [_c(\"label\", {\n staticClass: \"hidden-visually\",\n attrs: {\n for: \"user_status_message\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"user_status\", \"What is your status?\")) + \"\\n\\t\\t\")]), _vm._v(\" \"), _c(\"input\", {\n ref: \"input\",\n attrs: {\n id: \"user_status_message\",\n maxlength: \"80\",\n disabled: _vm.disabled,\n placeholder: _vm.$t(\"user_status\", \"What is your status?\"),\n type: \"text\"\n },\n domProps: {\n value: _vm.message\n },\n on: {\n change: _vm.onChange,\n keyup: _vm.onKeyup,\n paste: _vm.onKeyup\n }\n })])], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"user-status-online-select\"\n }, [_c(\"input\", {\n staticClass: \"user-status-online-select__input\",\n attrs: {\n id: _vm.id,\n type: \"radio\",\n name: \"user-status-online\"\n },\n domProps: {\n checked: _vm.checked\n },\n on: {\n change: _vm.onChange\n }\n }), _vm._v(\" \"), _c(\"label\", {\n staticClass: \"user-status-online-select__label\",\n attrs: {\n for: _vm.id\n }\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.label) + \"\\n\\t\\t\"), _c(\"span\", {\n class: _vm.icon,\n attrs: {\n role: \"img\"\n }\n }), _vm._v(\" \"), _c(\"em\", {\n staticClass: \"user-status-online-select__subline\"\n }, [_vm._v(_vm._s(_vm.subline))])])]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"predefined-status\",\n attrs: {\n tabindex: \"0\"\n },\n on: {\n keyup: [function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n return _vm.select.apply(null, arguments);\n }, function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"space\", 32, $event.key, [\" \", \"Spacebar\"])) return null;\n return _vm.select.apply(null, arguments);\n }],\n click: _vm.select\n }\n }, [_c(\"span\", {\n staticClass: \"predefined-status__icon\"\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.icon) + \"\\n\\t\")]), _vm._v(\" \"), _c(\"span\", {\n staticClass: \"predefined-status__message\"\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.message) + \"\\n\\t\")]), _vm._v(\" \"), _c(\"span\", {\n staticClass: \"predefined-status__clear-at\"\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm._f(\"clearAtFilter\")(_vm.clearAt)) + \"\\n\\t\")])]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _vm.hasLoaded ? _c(\"div\", {\n staticClass: \"predefined-statuses-list\"\n }, _vm._l(_vm.predefinedStatuses, function (status) {\n return _c(\"PredefinedStatus\", {\n key: status.id,\n attrs: {\n \"message-id\": status.id,\n icon: status.icon,\n message: status.message,\n \"clear-at\": status.clearAt\n },\n on: {\n select: function select($event) {\n return _vm.selectStatus(status);\n }\n }\n });\n }), 1) : _c(\"div\", {\n staticClass: \"predefined-statuses-list\"\n }, [_c(\"div\", {\n staticClass: \"icon icon-loading-small\"\n })]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"NcModal\", {\n attrs: {\n size: \"normal\",\n title: _vm.$t(\"user_status\", \"Set status\")\n },\n on: {\n close: _vm.closeModal\n }\n }, [_c(\"div\", {\n staticClass: \"set-status-modal\"\n }, [_c(\"div\", {\n staticClass: \"set-status-modal__header\"\n }, [_c(\"h2\", [_vm._v(_vm._s(_vm.$t(\"user_status\", \"Online status\")))])]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"set-status-modal__online-status\"\n }, _vm._l(_vm.statuses, function (status) {\n return _c(\"OnlineStatusSelect\", _vm._b({\n key: status.type,\n attrs: {\n checked: status.type === _vm.statusType\n },\n on: {\n select: _vm.changeStatus\n }\n }, \"OnlineStatusSelect\", status, false));\n }), 1), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"set-status-modal__header\"\n }, [_c(\"h2\", [_vm._v(_vm._s(_vm.$t(\"user_status\", \"Status message\")))])]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"set-status-modal__custom-input\"\n }, [_c(\"CustomMessageInput\", {\n ref: \"customMessageInput\",\n attrs: {\n icon: _vm.icon,\n message: _vm.message\n },\n on: {\n change: _vm.setMessage,\n submit: _vm.saveStatus,\n \"select-icon\": _vm.setIcon\n }\n })], 1), _vm._v(\" \"), _c(\"PredefinedStatusesList\", {\n on: {\n \"select-status\": _vm.selectPredefinedMessage\n }\n }), _vm._v(\" \"), _c(\"ClearAtSelect\", {\n attrs: {\n \"clear-at\": _vm.clearAt\n },\n on: {\n \"select-clear-at\": _vm.setClearAt\n }\n }), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"status-buttons\"\n }, [_c(\"NcButton\", {\n attrs: {\n wide: true,\n type: \"tertiary\",\n text: _vm.$t(\"user_status\", \"Clear status message\"),\n disabled: _vm.isSavingStatus\n },\n on: {\n click: _vm.clearStatus\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.$t(\"user_status\", \"Clear status message\")) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcButton\", {\n attrs: {\n wide: true,\n type: \"primary\",\n text: _vm.$t(\"user_status\", \"Set status message\"),\n disabled: _vm.isSavingStatus\n },\n on: {\n click: _vm.saveStatus\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.$t(\"user_status\", \"Set status message\")) + \"\\n\\t\\t\\t\")])], 1)], 1)]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".clear-at-select[data-v-16308054] {\\n display: flex;\\n margin-bottom: 10px;\\n align-items: center;\\n}\\n.clear-at-select__label[data-v-16308054] {\\n margin-right: 12px;\\n}\\n.clear-at-select__select[data-v-16308054] {\\n flex-grow: 1;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".custom-input[data-v-f8ff5dac] {\\n display: flex;\\n width: 100%;\\n}\\n.custom-input__emoji-button[data-v-f8ff5dac] {\\n min-height: 36px;\\n padding: 0;\\n border: 2px solid var(--color-border-maxcontrast);\\n border-right: none;\\n border-radius: var(--border-radius) 0 0 var(--border-radius);\\n}\\n.custom-input__emoji-button[data-v-f8ff5dac]:hover {\\n border-color: var(--color-primary-element);\\n}\\n.custom-input__container[data-v-f8ff5dac] {\\n width: 100%;\\n}\\n.custom-input__container input[data-v-f8ff5dac] {\\n width: 100%;\\n margin: 0;\\n border-radius: 0 var(--border-radius) var(--border-radius) 0;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".user-status-online-select__input[data-v-08b51a17] {\\n position: absolute;\\n top: auto;\\n left: -10000px;\\n overflow: hidden;\\n width: 1px;\\n height: 1px;\\n}\\n.user-status-online-select__label[data-v-08b51a17] {\\n position: relative;\\n display: block;\\n margin: 8px;\\n padding: 8px;\\n padding-left: 40px;\\n border: 2px solid var(--color-main-background);\\n border-radius: var(--border-radius-large);\\n background-color: var(--color-background-hover);\\n background-position: 8px center;\\n background-size: 24px;\\n}\\n.user-status-online-select__label span[data-v-08b51a17], .user-status-online-select__label[data-v-08b51a17] {\\n cursor: pointer;\\n}\\n.user-status-online-select__label span[data-v-08b51a17] {\\n position: absolute;\\n top: calc(50% - 12px);\\n left: 8px;\\n display: block;\\n width: 24px;\\n height: 24px;\\n}\\n.user-status-online-select__input:checked + .user-status-online-select__label[data-v-08b51a17], .user-status-online-select__input:focus + .user-status-online-select__label[data-v-08b51a17], .user-status-online-select__label[data-v-08b51a17]:hover {\\n border-color: var(--color-primary);\\n}\\n.user-status-online-select__label[data-v-08b51a17]:active {\\n border-color: var(--color-border-dark);\\n}\\n.user-status-online-select__subline[data-v-08b51a17] {\\n display: block;\\n color: var(--color-text-lighter);\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"@charset \\\"UTF-8\\\";\\n.predefined-status[data-v-2b4a822e] {\\n display: flex;\\n flex-wrap: nowrap;\\n justify-content: flex-start;\\n flex-basis: 100%;\\n border-radius: var(--border-radius);\\n align-items: center;\\n min-height: 44px;\\n}\\n.predefined-status[data-v-2b4a822e]:hover, .predefined-status[data-v-2b4a822e]:focus {\\n background-color: var(--color-background-hover);\\n}\\n.predefined-status[data-v-2b4a822e]:active {\\n background-color: var(--color-background-dark);\\n}\\n.predefined-status__icon[data-v-2b4a822e] {\\n flex-basis: 40px;\\n text-align: center;\\n}\\n.predefined-status__message[data-v-2b4a822e] {\\n font-weight: bold;\\n padding: 0 6px;\\n}\\n.predefined-status__clear-at[data-v-2b4a822e] {\\n opacity: 0.7;\\n}\\n.predefined-status__clear-at[data-v-2b4a822e]::before {\\n content: \\\" – \\\";\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".predefined-statuses-list[data-v-31790e1a] {\\n display: flex;\\n flex-direction: column;\\n margin-bottom: 10px;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".set-status-modal[data-v-1a4980a2] {\\n padding: 8px 20px 20px 20px;\\n}\\n.set-status-modal__header[data-v-1a4980a2] {\\n text-align: center;\\n font-weight: bold;\\n margin: 15px 0;\\n}\\n.set-status-modal__online-status[data-v-1a4980a2] {\\n display: grid;\\n grid-template-columns: 1fr 1fr;\\n}\\n.set-status-modal__custom-input[data-v-1a4980a2] {\\n display: flex;\\n width: 100%;\\n margin-bottom: 10px;\\n}\\n.set-status-modal .status-buttons[data-v-1a4980a2] {\\n display: flex;\\n padding: 3px;\\n padding-left: 0;\\n gap: 3px;\\n}\\n@media only screen and (max-width: 500px) {\\n.set-status-modal__online-status[data-v-1a4980a2] {\\n grid-template-columns: none !important;\\n}\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ClearAtSelect.vue?vue&type=template&id=16308054&scoped=true&\"\nimport script from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"16308054\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('16308054')) {\n api.createRecord('16308054', component.options)\n } else {\n api.reload('16308054', component.options)\n }\n module.hot.accept(\"./ClearAtSelect.vue?vue&type=template&id=16308054&scoped=true&\", function () {\n api.rerender('16308054', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/user_status/src/components/ClearAtSelect.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./CustomMessageInput.vue?vue&type=template&id=f8ff5dac&scoped=true&\"\nimport script from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f8ff5dac\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('f8ff5dac')) {\n api.createRecord('f8ff5dac', component.options)\n } else {\n api.reload('f8ff5dac', component.options)\n }\n module.hot.accept(\"./CustomMessageInput.vue?vue&type=template&id=f8ff5dac&scoped=true&\", function () {\n api.rerender('f8ff5dac', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/user_status/src/components/CustomMessageInput.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./OnlineStatusSelect.vue?vue&type=template&id=08b51a17&scoped=true&\"\nimport script from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"08b51a17\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('08b51a17')) {\n api.createRecord('08b51a17', component.options)\n } else {\n api.reload('08b51a17', component.options)\n }\n module.hot.accept(\"./OnlineStatusSelect.vue?vue&type=template&id=08b51a17&scoped=true&\", function () {\n api.rerender('08b51a17', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/user_status/src/components/OnlineStatusSelect.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./PredefinedStatus.vue?vue&type=template&id=2b4a822e&scoped=true&\"\nimport script from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2b4a822e\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('2b4a822e')) {\n api.createRecord('2b4a822e', component.options)\n } else {\n api.reload('2b4a822e', component.options)\n }\n module.hot.accept(\"./PredefinedStatus.vue?vue&type=template&id=2b4a822e&scoped=true&\", function () {\n api.rerender('2b4a822e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/user_status/src/components/PredefinedStatus.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./PredefinedStatusesList.vue?vue&type=template&id=31790e1a&scoped=true&\"\nimport script from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"31790e1a\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('31790e1a')) {\n api.createRecord('31790e1a', component.options)\n } else {\n api.reload('31790e1a', component.options)\n }\n module.hot.accept(\"./PredefinedStatusesList.vue?vue&type=template&id=31790e1a&scoped=true&\", function () {\n api.rerender('31790e1a', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/user_status/src/components/PredefinedStatusesList.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./SetStatusModal.vue?vue&type=template&id=1a4980a2&scoped=true&\"\nimport script from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1a4980a2\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('1a4980a2')) {\n api.createRecord('1a4980a2', component.options)\n } else {\n api.reload('1a4980a2', component.options)\n }\n module.hot.accept(\"./SetStatusModal.vue?vue&type=template&id=1a4980a2&scoped=true&\", function () {\n api.rerender('1a4980a2', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/user_status/src/components/SetStatusModal.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=script&lang=js&\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=template&id=16308054&scoped=true&\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=template&id=f8ff5dac&scoped=true&\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=template&id=08b51a17&scoped=true&\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=template&id=2b4a822e&scoped=true&\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=template&id=31790e1a&scoped=true&\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=template&id=1a4980a2&scoped=true&\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=style&index=0&id=16308054&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=style&index=0&id=f8ff5dac&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=style&index=0&id=08b51a17&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=style&index=0&id=2b4a822e&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=style&index=0&id=31790e1a&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=style&index=0&id=1a4980a2&lang=scss&scoped=true&\""],"names":[],"sourceRoot":""} \ No newline at end of file