1 |
- {"version":3,"file":"settings-users-3239.js?v=c72016cce736a055cfc0","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/utils/userUtils.ts","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=style&index=0&id=17dd13c0&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=0e745d5e&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/NewUserModal.vue?vue&type=style&index=0&id=2fe7d69f&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/UserListFooter.vue?vue&type=style&index=0&id=3ec0b16a&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/UserListHeader.vue?vue&type=style&index=0&id=69afa821&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/UserRow.vue?vue&type=style&index=0&id=e297cab8&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/UserSettingsDialog.vue?vue&type=style&index=0&id=ab9299ba&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/Users/VirtualList.vue?vue&type=style&index=0&id=de721376&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/views/UserManagement.vue?vue&type=style&index=0&id=fc8857fc&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/views/UserManagementNavigation.vue?vue&type=style&index=0&id=413f2c9e&prod&scoped=true&lang=scss","webpack://nextcloud/./apps/settings/src/views/UserManagement.vue?4b28","webpack:///nextcloud/node_modules/@vueuse/components/node_modules/vue-demi/lib/index.mjs","webpack:///nextcloud/node_modules/@vueuse/components/index.mjs","webpack:///nextcloud/apps/settings/src/components/Users/VirtualList.vue","webpack:///nextcloud/apps/settings/src/components/Users/VirtualList.vue?vue&type=script&lang=ts","webpack://nextcloud/./apps/settings/src/components/Users/VirtualList.vue?e74c","webpack://nextcloud/./apps/settings/src/components/Users/VirtualList.vue?1915","webpack://nextcloud/./apps/settings/src/components/Users/NewUserModal.vue?6ea8","webpack:///nextcloud/apps/settings/src/components/Users/NewUserModal.vue","webpack:///nextcloud/apps/settings/src/components/Users/NewUserModal.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/Users/NewUserModal.vue?daab","webpack://nextcloud/./apps/settings/src/components/Users/NewUserModal.vue?0748","webpack:///nextcloud/apps/settings/src/components/Users/UserListFooter.vue?vue&type=script&lang=ts","webpack:///nextcloud/apps/settings/src/components/Users/UserListFooter.vue","webpack://nextcloud/./apps/settings/src/components/Users/UserListFooter.vue?2405","webpack://nextcloud/./apps/settings/src/components/Users/UserListFooter.vue?b843","webpack:///nextcloud/apps/settings/src/components/Users/UserListHeader.vue?vue&type=script&lang=ts","webpack:///nextcloud/apps/settings/src/components/Users/UserListHeader.vue","webpack://nextcloud/./apps/settings/src/components/Users/UserListHeader.vue?b533","webpack://nextcloud/./apps/settings/src/components/Users/UserListHeader.vue?758a","webpack://nextcloud/./apps/settings/src/components/Users/UserRow.vue?5434","webpack:///nextcloud/apps/settings/src/components/Users/UserRowActions.vue?vue&type=script&lang=ts","webpack:///nextcloud/apps/settings/src/components/Users/UserRowActions.vue","webpack://nextcloud/./apps/settings/src/components/Users/UserRowActions.vue?3c2a","webpack:///nextcloud/apps/settings/src/mixins/UserRowMixin.js","webpack:///nextcloud/apps/settings/src/components/Users/UserRow.vue","webpack:///nextcloud/apps/settings/src/components/Users/UserRow.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/Users/UserRow.vue?291f","webpack://nextcloud/./apps/settings/src/components/Users/UserRow.vue?eb6e","webpack:///nextcloud/apps/settings/src/components/UserList.vue","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/UserList.vue?b995","webpack://nextcloud/./apps/settings/src/components/UserList.vue?02a4","webpack://nextcloud/./apps/settings/src/components/UserList.vue?c96e","webpack:///nextcloud/apps/settings/src/views/UserManagement.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/settings/src/views/UserManagement.vue","webpack://nextcloud/./apps/settings/src/views/UserManagement.vue?fa13","webpack://nextcloud/./apps/settings/src/views/UserManagement.vue?fd5a","webpack:///nextcloud/apps/settings/src/views/UserManagementNavigation.vue","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/GroupListItem.vue?78a4","webpack://nextcloud/./apps/settings/src/components/GroupListItem.vue?7b19","webpack://nextcloud/./apps/settings/src/components/GroupListItem.vue?9f48","webpack://nextcloud/./apps/settings/src/components/Users/UserSettingsDialog.vue?824e","webpack:///nextcloud/apps/settings/src/components/Users/UserSettingsDialog.vue","webpack:///nextcloud/apps/settings/src/components/Users/UserSettingsDialog.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/Users/UserSettingsDialog.vue?5a70","webpack://nextcloud/./apps/settings/src/components/Users/UserSettingsDialog.vue?f361","webpack:///nextcloud/apps/settings/src/composables/useGroupsNavigation.ts","webpack:///nextcloud/apps/settings/src/views/UserManagementNavigation.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/UserManagementNavigation.vue?e96a","webpack://nextcloud/./apps/settings/src/views/UserManagementNavigation.vue?28b6"],"sourcesContent":["/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.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 */\nexport const unlimitedQuota = {\n id: 'none',\n label: t('settings', 'Unlimited'),\n};\nexport const defaultQuota = {\n id: 'default',\n label: t('settings', 'Default quota'),\n};\n/**\n * Return `true` if the logged in user does not have permissions to view the\n * data of `user`\n * @param user\n * @param user.id\n */\nexport const isObfuscated = (user) => {\n const keys = Object.keys(user);\n return keys.length === 1 && keys.at(0) === 'id';\n};\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.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_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.modal__header[data-v-17dd13c0]{margin:0}.modal__content[data-v-17dd13c0]{display:flex;flex-direction:column;align-items:center;padding:20px;gap:4px 0}.modal__button-row[data-v-17dd13c0]{display:flex;width:100%;justify-content:space-between}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/GroupListItem.vue\"],\"names\":[],\"mappings\":\"AAEC,gCACC,QAAA,CAGD,iCACC,YAAA,CACA,qBAAA,CACA,kBAAA,CACA,YAAA,CACA,SAAA,CAGD,oCACC,YAAA,CACA,UAAA,CACA,6BAAA\",\"sourcesContent\":[\"\\n.modal {\\n\\t&__header {\\n\\t\\tmargin: 0;\\n\\t}\\n\\n\\t&__content {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\talign-items: center;\\n\\t\\tpadding: 20px;\\n\\t\\tgap: 4px 0;\\n\\t}\\n\\n\\t&__button-row {\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\t\\tjustify-content: space-between;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.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_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.empty[data-v-0e745d5e] .icon-vue{width:64px;height:64px}.empty[data-v-0e745d5e] .icon-vue svg{max-width:64px;max-height:64px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList.vue\"],\"names\":[],\"mappings\":\"AAKE,kCACC,UAAA,CACA,WAAA,CAEA,sCACC,cAAA,CACA,eAAA\",\"sourcesContent\":[\"\\n@import './Users/shared/styles.scss';\\n\\n.empty {\\n\\t:deep {\\n\\t\\t.icon-vue {\\n\\t\\t\\twidth: 64px;\\n\\t\\t\\theight: 64px;\\n\\n\\t\\t\\tsvg {\\n\\t\\t\\t\\tmax-width: 64px;\\n\\t\\t\\t\\tmax-height: 64px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.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_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.modal__form[data-v-2fe7d69f]{display:flex;flex-direction:column;align-items:center;padding:20px;gap:4px 0}.modal__item[data-v-2fe7d69f]{width:100%}.modal__item[data-v-2fe7d69f]:not(:focus):not(:active){border-color:var(--color-border-dark)}.modal__hint[data-v-2fe7d69f]{color:var(--color-text-maxcontrast);margin-top:8px;align-self:flex-start}.modal__label[data-v-2fe7d69f]{display:block;padding:4px 0}.modal__select[data-v-2fe7d69f]{width:100%}.modal__submit[data-v-2fe7d69f]{margin-top:20px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/Users/NewUserModal.vue\"],\"names\":[],\"mappings\":\"AAEC,8BACC,YAAA,CACA,qBAAA,CACA,kBAAA,CACA,YAAA,CACA,SAAA,CAGD,8BACC,UAAA,CAEA,uDACC,qCAAA,CAIF,8BACC,mCAAA,CACA,cAAA,CACA,qBAAA,CAGD,+BACC,aAAA,CACA,aAAA,CAGD,gCACC,UAAA,CAGD,gCACC,eAAA\",\"sourcesContent\":[\"\\n.modal {\\n\\t&__form {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\talign-items: center;\\n\\t\\tpadding: 20px;\\n\\t\\tgap: 4px 0;\\n\\t}\\n\\n\\t&__item {\\n\\t\\twidth: 100%;\\n\\n\\t\\t&:not(:focus):not(:active) {\\n\\t\\t\\tborder-color: var(--color-border-dark);\\n\\t\\t}\\n\\t}\\n\\n\\t&__hint {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tmargin-top: 8px;\\n\\t\\talign-self: flex-start;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: block;\\n\\t\\tpadding: 4px 0;\\n\\t}\\n\\n\\t&__select {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t&__submit {\\n\\t\\tmargin-top: 20px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.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_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.footer[data-v-3ec0b16a]{position:relative;display:flex;min-width:100%;width:fit-content;height:var(--row-height);background-color:var(--color-main-background)}.footer__cell[data-v-3ec0b16a]{display:flex;flex-direction:column;justify-content:center;padding:0 var(--cell-padding);min-width:var(--cell-width);width:var(--cell-width);color:var(--color-main-text)}.footer__cell strong[data-v-3ec0b16a],.footer__cell span[data-v-3ec0b16a],.footer__cell label[data-v-3ec0b16a]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;overflow-wrap:anywhere}@media(min-width: 670px){.footer__cell--avatar[data-v-3ec0b16a],.footer__cell--displayname[data-v-3ec0b16a]{position:sticky;z-index:var(--sticky-column-z-index);background-color:var(--color-main-background)}.footer__cell--avatar[data-v-3ec0b16a]{left:0}.footer__cell--displayname[data-v-3ec0b16a]{left:var(--avatar-cell-width);border-right:1px solid var(--color-border)}}.footer__cell--avatar[data-v-3ec0b16a]{min-width:var(--avatar-cell-width);width:var(--avatar-cell-width);align-items:center;padding:0;user-select:none}.footer__cell--multiline span[data-v-3ec0b16a]{line-height:1.3em;white-space:unset}@supports(-webkit-line-clamp: 2){.footer__cell--multiline span[data-v-3ec0b16a]{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.footer__cell--large[data-v-3ec0b16a]{min-width:var(--cell-width-large);width:var(--cell-width-large)}.footer__cell--obfuscated[data-v-3ec0b16a]{min-width:400px;width:400px}.footer__cell--fill[data-v-3ec0b16a]{min-width:var(--cell-width-large);width:100%}.footer__cell--actions[data-v-3ec0b16a]{position:sticky;right:0;z-index:var(--sticky-column-z-index);display:flex;flex-direction:row;align-items:center;min-width:110px;width:110px;background-color:var(--color-main-background);border-left:1px solid var(--color-border)}.footer__subtitle[data-v-3ec0b16a]{color:var(--color-text-maxcontrast)}.footer__cell[data-v-3ec0b16a]{position:sticky;color:var(--color-text-maxcontrast)}.footer__cell--loading[data-v-3ec0b16a]{left:0;min-width:var(--avatar-cell-width);width:var(--avatar-cell-width);align-items:center;padding:0}.footer__cell--count[data-v-3ec0b16a]{left:var(--avatar-cell-width);min-width:var(--cell-width);width:var(--cell-width)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/Users/UserListFooter.vue\",\"webpack://./apps/settings/src/components/Users/shared/styles.scss\"],\"names\":[],\"mappings\":\"AAGA,yBCoBC,iBAAA,CACA,YAAA,CACA,cAAA,CACA,iBAAA,CACA,wBAAA,CACA,6CAAA,CAIA,+BACC,YAAA,CACA,qBAAA,CACA,sBAAA,CACA,6BAAA,CACA,2BAAA,CACA,uBAAA,CACA,4BAAA,CAEA,+GAGC,eAAA,CACA,sBAAA,CACA,kBAAA,CACA,sBAAA,CAGD,yBACC,mFAEC,eAAA,CACA,oCAAA,CACA,6CAAA,CAGD,uCACC,MAAA,CAGD,4CACC,6BAAA,CACA,0CAAA,CAAA,CAIF,uCACC,kCAAA,CACA,8BAAA,CACA,kBAAA,CACA,SAAA,CACA,gBAAA,CAIA,+CACC,iBAAA,CACA,iBAAA,CAEA,iCAJD,+CAKE,mBAAA,CACA,oBAAA,CACA,2BAAA,CAAA,CAKH,sCACC,iCAAA,CACA,6BAAA,CAGD,2CACC,eAAA,CACA,WAAA,CAID,qCACC,iCAAA,CACA,UAAA,CAGD,wCACC,eAAA,CACA,OAAA,CACA,oCAAA,CACA,YAAA,CACA,kBAAA,CACA,kBAAA,CACA,eAAA,CACA,WAAA,CACA,6CAAA,CACA,yCAAA,CAIF,mCACC,mCAAA,CDjHD,+BACC,eAAA,CACA,mCAAA,CAEA,wCACC,MAAA,CACA,kCAAA,CACA,8BAAA,CACA,kBAAA,CACA,SAAA,CAGD,sCACC,6BAAA,CACA,2BAAA,CACA,uBAAA\",\"sourcesContent\":[\"\\n@import './shared/styles.scss';\\n\\n.footer {\\n\\t@include row;\\n\\t@include cell;\\n\\n\\t&__cell {\\n\\t\\tposition: sticky;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\n\\t\\t&--loading {\\n\\t\\t\\tleft: 0;\\n\\t\\t\\tmin-width: var(--avatar-cell-width);\\n\\t\\t\\twidth: var(--avatar-cell-width);\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\n\\t\\t&--count {\\n\\t\\t\\tleft: var(--avatar-cell-width);\\n\\t\\t\\tmin-width: var(--cell-width);\\n\\t\\t\\twidth: var(--cell-width);\\n\\t\\t}\\n\\t}\\n}\\n\",\"/**\\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.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\\n@mixin row {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\tmin-width: 100%;\\n\\twidth: fit-content;\\n\\theight: var(--row-height);\\n\\tbackground-color: var(--color-main-background);\\n}\\n\\n@mixin cell {\\n\\t&__cell {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: center;\\n\\t\\tpadding: 0 var(--cell-padding);\\n\\t\\tmin-width: var(--cell-width);\\n\\t\\twidth: var(--cell-width);\\n\\t\\tcolor: var(--color-main-text);\\n\\n\\t\\tstrong,\\n\\t\\tspan,\\n\\t\\tlabel {\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\toverflow-wrap: anywhere;\\n\\t\\t}\\n\\n\\t\\t@media (min-width: 670px) { /* Show one &--large column between stickied columns */\\n\\t\\t\\t&--avatar,\\n\\t\\t\\t&--displayname {\\n\\t\\t\\t\\tposition: sticky;\\n\\t\\t\\t\\tz-index: var(--sticky-column-z-index);\\n\\t\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t\\t}\\n\\n\\t\\t\\t&--avatar {\\n\\t\\t\\t\\tleft: 0;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&--displayname {\\n\\t\\t\\t\\tleft: var(--avatar-cell-width);\\n\\t\\t\\t\\tborder-right: 1px solid var(--color-border);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&--avatar {\\n\\t\\t\\tmin-width: var(--avatar-cell-width);\\n\\t\\t\\twidth: var(--avatar-cell-width);\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&--multiline {\\n\\t\\t\\tspan {\\n\\t\\t\\t\\tline-height: 1.3em;\\n\\t\\t\\t\\twhite-space: unset;\\n\\n\\t\\t\\t\\t@supports (-webkit-line-clamp: 2) {\\n\\t\\t\\t\\t\\tdisplay: -webkit-box;\\n\\t\\t\\t\\t\\t-webkit-line-clamp: 2;\\n\\t\\t\\t\\t\\t-webkit-box-orient: vertical;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&--large {\\n\\t\\t\\tmin-width: var(--cell-width-large);\\n\\t\\t\\twidth: var(--cell-width-large);\\n\\t\\t}\\n\\n\\t\\t&--obfuscated {\\n\\t\\t\\tmin-width: 400px;\\n\\t\\t\\twidth: 400px;\\n\\t\\t}\\n\\n\\t\\t// Fill remaining row space with cell\\n\\t\\t&--fill {\\n\\t\\t\\tmin-width: var(--cell-width-large);\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\n\\t\\t&--actions {\\n\\t\\t\\tposition: sticky;\\n\\t\\t\\tright: 0;\\n\\t\\t\\tz-index: var(--sticky-column-z-index);\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: row;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tmin-width: 110px;\\n\\t\\t\\twidth: 110px;\\n\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t\\tborder-left: 1px solid var(--color-border);\\n\\t\\t}\\n\\t}\\n\\n\\t&__subtitle {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.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_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.header[data-v-69afa821]{position:relative;display:flex;min-width:100%;width:fit-content;height:var(--row-height);background-color:var(--color-main-background);border-bottom:1px solid var(--color-border)}.header__cell[data-v-69afa821]{display:flex;flex-direction:column;justify-content:center;padding:0 var(--cell-padding);min-width:var(--cell-width);width:var(--cell-width);color:var(--color-main-text)}.header__cell strong[data-v-69afa821],.header__cell span[data-v-69afa821],.header__cell label[data-v-69afa821]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;overflow-wrap:anywhere}@media(min-width: 670px){.header__cell--avatar[data-v-69afa821],.header__cell--displayname[data-v-69afa821]{position:sticky;z-index:var(--sticky-column-z-index);background-color:var(--color-main-background)}.header__cell--avatar[data-v-69afa821]{left:0}.header__cell--displayname[data-v-69afa821]{left:var(--avatar-cell-width);border-right:1px solid var(--color-border)}}.header__cell--avatar[data-v-69afa821]{min-width:var(--avatar-cell-width);width:var(--avatar-cell-width);align-items:center;padding:0;user-select:none}.header__cell--multiline span[data-v-69afa821]{line-height:1.3em;white-space:unset}@supports(-webkit-line-clamp: 2){.header__cell--multiline span[data-v-69afa821]{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.header__cell--large[data-v-69afa821]{min-width:var(--cell-width-large);width:var(--cell-width-large)}.header__cell--obfuscated[data-v-69afa821]{min-width:400px;width:400px}.header__cell--fill[data-v-69afa821]{min-width:var(--cell-width-large);width:100%}.header__cell--actions[data-v-69afa821]{position:sticky;right:0;z-index:var(--sticky-column-z-index);display:flex;flex-direction:row;align-items:center;min-width:110px;width:110px;background-color:var(--color-main-background);border-left:1px solid var(--color-border)}.header__subtitle[data-v-69afa821]{color:var(--color-text-maxcontrast)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/Users/UserListHeader.vue\",\"webpack://./apps/settings/src/components/Users/shared/styles.scss\"],\"names\":[],\"mappings\":\"AAGA,yBCoBC,iBAAA,CACA,YAAA,CACA,cAAA,CACA,iBAAA,CACA,wBAAA,CACA,6CAAA,CDrBA,2CAAA,CCyBA,+BACC,YAAA,CACA,qBAAA,CACA,sBAAA,CACA,6BAAA,CACA,2BAAA,CACA,uBAAA,CACA,4BAAA,CAEA,+GAGC,eAAA,CACA,sBAAA,CACA,kBAAA,CACA,sBAAA,CAGD,yBACC,mFAEC,eAAA,CACA,oCAAA,CACA,6CAAA,CAGD,uCACC,MAAA,CAGD,4CACC,6BAAA,CACA,0CAAA,CAAA,CAIF,uCACC,kCAAA,CACA,8BAAA,CACA,kBAAA,CACA,SAAA,CACA,gBAAA,CAIA,+CACC,iBAAA,CACA,iBAAA,CAEA,iCAJD,+CAKE,mBAAA,CACA,oBAAA,CACA,2BAAA,CAAA,CAKH,sCACC,iCAAA,CACA,6BAAA,CAGD,2CACC,eAAA,CACA,WAAA,CAID,qCACC,iCAAA,CACA,UAAA,CAGD,wCACC,eAAA,CACA,OAAA,CACA,oCAAA,CACA,YAAA,CACA,kBAAA,CACA,kBAAA,CACA,eAAA,CACA,WAAA,CACA,6CAAA,CACA,yCAAA,CAIF,mCACC,mCAAA\",\"sourcesContent\":[\"\\n@import './shared/styles.scss';\\n\\n.header {\\n\\t@include row;\\n\\t@include cell;\\n\\n\\tborder-bottom: 1px solid var(--color-border);\\n}\\n\",\"/**\\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.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\\n@mixin row {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\tmin-width: 100%;\\n\\twidth: fit-content;\\n\\theight: var(--row-height);\\n\\tbackground-color: var(--color-main-background);\\n}\\n\\n@mixin cell {\\n\\t&__cell {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: center;\\n\\t\\tpadding: 0 var(--cell-padding);\\n\\t\\tmin-width: var(--cell-width);\\n\\t\\twidth: var(--cell-width);\\n\\t\\tcolor: var(--color-main-text);\\n\\n\\t\\tstrong,\\n\\t\\tspan,\\n\\t\\tlabel {\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\toverflow-wrap: anywhere;\\n\\t\\t}\\n\\n\\t\\t@media (min-width: 670px) { /* Show one &--large column between stickied columns */\\n\\t\\t\\t&--avatar,\\n\\t\\t\\t&--displayname {\\n\\t\\t\\t\\tposition: sticky;\\n\\t\\t\\t\\tz-index: var(--sticky-column-z-index);\\n\\t\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t\\t}\\n\\n\\t\\t\\t&--avatar {\\n\\t\\t\\t\\tleft: 0;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&--displayname {\\n\\t\\t\\t\\tleft: var(--avatar-cell-width);\\n\\t\\t\\t\\tborder-right: 1px solid var(--color-border);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&--avatar {\\n\\t\\t\\tmin-width: var(--avatar-cell-width);\\n\\t\\t\\twidth: var(--avatar-cell-width);\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&--multiline {\\n\\t\\t\\tspan {\\n\\t\\t\\t\\tline-height: 1.3em;\\n\\t\\t\\t\\twhite-space: unset;\\n\\n\\t\\t\\t\\t@supports (-webkit-line-clamp: 2) {\\n\\t\\t\\t\\t\\tdisplay: -webkit-box;\\n\\t\\t\\t\\t\\t-webkit-line-clamp: 2;\\n\\t\\t\\t\\t\\t-webkit-box-orient: vertical;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&--large {\\n\\t\\t\\tmin-width: var(--cell-width-large);\\n\\t\\t\\twidth: var(--cell-width-large);\\n\\t\\t}\\n\\n\\t\\t&--obfuscated {\\n\\t\\t\\tmin-width: 400px;\\n\\t\\t\\twidth: 400px;\\n\\t\\t}\\n\\n\\t\\t// Fill remaining row space with cell\\n\\t\\t&--fill {\\n\\t\\t\\tmin-width: var(--cell-width-large);\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\n\\t\\t&--actions {\\n\\t\\t\\tposition: sticky;\\n\\t\\t\\tright: 0;\\n\\t\\t\\tz-index: var(--sticky-column-z-index);\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: row;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tmin-width: 110px;\\n\\t\\t\\twidth: 110px;\\n\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t\\tborder-left: 1px solid var(--color-border);\\n\\t\\t}\\n\\t}\\n\\n\\t&__subtitle {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.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_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.user-list__row[data-v-e297cab8]{position:relative;display:flex;min-width:100%;width:fit-content;height:var(--row-height);background-color:var(--color-main-background)}.user-list__row[data-v-e297cab8]:hover{background-color:var(--color-background-hover)}.user-list__row:hover .row__cell[data-v-e297cab8]:not(.row__cell--actions){background-color:var(--color-background-hover)}.user-list__row .select--fill[data-v-e297cab8]{max-width:calc(var(--cell-width-large) - 2*var(--cell-padding))}.row__cell[data-v-e297cab8]{display:flex;flex-direction:column;justify-content:center;padding:0 var(--cell-padding);min-width:var(--cell-width);width:var(--cell-width);color:var(--color-main-text)}.row__cell strong[data-v-e297cab8],.row__cell span[data-v-e297cab8],.row__cell label[data-v-e297cab8]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;overflow-wrap:anywhere}@media(min-width: 670px){.row__cell--avatar[data-v-e297cab8],.row__cell--displayname[data-v-e297cab8]{position:sticky;z-index:var(--sticky-column-z-index);background-color:var(--color-main-background)}.row__cell--avatar[data-v-e297cab8]{left:0}.row__cell--displayname[data-v-e297cab8]{left:var(--avatar-cell-width);border-right:1px solid var(--color-border)}}.row__cell--avatar[data-v-e297cab8]{min-width:var(--avatar-cell-width);width:var(--avatar-cell-width);align-items:center;padding:0;user-select:none}.row__cell--multiline span[data-v-e297cab8]{line-height:1.3em;white-space:unset}@supports(-webkit-line-clamp: 2){.row__cell--multiline span[data-v-e297cab8]{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.row__cell--large[data-v-e297cab8]{min-width:var(--cell-width-large);width:var(--cell-width-large)}.row__cell--obfuscated[data-v-e297cab8]{min-width:400px;width:400px}.row__cell--fill[data-v-e297cab8]{min-width:var(--cell-width-large);width:100%}.row__cell--actions[data-v-e297cab8]{position:sticky;right:0;z-index:var(--sticky-column-z-index);display:flex;flex-direction:row;align-items:center;min-width:110px;width:110px;background-color:var(--color-main-background);border-left:1px solid var(--color-border)}.row__subtitle[data-v-e297cab8]{color:var(--color-text-maxcontrast)}.row__cell[data-v-e297cab8]{border-bottom:1px solid var(--color-border)}.row__cell[data-v-e297cab8] .v-select.select{min-width:var(--cell-min-width)}.row__progress[data-v-e297cab8]{margin-top:4px}.row__progress--warn[data-v-e297cab8]::-moz-progress-bar{background:var(--color-warning) !important}.row__progress--warn[data-v-e297cab8]::-webkit-progress-value{background:var(--color-warning) !important}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/Users/UserRow.vue\",\"webpack://./apps/settings/src/components/Users/shared/styles.scss\"],\"names\":[],\"mappings\":\"AAGA,iCCoBC,iBAAA,CACA,YAAA,CACA,cAAA,CACA,iBAAA,CACA,wBAAA,CACA,6CAAA,CDtBA,uCACC,8CAAA,CAEA,2EACC,8CAAA,CAKF,+CACC,+DAAA,CCgBD,4BACC,YAAA,CACA,qBAAA,CACA,sBAAA,CACA,6BAAA,CACA,2BAAA,CACA,uBAAA,CACA,4BAAA,CAEA,sGAGC,eAAA,CACA,sBAAA,CACA,kBAAA,CACA,sBAAA,CAGD,yBACC,6EAEC,eAAA,CACA,oCAAA,CACA,6CAAA,CAGD,oCACC,MAAA,CAGD,yCACC,6BAAA,CACA,0CAAA,CAAA,CAIF,oCACC,kCAAA,CACA,8BAAA,CACA,kBAAA,CACA,SAAA,CACA,gBAAA,CAIA,4CACC,iBAAA,CACA,iBAAA,CAEA,iCAJD,4CAKE,mBAAA,CACA,oBAAA,CACA,2BAAA,CAAA,CAKH,mCACC,iCAAA,CACA,6BAAA,CAGD,wCACC,eAAA,CACA,WAAA,CAID,kCACC,iCAAA,CACA,UAAA,CAGD,qCACC,eAAA,CACA,OAAA,CACA,oCAAA,CACA,YAAA,CACA,kBAAA,CACA,kBAAA,CACA,eAAA,CACA,WAAA,CACA,6CAAA,CACA,yCAAA,CAIF,gCACC,mCAAA,CDjGD,4BACC,2CAAA,CAGC,6CACC,+BAAA,CAKH,gCACC,cAAA,CAGC,yDACC,0CAAA,CAED,8DACC,0CAAA\",\"sourcesContent\":[\"\\n@import './shared/styles.scss';\\n\\n.user-list__row {\\n\\t@include row;\\n\\n\\t&:hover {\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\n\\t\\t.row__cell:not(.row__cell--actions) {\\n\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t}\\n\\t}\\n\\n\\t// Limit width of select in fill cell\\n\\t.select--fill {\\n\\t\\tmax-width: calc(var(--cell-width-large) - (2 * var(--cell-padding)));\\n\\t}\\n}\\n\\n.row {\\n\\t@include cell;\\n\\n\\t&__cell {\\n\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\n\\t\\t:deep {\\n\\t\\t\\t.v-select.select {\\n\\t\\t\\t\\tmin-width: var(--cell-min-width);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__progress {\\n\\t\\tmargin-top: 4px;\\n\\n\\t\\t&--warn {\\n\\t\\t\\t&::-moz-progress-bar {\\n\\t\\t\\t\\tbackground: var(--color-warning) !important;\\n\\t\\t\\t}\\n\\t\\t\\t&::-webkit-progress-value {\\n\\t\\t\\t\\tbackground: var(--color-warning) !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\",\"/**\\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.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\\n@mixin row {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\tmin-width: 100%;\\n\\twidth: fit-content;\\n\\theight: var(--row-height);\\n\\tbackground-color: var(--color-main-background);\\n}\\n\\n@mixin cell {\\n\\t&__cell {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: center;\\n\\t\\tpadding: 0 var(--cell-padding);\\n\\t\\tmin-width: var(--cell-width);\\n\\t\\twidth: var(--cell-width);\\n\\t\\tcolor: var(--color-main-text);\\n\\n\\t\\tstrong,\\n\\t\\tspan,\\n\\t\\tlabel {\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\toverflow-wrap: anywhere;\\n\\t\\t}\\n\\n\\t\\t@media (min-width: 670px) { /* Show one &--large column between stickied columns */\\n\\t\\t\\t&--avatar,\\n\\t\\t\\t&--displayname {\\n\\t\\t\\t\\tposition: sticky;\\n\\t\\t\\t\\tz-index: var(--sticky-column-z-index);\\n\\t\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t\\t}\\n\\n\\t\\t\\t&--avatar {\\n\\t\\t\\t\\tleft: 0;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&--displayname {\\n\\t\\t\\t\\tleft: var(--avatar-cell-width);\\n\\t\\t\\t\\tborder-right: 1px solid var(--color-border);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&--avatar {\\n\\t\\t\\tmin-width: var(--avatar-cell-width);\\n\\t\\t\\twidth: var(--avatar-cell-width);\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&--multiline {\\n\\t\\t\\tspan {\\n\\t\\t\\t\\tline-height: 1.3em;\\n\\t\\t\\t\\twhite-space: unset;\\n\\n\\t\\t\\t\\t@supports (-webkit-line-clamp: 2) {\\n\\t\\t\\t\\t\\tdisplay: -webkit-box;\\n\\t\\t\\t\\t\\t-webkit-line-clamp: 2;\\n\\t\\t\\t\\t\\t-webkit-box-orient: vertical;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&--large {\\n\\t\\t\\tmin-width: var(--cell-width-large);\\n\\t\\t\\twidth: var(--cell-width-large);\\n\\t\\t}\\n\\n\\t\\t&--obfuscated {\\n\\t\\t\\tmin-width: 400px;\\n\\t\\t\\twidth: 400px;\\n\\t\\t}\\n\\n\\t\\t// Fill remaining row space with cell\\n\\t\\t&--fill {\\n\\t\\t\\tmin-width: var(--cell-width-large);\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\n\\t\\t&--actions {\\n\\t\\t\\tposition: sticky;\\n\\t\\t\\tright: 0;\\n\\t\\t\\tz-index: var(--sticky-column-z-index);\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-direction: row;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tmin-width: 110px;\\n\\t\\t\\twidth: 110px;\\n\\t\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t\\tborder-left: 1px solid var(--color-border);\\n\\t\\t}\\n\\t}\\n\\n\\t&__subtitle {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.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_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `fieldset[data-v-ab9299ba]{font-weight:bold}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/Users/UserSettingsDialog.vue\"],\"names\":[],\"mappings\":\"AACA,0BACC,gBAAA\",\"sourcesContent\":[\"\\nfieldset {\\n\\tfont-weight: bold;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.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_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.user-list[data-v-de721376]{--avatar-cell-width: 48px;--cell-padding: 7px;--cell-width: 200px;--cell-width-large: 300px;--cell-min-width: calc(var(--cell-width) - (2 * var(--cell-padding)));--sticky-column-z-index: calc(var(--vs-dropdown-z-index) + 1);display:block;overflow:auto;height:100%}.user-list__header[data-v-de721376],.user-list__footer[data-v-de721376]{position:sticky;display:block}.user-list__header[data-v-de721376]{top:0;z-index:calc(var(--sticky-column-z-index) + 1)}.user-list__footer[data-v-de721376]{left:0}.user-list__body[data-v-de721376]{display:flex;flex-direction:column;width:100%}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/Users/VirtualList.vue\"],\"names\":[],\"mappings\":\"AACA,4BACC,yBAAA,CACA,mBAAA,CACA,mBAAA,CACA,yBAAA,CACA,qEAAA,CACA,6DAAA,CAGA,aAAA,CACA,aAAA,CACA,WAAA,CAEA,wEAEC,eAAA,CAEA,aAAA,CAGD,oCACC,KAAA,CACA,8CAAA,CAGD,oCACC,MAAA,CAGD,kCACC,YAAA,CACA,qBAAA,CACA,UAAA\",\"sourcesContent\":[\"\\n.user-list {\\n\\t--avatar-cell-width: 48px;\\n\\t--cell-padding: 7px;\\n\\t--cell-width: 200px;\\n\\t--cell-width-large: 300px;\\n\\t--cell-min-width: calc(var(--cell-width) - (2 * var(--cell-padding)));\\n\\t--sticky-column-z-index: calc(var(--vs-dropdown-z-index) + 1); // Keep the sticky column on top of the select dropdown\\n\\n\\t// Necessary for virtual scroll optimized rendering\\n\\tdisplay: block;\\n\\toverflow: auto;\\n\\theight: 100%;\\n\\n\\t&__header,\\n\\t&__footer {\\n\\t\\tposition: sticky;\\n\\t\\t// Fix sticky positioning in Firefox\\n\\t\\tdisplay: block;\\n\\t}\\n\\n\\t&__header {\\n\\t\\ttop: 0;\\n\\t\\tz-index: calc(var(--sticky-column-z-index) + 1);\\n\\t}\\n\\n\\t&__footer {\\n\\t\\tleft: 0;\\n\\t}\\n\\n\\t&__body {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\twidth: 100%;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.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_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-content[data-v-fc8857fc]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/UserManagement.vue\"],\"names\":[],\"mappings\":\"AACA,8BAEC,YAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA\",\"sourcesContent\":[\"\\n.app-content {\\n\\t// Virtual list needs to be full height and is scrollable\\n\\tdisplay: flex;\\n\\toverflow: hidden;\\n\\tflex-direction: column;\\n\\tmax-height: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.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_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.account-management__system-list[data-v-413f2c9e]{height:auto !important;overflow:visible !important}.account-management__group-list[data-v-413f2c9e]{height:100% !important}.account-management__settings-toggle[data-v-413f2c9e]{margin-bottom:12px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/UserManagementNavigation.vue\"],\"names\":[],\"mappings\":\"AAEC,kDACC,sBAAA,CACA,2BAAA,CAGD,iDACC,sBAAA,CAGD,sDACC,kBAAA\",\"sourcesContent\":[\"\\n.account-management{\\n\\t&__system-list {\\n\\t\\theight: auto !important;\\n\\t\\toverflow: visible !important;\\n\\t}\\n\\n\\t&__group-list {\\n\\t\\theight: 100% !important;\\n\\t}\\n\\n\\t&__settings-toggle {\\n\\t\\tmargin-bottom: 12px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcAppContent',{attrs:{\"page-heading\":_vm.pageHeading}},[_c('UserList',{attrs:{\"selected-group\":_vm.selectedGroupDecoded,\"external-actions\":_vm.externalActions}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Vue from 'vue'\nimport { getCurrentInstance } from 'vue'\n\nvar isVue2 = true\nvar isVue3 = false\nvar Vue2 = Vue\nvar warn = Vue.util.warn\n\nfunction install() {}\n\n// createApp polyfill\nexport function createApp(rootComponent, rootProps) {\n var vm\n var provide = {}\n var app = {\n config: Vue.config,\n use: Vue.use.bind(Vue),\n mixin: Vue.mixin.bind(Vue),\n component: Vue.component.bind(Vue),\n provide: function (key, value) {\n provide[key] = value\n return this\n },\n directive: function (name, dir) {\n if (dir) {\n Vue.directive(name, dir)\n return app\n } else {\n return Vue.directive(name)\n }\n },\n mount: function (el, hydrating) {\n if (!vm) {\n vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))\n vm.$mount(el, hydrating)\n return vm\n } else {\n return vm\n }\n },\n unmount: function () {\n if (vm) {\n vm.$destroy()\n vm = undefined\n }\n },\n }\n return app\n}\n\nexport {\n Vue,\n Vue2,\n isVue2,\n isVue3,\n install,\n warn\n}\n\n// Vue 3 components mock\nfunction createMockComponent(name) {\n return {\n setup() {\n throw new Error('[vue-demi] ' + name + ' is not supported in Vue 2. It\\'s provided to avoid compiler errors.')\n }\n }\n}\nexport var Fragment = /*#__PURE__*/ createMockComponent('Fragment')\nexport var Transition = /*#__PURE__*/ createMockComponent('Transition')\nexport var TransitionGroup = /*#__PURE__*/ createMockComponent('TransitionGroup')\nexport var Teleport = /*#__PURE__*/ createMockComponent('Teleport')\nexport var Suspense = /*#__PURE__*/ createMockComponent('Suspense')\nexport var KeepAlive = /*#__PURE__*/ createMockComponent('KeepAlive')\n\nexport * from 'vue'\n\n// Not implemented https://github.com/vuejs/core/pull/8111, falls back to getCurrentInstance()\nexport function hasInjectionContext() {\n return !!getCurrentInstance()\n}\n","import { defineComponent, ref, h, watch, computed, reactive, shallowRef, nextTick, getCurrentInstance, onMounted, isVue2, watchEffect, toRefs } from 'vue-demi';\nimport { onClickOutside as onClickOutside$1, useActiveElement, useBattery, useBrowserLocation, useClipboard, useDark, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDocumentVisibility, useStorage as useStorage$1, isClient as isClient$1, useDraggable, useElementBounding, useElementSize as useElementSize$1, useElementVisibility as useElementVisibility$1, useEyeDropper, useFullscreen, useGeolocation, useIdle, useMouse, useMouseInElement, useMousePressed, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, usePointer, usePointerLock, usePreferredColorScheme, usePreferredContrast, usePreferredDark as usePreferredDark$1, usePreferredLanguages, usePreferredReducedMotion, useTimeAgo, useTimestamp, useVirtualList, useWindowFocus, useWindowSize } from '@vueuse/core';\nimport { toValue, isClient, noop, isObject, tryOnScopeDispose, isIOS, directiveHooks, pausableWatch, tryOnMounted, toRef, useToggle, notNullish, promiseTimeout, until, useDebounceFn, useThrottleFn } from '@vueuse/shared';\n\nconst OnClickOutside = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"OnClickOutside\",\n props: [\"as\", \"options\"],\n emits: [\"trigger\"],\n setup(props, { slots, emit }) {\n const target = ref();\n onClickOutside$1(target, (e) => {\n emit(\"trigger\", e);\n }, props.options);\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default());\n };\n }\n});\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = toValue(elRef);\n return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\n\nfunction useEventListener(...args) {\n let target;\n let events;\n let listeners;\n let options;\n if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n [events, listeners, options] = args;\n target = defaultWindow;\n } else {\n [target, events, listeners, options] = args;\n }\n if (!target)\n return noop;\n if (!Array.isArray(events))\n events = [events];\n if (!Array.isArray(listeners))\n listeners = [listeners];\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options2) => {\n el.addEventListener(event, listener, options2);\n return () => el.removeEventListener(event, listener, options2);\n };\n const stopWatch = watch(\n () => [unrefElement(target), toValue(options)],\n ([el, options2]) => {\n cleanup();\n if (!el)\n return;\n const optionsClone = isObject(options2) ? { ...options2 } : options2;\n cleanups.push(\n ...events.flatMap((event) => {\n return listeners.map((listener) => register(el, event, listener, optionsClone));\n })\n );\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n if (!window)\n return noop;\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n window.document.documentElement.addEventListener(\"click\", noop);\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return ignore.some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n const listener = (event) => {\n const el = unrefElement(target);\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n const cleanup = [\n useEventListener(window, \"click\", listener, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n setTimeout(() => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement))) {\n handler(event);\n }\n }, 0);\n })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nconst vOnClickOutside = {\n [directiveHooks.mounted](el, binding) {\n const capture = !binding.modifiers.bubble;\n if (typeof binding.value === \"function\") {\n el.__onClickOutside_stop = onClickOutside(el, binding.value, { capture });\n } else {\n const [handler, options] = binding.value;\n el.__onClickOutside_stop = onClickOutside(el, handler, Object.assign({ capture }, options));\n }\n },\n [directiveHooks.unmounted](el) {\n el.__onClickOutside_stop();\n }\n};\n\nfunction createKeyPredicate(keyFilter) {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n}\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const {\n target = defaultWindow,\n eventName = \"keydown\",\n passive = false,\n dedupe = false\n } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (e.repeat && toValue(dedupe))\n return;\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\n\nconst vOnKeyStroke = {\n [directiveHooks.mounted](el, binding) {\n var _a, _b;\n const keys = (_b = (_a = binding.arg) == null ? void 0 : _a.split(\",\")) != null ? _b : true;\n if (typeof binding.value === \"function\") {\n onKeyStroke(keys, binding.value, {\n target: el\n });\n } else {\n const [handler, options] = binding.value;\n onKeyStroke(keys, handler, {\n target: el,\n ...options\n });\n }\n }\n};\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n let posStart;\n let startTimestamp;\n let hasLongPressed = false;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = void 0;\n }\n posStart = void 0;\n startTimestamp = void 0;\n hasLongPressed = false;\n }\n function onRelease(ev) {\n var _a2, _b2, _c;\n const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n clear();\n if (!(options == null ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp)\n return;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - _posStart.x;\n const dy = ev.y - _posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n posStart = {\n x: ev.x,\n y: ev.y\n };\n startTimestamp = ev.timeStamp;\n timeout = setTimeout(\n () => {\n hasLongPressed = true;\n handler(ev);\n },\n (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n );\n }\n function onMove(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n return;\n if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n return;\n if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - posStart.x;\n const dy = ev.y - posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n clear();\n }\n const listenerOptions = {\n capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n };\n const cleanup = [\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n ];\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nconst OnLongPress = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"OnLongPress\",\n props: [\"as\", \"options\"],\n emits: [\"trigger\"],\n setup(props, { slots, emit }) {\n const target = ref();\n onLongPress(\n target,\n (e) => {\n emit(\"trigger\", e);\n },\n props.options\n );\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default());\n };\n }\n});\n\nconst vOnLongPress = {\n [directiveHooks.mounted](el, binding) {\n if (typeof binding.value === \"function\")\n onLongPress(el, binding.value, { modifiers: binding.modifiers });\n else\n onLongPress(el, ...binding.value);\n }\n};\n\nconst UseActiveElement = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseActiveElement\",\n setup(props, { slots }) {\n const data = reactive({\n element: useActiveElement()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseBattery = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseBattery\",\n setup(props, { slots }) {\n const data = reactive(useBattery(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseBrowserLocation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseBrowserLocation\",\n setup(props, { slots }) {\n const data = reactive(useBrowserLocation());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseClipboard = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseClipboard\",\n props: [\n \"source\",\n \"read\",\n \"navigator\",\n \"copiedDuring\",\n \"legacy\"\n ],\n setup(props, { slots }) {\n const data = reactive(useClipboard(props));\n return () => {\n var _a;\n return (_a = slots.default) == null ? void 0 : _a.call(slots, data);\n };\n }\n});\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n if (!(globalKey in _global))\n _global[globalKey] = _global[globalKey] || {};\n return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n },\n initOnMounted\n } = options;\n const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = toValue(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n data,\n () => write(data.value),\n { flush, deep, eventFilter }\n );\n if (window && listenToStorageChanges) {\n tryOnMounted(() => {\n useEventListener(window, \"storage\", update);\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n if (initOnMounted)\n update();\n });\n }\n if (!initOnMounted)\n update();\n function dispatchWriteEvent(oldValue, newValue) {\n if (window) {\n window.dispatchEvent(new CustomEvent(customStorageEventName, {\n detail: {\n key,\n oldValue,\n newValue,\n storageArea: storage\n }\n }));\n }\n }\n function write(v) {\n try {\n const oldValue = storage.getItem(key);\n if (v == null) {\n dispatchWriteEvent(oldValue, null);\n storage.removeItem(key);\n } else {\n const serialized = serializer.write(v);\n if (oldValue !== serialized) {\n storage.setItem(key, serialized);\n dispatchWriteEvent(oldValue, serialized);\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(key);\n if (rawValue == null) {\n if (writeDefaults && rawInit != null)\n storage.setItem(key, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return { ...rawInit, ...value };\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== key)\n return;\n pauseWatch();\n try {\n if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n return data;\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n const instance = getCurrentInstance();\n if (instance) {\n onMounted(() => {\n isMounted.value = true;\n }, isVue2 ? void 0 : instance);\n }\n return isMounted;\n}\n\nfunction useSupported(callback) {\n const isMounted = useMounted();\n return computed(() => {\n isMounted.value;\n return Boolean(callback());\n });\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n let mediaQuery;\n const matches = ref(false);\n const handler = (event) => {\n matches.value = event.matches;\n };\n const cleanup = () => {\n if (!mediaQuery)\n return;\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", handler);\n else\n mediaQuery.removeListener(handler);\n };\n const stopWatch = watchEffect(() => {\n if (!isSupported.value)\n return;\n cleanup();\n mediaQuery = window.matchMedia(toValue(query));\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", handler);\n else\n mediaQuery.addListener(handler);\n matches.value = mediaQuery.matches;\n });\n tryOnScopeDispose(() => {\n stopWatch();\n cleanup();\n mediaQuery = void 0;\n });\n return matches;\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto,\n disableTransition = true\n } = options;\n const modes = {\n auto: \"\",\n light: \"light\",\n dark: \"dark\",\n ...options.modes || {}\n };\n const preferredDark = usePreferredDark({ window });\n const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n const updateHTMLAttrs = getSSRHandler(\n \"updateHTMLAttrs\",\n (selector2, attribute2, value) => {\n const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n if (!el)\n return;\n let style;\n if (disableTransition) {\n style = window.document.createElement(\"style\");\n const styleString = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n style.appendChild(document.createTextNode(styleString));\n window.document.head.appendChild(style);\n }\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n el.classList.add(v);\n else\n el.classList.remove(v);\n });\n } else {\n el.setAttribute(attribute2, value);\n }\n if (disableTransition) {\n window.getComputedStyle(style).opacity;\n document.head.removeChild(style);\n }\n }\n );\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n const auto = computed({\n get() {\n return emitAuto ? store.value : state.value;\n },\n set(v) {\n store.value = v;\n }\n });\n try {\n return Object.assign(auto, { store, system, state });\n } catch (e) {\n return auto;\n }\n}\n\nconst UseColorMode = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseColorMode\",\n props: [\"selector\", \"attribute\", \"modes\", \"onChanged\", \"storageKey\", \"storage\", \"emitAuto\"],\n setup(props, { slots }) {\n const mode = useColorMode(props);\n const data = reactive({\n mode,\n system: mode.system,\n store: mode.store\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDark = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDark\",\n props: [\"selector\", \"attribute\", \"valueDark\", \"valueLight\", \"onChanged\", \"storageKey\", \"storage\"],\n setup(props, { slots }) {\n const isDark = useDark(props);\n const data = reactive({\n isDark,\n toggleDark: useToggle(isDark)\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDeviceMotion = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDeviceMotion\",\n setup(props, { slots }) {\n const data = reactive(useDeviceMotion());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDeviceOrientation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDeviceOrientation\",\n setup(props, { slots }) {\n const data = reactive(useDeviceOrientation());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDevicePixelRatio = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDevicePixelRatio\",\n setup(props, { slots }) {\n const data = reactive({\n pixelRatio: useDevicePixelRatio()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDevicesList = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDevicesList\",\n props: [\"onUpdated\", \"requestPermissions\", \"constraints\"],\n setup(props, { slots }) {\n const data = reactive(useDevicesList(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDocumentVisibility = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDocumentVisibility\",\n setup(props, { slots }) {\n const data = reactive({\n visibility: useDocumentVisibility()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseDraggable = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseDraggable\",\n props: [\n \"storageKey\",\n \"storageType\",\n \"initialValue\",\n \"exact\",\n \"preventDefault\",\n \"stopPropagation\",\n \"pointerTypes\",\n \"as\",\n \"handle\",\n \"axis\",\n \"onStart\",\n \"onMove\",\n \"onEnd\",\n \"disabled\"\n ],\n setup(props, { slots }) {\n const target = ref();\n const handle = computed(() => {\n var _a;\n return (_a = props.handle) != null ? _a : target.value;\n });\n const disabled = computed(() => !!props.disabled);\n const storageValue = props.storageKey && useStorage$1(\n props.storageKey,\n toValue(props.initialValue) || { x: 0, y: 0 },\n isClient$1 ? props.storageType === \"session\" ? sessionStorage : localStorage : void 0\n );\n const initialValue = storageValue || props.initialValue || { x: 0, y: 0 };\n const onEnd = (position, event) => {\n var _a;\n (_a = props.onEnd) == null ? void 0 : _a.call(props, position, event);\n if (!storageValue)\n return;\n storageValue.value.x = position.x;\n storageValue.value.y = position.y;\n };\n const data = reactive(useDraggable(target, {\n ...props,\n handle,\n initialValue,\n onEnd,\n disabled\n }));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target, style: `touch-action:none;${data.style}` }, slots.default(data));\n };\n }\n});\n\nconst UseElementBounding = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseElementBounding\",\n props: [\"box\", \"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useElementBounding(target));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nfunction useElementHover(el, options = {}) {\n const {\n delayEnter = 0,\n delayLeave = 0,\n window = defaultWindow\n } = options;\n const isHovered = ref(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = void 0;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n return isHovered;\n}\n\nconst vElementHover = {\n [directiveHooks.mounted](el, binding) {\n if (typeof binding.value === \"function\") {\n const isHovered = useElementHover(el);\n watch(isHovered, (v) => binding.value(v));\n }\n }\n};\n\nconst UseElementSize = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseElementSize\",\n props: [\"width\", \"height\", \"box\", \"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useElementSize$1(target, { width: props.width, height: props.height }, { box: props.box }));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nfunction useResizeObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...observerOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => Array.isArray(target) ? target.map((el) => unrefElement(el)) : [unrefElement(target)]);\n const stopWatch = watch(\n targets,\n (els) => {\n cleanup();\n if (isSupported.value && window) {\n observer = new ResizeObserver(callback);\n for (const _el of els)\n _el && observer.observe(_el, observerOptions);\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n });\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n const { stop: stop1 } = useResizeObserver(\n target,\n ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const rect = $elem.getBoundingClientRect();\n width.value = rect.width;\n height.value = rect.height;\n }\n } else {\n if (boxSize) {\n const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n },\n options\n );\n tryOnMounted(() => {\n const ele = unrefElement(target);\n if (ele) {\n width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n }\n });\n const stop2 = watch(\n () => unrefElement(target),\n (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n }\n );\n function stop() {\n stop1();\n stop2();\n }\n return {\n width,\n height,\n stop\n };\n}\n\nconst vElementSize = {\n [directiveHooks.mounted](el, binding) {\n var _a;\n const handler = typeof binding.value === \"function\" ? binding.value : (_a = binding.value) == null ? void 0 : _a[0];\n const options = typeof binding.value === \"function\" ? [] : binding.value.slice(1);\n const { width, height } = useElementSize(el, ...options);\n watch([width, height], ([width2, height2]) => handler({ width: width2, height: height2 }));\n }\n};\n\nconst UseElementVisibility = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseElementVisibility\",\n props: [\"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive({\n isVisible: useElementVisibility$1(target)\n });\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0.1,\n window = defaultWindow,\n immediate = true\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n const targets = computed(() => {\n const _target = toValue(target);\n return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n });\n let cleanup = noop;\n const isActive = ref(immediate);\n const stopWatch = isSupported.value ? watch(\n () => [targets.value, unrefElement(root), isActive.value],\n ([targets2, root2]) => {\n cleanup();\n if (!isActive.value)\n return;\n if (!targets2.length)\n return;\n const observer = new IntersectionObserver(\n callback,\n {\n root: unrefElement(root2),\n rootMargin,\n threshold\n }\n );\n targets2.forEach((el) => el && observer.observe(el));\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n },\n { immediate, flush: \"post\" }\n ) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n isActive.value = false;\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n isActive,\n pause() {\n cleanup();\n isActive.value = false;\n },\n resume() {\n isActive.value = true;\n },\n stop\n };\n}\n\nfunction useElementVisibility(element, options = {}) {\n const { window = defaultWindow, scrollTarget, threshold = 0 } = options;\n const elementIsVisible = ref(false);\n useIntersectionObserver(\n element,\n (intersectionObserverEntries) => {\n let isIntersecting = elementIsVisible.value;\n let latestTime = 0;\n for (const entry of intersectionObserverEntries) {\n if (entry.time >= latestTime) {\n latestTime = entry.time;\n isIntersecting = entry.isIntersecting;\n }\n }\n elementIsVisible.value = isIntersecting;\n },\n {\n root: scrollTarget,\n window,\n threshold\n }\n );\n return elementIsVisible;\n}\n\nconst vElementVisibility = {\n [directiveHooks.mounted](el, binding) {\n if (typeof binding.value === \"function\") {\n const handler = binding.value;\n const isVisible = useElementVisibility(el);\n watch(isVisible, (v) => handler(v), { immediate: true });\n } else {\n const [handler, options] = binding.value;\n const isVisible = useElementVisibility(el, options);\n watch(isVisible, (v) => handler(v), { immediate: true });\n }\n }\n};\n\nconst UseEyeDropper = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseEyeDropper\",\n props: {\n sRGBHex: String\n },\n setup(props, { slots }) {\n const data = reactive(useEyeDropper());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseFullscreen = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseFullscreen\",\n props: [\"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useFullscreen(target));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nconst UseGeolocation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseGeolocation\",\n props: [\"enableHighAccuracy\", \"maximumAge\", \"timeout\", \"navigator\"],\n setup(props, { slots }) {\n const data = reactive(useGeolocation(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseIdle = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseIdle\",\n props: [\"timeout\", \"events\", \"listenForVisibilityChange\", \"initialState\"],\n setup(props, { slots }) {\n const data = reactive(useIdle(props.timeout, props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = shallowRef(void 0);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = void 0;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw e;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate)\n execute(delay);\n const shell = {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n function waitUntilIsLoaded() {\n return new Promise((resolve, reject) => {\n until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n });\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilIsLoaded().then(onFulfilled, onRejected);\n }\n };\n}\n\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n img.src = src;\n if (srcset)\n img.srcset = srcset;\n if (sizes)\n img.sizes = sizes;\n if (clazz)\n img.className = clazz;\n if (loading)\n img.loading = loading;\n if (crossorigin)\n img.crossOrigin = crossorigin;\n if (referrerPolicy)\n img.referrerPolicy = referrerPolicy;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n const state = useAsyncState(\n () => loadImage(toValue(options)),\n void 0,\n {\n resetOnExecute: true,\n ...asyncStateOptions\n }\n );\n watch(\n () => toValue(options),\n () => state.execute(asyncStateOptions.delay),\n { deep: true }\n );\n return state;\n}\n\nconst UseImage = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseImage\",\n props: [\n \"src\",\n \"srcset\",\n \"sizes\",\n \"as\",\n \"alt\",\n \"class\",\n \"loading\",\n \"crossorigin\",\n \"referrerPolicy\"\n ],\n setup(props, { slots }) {\n const data = reactive(useImage(props));\n return () => {\n if (data.isLoading && slots.loading)\n return slots.loading(data);\n else if (data.error && slots.error)\n return slots.error(data.error);\n if (slots.default)\n return slots.default(data);\n return h(props.as || \"img\", props);\n };\n }\n});\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\",\n window = defaultWindow,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const internalX = ref(0);\n const internalY = ref(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, void 0);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(void 0, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c, _d;\n if (!window)\n return;\n const _element = toValue(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n top: (_a = toValue(_y)) != null ? _a : y.value,\n left: (_b = toValue(_x)) != null ? _b : x.value,\n behavior: toValue(behavior)\n });\n const scrollContainer = ((_d = _element == null ? void 0 : _element.document) == null ? void 0 : _d.documentElement) || (_element == null ? void 0 : _element.documentElement) || _element;\n if (x != null)\n internalX.value = scrollContainer.scrollLeft;\n if (y != null)\n internalY.value = scrollContainer.scrollTop;\n }\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const setArrivedState = (target) => {\n var _a;\n if (!window)\n return;\n const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n const { display, flexDirection } = getComputedStyle(el);\n const scrollLeft = el.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalX.value;\n const left = Math.abs(scrollLeft) <= (offset.left || 0);\n const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"row-reverse\") {\n arrivedState.left = right;\n arrivedState.right = left;\n } else {\n arrivedState.left = left;\n arrivedState.right = right;\n }\n internalX.value = scrollLeft;\n let scrollTop = el.scrollTop;\n if (target === window.document && !scrollTop)\n scrollTop = window.document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n const top = Math.abs(scrollTop) <= (offset.top || 0);\n const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"column-reverse\") {\n arrivedState.top = bottom;\n arrivedState.bottom = top;\n } else {\n arrivedState.top = top;\n arrivedState.bottom = bottom;\n }\n internalY.value = scrollTop;\n };\n const onScrollHandler = (e) => {\n var _a;\n if (!window)\n return;\n const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n setArrivedState(eventTarget);\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(\n element,\n \"scroll\",\n throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n eventListenerOptions\n );\n tryOnMounted(() => {\n try {\n const _element = toValue(element);\n if (!_element)\n return;\n setArrivedState(_element);\n } catch (e) {\n onError(e);\n }\n });\n useEventListener(\n element,\n \"scrollend\",\n onScrollEnd,\n eventListenerOptions\n );\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions,\n measure() {\n const _element = toValue(element);\n if (window && _element)\n setArrivedState(_element);\n }\n };\n}\n\nfunction resolveElement(el) {\n if (typeof Window !== \"undefined\" && el instanceof Window)\n return el.document.documentElement;\n if (typeof Document !== \"undefined\" && el instanceof Document)\n return el.documentElement;\n return el;\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const {\n direction = \"bottom\",\n interval = 100,\n canLoadMore = () => true\n } = options;\n const state = reactive(useScroll(\n element,\n {\n ...options,\n offset: {\n [direction]: (_a = options.distance) != null ? _a : 0,\n ...options.offset\n }\n }\n ));\n const promise = ref();\n const isLoading = computed(() => !!promise.value);\n const observedElement = computed(() => {\n return resolveElement(toValue(element));\n });\n const isElementVisible = useElementVisibility(observedElement);\n function checkAndLoad() {\n state.measure();\n if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n return;\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n if (state.arrivedState[direction] || isNarrower) {\n if (!promise.value) {\n promise.value = Promise.all([\n onLoadMore(state),\n new Promise((resolve) => setTimeout(resolve, interval))\n ]).finally(() => {\n promise.value = null;\n nextTick(() => checkAndLoad());\n });\n }\n }\n }\n watch(\n () => [state.arrivedState[direction], isElementVisible.value],\n checkAndLoad,\n { immediate: true }\n );\n return {\n isLoading\n };\n}\n\nconst vInfiniteScroll = {\n [directiveHooks.mounted](el, binding) {\n if (typeof binding.value === \"function\")\n useInfiniteScroll(el, binding.value);\n else\n useInfiniteScroll(el, ...binding.value);\n }\n};\n\nconst vIntersectionObserver = {\n [directiveHooks.mounted](el, binding) {\n if (typeof binding.value === \"function\")\n useIntersectionObserver(el, binding.value);\n else\n useIntersectionObserver(el, ...binding.value);\n }\n};\n\nconst UseMouse = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseMouse\",\n props: [\"touch\", \"resetOnTouchEnds\", \"initialValue\"],\n setup(props, { slots }) {\n const data = reactive(useMouse(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseMouseInElement = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseMouseElement\",\n props: [\"handleOutside\", \"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useMouseInElement(target, props));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nconst UseMousePressed = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseMousePressed\",\n props: [\"touch\", \"initialValue\", \"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(useMousePressed({ ...props, target }));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nconst UseNetwork = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseNetwork\",\n setup(props, { slots }) {\n const data = reactive(useNetwork());\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseNow = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseNow\",\n props: [\"interval\"],\n setup(props, { slots }) {\n const data = reactive(useNow({ ...props, controls: true }));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseObjectUrl = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseObjectUrl\",\n props: [\n \"object\"\n ],\n setup(props, { slots }) {\n const object = toRef(props, \"object\");\n const url = useObjectUrl(object);\n return () => {\n if (slots.default && url.value)\n return slots.default(url);\n };\n }\n});\n\nconst UseOffsetPagination = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseOffsetPagination\",\n props: [\n \"total\",\n \"page\",\n \"pageSize\",\n \"onPageChange\",\n \"onPageSizeChange\",\n \"onPageCountChange\"\n ],\n emits: [\n \"page-change\",\n \"page-size-change\",\n \"page-count-change\"\n ],\n setup(props, { slots, emit }) {\n const data = reactive(useOffsetPagination({\n ...props,\n onPageChange(...args) {\n var _a;\n (_a = props.onPageChange) == null ? void 0 : _a.call(props, ...args);\n emit(\"page-change\", ...args);\n },\n onPageSizeChange(...args) {\n var _a;\n (_a = props.onPageSizeChange) == null ? void 0 : _a.call(props, ...args);\n emit(\"page-size-change\", ...args);\n },\n onPageCountChange(...args) {\n var _a;\n (_a = props.onPageCountChange) == null ? void 0 : _a.call(props, ...args);\n emit(\"page-count-change\", ...args);\n }\n }));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseOnline = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseOnline\",\n setup(props, { slots }) {\n const data = reactive({\n isOnline: useOnline()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePageLeave = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePageLeave\",\n setup(props, { slots }) {\n const data = reactive({\n isLeft: usePageLeave()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePointer = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePointer\",\n props: [\n \"pointerTypes\",\n \"initialValue\",\n \"target\"\n ],\n setup(props, { slots }) {\n const el = ref(null);\n const data = reactive(usePointer({\n ...props,\n target: props.target === \"self\" ? el : defaultWindow\n }));\n return () => {\n if (slots.default)\n return slots.default(data, { ref: el });\n };\n }\n});\n\nconst UsePointerLock = /* #__PURE__ */ defineComponent({\n name: \"UsePointerLock\",\n props: [\"as\"],\n setup(props, { slots }) {\n const target = ref();\n const data = reactive(usePointerLock(target));\n return () => {\n if (slots.default)\n return h(props.as || \"div\", { ref: target }, slots.default(data));\n };\n }\n});\n\nconst UsePreferredColorScheme = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredColorScheme\",\n setup(props, { slots }) {\n const data = reactive({\n colorScheme: usePreferredColorScheme()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePreferredContrast = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredContrast\",\n setup(props, { slots }) {\n const data = reactive({\n contrast: usePreferredContrast()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePreferredDark = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredDark\",\n setup(props, { slots }) {\n const data = reactive({\n prefersDark: usePreferredDark$1()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePreferredLanguages = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredLanguages\",\n setup(props, { slots }) {\n const data = reactive({\n languages: usePreferredLanguages()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UsePreferredReducedMotion = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UsePreferredReducedMotion\",\n setup(props, { slots }) {\n const data = reactive({\n motion: usePreferredReducedMotion()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nfunction useMutationObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...mutationOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = void 0;\n }\n };\n const targets = computed(() => {\n const value = toValue(target);\n const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);\n return new Set(items);\n });\n const stopWatch = watch(\n () => targets.value,\n (targets2) => {\n cleanup();\n if (isSupported.value && targets2.size) {\n observer = new MutationObserver(callback);\n targets2.forEach((el) => observer.observe(el, mutationOptions));\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const takeRecords = () => {\n return observer == null ? void 0 : observer.takeRecords();\n };\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop,\n takeRecords\n };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n const { window = defaultWindow, initialValue = \"\", observe = false } = options;\n const variable = ref(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n });\n function updateCssVar() {\n var _a;\n const key = toValue(prop);\n const el = toValue(elRef);\n if (el && window) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n variable.value = value || initialValue;\n }\n }\n if (observe) {\n useMutationObserver(elRef, updateCssVar, {\n attributeFilter: [\"style\", \"class\"],\n window\n });\n }\n watch(\n [elRef, () => toValue(prop)],\n updateCssVar,\n { immediate: true }\n );\n watch(\n variable,\n (val) => {\n var _a;\n if ((_a = elRef.value) == null ? void 0 : _a.style)\n elRef.value.style.setProperty(toValue(prop), val);\n }\n );\n return variable;\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update));\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nconst UseScreenSafeArea = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseScreenSafeArea\",\n props: {\n top: Boolean,\n right: Boolean,\n bottom: Boolean,\n left: Boolean\n },\n setup(props, { slots }) {\n const {\n top,\n right,\n bottom,\n left\n } = useScreenSafeArea();\n return () => {\n if (slots.default) {\n return h(\"div\", {\n style: {\n paddingTop: props.top ? top.value : \"\",\n paddingRight: props.right ? right.value : \"\",\n paddingBottom: props.bottom ? bottom.value : \"\",\n paddingLeft: props.left ? left.value : \"\",\n boxSizing: \"border-box\",\n maxHeight: \"100vh\",\n maxWidth: \"100vw\",\n overflow: \"auto\"\n }\n }, slots.default());\n }\n };\n }\n});\n\nconst vScroll = {\n [directiveHooks.mounted](el, binding) {\n if (typeof binding.value === \"function\") {\n const handler = binding.value;\n const state = useScroll(el, {\n onScroll() {\n handler(state);\n },\n onStop() {\n handler(state);\n }\n });\n } else {\n const [handler, options] = binding.value;\n const state = useScroll(el, {\n ...options,\n onScroll(e) {\n var _a;\n (_a = options.onScroll) == null ? void 0 : _a.call(options, e);\n handler(state);\n },\n onStop(e) {\n var _a;\n (_a = options.onStop) == null ? void 0 : _a.call(options, e);\n handler(state);\n }\n });\n }\n }\n};\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow = \"\";\n watch(toRef(element), (el) => {\n const target = resolveElement(toValue(el));\n if (target) {\n const ele = target;\n if (!elInitialOverflow.get(ele))\n elInitialOverflow.set(ele, ele.style.overflow);\n if (ele.style.overflow !== \"hidden\")\n initialOverflow = ele.style.overflow;\n if (ele.style.overflow === \"hidden\")\n return isLocked.value = true;\n if (isLocked.value)\n return ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const el = resolveElement(toValue(element));\n if (!el || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(\n el,\n \"touchmove\",\n (e) => {\n preventDefault(e);\n },\n { passive: false }\n );\n }\n el.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const el = resolveElement(toValue(element));\n if (!el || !isLocked.value)\n return;\n isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n el.style.overflow = initialOverflow;\n elInitialOverflow.delete(el);\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else unlock();\n }\n });\n}\n\nfunction onScrollLock() {\n let isMounted = false;\n const state = ref(false);\n return (el, binding) => {\n state.value = binding.value;\n if (isMounted)\n return;\n isMounted = true;\n const isLocked = useScrollLock(el, binding.value);\n watch(state, (v) => isLocked.value = v);\n };\n}\nconst vScrollLock = onScrollLock();\n\nconst UseTimeAgo = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseTimeAgo\",\n props: [\"time\", \"updateInterval\", \"max\", \"fullDateFormatter\", \"messages\", \"showSecond\"],\n setup(props, { slots }) {\n const data = reactive(useTimeAgo(() => props.time, { ...props, controls: true }));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseTimestamp = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseTimestamp\",\n props: [\"immediate\", \"interval\", \"offset\"],\n setup(props, { slots }) {\n const data = reactive(useTimestamp({ ...props, controls: true }));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseVirtualList = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseVirtualList\",\n props: [\n \"list\",\n \"options\",\n \"height\"\n ],\n setup(props, { slots, expose }) {\n const { list: listRef } = toRefs(props);\n const { list, containerProps, wrapperProps, scrollTo } = useVirtualList(listRef, props.options);\n expose({ scrollTo });\n if (containerProps.style && typeof containerProps.style === \"object\" && !Array.isArray(containerProps.style))\n containerProps.style.height = props.height || \"300px\";\n return () => h(\"div\", { ...containerProps }, [\n h(\"div\", { ...wrapperProps.value }, list.value.map((item) => h(\"div\", { style: { overflow: \"hidden\", height: item.height } }, slots.default ? slots.default(item) : \"Please set content!\")))\n ]);\n }\n});\n\nconst UseWindowFocus = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseWindowFocus\",\n setup(props, { slots }) {\n const data = reactive({\n focused: useWindowFocus()\n });\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nconst UseWindowSize = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n name: \"UseWindowSize\",\n props: [\"initialWidth\", \"initialHeight\"],\n setup(props, { slots }) {\n const data = reactive(useWindowSize(props));\n return () => {\n if (slots.default)\n return slots.default(data);\n };\n }\n});\n\nexport { OnClickOutside, OnLongPress, UseActiveElement, UseBattery, UseBrowserLocation, UseClipboard, UseColorMode, UseDark, UseDeviceMotion, UseDeviceOrientation, UseDevicePixelRatio, UseDevicesList, UseDocumentVisibility, UseDraggable, UseElementBounding, UseElementSize, UseElementVisibility, UseEyeDropper, UseFullscreen, UseGeolocation, UseIdle, UseImage, UseMouse, UseMouseInElement, UseMousePressed, UseNetwork, UseNow, UseObjectUrl, UseOffsetPagination, UseOnline, UsePageLeave, UsePointer, UsePointerLock, UsePreferredColorScheme, UsePreferredContrast, UsePreferredDark, UsePreferredLanguages, UsePreferredReducedMotion, UseScreenSafeArea, UseTimeAgo, UseTimestamp, UseVirtualList, UseWindowFocus, UseWindowSize, vOnClickOutside as VOnClickOutside, vOnLongPress as VOnLongPress, vElementHover, vElementSize, vElementVisibility, vInfiniteScroll, vIntersectionObserver, vOnClickOutside, vOnKeyStroke, vOnLongPress, vScroll, vScrollLock };\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('table',{staticClass:\"user-list\"},[_vm._t(\"before\"),_vm._v(\" \"),_c('thead',{ref:\"thead\",staticClass:\"user-list__header\",attrs:{\"role\":\"rowgroup\"}},[_vm._t(\"header\")],2),_vm._v(\" \"),_c('tbody',{staticClass:\"user-list__body\",style:(_vm.tbodyStyle)},_vm._l((_vm.renderedItems),function(item,i){return _c(_vm.dataComponent,_vm._b({key:item[_vm.dataKey],tag:\"component\",attrs:{\"user\":item,\"visible\":(i >= _vm.bufferItems || _vm.index <= _vm.bufferItems) && (i < _vm.shownItems - _vm.bufferItems)}},'component',_vm.extraProps,false))}),1),_vm._v(\" \"),_c('tfoot',{directives:[{name:\"element-visibility\",rawName:\"v-element-visibility\",value:(_vm.handleFooterVisibility),expression:\"handleFooterVisibility\"}],ref:\"tfoot\",staticClass:\"user-list__footer\",attrs:{\"role\":\"rowgroup\"}},[_vm._t(\"footer\")],2)],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualList.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualList.vue?vue&type=script&lang=ts\"","\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!./VirtualList.vue?vue&type=style&index=0&id=de721376&prod&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!./VirtualList.vue?vue&type=style&index=0&id=de721376&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./VirtualList.vue?vue&type=template&id=de721376&scoped=true\"\nimport script from \"./VirtualList.vue?vue&type=script&lang=ts\"\nexport * from \"./VirtualList.vue?vue&type=script&lang=ts\"\nimport style0 from \"./VirtualList.vue?vue&type=style&index=0&id=de721376&prod&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 \"de721376\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcModal',_vm._g({staticClass:\"modal\",attrs:{\"size\":\"small\"}},_vm.$listeners),[_c('form',{staticClass:\"modal__form\",attrs:{\"data-test\":\"form\",\"disabled\":_vm.loading.all},on:{\"submit\":function($event){$event.preventDefault();return _vm.createUser.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'New user')))]),_vm._v(\" \"),_c('NcTextField',{ref:\"username\",staticClass:\"modal__item\",attrs:{\"data-test\":\"username\",\"value\":_vm.newUser.id,\"disabled\":_vm.settings.newUserGenerateUserID,\"label\":_vm.usernameLabel,\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"spellcheck\":\"false\",\"pattern\":\"[a-zA-Z0-9 _\\\\.@\\\\-']+\",\"required\":\"\"},on:{\"update:value\":function($event){return _vm.$set(_vm.newUser, \"id\", $event)}}}),_vm._v(\" \"),_c('NcTextField',{staticClass:\"modal__item\",attrs:{\"data-test\":\"displayName\",\"value\":_vm.newUser.displayName,\"label\":_vm.t('settings', 'Display name'),\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"spellcheck\":\"false\"},on:{\"update:value\":function($event){return _vm.$set(_vm.newUser, \"displayName\", $event)}}}),_vm._v(\" \"),(!_vm.settings.newUserRequireEmail)?_c('span',{staticClass:\"modal__hint\",attrs:{\"id\":\"password-email-hint\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Either password or email is required'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcPasswordField',{ref:\"password\",staticClass:\"modal__item\",attrs:{\"data-test\":\"password\",\"value\":_vm.newUser.password,\"minlength\":_vm.minPasswordLength,\"maxlength\":469,\"aria-describedby\":\"password-email-hint\",\"label\":_vm.newUser.mailAddress === '' ? _vm.t('settings', 'Password (required)') : _vm.t('settings', 'Password'),\"autocapitalize\":\"none\",\"autocomplete\":\"new-password\",\"spellcheck\":\"false\",\"required\":_vm.newUser.mailAddress === ''},on:{\"update:value\":function($event){return _vm.$set(_vm.newUser, \"password\", $event)}}}),_vm._v(\" \"),_c('NcTextField',{staticClass:\"modal__item\",attrs:{\"data-test\":\"email\",\"type\":\"email\",\"value\":_vm.newUser.mailAddress,\"aria-describedby\":\"password-email-hint\",\"label\":_vm.newUser.password === '' || _vm.settings.newUserRequireEmail ? _vm.t('settings', 'Email (required)') : _vm.t('settings', 'Email'),\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"spellcheck\":\"false\",\"required\":_vm.newUser.password === '' || _vm.settings.newUserRequireEmail},on:{\"update:value\":function($event){return _vm.$set(_vm.newUser, \"mailAddress\", $event)}}}),_vm._v(\" \"),_c('div',{staticClass:\"modal__item\"},[_c('label',{staticClass:\"modal__label\",attrs:{\"for\":\"new-user-groups\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(!_vm.settings.isAdmin ? _vm.t('settings', 'Groups (required)') : _vm.t('settings', 'Groups'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcSelect',{staticClass:\"modal__select\",attrs:{\"input-id\":\"new-user-groups\",\"placeholder\":_vm.t('settings', 'Set user groups'),\"disabled\":_vm.loading.groups || _vm.loading.all,\"options\":_vm.canAddGroups,\"value\":_vm.newUser.groups,\"label\":\"name\",\"close-on-select\":false,\"multiple\":true,\"taggable\":true,\"required\":!_vm.settings.isAdmin},on:{\"input\":_vm.handleGroupInput,\"option:created\":_vm.createGroup}})],1),_vm._v(\" \"),(_vm.subAdminsGroups.length > 0)?_c('div',{staticClass:\"modal__item\"},[_c('label',{staticClass:\"modal__label\",attrs:{\"for\":\"new-user-sub-admin\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Administered groups'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcSelect',{staticClass:\"modal__select\",attrs:{\"input-id\":\"new-user-sub-admin\",\"placeholder\":_vm.t('settings', 'Set user as admin for …'),\"options\":_vm.subAdminsGroups,\"close-on-select\":false,\"multiple\":true,\"label\":\"name\"},model:{value:(_vm.newUser.subAdminsGroups),callback:function ($$v) {_vm.$set(_vm.newUser, \"subAdminsGroups\", $$v)},expression:\"newUser.subAdminsGroups\"}})],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"modal__item\"},[_c('label',{staticClass:\"modal__label\",attrs:{\"for\":\"new-user-quota\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Quota'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcSelect',{staticClass:\"modal__select\",attrs:{\"input-id\":\"new-user-quota\",\"placeholder\":_vm.t('settings', 'Set user quota'),\"options\":_vm.quotaOptions,\"clearable\":false,\"taggable\":true,\"create-option\":_vm.validateQuota},model:{value:(_vm.newUser.quota),callback:function ($$v) {_vm.$set(_vm.newUser, \"quota\", $$v)},expression:\"newUser.quota\"}})],1),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"modal__item\"},[_c('label',{staticClass:\"modal__label\",attrs:{\"for\":\"new-user-language\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Language'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcSelect',{staticClass:\"modal__select\",attrs:{\"input-id\":\"new-user-language\",\"placeholder\":_vm.t('settings', 'Set default language'),\"clearable\":false,\"selectable\":option => !option.languages,\"filter-by\":_vm.languageFilterBy,\"options\":_vm.languages,\"label\":\"name\"},model:{value:(_vm.newUser.language),callback:function ($$v) {_vm.$set(_vm.newUser, \"language\", $$v)},expression:\"newUser.language\"}})],1):_vm._e(),_vm._v(\" \"),_c('div',{class:['modal__item managers', { 'icon-loading-small': _vm.loading.manager }]},[_c('label',{staticClass:\"modal__label\",attrs:{\"for\":\"new-user-manager\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Manager'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcSelect',{staticClass:\"modal__select\",attrs:{\"input-id\":\"new-user-manager\",\"placeholder\":_vm.managerLabel,\"options\":_vm.possibleManagers,\"user-select\":true,\"label\":\"displayname\"},on:{\"search\":_vm.searchUserManager},model:{value:(_vm.newUser.manager),callback:function ($$v) {_vm.$set(_vm.newUser, \"manager\", $$v)},expression:\"newUser.manager\"}})],1),_vm._v(\" \"),_c('NcButton',{staticClass:\"modal__submit\",attrs:{\"data-test\":\"submit\",\"type\":\"primary\",\"native-type\":\"submit\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Add new user'))+\"\\n\\t\\t\")])],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2023 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<NcModal class=\"modal\"\n\t\tsize=\"small\"\n\t\tv-on=\"$listeners\">\n\t\t<form class=\"modal__form\"\n\t\t\tdata-test=\"form\"\n\t\t\t:disabled=\"loading.all\"\n\t\t\t@submit.prevent=\"createUser\">\n\t\t\t<h2>{{ t('settings', 'New user') }}</h2>\n\t\t\t<NcTextField ref=\"username\"\n\t\t\t\tclass=\"modal__item\"\n\t\t\t\tdata-test=\"username\"\n\t\t\t\t:value.sync=\"newUser.id\"\n\t\t\t\t:disabled=\"settings.newUserGenerateUserID\"\n\t\t\t\t:label=\"usernameLabel\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\tpattern=\"[a-zA-Z0-9 _\\.@\\-']+\"\n\t\t\t\trequired />\n\t\t\t<NcTextField class=\"modal__item\"\n\t\t\t\tdata-test=\"displayName\"\n\t\t\t\t:value.sync=\"newUser.displayName\"\n\t\t\t\t:label=\"t('settings', 'Display name')\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tspellcheck=\"false\" />\n\t\t\t<span v-if=\"!settings.newUserRequireEmail\"\n\t\t\t\tid=\"password-email-hint\"\n\t\t\t\tclass=\"modal__hint\">\n\t\t\t\t{{ t('settings', 'Either password or email is required') }}\n\t\t\t</span>\n\t\t\t<NcPasswordField ref=\"password\"\n\t\t\t\tclass=\"modal__item\"\n\t\t\t\tdata-test=\"password\"\n\t\t\t\t:value.sync=\"newUser.password\"\n\t\t\t\t:minlength=\"minPasswordLength\"\n\t\t\t\t:maxlength=\"469\"\n\t\t\t\taria-describedby=\"password-email-hint\"\n\t\t\t\t:label=\"newUser.mailAddress === '' ? t('settings', 'Password (required)') : t('settings', 'Password')\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\t:required=\"newUser.mailAddress === ''\" />\n\t\t\t<NcTextField class=\"modal__item\"\n\t\t\t\tdata-test=\"email\"\n\t\t\t\ttype=\"email\"\n\t\t\t\t:value.sync=\"newUser.mailAddress\"\n\t\t\t\taria-describedby=\"password-email-hint\"\n\t\t\t\t:label=\"newUser.password === '' || settings.newUserRequireEmail ? t('settings', 'Email (required)') : t('settings', 'Email')\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\t:required=\"newUser.password === '' || settings.newUserRequireEmail\" />\n\t\t\t<div class=\"modal__item\">\n\t\t\t\t<label class=\"modal__label\"\n\t\t\t\t\tfor=\"new-user-groups\">\n\t\t\t\t\t{{ !settings.isAdmin ? t('settings', 'Groups (required)') : t('settings', 'Groups') }}\n\t\t\t\t</label>\n\t\t\t\t<NcSelect class=\"modal__select\"\n\t\t\t\t\tinput-id=\"new-user-groups\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Set user groups')\"\n\t\t\t\t\t:disabled=\"loading.groups || loading.all\"\n\t\t\t\t\t:options=\"canAddGroups\"\n\t\t\t\t\t:value=\"newUser.groups\"\n\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t:required=\"!settings.isAdmin\"\n\t\t\t\t\t@input=\"handleGroupInput\"\n\t\t\t\t\t@option:created=\"createGroup\" />\n\t\t\t\t\t<!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\tSubadmins can't create users outside their groups\n\t\t\t\t\t\tTherefore, empty select is forbidden -->\n\t\t\t</div>\n\t\t\t<div v-if=\"subAdminsGroups.length > 0\"\n\t\t\t\tclass=\"modal__item\">\n\t\t\t\t<label class=\"modal__label\"\n\t\t\t\t\tfor=\"new-user-sub-admin\">\n\t\t\t\t\t{{ t('settings', 'Administered groups') }}\n\t\t\t\t</label>\n\t\t\t\t<NcSelect v-model=\"newUser.subAdminsGroups\"\n\t\t\t\t\tclass=\"modal__select\"\n\t\t\t\t\tinput-id=\"new-user-sub-admin\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Set user as admin for …')\"\n\t\t\t\t\t:options=\"subAdminsGroups\"\n\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\tlabel=\"name\" />\n\t\t\t</div>\n\t\t\t<div class=\"modal__item\">\n\t\t\t\t<label class=\"modal__label\"\n\t\t\t\t\tfor=\"new-user-quota\">\n\t\t\t\t\t{{ t('settings', 'Quota') }}\n\t\t\t\t</label>\n\t\t\t\t<NcSelect v-model=\"newUser.quota\"\n\t\t\t\t\tclass=\"modal__select\"\n\t\t\t\t\tinput-id=\"new-user-quota\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Set user quota')\"\n\t\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t\t:clearable=\"false\"\n\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t:create-option=\"validateQuota\" />\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showLanguages\"\n\t\t\t\tclass=\"modal__item\">\n\t\t\t\t<label class=\"modal__label\"\n\t\t\t\t\tfor=\"new-user-language\">\n\t\t\t\t\t{{ t('settings', 'Language') }}\n\t\t\t\t</label>\n\t\t\t\t<NcSelect\tv-model=\"newUser.language\"\n\t\t\t\t\tclass=\"modal__select\"\n\t\t\t\t\tinput-id=\"new-user-language\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Set default language')\"\n\t\t\t\t\t:clearable=\"false\"\n\t\t\t\t\t:selectable=\"option => !option.languages\"\n\t\t\t\t\t:filter-by=\"languageFilterBy\"\n\t\t\t\t\t:options=\"languages\"\n\t\t\t\t\tlabel=\"name\" />\n\t\t\t</div>\n\t\t\t<div :class=\"['modal__item managers', { 'icon-loading-small': loading.manager }]\">\n\t\t\t\t<label class=\"modal__label\"\n\t\t\t\t\tfor=\"new-user-manager\">\n\t\t\t\t\t<!-- TRANSLATORS This string describes a manager in the context of an organization -->\n\t\t\t\t\t{{ t('settings', 'Manager') }}\n\t\t\t\t</label>\n\t\t\t\t<NcSelect v-model=\"newUser.manager\"\n\t\t\t\t\tclass=\"modal__select\"\n\t\t\t\t\tinput-id=\"new-user-manager\"\n\t\t\t\t\t:placeholder=\"managerLabel\"\n\t\t\t\t\t:options=\"possibleManagers\"\n\t\t\t\t\t:user-select=\"true\"\n\t\t\t\t\tlabel=\"displayname\"\n\t\t\t\t\t@search=\"searchUserManager\" />\n\t\t\t</div>\n\t\t\t<NcButton class=\"modal__submit\"\n\t\t\t\tdata-test=\"submit\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\tnative-type=\"submit\">\n\t\t\t\t{{ t('settings', 'Add new user') }}\n\t\t\t</NcButton>\n\t\t</form>\n\t</NcModal>\n</template>\n\n<script>\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal.js'\nimport NcPasswordField from '@nextcloud/vue/dist/Components/NcPasswordField.js'\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'\n\nexport default {\n\tname: 'NewUserModal',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tNcModal,\n\t\tNcPasswordField,\n\t\tNcSelect,\n\t\tNcTextField,\n\t},\n\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\tnewUser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\tquotaOptions: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tpossibleManagers: [],\n\t\t\t// TRANSLATORS This string describes a manager in the context of an organization\n\t\t\tmanagerLabel: t('settings', 'Set user manager'),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tshowConfig() {\n\t\t\treturn this.$store.getters.getShowConfig\n\t\t},\n\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\n\t\tusernameLabel() {\n\t\t\tif (this.settings.newUserGenerateUserID) {\n\t\t\t\treturn t('settings', 'Username will be autogenerated')\n\t\t\t}\n\t\t\treturn t('settings', 'Username (required)')\n\t\t},\n\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\n\t\tgroups() {\n\t\t\t// data provided php side + remove the disabled group\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== 'disabled')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\n\t\tsubAdminsGroups() {\n\t\t\t// data provided php side\n\t\t\treturn this.$store.getters.getSubadminGroups\n\t\t},\n\n\t\tcanAddGroups() {\n\t\t\t// disabled if no permission to add new users to group\n\t\t\treturn this.groups.map(group => {\n\t\t\t\t// clone object because we don't want\n\t\t\t\t// to edit the original groups\n\t\t\t\tgroup = Object.assign({}, group)\n\t\t\t\tgroup.$isDisabled = group.canAdd === false\n\t\t\t\treturn group\n\t\t\t})\n\t\t},\n\n\t\tlanguages() {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tname: t('settings', 'Common languages'),\n\t\t\t\t\tlanguages: this.settings.languages.commonLanguages,\n\t\t\t\t},\n\t\t\t\t...this.settings.languages.commonLanguages,\n\t\t\t\t{\n\t\t\t\t\tname: t('settings', 'Other languages'),\n\t\t\t\t\tlanguages: this.settings.languages.otherLanguages,\n\t\t\t\t},\n\t\t\t\t...this.settings.languages.otherLanguages,\n\t\t\t]\n\t\t},\n\t},\n\n\tasync beforeMount() {\n\t\tawait this.searchUserManager()\n\t},\n\n\tmethods: {\n\t\tasync createUser() {\n\t\t\tthis.loading.all = true\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addUser', {\n\t\t\t\t\tuserid: this.newUser.id,\n\t\t\t\t\tpassword: this.newUser.password,\n\t\t\t\t\tdisplayName: this.newUser.displayName,\n\t\t\t\t\temail: this.newUser.mailAddress,\n\t\t\t\t\tgroups: this.newUser.groups.map(group => group.id),\n\t\t\t\t\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\n\t\t\t\t\tquota: this.newUser.quota.id,\n\t\t\t\t\tlanguage: this.newUser.language.code,\n\t\t\t\t\tmanager: this.newUser.manager.id,\n\t\t\t\t})\n\n\t\t\t\tthis.$emit('reset')\n\t\t\t\tthis.$refs.username?.$refs?.inputField?.$refs?.input?.focus?.()\n\t\t\t\tthis.$emit('close')\n\t\t\t} catch (error) {\n\t\t\t\tthis.loading.all = false\n\t\t\t\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n\t\t\t\t\tconst statuscode = error.response.data.ocs.meta.statuscode\n\t\t\t\t\tif (statuscode === 102) {\n\t\t\t\t\t\t// wrong username\n\t\t\t\t\t\tthis.$refs.username?.$refs?.inputField?.$refs?.input?.focus?.()\n\t\t\t\t\t} else if (statuscode === 107) {\n\t\t\t\t\t\t// wrong password\n\t\t\t\t\t\tthis.$refs.password?.$refs?.inputField?.$refs?.input?.focus?.()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thandleGroupInput(groups) {\n\t\t\t/**\n\t\t\t * Filter out groups with no id to prevent duplicate selected options\n\t\t\t *\n\t\t\t * Created groups are added programmatically by `createGroup()`\n\t\t\t */\n\t\t\t this.newUser.groups = groups.filter(group => Boolean(group.id))\n\t\t},\n\n\t\t/**\n\t\t * Create a new group\n\t\t *\n\t\t * @param {any} group Group\n\t\t * @param {string} group.name Group id\n\t\t */\n\t\tasync createGroup({ name: gid }) {\n\t\t\tthis.loading.groups = true\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addGroup', gid)\n\t\t\t\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\n\t\t\t\tthis.loading.groups = false\n\t\t\t} catch (error) {\n\t\t\t\tthis.loading.groups = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t *\n\t\t * @param {string} quota Quota in readable format '5 GB'\n\t\t * @return {object}\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = OC.Util.computerFileSize(quota)\n\t\t\tif (validQuota !== null && validQuota >= 0) {\n\t\t\t\t// unify format output\n\t\t\t\tquota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota))\n\t\t\t\tthis.newUser.quota = { id: quota, label: quota }\n\t\t\t\treturn this.newUser.quota\n\t\t\t}\n\t\t\t// Default is unlimited\n\t\t\tthis.newUser.quota = this.quotaOptions[0]\n\t\t\treturn this.quotaOptions[0]\n\t\t},\n\n\t\tlanguageFilterBy(option, label, search) {\n\t\t\t// Show group header of the language\n\t\t\tif (option.languages) {\n\t\t\t\treturn option.languages.some(\n\t\t\t\t\t({ name }) => name.toLocaleLowerCase().includes(search.toLocaleLowerCase()),\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn (label || '').toLocaleLowerCase().includes(search.toLocaleLowerCase())\n\t\t},\n\n\t\tasync searchUserManager(query) {\n\t\t\tawait this.$store.dispatch(\n\t\t\t\t'searchUsers',\n\t\t\t\t{\n\t\t\t\t\toffset: 0,\n\t\t\t\t\tlimit: 10,\n\t\t\t\t\tsearch: query,\n\t\t\t\t},\n\t\t\t).then(response => {\n\t\t\t\tconst users = response?.data ? Object.values(response?.data.ocs.data.users) : []\n\t\t\t\tif (users.length > 0) {\n\t\t\t\t\tthis.possibleManagers = users\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.modal {\n\t&__form {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tpadding: 20px;\n\t\tgap: 4px 0;\n\t}\n\n\t&__item {\n\t\twidth: 100%;\n\n\t\t&:not(:focus):not(:active) {\n\t\t\tborder-color: var(--color-border-dark);\n\t\t}\n\t}\n\n\t&__hint {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-top: 8px;\n\t\talign-self: flex-start;\n\t}\n\n\t&__label {\n\t\tdisplay: block;\n\t\tpadding: 4px 0;\n\t}\n\n\t&__select {\n\t\twidth: 100%;\n\t}\n\n\t&__submit {\n\t\tmargin-top: 20px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewUserModal.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!./NewUserModal.vue?vue&type=script&lang=js\"","\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!./NewUserModal.vue?vue&type=style&index=0&id=2fe7d69f&prod&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!./NewUserModal.vue?vue&type=style&index=0&id=2fe7d69f&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./NewUserModal.vue?vue&type=template&id=2fe7d69f&scoped=true\"\nimport script from \"./NewUserModal.vue?vue&type=script&lang=js\"\nexport * from \"./NewUserModal.vue?vue&type=script&lang=js\"\nimport style0 from \"./NewUserModal.vue?vue&type=style&index=0&id=2fe7d69f&prod&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 \"2fe7d69f\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListFooter.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListFooter.vue?vue&type=script&lang=ts\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('tr',{staticClass:\"footer\"},[_c('th',{attrs:{\"scope\":\"row\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Total rows summary')))])]),_vm._v(\" \"),_c('td',{staticClass:\"footer__cell footer__cell--loading\"},[(_vm.loading)?_c('NcLoadingIcon',{attrs:{\"title\":_vm.t('settings', 'Loading users …'),\"size\":32}}):_vm._e()],1),_vm._v(\" \"),_c('td',{staticClass:\"footer__cell footer__cell--count footer__cell--multiline\"},[_c('span',{attrs:{\"aria-describedby\":\"user-count-desc\"}},[_vm._v(_vm._s(_vm.userCount))]),_vm._v(\" \"),_c('span',{staticClass:\"hidden-visually\",attrs:{\"id\":\"user-count-desc\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Scroll to load more rows'))+\"\\n\\t\\t\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\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!./UserListFooter.vue?vue&type=style&index=0&id=3ec0b16a&prod&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!./UserListFooter.vue?vue&type=style&index=0&id=3ec0b16a&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserListFooter.vue?vue&type=template&id=3ec0b16a&scoped=true\"\nimport script from \"./UserListFooter.vue?vue&type=script&lang=ts\"\nexport * from \"./UserListFooter.vue?vue&type=script&lang=ts\"\nimport style0 from \"./UserListFooter.vue?vue&type=style&index=0&id=3ec0b16a&prod&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 \"3ec0b16a\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListHeader.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListHeader.vue?vue&type=script&lang=ts\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('tr',{staticClass:\"header\"},[_c('th',{staticClass:\"header__cell header__cell--avatar\",attrs:{\"data-cy-user-list-header-avatar\":\"\",\"scope\":\"col\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Avatar'))+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('th',{staticClass:\"header__cell header__cell--displayname\",attrs:{\"data-cy-user-list-header-displayname\":\"\",\"scope\":\"col\"}},[_c('strong',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Display name'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"header__subtitle\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Username'))+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('th',{staticClass:\"header__cell\",class:{ 'header__cell--obfuscated': _vm.hasObfuscated },attrs:{\"data-cy-user-list-header-password\":\"\",\"scope\":\"col\"}},[_c('span',[_vm._v(_vm._s(_vm.passwordLabel))])]),_vm._v(\" \"),_c('th',{staticClass:\"header__cell\",attrs:{\"data-cy-user-list-header-email\":\"\",\"scope\":\"col\"}},[_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Email')))])]),_vm._v(\" \"),_c('th',{staticClass:\"header__cell header__cell--large\",attrs:{\"data-cy-user-list-header-groups\":\"\",\"scope\":\"col\"}},[_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Groups')))])]),_vm._v(\" \"),(_vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin)?_c('th',{staticClass:\"header__cell header__cell--large\",attrs:{\"data-cy-user-list-header-subadmins\":\"\",\"scope\":\"col\"}},[_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Group admin for')))])]):_vm._e(),_vm._v(\" \"),_c('th',{staticClass:\"header__cell\",attrs:{\"data-cy-user-list-header-quota\":\"\",\"scope\":\"col\"}},[_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Quota')))])]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('th',{staticClass:\"header__cell header__cell--large\",attrs:{\"data-cy-user-list-header-languages\":\"\",\"scope\":\"col\"}},[_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Language')))])]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath)?_c('th',{staticClass:\"header__cell header__cell--large\",attrs:{\"data-cy-user-list-header-storage-location\":\"\",\"scope\":\"col\"}},[(_vm.showConfig.showUserBackend)?_c('span',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'User backend'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('span',{staticClass:\"header__subtitle\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Storage location'))+\"\\n\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('th',{staticClass:\"header__cell\",attrs:{\"data-cy-user-list-header-last-login\":\"\",\"scope\":\"col\"}},[_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Last login')))])]):_vm._e(),_vm._v(\" \"),_c('th',{staticClass:\"header__cell header__cell--large header__cell--fill\",attrs:{\"data-cy-user-list-header-manager\":\"\",\"scope\":\"col\"}},[_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Manager')))])]),_vm._v(\" \"),_c('th',{staticClass:\"header__cell header__cell--actions\",attrs:{\"data-cy-user-list-header-actions\":\"\",\"scope\":\"col\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'User actions'))+\"\\n\\t\\t\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\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!./UserListHeader.vue?vue&type=style&index=0&id=69afa821&prod&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!./UserListHeader.vue?vue&type=style&index=0&id=69afa821&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserListHeader.vue?vue&type=template&id=69afa821&scoped=true\"\nimport script from \"./UserListHeader.vue?vue&type=script&lang=ts\"\nexport * from \"./UserListHeader.vue?vue&type=script&lang=ts\"\nimport style0 from \"./UserListHeader.vue?vue&type=style&index=0&id=69afa821&prod&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 \"69afa821\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('tr',{staticClass:\"user-list__row\",attrs:{\"data-cy-user-row\":_vm.user.id}},[_c('td',{staticClass:\"row__cell row__cell--avatar\",attrs:{\"data-cy-user-list-cell-avatar\":\"\"}},[(_vm.isLoadingUser)?_c('NcLoadingIcon',{attrs:{\"name\":_vm.t('settings', 'Loading account …'),\"size\":32}}):(_vm.visible)?_c('NcAvatar',{attrs:{\"disable-menu\":\"\",\"show-user-status\":false,\"user\":_vm.user.id}}):_vm._e()],1),_vm._v(\" \"),_c('td',{staticClass:\"row__cell row__cell--displayname\",attrs:{\"data-cy-user-list-cell-displayname\":\"\"}},[(_vm.editing && _vm.user.backendCapabilities.setDisplayName)?[_c('NcTextField',{ref:\"displayNameField\",staticClass:\"user-row-text-field\",class:{ 'icon-loading-small': _vm.loading.displayName },attrs:{\"data-cy-user-list-input-displayname\":\"\",\"data-loading\":_vm.loading.displayName || undefined,\"trailing-button-label\":_vm.t('settings', 'Submit'),\"show-trailing-button\":true,\"disabled\":_vm.loading.displayName || _vm.isLoadingField,\"label\":_vm.t('settings', 'Change display name'),\"trailing-button-icon\":\"arrowRight\",\"value\":_vm.editedDisplayName,\"autocapitalize\":\"off\",\"autocomplete\":\"off\",\"spellcheck\":\"false\"},on:{\"update:value\":function($event){_vm.editedDisplayName=$event},\"trailing-button-click\":_vm.updateDisplayName}})]:[(!_vm.isObfuscated)?_c('strong',{attrs:{\"title\":_vm.user.displayname?.length > 20 ? _vm.user.displayname : null}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.user.displayname)+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('span',{staticClass:\"row__subtitle\"},[_vm._v(_vm._s(_vm.user.id))])]],2),_vm._v(\" \"),_c('td',{staticClass:\"row__cell\",class:{ 'row__cell--obfuscated': _vm.hasObfuscated },attrs:{\"data-cy-user-list-cell-password\":\"\"}},[(_vm.editing && _vm.settings.canChangePassword && _vm.user.backendCapabilities.setPassword)?[_c('NcTextField',{staticClass:\"user-row-text-field\",class:{'icon-loading-small': _vm.loading.password},attrs:{\"data-cy-user-list-input-password\":\"\",\"data-loading\":_vm.loading.password || undefined,\"trailing-button-label\":_vm.t('settings', 'Submit'),\"show-trailing-button\":true,\"disabled\":_vm.loading.password || _vm.isLoadingField,\"minlength\":_vm.minPasswordLength,\"maxlength\":\"469\",\"label\":_vm.t('settings', 'Set new password'),\"trailing-button-icon\":\"arrowRight\",\"value\":_vm.editedPassword,\"autocapitalize\":\"off\",\"autocomplete\":\"new-password\",\"required\":\"\",\"spellcheck\":\"false\",\"type\":\"password\"},on:{\"update:value\":function($event){_vm.editedPassword=$event},\"trailing-button-click\":_vm.updatePassword}})]:(_vm.isObfuscated)?_c('span',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'You do not have permissions to see the details of this account'))+\"\\n\\t\\t\")]):_vm._e()],2),_vm._v(\" \"),_c('td',{staticClass:\"row__cell\",attrs:{\"data-cy-user-list-cell-email\":\"\"}},[(_vm.editing)?[_c('NcTextField',{staticClass:\"user-row-text-field\",class:{'icon-loading-small': _vm.loading.mailAddress},attrs:{\"data-cy-user-list-input-email\":\"\",\"data-loading\":_vm.loading.mailAddress || undefined,\"show-trailing-button\":true,\"trailing-button-label\":_vm.t('settings', 'Submit'),\"label\":_vm.t('settings', 'Set new email address'),\"disabled\":_vm.loading.mailAddress || _vm.isLoadingField,\"trailing-button-icon\":\"arrowRight\",\"value\":_vm.editedMail,\"autocapitalize\":\"off\",\"autocomplete\":\"email\",\"spellcheck\":\"false\",\"type\":\"email\"},on:{\"update:value\":function($event){_vm.editedMail=$event},\"trailing-button-click\":_vm.updateEmail}})]:(!_vm.isObfuscated)?_c('span',{attrs:{\"title\":_vm.user.email?.length > 20 ? _vm.user.email : null}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.email)+\"\\n\\t\\t\")]):_vm._e()],2),_vm._v(\" \"),_c('td',{staticClass:\"row__cell row__cell--large row__cell--multiline\",attrs:{\"data-cy-user-list-cell-groups\":\"\"}},[(_vm.editing)?[_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'groups' + _vm.uniqueId}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Add user to group'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcSelect',{attrs:{\"data-cy-user-list-input-groups\":\"\",\"data-loading\":_vm.loading.groups || undefined,\"input-id\":'groups' + _vm.uniqueId,\"close-on-select\":false,\"disabled\":_vm.isLoadingField,\"loading\":_vm.loading.groups,\"multiple\":true,\"append-to-body\":false,\"options\":_vm.availableGroups,\"placeholder\":_vm.t('settings', 'Add account to group'),\"taggable\":_vm.settings.isAdmin,\"value\":_vm.userGroups,\"label\":\"name\",\"no-wrap\":true,\"create-option\":(value) => ({ name: value, isCreating: true })},on:{\"option:created\":_vm.createGroup,\"option:selected\":options => _vm.addUserGroup(options.at(-1)),\"option:deselected\":_vm.removeUserGroup}})]:(!_vm.isObfuscated)?_c('span',{attrs:{\"title\":_vm.userGroupsLabels?.length > 40 ? _vm.userGroupsLabels : null}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.userGroupsLabels)+\"\\n\\t\\t\")]):_vm._e()],2),_vm._v(\" \"),(_vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin)?_c('td',{staticClass:\"row__cell row__cell--large row__cell--multiline\",attrs:{\"data-cy-user-list-cell-subadmins\":\"\"}},[(_vm.editing && _vm.settings.isAdmin && _vm.subAdminsGroups.length > 0)?[_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'subadmins' + _vm.uniqueId}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Set account as admin for'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcSelect',{attrs:{\"data-cy-user-list-input-subadmins\":\"\",\"data-loading\":_vm.loading.subadmins || undefined,\"input-id\":'subadmins' + _vm.uniqueId,\"close-on-select\":false,\"disabled\":_vm.isLoadingField,\"loading\":_vm.loading.subadmins,\"label\":\"name\",\"append-to-body\":false,\"multiple\":true,\"no-wrap\":true,\"options\":_vm.subAdminsGroups,\"placeholder\":_vm.t('settings', 'Set account as admin for'),\"value\":_vm.userSubAdminsGroups},on:{\"option:deselected\":_vm.removeUserSubAdmin,\"option:selected\":options => _vm.addUserSubAdmin(options.at(-1))}})]:(!_vm.isObfuscated)?_c('span',{attrs:{\"title\":_vm.userSubAdminsGroupsLabels?.length > 40 ? _vm.userSubAdminsGroupsLabels : null}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.userSubAdminsGroupsLabels)+\"\\n\\t\\t\")]):_vm._e()],2):_vm._e(),_vm._v(\" \"),_c('td',{staticClass:\"row__cell\",attrs:{\"data-cy-user-list-cell-quota\":\"\"}},[(_vm.editing)?[_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'quota' + _vm.uniqueId}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Select account quota'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcSelect',{attrs:{\"close-on-select\":true,\"create-option\":_vm.validateQuota,\"data-cy-user-list-input-quota\":\"\",\"data-loading\":_vm.loading.quota || undefined,\"disabled\":_vm.isLoadingField,\"loading\":_vm.loading.quota,\"append-to-body\":false,\"clearable\":false,\"input-id\":'quota' + _vm.uniqueId,\"options\":_vm.quotaOptions,\"placeholder\":_vm.t('settings', 'Select account quota'),\"taggable\":true},on:{\"option:selected\":_vm.setUserQuota},model:{value:(_vm.editedUserQuota),callback:function ($$v) {_vm.editedUserQuota=$$v},expression:\"editedUserQuota\"}})]:(!_vm.isObfuscated)?[_c('span',{attrs:{\"id\":'quota-progress' + _vm.uniqueId}},[_vm._v(_vm._s(_vm.userQuota)+\" (\"+_vm._s(_vm.usedSpace)+\")\")]),_vm._v(\" \"),_c('NcProgressBar',{staticClass:\"row__progress\",class:{\n\t\t\t\t\t'row__progress--warn': _vm.usedQuota > 80,\n\t\t\t\t},attrs:{\"aria-labelledby\":'quota-progress' + _vm.uniqueId,\"value\":_vm.usedQuota}})]:_vm._e()],2),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('td',{staticClass:\"row__cell row__cell--large\",attrs:{\"data-cy-user-list-cell-language\":\"\"}},[(_vm.editing)?[_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'language' + _vm.uniqueId}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Set the language'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcSelect',{attrs:{\"id\":'language' + _vm.uniqueId,\"data-cy-user-list-input-language\":\"\",\"data-loading\":_vm.loading.languages || undefined,\"allow-empty\":false,\"disabled\":_vm.isLoadingField,\"loading\":_vm.loading.languages,\"clearable\":false,\"append-to-body\":false,\"options\":_vm.availableLanguages,\"placeholder\":_vm.t('settings', 'No language set'),\"value\":_vm.userLanguage,\"label\":\"name\"},on:{\"input\":_vm.setUserLanguage}})]:(!_vm.isObfuscated)?_c('span',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.userLanguage.name)+\"\\n\\t\\t\")]):_vm._e()],2):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath)?_c('td',{staticClass:\"row__cell row__cell--large\",attrs:{\"data-cy-user-list-cell-storage-location\":\"\"}},[(!_vm.isObfuscated)?[(_vm.showConfig.showUserBackend)?_c('span',[_vm._v(_vm._s(_vm.user.backend))]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('span',{staticClass:\"row__subtitle\",attrs:{\"title\":_vm.user.storageLocation}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.user.storageLocation)+\"\\n\\t\\t\\t\")]):_vm._e()]:_vm._e()],2):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('td',{staticClass:\"row__cell\",attrs:{\"title\":_vm.userLastLoginTooltip,\"data-cy-user-list-cell-last-login\":\"\"}},[(!_vm.isObfuscated)?_c('span',[_vm._v(_vm._s(_vm.userLastLogin))]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c('td',{staticClass:\"row__cell row__cell--large row__cell--fill\",attrs:{\"data-cy-user-list-cell-manager\":\"\"}},[(_vm.editing)?[_c('label',{staticClass:\"hidden-visually\",attrs:{\"for\":'manager' + _vm.uniqueId}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.managerLabel)+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcSelect',{staticClass:\"select--fill\",attrs:{\"data-cy-user-list-input-manager\":\"\",\"data-loading\":_vm.loading.manager || undefined,\"input-id\":'manager' + _vm.uniqueId,\"close-on-select\":true,\"disabled\":_vm.isLoadingField,\"append-to-body\":false,\"loading\":_vm.loadingPossibleManagers || _vm.loading.manager,\"label\":\"displayname\",\"options\":_vm.possibleManagers,\"placeholder\":_vm.managerLabel},on:{\"open\":_vm.searchInitialUserManager,\"search\":_vm.searchUserManager,\"option:selected\":_vm.updateUserManager},model:{value:(_vm.currentManager),callback:function ($$v) {_vm.currentManager=$$v},expression:\"currentManager\"}})]:(!_vm.isObfuscated)?_c('span',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.manager)+\"\\n\\t\\t\")]):_vm._e()],2),_vm._v(\" \"),_c('td',{staticClass:\"row__cell row__cell--actions\",attrs:{\"data-cy-user-list-cell-actions\":\"\"}},[(_vm.visible && !_vm.isObfuscated && _vm.canEdit && !_vm.loading.all)?_c('UserRowActions',{attrs:{\"actions\":_vm.userActions,\"disabled\":_vm.isLoadingField,\"edit\":_vm.editing,\"user\":_vm.user},on:{\"update:edit\":_vm.toggleEdit}}):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowActions.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowActions.vue?vue&type=script&lang=ts\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('NcActions',{attrs:{\"aria-label\":_vm.t('settings', 'Toggle account actions menu'),\"disabled\":_vm.disabled,\"inline\":1}},[_c('NcActionButton',{attrs:{\"data-cy-user-list-action-toggle-edit\":`${_vm.edit}`,\"disabled\":_vm.disabled},on:{\"click\":_vm.toggleEdit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{key:_vm.editSvg,attrs:{\"svg\":_vm.editSvg,\"aria-hidden\":\"true\"}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.edit ? _vm.t('settings', 'Done') : _vm.t('settings', 'Edit'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_vm._l((_vm.actions),function({ action, icon, text },index){return _c('NcActionButton',{key:index,attrs:{\"disabled\":_vm.disabled,\"aria-label\":text,\"icon\":icon},on:{\"click\":(event) => action(event, { ..._vm.user })}},[_vm._v(\"\\n\\t\\t\"+_vm._s(text)+\"\\n\\t\")])})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./UserRowActions.vue?vue&type=template&id=645e3075\"\nimport script from \"./UserRowActions.vue?vue&type=script&lang=ts\"\nexport * from \"./UserRowActions.vue?vue&type=script&lang=ts\"\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\nexport default component.exports","/**\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\nexport default {\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tsettings: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tgroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tsubAdminsGroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tquotaOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tlanguages: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\tcomputed: {\n\t\tshowConfig() {\n\t\t\treturn this.$store.getters.getShowConfig\n\t\t},\n\n\t\t/* GROUPS MANAGEMENT */\n\t\tuserGroups() {\n\t\t\tconst userGroups = this.groups.filter(group => this.user.groups.includes(group.id))\n\t\t\treturn userGroups\n\t\t},\n\t\tuserSubAdminsGroups() {\n\t\t\tconst userSubAdminsGroups = this.subAdminsGroups.filter(group => this.user.subadmin.includes(group.id))\n\t\t\treturn userSubAdminsGroups\n\t\t},\n\t\tavailableGroups() {\n\t\t\treturn this.groups.map((group) => {\n\t\t\t\t// clone object because we don't want\n\t\t\t\t// to edit the original groups\n\t\t\t\tconst groupClone = Object.assign({}, group)\n\n\t\t\t\t// two settings here:\n\t\t\t\t// 1. user NOT in group but no permission to add\n\t\t\t\t// 2. user is in group but no permission to remove\n\t\t\t\tgroupClone.$isDisabled\n\t\t\t\t\t= (group.canAdd === false\n\t\t\t\t\t\t&& !this.user.groups.includes(group.id))\n\t\t\t\t\t|| (group.canRemove === false\n\t\t\t\t\t\t&& this.user.groups.includes(group.id))\n\t\t\t\treturn groupClone\n\t\t\t})\n\t\t},\n\n\t\t/* QUOTA MANAGEMENT */\n\t\tusedSpace() {\n\t\t\tif (this.user.quota.used) {\n\t\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(this.user.quota.used) })\n\t\t\t}\n\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(0) })\n\t\t},\n\t\tusedQuota() {\n\t\t\tlet quota = this.user.quota.quota\n\t\t\tif (quota > 0) {\n\t\t\t\tquota = Math.min(100, Math.round(this.user.quota.used / quota * 100))\n\t\t\t} else {\n\t\t\t\tconst usedInGB = this.user.quota.used / (10 * Math.pow(2, 30))\n\t\t\t\t// asymptotic curve approaching 50% at 10GB to visualize used stace with infinite quota\n\t\t\t\tquota = 95 * (1 - (1 / (usedInGB + 1)))\n\t\t\t}\n\t\t\treturn isNaN(quota) ? 0 : quota\n\t\t},\n\t\t// Mapping saved values to objects\n\t\tuserQuota() {\n\t\t\tif (this.user.quota.quota >= 0) {\n\t\t\t\t// if value is valid, let's map the quotaOptions or return custom quota\n\t\t\t\tconst humanQuota = OC.Util.humanFileSize(this.user.quota.quota)\n\t\t\t\tconst userQuota = this.quotaOptions.find(quota => quota.id === humanQuota)\n\t\t\t\treturn userQuota || { id: humanQuota, label: humanQuota }\n\t\t\t} else if (this.user.quota.quota === 'default') {\n\t\t\t\t// default quota is replaced by the proper value on load\n\t\t\t\treturn this.quotaOptions[0]\n\t\t\t}\n\t\t\treturn this.quotaOptions[1] // unlimited\n\t\t},\n\n\t\t/* PASSWORD POLICY? */\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\n\t\t/* LANGUAGE */\n\t\tuserLanguage() {\n\t\t\tconst availableLanguages = this.languages[0].languages.concat(this.languages[1].languages)\n\t\t\tconst userLang = availableLanguages.find(lang => lang.code === this.user.language)\n\t\t\tif (typeof userLang !== 'object' && this.user.language !== '') {\n\t\t\t\treturn {\n\t\t\t\t\tcode: this.user.language,\n\t\t\t\t\tname: this.user.language,\n\t\t\t\t}\n\t\t\t} else if (this.user.language === '') {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn userLang\n\t\t},\n\n\t\t/* LAST LOGIN */\n\t\tuserLastLoginTooltip() {\n\t\t\tif (this.user.lastLogin > 0) {\n\t\t\t\treturn OC.Util.formatDate(this.user.lastLogin)\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\t\tuserLastLogin() {\n\t\t\tif (this.user.lastLogin > 0) {\n\t\t\t\treturn OC.Util.relativeModifiedDate(this.user.lastLogin)\n\t\t\t}\n\t\t\treturn t('settings', 'Never')\n\t\t},\n\t},\n}\n","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n - @author Gary Kim <gary@garykim.dev>\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\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\n<template>\n\t<tr class=\"user-list__row\"\n\t\t:data-cy-user-row=\"user.id\">\n\t\t<td class=\"row__cell row__cell--avatar\" data-cy-user-list-cell-avatar>\n\t\t\t<NcLoadingIcon v-if=\"isLoadingUser\"\n\t\t\t\t:name=\"t('settings', 'Loading account …')\"\n\t\t\t\t:size=\"32\" />\n\t\t\t<NcAvatar v-else-if=\"visible\"\n\t\t\t\tdisable-menu\n\t\t\t\t:show-user-status=\"false\"\n\t\t\t\t:user=\"user.id\" />\n\t\t</td>\n\n\t\t<td class=\"row__cell row__cell--displayname\" data-cy-user-list-cell-displayname>\n\t\t\t<template v-if=\"editing && user.backendCapabilities.setDisplayName\">\n\t\t\t\t<NcTextField ref=\"displayNameField\"\n\t\t\t\t\tclass=\"user-row-text-field\"\n\t\t\t\t\tdata-cy-user-list-input-displayname\n\t\t\t\t\t:data-loading=\"loading.displayName || undefined\"\n\t\t\t\t\t:trailing-button-label=\"t('settings', 'Submit')\"\n\t\t\t\t\t:class=\"{ 'icon-loading-small': loading.displayName }\"\n\t\t\t\t\t:show-trailing-button=\"true\"\n\t\t\t\t\t:disabled=\"loading.displayName || isLoadingField\"\n\t\t\t\t\t:label=\"t('settings', 'Change display name')\"\n\t\t\t\t\ttrailing-button-icon=\"arrowRight\"\n\t\t\t\t\t:value.sync=\"editedDisplayName\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\t@trailing-button-click=\"updateDisplayName\" />\n\t\t\t</template>\n\t\t\t<template v-else>\n\t\t\t\t<strong v-if=\"!isObfuscated\"\n\t\t\t\t\t:title=\"user.displayname?.length > 20 ? user.displayname : null\">\n\t\t\t\t\t{{ user.displayname }}\n\t\t\t\t</strong>\n\t\t\t\t<span class=\"row__subtitle\">{{ user.id }}</span>\n\t\t\t</template>\n\t\t</td>\n\n\t\t<td data-cy-user-list-cell-password\n\t\t\tclass=\"row__cell\"\n\t\t\t:class=\"{ 'row__cell--obfuscated': hasObfuscated }\">\n\t\t\t<template v-if=\"editing && settings.canChangePassword && user.backendCapabilities.setPassword\">\n\t\t\t\t<NcTextField class=\"user-row-text-field\"\n\t\t\t\t\tdata-cy-user-list-input-password\n\t\t\t\t\t:data-loading=\"loading.password || undefined\"\n\t\t\t\t\t:trailing-button-label=\"t('settings', 'Submit')\"\n\t\t\t\t\t:class=\"{'icon-loading-small': loading.password}\"\n\t\t\t\t\t:show-trailing-button=\"true\"\n\t\t\t\t\t:disabled=\"loading.password || isLoadingField\"\n\t\t\t\t\t:minlength=\"minPasswordLength\"\n\t\t\t\t\tmaxlength=\"469\"\n\t\t\t\t\t:label=\"t('settings', 'Set new password')\"\n\t\t\t\t\ttrailing-button-icon=\"arrowRight\"\n\t\t\t\t\t:value.sync=\"editedPassword\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\trequired\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\ttype=\"password\"\n\t\t\t\t\t@trailing-button-click=\"updatePassword\" />\n\t\t\t</template>\n\t\t\t<span v-else-if=\"isObfuscated\">\n\t\t\t\t{{ t('settings', 'You do not have permissions to see the details of this account') }}\n\t\t\t</span>\n\t\t</td>\n\n\t\t<td class=\"row__cell\" data-cy-user-list-cell-email>\n\t\t\t<template v-if=\"editing\">\n\t\t\t\t<NcTextField class=\"user-row-text-field\"\n\t\t\t\t\t:class=\"{'icon-loading-small': loading.mailAddress}\"\n\t\t\t\t\tdata-cy-user-list-input-email\n\t\t\t\t\t:data-loading=\"loading.mailAddress || undefined\"\n\t\t\t\t\t:show-trailing-button=\"true\"\n\t\t\t\t\t:trailing-button-label=\"t('settings', 'Submit')\"\n\t\t\t\t\t:label=\"t('settings', 'Set new email address')\"\n\t\t\t\t\t:disabled=\"loading.mailAddress || isLoadingField\"\n\t\t\t\t\ttrailing-button-icon=\"arrowRight\"\n\t\t\t\t\t:value.sync=\"editedMail\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\tautocomplete=\"email\"\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\ttype=\"email\"\n\t\t\t\t\t@trailing-button-click=\"updateEmail\" />\n\t\t\t</template>\n\t\t\t<span v-else-if=\"!isObfuscated\"\n\t\t\t\t:title=\"user.email?.length > 20 ? user.email : null\">\n\t\t\t\t{{ user.email }}\n\t\t\t</span>\n\t\t</td>\n\n\t\t<td class=\"row__cell row__cell--large row__cell--multiline\" data-cy-user-list-cell-groups>\n\t\t\t<template v-if=\"editing\">\n\t\t\t\t<label class=\"hidden-visually\"\n\t\t\t\t\t:for=\"'groups' + uniqueId\">\n\t\t\t\t\t{{ t('settings', 'Add user to group') }}\n\t\t\t\t</label>\n\t\t\t\t<NcSelect data-cy-user-list-input-groups\n\t\t\t\t\t:data-loading=\"loading.groups || undefined\"\n\t\t\t\t\t:input-id=\"'groups' + uniqueId\"\n\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t:disabled=\"isLoadingField\"\n\t\t\t\t\t:loading=\"loading.groups\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:append-to-body=\"false\"\n\t\t\t\t\t:options=\"availableGroups\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Add account to group')\"\n\t\t\t\t\t:taggable=\"settings.isAdmin\"\n\t\t\t\t\t:value=\"userGroups\"\n\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t:no-wrap=\"true\"\n\t\t\t\t\t:create-option=\"(value) => ({ name: value, isCreating: true })\"\n\t\t\t\t\t@option:created=\"createGroup\"\n\t\t\t\t\t@option:selected=\"options => addUserGroup(options.at(-1))\"\n\t\t\t\t\t@option:deselected=\"removeUserGroup\" />\n\t\t\t</template>\n\t\t\t<span v-else-if=\"!isObfuscated\"\n\t\t\t\t:title=\"userGroupsLabels?.length > 40 ? userGroupsLabels : null\">\n\t\t\t\t{{ userGroupsLabels }}\n\t\t\t</span>\n\t\t</td>\n\n\t\t<td v-if=\"subAdminsGroups.length > 0 && settings.isAdmin\"\n\t\t\tdata-cy-user-list-cell-subadmins\n\t\t\tclass=\"row__cell row__cell--large row__cell--multiline\">\n\t\t\t<template v-if=\"editing && settings.isAdmin && subAdminsGroups.length > 0\">\n\t\t\t\t<label class=\"hidden-visually\"\n\t\t\t\t\t:for=\"'subadmins' + uniqueId\">\n\t\t\t\t\t{{ t('settings', 'Set account as admin for') }}\n\t\t\t\t</label>\n\t\t\t\t<NcSelect data-cy-user-list-input-subadmins\n\t\t\t\t\t:data-loading=\"loading.subadmins || undefined\"\n\t\t\t\t\t:input-id=\"'subadmins' + uniqueId\"\n\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t:disabled=\"isLoadingField\"\n\t\t\t\t\t:loading=\"loading.subadmins\"\n\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t:append-to-body=\"false\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:no-wrap=\"true\"\n\t\t\t\t\t:options=\"subAdminsGroups\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Set account as admin for')\"\n\t\t\t\t\t:value=\"userSubAdminsGroups\"\n\t\t\t\t\t@option:deselected=\"removeUserSubAdmin\"\n\t\t\t\t\t@option:selected=\"options => addUserSubAdmin(options.at(-1))\" />\n\t\t\t</template>\n\t\t\t<span v-else-if=\"!isObfuscated\"\n\t\t\t\t:title=\"userSubAdminsGroupsLabels?.length > 40 ? userSubAdminsGroupsLabels : null\">\n\t\t\t\t{{ userSubAdminsGroupsLabels }}\n\t\t\t</span>\n\t\t</td>\n\n\t\t<td class=\"row__cell\" data-cy-user-list-cell-quota>\n\t\t\t<template v-if=\"editing\">\n\t\t\t\t<label class=\"hidden-visually\"\n\t\t\t\t\t:for=\"'quota' + uniqueId\">\n\t\t\t\t\t{{ t('settings', 'Select account quota') }}\n\t\t\t\t</label>\n\t\t\t\t<NcSelect v-model=\"editedUserQuota\"\n\t\t\t\t\t:close-on-select=\"true\"\n\t\t\t\t\t:create-option=\"validateQuota\"\n\t\t\t\t\tdata-cy-user-list-input-quota\n\t\t\t\t\t:data-loading=\"loading.quota || undefined\"\n\t\t\t\t\t:disabled=\"isLoadingField\"\n\t\t\t\t\t:loading=\"loading.quota\"\n\t\t\t\t\t:append-to-body=\"false\"\n\t\t\t\t\t:clearable=\"false\"\n\t\t\t\t\t:input-id=\"'quota' + uniqueId\"\n\t\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Select account quota')\"\n\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t@option:selected=\"setUserQuota\" />\n\t\t\t</template>\n\t\t\t<template v-else-if=\"!isObfuscated\">\n\t\t\t\t<span :id=\"'quota-progress' + uniqueId\">{{ userQuota }} ({{ usedSpace }})</span>\n\t\t\t\t<NcProgressBar :aria-labelledby=\"'quota-progress' + uniqueId\"\n\t\t\t\t\tclass=\"row__progress\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t'row__progress--warn': usedQuota > 80,\n\t\t\t\t\t}\"\n\t\t\t\t\t:value=\"usedQuota\" />\n\t\t\t</template>\n\t\t</td>\n\n\t\t<td v-if=\"showConfig.showLanguages\"\n\t\t\tclass=\"row__cell row__cell--large\"\n\t\t\tdata-cy-user-list-cell-language>\n\t\t\t<template v-if=\"editing\">\n\t\t\t\t<label class=\"hidden-visually\"\n\t\t\t\t\t:for=\"'language' + uniqueId\">\n\t\t\t\t\t{{ t('settings', 'Set the language') }}\n\t\t\t\t</label>\n\t\t\t\t<NcSelect :id=\"'language' + uniqueId\"\n\t\t\t\t\tdata-cy-user-list-input-language\n\t\t\t\t\t:data-loading=\"loading.languages || undefined\"\n\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t:disabled=\"isLoadingField\"\n\t\t\t\t\t:loading=\"loading.languages\"\n\t\t\t\t\t:clearable=\"false\"\n\t\t\t\t\t:append-to-body=\"false\"\n\t\t\t\t\t:options=\"availableLanguages\"\n\t\t\t\t\t:placeholder=\"t('settings', 'No language set')\"\n\t\t\t\t\t:value=\"userLanguage\"\n\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t@input=\"setUserLanguage\" />\n\t\t\t</template>\n\t\t\t<span v-else-if=\"!isObfuscated\">\n\t\t\t\t{{ userLanguage.name }}\n\t\t\t</span>\n\t\t</td>\n\n\t\t<td v-if=\"showConfig.showUserBackend || showConfig.showStoragePath\"\n\t\t\tdata-cy-user-list-cell-storage-location\n\t\t\tclass=\"row__cell row__cell--large\">\n\t\t\t<template v-if=\"!isObfuscated\">\n\t\t\t\t<span v-if=\"showConfig.showUserBackend\">{{ user.backend }}</span>\n\t\t\t\t<span v-if=\"showConfig.showStoragePath\"\n\t\t\t\t\t:title=\"user.storageLocation\"\n\t\t\t\t\tclass=\"row__subtitle\">\n\t\t\t\t\t{{ user.storageLocation }}\n\t\t\t\t</span>\n\t\t\t</template>\n\t\t</td>\n\n\t\t<td v-if=\"showConfig.showLastLogin\"\n\t\t\t:title=\"userLastLoginTooltip\"\n\t\t\tclass=\"row__cell\"\n\t\t\tdata-cy-user-list-cell-last-login>\n\t\t\t<span v-if=\"!isObfuscated\">{{ userLastLogin }}</span>\n\t\t</td>\n\n\t\t<td class=\"row__cell row__cell--large row__cell--fill\" data-cy-user-list-cell-manager>\n\t\t\t<template v-if=\"editing\">\n\t\t\t\t<label class=\"hidden-visually\"\n\t\t\t\t\t:for=\"'manager' + uniqueId\">\n\t\t\t\t\t{{ managerLabel }}\n\t\t\t\t</label>\n\t\t\t\t<NcSelect v-model=\"currentManager\"\n\t\t\t\t\tclass=\"select--fill\"\n\t\t\t\t\tdata-cy-user-list-input-manager\n\t\t\t\t\t:data-loading=\"loading.manager || undefined\"\n\t\t\t\t\t:input-id=\"'manager' + uniqueId\"\n\t\t\t\t\t:close-on-select=\"true\"\n\t\t\t\t\t:disabled=\"isLoadingField\"\n\t\t\t\t\t:append-to-body=\"false\"\n\t\t\t\t\t:loading=\"loadingPossibleManagers || loading.manager\"\n\t\t\t\t\tlabel=\"displayname\"\n\t\t\t\t\t:options=\"possibleManagers\"\n\t\t\t\t\t:placeholder=\"managerLabel\"\n\t\t\t\t\t@open=\"searchInitialUserManager\"\n\t\t\t\t\t@search=\"searchUserManager\"\n\t\t\t\t\t@option:selected=\"updateUserManager\" />\n\t\t\t</template>\n\t\t\t<span v-else-if=\"!isObfuscated\">\n\t\t\t\t{{ user.manager }}\n\t\t\t</span>\n\t\t</td>\n\n\t\t<td class=\"row__cell row__cell--actions\" data-cy-user-list-cell-actions>\n\t\t\t<UserRowActions v-if=\"visible && !isObfuscated && canEdit && !loading.all\"\n\t\t\t\t:actions=\"userActions\"\n\t\t\t\t:disabled=\"isLoadingField\"\n\t\t\t\t:edit=\"editing\"\n\t\t\t\t:user=\"user\"\n\t\t\t\t@update:edit=\"toggleEdit\" />\n\t\t</td>\n\t</tr>\n</template>\n\n<script>\nimport { formatFileSize, parseFileSize } from '@nextcloud/files'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { showSuccess, showError } from '@nextcloud/dialogs'\n\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'\n\nimport UserRowActions from './UserRowActions.vue'\n\nimport UserRowMixin from '../../mixins/UserRowMixin.js'\nimport { isObfuscated, unlimitedQuota } from '../../utils/userUtils.ts';\n\nexport default {\n\tname: 'UserRow',\n\n\tcomponents: {\n\t\tNcAvatar,\n\t\tNcLoadingIcon,\n\t\tNcProgressBar,\n\t\tNcSelect,\n\t\tNcTextField,\n\t\tUserRowActions,\n\t},\n\n\tmixins: [\n\t\tUserRowMixin,\n\t],\n\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tvisible: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tusers: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\thasObfuscated: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tgroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tsubAdminsGroups: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tquotaOptions: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tlanguages: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tsettings: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tselectedQuota: false,\n\t\t\trand: Math.random().toString(36).substring(2),\n\t\t\tloadingPossibleManagers: false,\n\t\t\tpossibleManagers: [],\n\t\t\tcurrentManager: '',\n\t\t\tediting: false,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tdisplayName: false,\n\t\t\t\tpassword: false,\n\t\t\t\tmailAddress: false,\n\t\t\t\tgroups: false,\n\t\t\t\tsubadmins: false,\n\t\t\t\tquota: false,\n\t\t\t\tdelete: false,\n\t\t\t\tdisable: false,\n\t\t\t\tlanguages: false,\n\t\t\t\twipe: false,\n\t\t\t\tmanager: false,\n\t\t\t},\n\t\t\teditedDisplayName: this.user.displayname,\n\t\t\teditedPassword: '',\n\t\t\teditedMail: this.user.email ?? '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tmanagerLabel() {\n\t\t\t// TRANSLATORS This string describes a person's manager in the context of an organization\n\t\t\treturn t('settings', 'Set line manager')\n\t\t},\n\n\t\tisObfuscated() {\n\t\t\treturn isObfuscated(this.user)\n\t\t},\n\n\t\tshowConfig() {\n\t\t\treturn this.$store.getters.getShowConfig\n\t\t},\n\n\t\tisLoadingUser() {\n\t\t\treturn this.loading.delete || this.loading.disable || this.loading.wipe\n\t\t},\n\n\t\tisLoadingField() {\n\t\t\treturn this.loading.delete || this.loading.disable || this.loading.all\n\t\t},\n\n\t\tuniqueId() {\n\t\t\treturn encodeURIComponent(this.user.id + this.rand)\n\t\t},\n\n\t\tuserGroupsLabels() {\n\t\t\treturn this.userGroups\n\t\t\t\t.map(group => group.name)\n\t\t\t\t.join(', ')\n\t\t},\n\n\t\tuserSubAdminsGroupsLabels() {\n\t\t\treturn this.userSubAdminsGroups\n\t\t\t\t.map(group => group.name)\n\t\t\t\t.join(', ')\n\t\t},\n\n\t\tusedSpace() {\n\t\t\tif (this.user.quota?.used) {\n\t\t\t\treturn t('settings', '{size} used', { size: formatFileSize(this.user.quota?.used) })\n\t\t\t}\n\t\t\treturn t('settings', '{size} used', { size: formatFileSize(0) })\n\t\t},\n\n\t\tcanEdit() {\n\t\t\treturn getCurrentUser().uid !== this.user.id || this.settings.isAdmin\n\t\t},\n\n\t\tuserQuota() {\n\t\t\tlet quota = this.user.quota?.quota\n\n\t\t\tif (quota === 'default') {\n\t\t\t\tquota = this.settings.defaultQuota\n\t\t\t\tif (quota !== 'none') {\n\t\t\t\t\t// convert to numeric value to match what the server would usually return\n\t\t\t\t\tquota = parseFileSize(quota, true)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// when the default quota is unlimited, the server returns -3 here, map it to \"none\"\n\t\t\tif (quota === 'none' || quota === -3) {\n\t\t\t\treturn t('settings', 'Unlimited')\n\t\t\t} else if (quota >= 0) {\n\t\t\t\treturn formatFileSize(quota)\n\t\t\t}\n\t\t\treturn formatFileSize(0)\n\t\t},\n\n\t\tuserActions() {\n\t\t\tconst actions = [\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-delete',\n\t\t\t\t\ttext: t('settings', 'Delete account'),\n\t\t\t\t\taction: this.deleteUser,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-delete',\n\t\t\t\t\ttext: t('settings', 'Disconnect all devices and delete local data'),\n\t\t\t\t\taction: this.wipeUserDevices,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: this.user.enabled ? 'icon-close' : 'icon-add',\n\t\t\t\t\ttext: this.user.enabled ? t('settings', 'Disable account') : t('settings', 'Enable account'),\n\t\t\t\t\taction: this.enableDisableUser,\n\t\t\t\t},\n\t\t\t]\n\t\t\tif (this.user.email !== null && this.user.email !== '') {\n\t\t\t\tactions.push({\n\t\t\t\t\ticon: 'icon-mail',\n\t\t\t\t\ttext: t('settings', 'Resend welcome email'),\n\t\t\t\t\taction: this.sendWelcomeMail,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn actions.concat(this.externalActions)\n\t\t},\n\n\t\t// mapping saved values to objects\n\t\teditedUserQuota: {\n\t\t\tget() {\n\t\t\t\tif (this.selectedQuota !== false) {\n\t\t\t\t\treturn this.selectedQuota\n\t\t\t\t}\n\t\t\t\tif (this.settings.defaultQuota !== unlimitedQuota.id && parseFileSize(this.settings.defaultQuota, true) >= 0) {\n\t\t\t\t\t// if value is valid, let's map the quotaOptions or return custom quota\n\t\t\t\t\treturn { id: this.settings.defaultQuota, label: this.settings.defaultQuota }\n\t\t\t\t}\n\t\t\t\treturn unlimitedQuota // unlimited\n\t\t\t},\n\t\t\tset(quota) {\n\t\t\t\tthis.selectedQuota = quota\n\t\t\t},\n\t\t},\n\n\t\tavailableLanguages() {\n\t\t\treturn this.languages[0].languages.concat(this.languages[1].languages)\n\t\t},\n\t},\n\n\tasync beforeMount() {\n\t\tif (this.user.manager) {\n\t\t\tawait this.initManager(this.user.manager)\n\t\t}\n\t},\n\n\tmethods: {\n\t\twipeUserDevices() {\n\t\t\tconst userid = this.user.id\n\t\t\tOC.dialogs.confirmDestructive(\n\t\t\t\tt('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 }),\n\t\t\t\tt('settings', 'Remote wipe of devices'),\n\t\t\t\t{\n\t\t\t\t\ttype: OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\t\tconfirm: t('settings', 'Wipe {userid}\\'s devices', { userid }),\n\t\t\t\t\tconfirmClasses: 'error',\n\t\t\t\t\tcancel: t('settings', 'Cancel'),\n\t\t\t\t},\n\t\t\t\t(result) => {\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tthis.loading.wipe = true\n\t\t\t\t\t\tthis.loading.all = true\n\t\t\t\t\t\tthis.$store.dispatch('wipeUserDevices', userid)\n\t\t\t\t\t\t\t.then(() => showSuccess(t('settings', 'Wiped {userid}\\'s devices', { userid })), { timeout: 2000 })\n\t\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\t\tthis.loading.wipe = false\n\t\t\t\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue,\n\t\t\t)\n\t\t},\n\n\t\tfilterManagers(managers) {\n\t\t\treturn managers.filter((manager) => manager.id !== this.user.id)\n\t\t},\n\n\t\tasync initManager(userId) {\n\t\t\tawait this.$store.dispatch('getUser', userId).then(response => {\n\t\t\t\tthis.currentManager = response?.data.ocs.data\n\t\t\t})\n\t\t},\n\n\t\tasync searchInitialUserManager() {\n\t\t\tthis.loadingPossibleManagers = true\n\t\t\tawait this.searchUserManager()\n\t\t\tthis.loadingPossibleManagers = false\n\t\t},\n\n\t\tasync searchUserManager(query) {\n\t\t\tawait this.$store.dispatch('searchUsers', { offset: 0, limit: 10, search: query }).then(response => {\n\t\t\t\tconst users = response?.data ? this.filterManagers(Object.values(response?.data.ocs.data.users)) : []\n\t\t\t\tif (users.length > 0) {\n\t\t\t\t\tthis.possibleManagers = users\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\tasync updateUserManager(manager) {\n\t\t\tif (manager === null) {\n\t\t\t\tthis.currentManager = ''\n\t\t\t}\n\t\t\tthis.loading.manager = true\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setUserData', {\n\t\t\t\t\tuserid: this.user.id,\n\t\t\t\t\tkey: 'manager',\n\t\t\t\t\tvalue: this.currentManager ? this.currentManager.id : '',\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\t// TRANSLATORS This string describes a line manager in the context of an organization\n\t\t\t\tshowError(t('setting', 'Failed to update line manager'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.manager = false\n\t\t\t}\n\t\t},\n\n\t\tdeleteUser() {\n\t\t\tconst userid = this.user.id\n\t\t\tOC.dialogs.confirmDestructive(\n\t\t\t\tt('settings', 'Fully delete {userid}\\'s account including all their personal files, app data, etc.', { userid }),\n\t\t\t\tt('settings', 'Account deletion'),\n\t\t\t\t{\n\t\t\t\t\ttype: OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\t\tconfirm: t('settings', 'Delete {userid}\\'s account', { userid }),\n\t\t\t\t\tconfirmClasses: 'error',\n\t\t\t\t\tcancel: t('settings', 'Cancel'),\n\t\t\t\t},\n\t\t\t\t(result) => {\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tthis.loading.delete = true\n\t\t\t\t\t\tthis.loading.all = true\n\t\t\t\t\t\treturn this.$store.dispatch('deleteUser', userid)\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\tthis.loading.delete = false\n\t\t\t\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue,\n\t\t\t)\n\t\t},\n\n\t\tenableDisableUser() {\n\t\t\tthis.loading.delete = true\n\t\t\tthis.loading.all = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst enabled = !this.user.enabled\n\t\t\treturn this.$store.dispatch('enableDisableUser', {\n\t\t\t\tuserid,\n\t\t\t\tenabled,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading.delete = false\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Set user displayName\n\t\t *\n\t\t * @param {string} displayName The display name\n\t\t */\n\t\tupdateDisplayName() {\n\t\t\tthis.loading.displayName = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'displayname',\n\t\t\t\tvalue: this.editedDisplayName,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.displayName = false\n\t\t\t\tif (this.editedDisplayName === this.user.displayname) {\n\t\t\t\t\tshowSuccess(t('setting', 'Display name was successfully changed'))\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Set user password\n\t\t *\n\t\t * @param {string} password The email address\n\t\t */\n\t\tupdatePassword() {\n\t\t\tthis.loading.password = true\n\t\t\tif (this.editedPassword.length === 0) {\n\t\t\t\tshowError(t('setting', \"Password can't be empty\"))\n\t\t\t\tthis.loading.password = false\n\t\t\t} else {\n\t\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\t\tuserid: this.user.id,\n\t\t\t\t\tkey: 'password',\n\t\t\t\t\tvalue: this.editedPassword,\n\t\t\t\t}).then(() => {\n\t\t\t\t\tthis.loading.password = false\n\t\t\t\t\tthis.editedPassword = ''\n\t\t\t\t\tshowSuccess(t('setting', 'Password was successfully changed'))\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Set user mailAddress\n\t\t *\n\t\t * @param {string} mailAddress The email address\n\t\t */\n\t\tupdateEmail() {\n\t\t\tthis.loading.mailAddress = true\n\t\t\tif (this.editedMail === '') {\n\t\t\t\tshowError(t('setting', \"Email can't be empty\"))\n\t\t\t\tthis.loading.mailAddress = false\n\t\t\t\tthis.editedMail = this.user.email\n\t\t\t} else {\n\t\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\t\tuserid: this.user.id,\n\t\t\t\t\tkey: 'email',\n\t\t\t\t\tvalue: this.editedMail,\n\t\t\t\t}).then(() => {\n\t\t\t\t\tthis.loading.mailAddress = false\n\t\t\t\t\tif (this.editedMail === this.user.email) {\n\t\t\t\t\t\tshowSuccess(t('setting', 'Email was successfully changed'))\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Create a new group and add user to it\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t */\n\t\tasync createGroup({ name: gid }) {\n\t\t\tthis.loading = { groups: true, subadmins: true }\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addGroup', gid)\n\t\t\t\tconst userid = this.user.id\n\t\t\t\tawait this.$store.dispatch('addUserGroup', { userid, gid })\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = { groups: false, subadmins: false }\n\t\t\t}\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\n\t\t},\n\n\t\t/**\n\t\t * Add user to group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync addUserGroup(group) {\n\t\t\tif (group.isCreating) {\n\t\t\t\t// This is NcSelect's internal value for a new inputted group name\n\t\t\t\t// Ignore\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.loading.groups = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\t\t\tif (group.canAdd === false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addUserGroup', { userid, gid })\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.groups = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove user from group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync removeUserGroup(group) {\n\t\t\tif (group.canRemove === false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tthis.loading.groups = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('removeUserGroup', {\n\t\t\t\t\tuserid,\n\t\t\t\t\tgid,\n\t\t\t\t})\n\t\t\t\tthis.loading.groups = false\n\t\t\t\t// remove user from current list if current list is the removed group\n\t\t\t\tif (this.$route.params.selectedGroup === gid) {\n\t\t\t\t\tthis.$store.commit('deleteUser', userid)\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tthis.loading.groups = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add user to group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync addUserSubAdmin(group) {\n\t\t\tthis.loading.subadmins = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addUserSubAdmin', {\n\t\t\t\t\tuserid,\n\t\t\t\t\tgid,\n\t\t\t\t})\n\t\t\t\tthis.loading.subadmins = false\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove user from group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync removeUserSubAdmin(group) {\n\t\t\tthis.loading.subadmins = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('removeUserSubAdmin', {\n\t\t\t\t\tuserid,\n\t\t\t\t\tgid,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.subadmins = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Dispatch quota set request\n\t\t *\n\t\t * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n\t\t * @return {string}\n\t\t */\n\t\tasync setUserQuota(quota = 'none') {\n\t\t\t// Make sure correct label is set for unlimited quota\n\t\t\tif (quota === 'none') {\n\t\t\t\tquota = unlimitedQuota\n\t\t\t}\n\t\t\tthis.loading.quota = true\n\n\t\t\t// ensure we only send the preset id\n\t\t\tquota = quota.id ? quota.id : quota\n\n\t\t\ttry {\n\t\t\t\t// If human readable format, convert to raw float format\n\t\t\t\t// Else just send the raw string\n\t\t\t\tconst value = (parseFileSize(quota, true) || quota).toString()\n\t\t\t\tawait this.$store.dispatch('setUserData', {\n\t\t\t\t\tuserid: this.user.id,\n\t\t\t\t\tkey: 'quota',\n\t\t\t\t\tvalue,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.quota = false\n\t\t\t}\n\t\t\treturn quota\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t *\n\t\t * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n\t\t * @return {object} The validated quota object or unlimited quota if input is invalid\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\tif (typeof quota === 'object') {\n\t\t\t\tquota = quota?.id || quota.label\n\t\t\t}\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = parseFileSize(quota, true)\n\t\t\tif (validQuota === null) {\n\t\t\t\treturn unlimitedQuota\n\t\t\t} else {\n\t\t\t\t// unify format output\n\t\t\t\tquota = formatFileSize(parseFileSize(quota, true))\n\t\t\t\treturn { id: quota, label: quota }\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Dispatch language set request\n\t\t *\n\t\t * @param {object} lang language object {code:'en', name:'English'}\n\t\t * @return {object}\n\t\t */\n\t\tasync setUserLanguage(lang) {\n\t\t\tthis.loading.languages = true\n\t\t\t// ensure we only send the preset id\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setUserData', {\n\t\t\t\t\tuserid: this.user.id,\n\t\t\t\t\tkey: 'language',\n\t\t\t\t\tvalue: lang.code,\n\t\t\t\t})\n\t\t\t\tthis.loading.languages = false\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t}\n\t\t\treturn lang\n\t\t},\n\n\t\t/**\n\t\t * Dispatch new welcome mail request\n\t\t */\n\t\tsendWelcomeMail() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch('sendWelcomeMail', this.user.id)\n\t\t\t\t.then(() => showSuccess(t('setting', 'Welcome mail sent!'), { timeout: 2000 }))\n\t\t\t\t.finally(() => {\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t})\n\t\t},\n\n\t\tasync toggleEdit() {\n\t\t\tthis.editing = !this.editing\n\t\t\tif (this.editing) {\n\t\t\t\tawait this.$nextTick()\n\t\t\t\tthis.$refs.displayNameField?.$refs?.inputField?.$refs?.input?.focus()\n\t\t\t}\n\t\t\tif (this.editedDisplayName !== this.user.displayname) {\n\t\t\t\tthis.editedDisplayName = this.user.displayname\n\t\t\t} else if (this.editedMail !== this.user.email) {\n\t\t\t\tthis.editedMail = this.user.email ?? ''\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './shared/styles.scss';\n\n.user-list__row {\n\t@include row;\n\n\t&:hover {\n\t\tbackground-color: var(--color-background-hover);\n\n\t\t.row__cell:not(.row__cell--actions) {\n\t\t\tbackground-color: var(--color-background-hover);\n\t\t}\n\t}\n\n\t// Limit width of select in fill cell\n\t.select--fill {\n\t\tmax-width: calc(var(--cell-width-large) - (2 * var(--cell-padding)));\n\t}\n}\n\n.row {\n\t@include cell;\n\n\t&__cell {\n\t\tborder-bottom: 1px solid var(--color-border);\n\n\t\t:deep {\n\t\t\t.v-select.select {\n\t\t\t\tmin-width: var(--cell-min-width);\n\t\t\t}\n\t\t}\n\t}\n\n\t&__progress {\n\t\tmargin-top: 4px;\n\n\t\t&--warn {\n\t\t\t&::-moz-progress-bar {\n\t\t\t\tbackground: var(--color-warning) !important;\n\t\t\t}\n\t\t\t&::-webkit-progress-value {\n\t\t\t\tbackground: var(--color-warning) !important;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","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\"","\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=e297cab8&prod&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!./UserRow.vue?vue&type=style&index=0&id=e297cab8&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=e297cab8&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=e297cab8&prod&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 \"e297cab8\",\n null\n \n)\n\nexport default component.exports","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\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\n<template>\n\t<Fragment>\n\t\t<NewUserModal v-if=\"showConfig.showNewUserForm\"\n\t\t\t:loading=\"loading\"\n\t\t\t:new-user=\"newUser\"\n\t\t\t:quota-options=\"quotaOptions\"\n\t\t\t@reset=\"resetForm\"\n\t\t\t@close=\"closeModal\" />\n\n\t\t<NcEmptyContent v-if=\"filteredUsers.length === 0\"\n\t\t\tclass=\"empty\"\n\t\t\t:name=\"isInitialLoad && loading.users ? null : t('settings', 'No accounts')\">\n\t\t\t<template #icon>\n\t\t\t\t<NcLoadingIcon v-if=\"isInitialLoad && loading.users\"\n\t\t\t\t\t:name=\"t('settings', 'Loading accounts …')\"\n\t\t\t\t\t:size=\"64\" />\n\t\t\t\t<NcIconSvgWrapper v-else :path=\"mdiAccountGroup\" :size=\"64\" />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\n\t\t<VirtualList v-else\n\t\t\t:data-component=\"UserRow\"\n\t\t\t:data-sources=\"filteredUsers\"\n\t\t\tdata-key=\"id\"\n\t\t\tdata-cy-user-list\n\t\t\t:item-height=\"rowHeight\"\n\t\t\t:style=\"style\"\n\t\t\t:extra-props=\"{\n\t\t\t\tusers,\n\t\t\t\tsettings,\n\t\t\t\thasObfuscated,\n\t\t\t\tgroups,\n\t\t\t\tsubAdminsGroups,\n\t\t\t\tquotaOptions,\n\t\t\t\tlanguages,\n\t\t\t\texternalActions,\n\t\t\t}\"\n\t\t\t@scroll-end=\"handleScrollEnd\">\n\t\t\t<template #before>\n\t\t\t\t<caption class=\"hidden-visually\">\n\t\t\t\t\t{{ t('settings', 'List of accounts. This list is not fully rendered for performance reasons. The accounts will be rendered as you navigate through the list.') }}\n\t\t\t\t</caption>\n\t\t\t</template>\n\n\t\t\t<template #header>\n\t\t\t\t<UserListHeader :has-obfuscated=\"hasObfuscated\" />\n\t\t\t</template>\n\n\t\t\t<template #footer>\n\t\t\t\t<UserListFooter :loading=\"loading.users\"\n\t\t\t\t\t:filtered-users=\"filteredUsers\" />\n\t\t\t</template>\n\t\t</VirtualList>\n\t</Fragment>\n</template>\n\n<script>\nimport { mdiAccountGroup } from '@mdi/js'\nimport { showError } from '@nextcloud/dialogs'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport { Fragment } from 'vue-frag'\n\nimport Vue from 'vue'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\n\nimport VirtualList from './Users/VirtualList.vue'\nimport NewUserModal from './Users/NewUserModal.vue'\nimport UserListFooter from './Users/UserListFooter.vue'\nimport UserListHeader from './Users/UserListHeader.vue'\nimport UserRow from './Users/UserRow.vue'\n\nimport { defaultQuota, isObfuscated, unlimitedQuota } from '../utils/userUtils.ts'\nimport logger from '../logger.ts'\n\nconst newUser = Object.freeze({\n\tid: '',\n\tdisplayName: '',\n\tpassword: '',\n\tmailAddress: '',\n\tgroups: [],\n\tmanager: '',\n\tsubAdminsGroups: [],\n\tquota: defaultQuota,\n\tlanguage: {\n\t\tcode: 'en',\n\t\tname: t('settings', 'Default language'),\n\t},\n})\n\nexport default {\n\tname: 'UserList',\n\n\tcomponents: {\n\t\tFragment,\n\t\tNcEmptyContent,\n\t\tNcIconSvgWrapper,\n\t\tNcLoadingIcon,\n\t\tNewUserModal,\n\t\tUserListFooter,\n\t\tUserListHeader,\n\t\tVirtualList,\n\t},\n\n\tprops: {\n\t\tselectedGroup: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\n\tsetup() {\n\t\t// non reactive properties\n\t\treturn {\n\t\t\tmdiAccountGroup,\n\t\t\trowHeight: 55,\n\n\t\t\tUserRow,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tgroups: false,\n\t\t\t\tusers: false,\n\t\t\t},\n\t\t\tnewUser: { ...newUser },\n\t\t\tisInitialLoad: true,\n\t\t\tsearchQuery: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tshowConfig() {\n\t\t\treturn this.$store.getters.getShowConfig\n\t\t},\n\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t'--row-height': `${this.rowHeight}px`,\n\t\t\t}\n\t\t},\n\n\t\thasObfuscated() {\n\t\t\treturn this.filteredUsers.some(user => isObfuscated(user))\n\t\t},\n\n\t\tusers() {\n\t\t\treturn this.$store.getters.getUsers\n\t\t},\n\n\t\tfilteredUsers() {\n\t\t\tif (this.selectedGroup === 'disabled') {\n\t\t\t\treturn this.users.filter(user => user.enabled === false)\n\t\t\t}\n\t\t\tif (!this.settings.isAdmin) {\n\t\t\t\t// we don't want subadmins to edit themselves\n\t\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t\t}\n\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t},\n\n\t\tgroups() {\n\t\t\t// data provided php side + remove the disabled group\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== 'disabled')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\n\t\tsubAdminsGroups() {\n\t\t\t// data provided php side\n\t\t\treturn this.$store.getters.getSubadminGroups\n\t\t},\n\n\t\tquotaOptions() {\n\t\t\t// convert the preset array into objects\n\t\t\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({\n\t\t\t\tid: cur,\n\t\t\t\tlabel: cur,\n\t\t\t}), [])\n\t\t\t// add default presets\n\t\t\tif (this.settings.allowUnlimitedQuota) {\n\t\t\t\tquotaPreset.unshift(unlimitedQuota)\n\t\t\t}\n\t\t\tquotaPreset.unshift(defaultQuota)\n\t\t\treturn quotaPreset\n\t\t},\n\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\n\n\t\tdisabledUsersOffset() {\n\t\t\treturn this.$store.getters.getDisabledUsersOffset\n\t\t},\n\n\t\tdisabledUsersLimit() {\n\t\t\treturn this.$store.getters.getDisabledUsersLimit\n\t\t},\n\n\t\tusersCount() {\n\t\t\treturn this.users.length\n\t\t},\n\n\t\t/* LANGUAGES */\n\t\tlanguages() {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('settings', 'Common languages'),\n\t\t\t\t\tlanguages: this.settings.languages.commonLanguages,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t('settings', 'Other languages'),\n\t\t\t\t\tlanguages: this.settings.languages.otherLanguages,\n\t\t\t\t},\n\t\t\t]\n\t\t},\n\t},\n\n\twatch: {\n\t\t// watch url change and group select\n\t\tasync selectedGroup(val) {\n\t\t\tthis.isInitialLoad = true\n\t\t\t// if selected is the disabled group but it's empty\n\t\t\tawait this.redirectIfDisabled()\n\t\t\tthis.$store.commit('resetUsers')\n\t\t\tawait this.loadUsers()\n\t\t\tthis.setNewUserDefaultGroup(val)\n\t\t},\n\n\t\tfilteredUsers(filteredUsers) {\n\t\t\tlogger.debug(`${filteredUsers.length} filtered user(s)`)\n\t\t},\n\t},\n\n\tasync created() {\n\t\tawait this.loadUsers()\n\t},\n\n\tasync mounted() {\n\t\tif (!this.settings.canChangePassword) {\n\t\t\tOC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'))\n\t\t}\n\n\t\t/**\n\t\t * Reset and init new user form\n\t\t */\n\t\tthis.resetForm()\n\n\t\t/**\n\t\t * Register search\n\t\t */\n\t\tsubscribe('nextcloud:unified-search.search', this.search)\n\t\tsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\n\t\t/**\n\t\t * If disabled group but empty, redirect\n\t\t */\n\t\tawait this.redirectIfDisabled()\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('nextcloud:unified-search.search', this.search)\n\t\tunsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tasync handleScrollEnd() {\n\t\t\tawait this.loadUsers()\n\t\t},\n\n\t\tasync loadUsers() {\n\t\t\tthis.loading.users = true\n\t\t\ttry {\n\t\t\t\tif (this.selectedGroup === 'disabled') {\n\t\t\t\t\tawait this.$store.dispatch('getDisabledUsers', {\n\t\t\t\t\t\toffset: this.disabledUsersOffset,\n\t\t\t\t\t\tlimit: this.disabledUsersLimit,\n\t\t\t\t\t\tsearch: this.searchQuery,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('getUsers', {\n\t\t\t\t\t\toffset: this.usersOffset,\n\t\t\t\t\t\tlimit: this.usersLimit,\n\t\t\t\t\t\tgroup: this.selectedGroup,\n\t\t\t\t\t\tsearch: this.searchQuery,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tlogger.debug(`${this.users.length} total user(s) loaded`)\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Failed to load accounts', { error })\n\t\t\t\tshowError('Failed to load accounts')\n\t\t\t}\n\t\t\tthis.loading.users = false\n\t\t\tthis.isInitialLoad = false\n\t\t},\n\n\t\tcloseModal() {\n\t\t\tthis.$store.commit('setShowConfig', {\n\t\t\t\tkey: 'showNewUserForm',\n\t\t\t\tvalue: false,\n\t\t\t})\n\t\t},\n\n\t\tasync search({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t\tthis.$store.commit('resetUsers')\n\t\t\tawait this.loadUsers()\n\t\t},\n\n\t\tresetSearch() {\n\t\t\tthis.search({ query: '' })\n\t\t},\n\n\t\tresetForm() {\n\t\t\t// revert form to original state\n\t\t\tthis.newUser = Object.assign({}, newUser)\n\n\t\t\t/**\n\t\t\t * Init default language from server data. The use of this.settings\n\t\t\t * requires a computed variable, which break the v-model binding of the form,\n\t\t\t * this is a much easier solution than getter and setter on a computed var\n\t\t\t */\n\t\t\tif (this.settings.defaultLanguage) {\n\t\t\t\tVue.set(this.newUser.language, 'code', this.settings.defaultLanguage)\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * In case the user directly loaded the user list within a group\n\t\t\t * the watch won't be triggered. We need to initialize it.\n\t\t\t */\n\t\t\tthis.setNewUserDefaultGroup(this.selectedGroup)\n\n\t\t\tthis.loading.all = false\n\t\t},\n\n\t\tsetNewUserDefaultGroup(value) {\n\t\t\t// Is no value set, but user is a line manager we set their group as this is a requirement for line manager\n\t\t\tif (!value && !this.settings.isAdmin && !this.settings.isDelegatedAdmin) {\n\t\t\t\t// if there are multiple groups we do not know which to add,\n\t\t\t\t// so we cannot make the managers life easier by preselecting it.\n\t\t\t\tif (this.groups.length === 1) {\n\t\t\t\t\tvalue = this.groups[0].id\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\t// setting new account default group to the current selected one\n\t\t\t\tconst currentGroup = this.groups.find(group => group.id === value)\n\t\t\t\tif (currentGroup) {\n\t\t\t\t\tthis.newUser.groups = [currentGroup]\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\t// fallback, empty selected group\n\t\t\tthis.newUser.groups = []\n\t\t},\n\n\t\t/**\n\t\t * If the selected group is the disabled group but the count is 0\n\t\t * redirect to the all users page.\n\t\t * we only check for 0 because we don't have the count on ldap\n\t\t * and we therefore set the usercount to -1 in this specific case\n\t\t */\n\t\tasync redirectIfDisabled() {\n\t\t\tconst allGroups = this.$store.getters.getGroups\n\t\t\tif (this.selectedGroup === 'disabled'\n\t\t\t\t\t\t&& allGroups.findIndex(group => group.id === 'disabled' && group.usercount === 0) > -1) {\n\t\t\t\t// disabled group is empty, redirection to all users\n\t\t\t\tthis.$router.push({ name: 'users' })\n\t\t\t\tawait this.loadUsers()\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './Users/shared/styles.scss';\n\n.empty {\n\t:deep {\n\t\t.icon-vue {\n\t\t\twidth: 64px;\n\t\t\theight: 64px;\n\n\t\t\tsvg {\n\t\t\t\tmax-width: 64px;\n\t\t\t\tmax-height: 64px;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","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\"","\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!./UserList.vue?vue&type=style&index=0&id=0e745d5e&prod&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!./UserList.vue?vue&type=style&index=0&id=0e745d5e&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=0e745d5e&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=0e745d5e&prod&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 \"0e745d5e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('Fragment',[(_vm.showConfig.showNewUserForm)?_c('NewUserModal',{attrs:{\"loading\":_vm.loading,\"new-user\":_vm.newUser,\"quota-options\":_vm.quotaOptions},on:{\"reset\":_vm.resetForm,\"close\":_vm.closeModal}}):_vm._e(),_vm._v(\" \"),(_vm.filteredUsers.length === 0)?_c('NcEmptyContent',{staticClass:\"empty\",attrs:{\"name\":_vm.isInitialLoad && _vm.loading.users ? null : _vm.t('settings', 'No accounts')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.isInitialLoad && _vm.loading.users)?_c('NcLoadingIcon',{attrs:{\"name\":_vm.t('settings', 'Loading accounts …'),\"size\":64}}):_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiAccountGroup,\"size\":64}})]},proxy:true}],null,false,226056511)}):_c('VirtualList',{style:(_vm.style),attrs:{\"data-component\":_vm.UserRow,\"data-sources\":_vm.filteredUsers,\"data-key\":\"id\",\"data-cy-user-list\":\"\",\"item-height\":_vm.rowHeight,\"extra-props\":{\n\t\t\tusers: _vm.users,\n\t\t\tsettings: _vm.settings,\n\t\t\thasObfuscated: _vm.hasObfuscated,\n\t\t\tgroups: _vm.groups,\n\t\t\tsubAdminsGroups: _vm.subAdminsGroups,\n\t\t\tquotaOptions: _vm.quotaOptions,\n\t\t\tlanguages: _vm.languages,\n\t\t\texternalActions: _vm.externalActions,\n\t\t}},on:{\"scroll-end\":_vm.handleScrollEnd},scopedSlots:_vm._u([{key:\"before\",fn:function(){return [_c('caption',{staticClass:\"hidden-visually\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'List of accounts. This list is not fully rendered for performance reasons. The accounts will be rendered as you navigate through the list.'))+\"\\n\\t\\t\\t\")])]},proxy:true},{key:\"header\",fn:function(){return [_c('UserListHeader',{attrs:{\"has-obfuscated\":_vm.hasObfuscated}})]},proxy:true},{key:\"footer\",fn:function(){return [_c('UserListFooter',{attrs:{\"loading\":_vm.loading.users,\"filtered-users\":_vm.filteredUsers}})]},proxy:true}])})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagement.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!./UserManagement.vue?vue&type=script&lang=js\"","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\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\n<template>\n\t<NcAppContent :page-heading=\"pageHeading\">\n\t\t<UserList :selected-group=\"selectedGroupDecoded\"\n\t\t\t:external-actions=\"externalActions\" />\n\t</NcAppContent>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { defineComponent } from 'vue'\n\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\nimport UserList from '../components/UserList.vue'\n\nexport default defineComponent({\n\tname: 'UserManagement',\n\n\tcomponents: {\n\t\tNcAppContent,\n\t\tUserList,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// temporary value used for multiselect change\n\t\t\texternalActions: [],\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tpageHeading() {\n\t\t\tif (this.selectedGroupDecoded === null) {\n\t\t\t\treturn t('settings', 'Active accounts')\n\t\t\t}\n\t\t\tconst matchHeading = {\n\t\t\t\tadmin: t('settings', 'Admins'),\n\t\t\t\tdisabled: t('settings', 'Disabled accounts'),\n\t\t\t}\n\t\t\treturn matchHeading[this.selectedGroupDecoded] ?? t('settings', 'Account group: {group}', { group: this.selectedGroupDecoded })\n\t\t},\n\n\t\tselectedGroup() {\n\t\t\treturn this.$route.params.selectedGroup\n\t\t},\n\n\t\tselectedGroupDecoded() {\n\t\t\treturn this.selectedGroup ? decodeURIComponent(this.selectedGroup) : null\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tthis.$store.commit('initGroups', {\n\t\t\tgroups: this.$store.getters.getServerData.groups,\n\t\t\torderBy: this.$store.getters.getServerData.sortGroups,\n\t\t\tuserCount: this.$store.getters.getServerData.userCount,\n\t\t})\n\t\tthis.$store.dispatch('getPasswordPolicyMinLength')\n\t},\n\n\tcreated() {\n\t\t// init the OCA.Settings.UserList object\n\t\twindow.OCA = window.OCA ?? {}\n\t\twindow.OCA.Settings = window.OCA.Settings ?? {}\n\t\twindow.OCA.Settings.UserList = window.OCA.Settings.UserList ?? {}\n\t\t// and add the registerAction method\n\t\twindow.OCA.Settings.UserList.registerAction = this.registerAction\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * Register a new action for the user menu\n\t\t *\n\t\t * @param {string} icon the icon class\n\t\t * @param {string} text the text to display\n\t\t * @param {Function} action the function to run\n\t\t * @return {Array}\n\t\t */\n\t\tregisterAction(icon, text, action) {\n\t\t\tthis.externalActions.push({\n\t\t\t\ticon,\n\t\t\t\ttext,\n\t\t\t\taction,\n\t\t\t})\n\t\t\treturn this.externalActions\n\t\t},\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.app-content {\n\t// Virtual list needs to be full height and is scrollable\n\tdisplay: flex;\n\toverflow: hidden;\n\tflex-direction: column;\n\tmax-height: 100%;\n}\n</style>\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!./UserManagement.vue?vue&type=style&index=0&id=fc8857fc&prod&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!./UserManagement.vue?vue&type=style&index=0&id=fc8857fc&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserManagement.vue?vue&type=template&id=fc8857fc&scoped=true\"\nimport script from \"./UserManagement.vue?vue&type=script&lang=js\"\nexport * from \"./UserManagement.vue?vue&type=script&lang=js\"\nimport style0 from \"./UserManagement.vue?vue&type=style&index=0&id=fc8857fc&prod&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 \"fc8857fc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcAppNavigation,{attrs:{\"aria-label\":_setup.t('settings', 'Account management')},scopedSlots:_vm._u([{key:\"footer\",fn:function(){return [_c(_setup.NcButton,{staticClass:\"account-management__settings-toggle\",attrs:{\"type\":\"tertiary\"},on:{\"click\":function($event){_setup.isDialogOpen = true}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiCog}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_setup.t('settings', 'Account management settings'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c(_setup.UserSettingsDialog,{attrs:{\"open\":_setup.isDialogOpen},on:{\"update:open\":function($event){_setup.isDialogOpen=$event}}})]},proxy:true}])},[_c(_setup.NcAppNavigationNew,{attrs:{\"button-id\":\"new-user-button\",\"text\":_setup.t('settings','New account')},on:{\"click\":_setup.showNewUserMenu,\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _setup.showNewUserMenu.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"]))return null;return _setup.showNewUserMenu.apply(null, arguments)}]},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiPlus}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationList,{staticClass:\"account-management__system-list\",attrs:{\"data-cy-users-settings-navigation-groups\":\"system\"}},[_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"everyone\",\"exact\":true,\"name\":_setup.t('settings', 'Active accounts'),\"to\":{ name: 'users' }},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiAccount}})]},proxy:true},{key:\"counter\",fn:function(){return [(_setup.userCount)?_c(_setup.NcCounterBubble,{attrs:{\"type\":!_setup.selectedGroupDecoded ? 'highlighted' : undefined}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_setup.userCount)+\"\\n\\t\\t\\t\\t\")]):_vm._e()]},proxy:true}])}),_vm._v(\" \"),(_setup.settings.isAdmin)?_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"admin\",\"exact\":true,\"name\":_setup.t('settings', 'Admins'),\"to\":{ name: 'group', params: { selectedGroup: 'admin' } }},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiShieldAccount}})]},proxy:true},{key:\"counter\",fn:function(){return [(_setup.adminGroup && _setup.adminGroup.count > 0)?_c(_setup.NcCounterBubble,{attrs:{\"type\":_setup.selectedGroupDecoded === 'admin' ? 'highlighted' : undefined}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_setup.adminGroup.count)+\"\\n\\t\\t\\t\\t\")]):_vm._e()]},proxy:true}],null,false,2218088905)}):_vm._e(),_vm._v(\" \"),(_setup.disabledGroup && (_setup.disabledGroup.usercount > 0 || _setup.disabledGroup.usercount === -1))?_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"disabled\",\"exact\":true,\"name\":_setup.t('settings', 'Disabled accounts'),\"to\":{ name: 'group', params: { selectedGroup: 'disabled' } }},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiAccountOff}})]},proxy:true},(_setup.disabledGroup.usercount > 0)?{key:\"counter\",fn:function(){return [_c(_setup.NcCounterBubble,{attrs:{\"type\":_setup.selectedGroupDecoded === 'disabled' ? 'highlighted' : undefined}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_setup.disabledGroup.usercount)+\"\\n\\t\\t\\t\\t\")])]},proxy:true}:null],null,true)}):_vm._e()],1),_vm._v(\" \"),_c(_setup.NcAppNavigationCaption,{attrs:{\"name\":_setup.t('settings', 'Groups'),\"disabled\":_setup.loadingAddGroup,\"aria-label\":_setup.loadingAddGroup ? _setup.t('settings', 'Creating group…') : _setup.t('settings', 'Create group'),\"force-menu\":\"\",\"is-heading\":\"\",\"open\":_setup.isAddGroupOpen},on:{\"update:open\":function($event){_setup.isAddGroupOpen=$event}},scopedSlots:_vm._u([(_setup.isAdminOrDelegatedAdmin)?{key:\"actionsTriggerIcon\",fn:function(){return [(_setup.loadingAddGroup)?_c(_setup.NcLoadingIcon):_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiPlus}})]},proxy:true}:null,(_setup.isAdminOrDelegatedAdmin)?{key:\"actions\",fn:function(){return [_c(_setup.NcActionText,{scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiAccountGroup}})]},proxy:true}],null,false,3607647275)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_setup.t('settings', 'Create group'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c(_setup.NcActionInput,{attrs:{\"label\":_setup.t('settings', 'Group name'),\"data-cy-users-settings-new-group-name\":\"\",\"label-outside\":false,\"disabled\":_setup.loadingAddGroup,\"value\":_setup.newGroupName,\"error\":_setup.hasAddGroupError,\"helper-text\":_setup.hasAddGroupError ? _setup.t('settings', 'Please enter a valid group name') : ''},on:{\"update:value\":function($event){_setup.newGroupName=$event},\"submit\":_setup.createGroup}})]},proxy:true}:null],null,true)}),_vm._v(\" \"),_c(_setup.NcAppNavigationList,{staticClass:\"account-management__group-list\",attrs:{\"data-cy-users-settings-navigation-groups\":\"custom\"}},_vm._l((_setup.userGroups),function(group){return _c(_setup.GroupListItem,{key:group.id,attrs:{\"id\":group.id,\"active\":_setup.selectedGroupDecoded === group.id,\"name\":group.title,\"count\":group.count}})}),1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2021 Martin Jänel <spammemore@posteo.de>\n -\n - @author Martin Jänel <spammemore@posteo.de>\n -\n - @license GNU AGPL version 3 or any later version\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\n<template>\n\t<Fragment>\n\t\t<NcModal v-if=\"showRemoveGroupModal\"\n\t\t\t@close=\"showRemoveGroupModal = false\">\n\t\t\t<div class=\"modal__content\">\n\t\t\t\t<h2 class=\"modal__header\">\n\t\t\t\t\t{{ t('settings', 'Please confirm the group removal') }}\n\t\t\t\t</h2>\n\t\t\t\t<NcNoteCard type=\"warning\"\n\t\t\t\t\tshow-alert>\n\t\t\t\t\t{{ t('settings', 'You are about to remove the group \"{group}\". The accounts will NOT be deleted.', { group: name }) }}\n\t\t\t\t</NcNoteCard>\n\t\t\t\t<div class=\"modal__button-row\">\n\t\t\t\t\t<NcButton type=\"secondary\"\n\t\t\t\t\t\t@click=\"showRemoveGroupModal = false\">\n\t\t\t\t\t\t{{ t('settings', 'Cancel') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton type=\"primary\"\n\t\t\t\t\t\t@click=\"removeGroup\">\n\t\t\t\t\t\t{{ t('settings', 'Confirm') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</NcModal>\n\n\t\t<NcAppNavigationItem :key=\"id\"\n\t\t\t:exact=\"true\"\n\t\t\t:name=\"name\"\n\t\t\t:to=\"{ name: 'group', params: { selectedGroup: encodeURIComponent(id) } }\"\n\t\t\t:loading=\"loadingRenameGroup\"\n\t\t\t:menu-open=\"openGroupMenu\"\n\t\t\t@update:menuOpen=\"handleGroupMenuOpen\">\n\t\t\t<template #icon>\n\t\t\t\t<AccountGroup :size=\"20\" />\n\t\t\t</template>\n\t\t\t<template #counter>\n\t\t\t\t<NcCounterBubble v-if=\"count\"\n\t\t\t\t\t:type=\"active ? 'highlighted' : undefined\">\n\t\t\t\t\t{{ count }}\n\t\t\t\t</NcCounterBubble>\n\t\t\t</template>\n\t\t\t<template #actions>\n\t\t\t\t<NcActionInput v-if=\"id !== 'admin' && id !== 'disabled' && settings.isAdmin\"\n\t\t\t\t\tref=\"displayNameInput\"\n\t\t\t\t\t:trailing-button-label=\"t('settings', 'Submit')\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t:value=\"name\"\n\t\t\t\t\t:label=\" t('settings', 'Rename group')\"\n\t\t\t\t\t@submit=\"renameGroup(id)\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Pencil :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcActionInput>\n\t\t\t\t<NcActionButton v-if=\"id !== 'admin' && id !== 'disabled' && settings.isAdmin\"\n\t\t\t\t\t@click=\"showRemoveGroupModal = true\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Delete :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('settings', 'Remove group') }}\n\t\t\t\t</NcActionButton>\n\t\t\t</template>\n\t\t</NcAppNavigationItem>\n\t</Fragment>\n</template>\n\n<script>\nimport { Fragment } from 'vue-frag'\n\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\n\nimport AccountGroup from 'vue-material-design-icons/AccountGroup.vue'\nimport Delete from 'vue-material-design-icons/Delete.vue'\nimport Pencil from 'vue-material-design-icons/Pencil.vue'\n\nimport { showError } from '@nextcloud/dialogs'\n\nexport default {\n\tname: 'GroupListItem',\n\tcomponents: {\n\t\tAccountGroup,\n\t\tDelete,\n\t\tFragment,\n\t\tNcActionButton,\n\t\tNcActionInput,\n\t\tNcAppNavigationItem,\n\t\tNcButton,\n\t\tNcCounterBubble,\n\t\tNcModal,\n\t\tNcNoteCard,\n\t\tPencil,\n\t},\n\tprops: {\n\t\t/**\n\t\t * If this group is currently selected\n\t\t */\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\t/**\n\t\t * Number of members within this group\n\t\t */\n\t\tcount: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\t/**\n\t\t * Identifier of this group\n\t\t */\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\t/**\n\t\t * Name of this group\n\t\t */\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloadingRenameGroup: false,\n\t\t\topenGroupMenu: false,\n\t\t\tshowRemoveGroupModal: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\t},\n\tmethods: {\n\t\thandleGroupMenuOpen() {\n\t\t\tthis.openGroupMenu = true\n\t\t},\n\t\tasync renameGroup(gid) {\n\t\t\t// check if group id is valid\n\t\t\tif (gid.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst displayName = this.$refs.displayNameInput.$el.querySelector('input[type=\"text\"]').value\n\n\t\t\t// check if group name is valid\n\t\t\tif (displayName.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.openGroupMenu = false\n\t\t\t\tthis.loadingRenameGroup = true\n\t\t\t\tawait this.$store.dispatch('renameGroup', {\n\t\t\t\t\tgroupid: gid.trim(),\n\t\t\t\t\tdisplayName: displayName.trim(),\n\t\t\t\t})\n\n\t\t\t\tthis.loadingRenameGroup = false\n\t\t\t} catch {\n\t\t\t\tthis.openGroupMenu = true\n\t\t\t\tthis.loadingRenameGroup = false\n\t\t\t}\n\t\t},\n\t\tasync removeGroup() {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('removeGroup', this.id)\n\t\t\t\tthis.showRemoveGroupModal = false\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('settings', 'Failed to remove group \"{group}\"', { group: this.name }))\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.modal {\n\t&__header {\n\t\tmargin: 0;\n\t}\n\n\t&__content {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\tpadding: 20px;\n\t\tgap: 4px 0;\n\t}\n\n\t&__button-row {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tjustify-content: space-between;\n\t}\n}\n</style>\n","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\"","\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!./GroupListItem.vue?vue&type=style&index=0&id=17dd13c0&prod&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!./GroupListItem.vue?vue&type=style&index=0&id=17dd13c0&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./GroupListItem.vue?vue&type=template&id=17dd13c0&scoped=true\"\nimport script from \"./GroupListItem.vue?vue&type=script&lang=js\"\nexport * from \"./GroupListItem.vue?vue&type=script&lang=js\"\nimport style0 from \"./GroupListItem.vue?vue&type=style&index=0&id=17dd13c0&prod&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 \"17dd13c0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('Fragment',[(_vm.showRemoveGroupModal)?_c('NcModal',{on:{\"close\":function($event){_vm.showRemoveGroupModal = false}}},[_c('div',{staticClass:\"modal__content\"},[_c('h2',{staticClass:\"modal__header\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Please confirm the group removal'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcNoteCard',{attrs:{\"type\":\"warning\",\"show-alert\":\"\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'You are about to remove the group \"{group}\". The accounts will NOT be deleted.', { group: _vm.name }))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"modal__button-row\"},[_c('NcButton',{attrs:{\"type\":\"secondary\"},on:{\"click\":function($event){_vm.showRemoveGroupModal = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Cancel'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.removeGroup}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Confirm'))+\"\\n\\t\\t\\t\\t\")])],1)],1)]):_vm._e(),_vm._v(\" \"),_c('NcAppNavigationItem',{key:_vm.id,attrs:{\"exact\":true,\"name\":_vm.name,\"to\":{ name: 'group', params: { selectedGroup: encodeURIComponent(_vm.id) } },\"loading\":_vm.loadingRenameGroup,\"menu-open\":_vm.openGroupMenu},on:{\"update:menuOpen\":_vm.handleGroupMenuOpen},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AccountGroup',{attrs:{\"size\":20}})]},proxy:true},{key:\"counter\",fn:function(){return [(_vm.count)?_c('NcCounterBubble',{attrs:{\"type\":_vm.active ? 'highlighted' : undefined}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.count)+\"\\n\\t\\t\\t\")]):_vm._e()]},proxy:true},{key:\"actions\",fn:function(){return [(_vm.id !== 'admin' && _vm.id !== 'disabled' && _vm.settings.isAdmin)?_c('NcActionInput',{ref:\"displayNameInput\",attrs:{\"trailing-button-label\":_vm.t('settings', 'Submit'),\"type\":\"text\",\"value\":_vm.name,\"label\":_vm.t('settings', 'Rename group')},on:{\"submit\":function($event){return _vm.renameGroup(_vm.id)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Pencil',{attrs:{\"size\":20}})]},proxy:true}],null,false,580569589)}):_vm._e(),_vm._v(\" \"),(_vm.id !== 'admin' && _vm.id !== 'disabled' && _vm.settings.isAdmin)?_c('NcActionButton',{on:{\"click\":function($event){_vm.showRemoveGroupModal = true}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Delete',{attrs:{\"size\":20}})]},proxy:true}],null,false,2705356561)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Remove group'))+\"\\n\\t\\t\\t\")]):_vm._e()]},proxy:true}])})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSettingsDialog',{attrs:{\"open\":_vm.isModalOpen,\"show-navigation\":true,\"name\":_vm.t('settings', 'Account management settings')},on:{\"update:open\":function($event){_vm.isModalOpen=$event}}},[_c('NcAppSettingsSection',{attrs:{\"id\":\"visibility-settings\",\"name\":_vm.t('settings', 'Visibility')}},[_c('NcCheckboxRadioSwitch',{attrs:{\"type\":\"switch\",\"data-test\":\"showLanguages\",\"checked\":_vm.showLanguages},on:{\"update:checked\":function($event){_vm.showLanguages=$event}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Show language'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"type\":\"switch\",\"data-test\":\"showUserBackend\",\"checked\":_vm.showUserBackend},on:{\"update:checked\":function($event){_vm.showUserBackend=$event}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Show account backend'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"type\":\"switch\",\"data-test\":\"showStoragePath\",\"checked\":_vm.showStoragePath},on:{\"update:checked\":function($event){_vm.showStoragePath=$event}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Show storage path'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"type\":\"switch\",\"data-test\":\"showLastLogin\",\"checked\":_vm.showLastLogin},on:{\"update:checked\":function($event){_vm.showLastLogin=$event}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Show last login'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"groups-sorting\",\"name\":_vm.t('settings', 'Sorting')}},[(_vm.isGroupSortingEnforced)?_c('NcNoteCard',{attrs:{\"type\":\"warning\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'The system config enforces sorting the groups by name. This also disables showing the member count.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('fieldset',[_c('legend',[_vm._v(_vm._s(_vm.t('settings', 'Group list sorting')))]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"type\":\"radio\",\"checked\":_vm.groupSorting,\"data-test\":\"sortGroupsByMemberCount\",\"disabled\":_vm.isGroupSortingEnforced,\"name\":\"group-sorting-mode\",\"value\":\"member-count\"},on:{\"update:checked\":function($event){_vm.groupSorting=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'By member count'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"type\":\"radio\",\"checked\":_vm.groupSorting,\"data-test\":\"sortGroupsByName\",\"disabled\":_vm.isGroupSortingEnforced,\"name\":\"group-sorting-mode\",\"value\":\"name\"},on:{\"update:checked\":function($event){_vm.groupSorting=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'By name'))+\"\\n\\t\\t\\t\")])],1)],1),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"email-settings\",\"name\":_vm.t('settings', 'Send email')}},[_c('NcCheckboxRadioSwitch',{attrs:{\"type\":\"switch\",\"data-test\":\"sendWelcomeMail\",\"checked\":_vm.sendWelcomeMail,\"disabled\":_vm.loadingSendMail},on:{\"update:checked\":function($event){_vm.sendWelcomeMail=$event}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Send welcome email to new accounts'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"default-settings\",\"name\":_vm.t('settings', 'Defaults')}},[_c('NcSelect',{attrs:{\"input-label\":_vm.t('settings', 'Default quota'),\"placement\":\"top\",\"taggable\":true,\"options\":_vm.quotaOptions,\"create-option\":_vm.validateQuota,\"placeholder\":_vm.t('settings', 'Select default quota'),\"clearable\":false},on:{\"option:selected\":_vm.setDefaultQuota},model:{value:(_vm.defaultQuota),callback:function ($$v) {_vm.defaultQuota=$$v},expression:\"defaultQuota\"}})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n\t- @copyright 2023 Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @author Christopher Ng <chrng8@gmail.com>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n-->\n\n<template>\n\t<NcAppSettingsDialog :open.sync=\"isModalOpen\"\n\t\t:show-navigation=\"true\"\n\t\t:name=\"t('settings', 'Account management settings')\">\n\t\t<NcAppSettingsSection id=\"visibility-settings\"\n\t\t\t:name=\"t('settings', 'Visibility')\">\n\t\t\t<NcCheckboxRadioSwitch type=\"switch\"\n\t\t\t\tdata-test=\"showLanguages\"\n\t\t\t\t:checked.sync=\"showLanguages\">\n\t\t\t\t{{ t('settings', 'Show language') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t<NcCheckboxRadioSwitch type=\"switch\"\n\t\t\t\tdata-test=\"showUserBackend\"\n\t\t\t\t:checked.sync=\"showUserBackend\">\n\t\t\t\t{{ t('settings', 'Show account backend') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t<NcCheckboxRadioSwitch type=\"switch\"\n\t\t\t\tdata-test=\"showStoragePath\"\n\t\t\t\t:checked.sync=\"showStoragePath\">\n\t\t\t\t{{ t('settings', 'Show storage path') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t<NcCheckboxRadioSwitch type=\"switch\"\n\t\t\t\tdata-test=\"showLastLogin\"\n\t\t\t\t:checked.sync=\"showLastLogin\">\n\t\t\t\t{{ t('settings', 'Show last login') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcAppSettingsSection>\n\n\t\t<NcAppSettingsSection id=\"groups-sorting\"\n\t\t\t:name=\"t('settings', 'Sorting')\">\n\t\t\t<NcNoteCard v-if=\"isGroupSortingEnforced\" type=\"warning\">\n\t\t\t\t{{ t('settings', 'The system config enforces sorting the groups by name. This also disables showing the member count.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<fieldset>\n\t\t\t\t<legend>{{ t('settings', 'Group list sorting') }}</legend>\n\t\t\t\t<NcCheckboxRadioSwitch type=\"radio\"\n\t\t\t\t\t:checked.sync=\"groupSorting\"\n\t\t\t\t\tdata-test=\"sortGroupsByMemberCount\"\n\t\t\t\t\t:disabled=\"isGroupSortingEnforced\"\n\t\t\t\t\tname=\"group-sorting-mode\"\n\t\t\t\t\tvalue=\"member-count\">\n\t\t\t\t\t{{ t('settings', 'By member count') }}\n\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t<NcCheckboxRadioSwitch type=\"radio\"\n\t\t\t\t\t:checked.sync=\"groupSorting\"\n\t\t\t\t\tdata-test=\"sortGroupsByName\"\n\t\t\t\t\t:disabled=\"isGroupSortingEnforced\"\n\t\t\t\t\tname=\"group-sorting-mode\"\n\t\t\t\t\tvalue=\"name\">\n\t\t\t\t\t{{ t('settings', 'By name') }}\n\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t</fieldset>\n\t\t</NcAppSettingsSection>\n\n\t\t<NcAppSettingsSection id=\"email-settings\"\n\t\t\t:name=\"t('settings', 'Send email')\">\n\t\t\t<NcCheckboxRadioSwitch type=\"switch\"\n\t\t\t\tdata-test=\"sendWelcomeMail\"\n\t\t\t\t:checked.sync=\"sendWelcomeMail\"\n\t\t\t\t:disabled=\"loadingSendMail\">\n\t\t\t\t{{ t('settings', 'Send welcome email to new accounts') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcAppSettingsSection>\n\n\t\t<NcAppSettingsSection id=\"default-settings\"\n\t\t\t:name=\"t('settings', 'Defaults')\">\n\t\t\t<NcSelect v-model=\"defaultQuota\"\n\t\t\t\t:input-label=\"t('settings', 'Default quota')\"\n\t\t\t\tplacement=\"top\"\n\t\t\t\t:taggable=\"true\"\n\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t:create-option=\"validateQuota\"\n\t\t\t\t:placeholder=\"t('settings', 'Select default quota')\"\n\t\t\t\t:clearable=\"false\"\n\t\t\t\t@option:selected=\"setDefaultQuota\" />\n\t\t</NcAppSettingsSection>\n\t</NcAppSettingsDialog>\n</template>\n\n<script>\nimport { formatFileSize, parseFileSize } from '@nextcloud/files'\nimport { generateUrl } from '@nextcloud/router'\n\nimport axios from '@nextcloud/axios'\nimport NcAppSettingsDialog from '@nextcloud/vue/dist/Components/NcAppSettingsDialog.js'\nimport NcAppSettingsSection from '@nextcloud/vue/dist/Components/NcAppSettingsSection.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'\n\nimport { GroupSorting } from '../../constants/GroupManagement.ts'\nimport { unlimitedQuota } from '../../utils/userUtils.ts'\n\nexport default {\n\tname: 'UserSettingsDialog',\n\n\tcomponents: {\n\t\tNcAppSettingsDialog,\n\t\tNcAppSettingsSection,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcNoteCard,\n\t\tNcSelect,\n\t},\n\n\tprops: {\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tselectedQuota: false,\n\t\t\tloadingSendMail: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tgroupSorting: {\n\t\t\tget() {\n\t\t\t\treturn this.$store.getters.getGroupSorting === GroupSorting.GroupName ? 'name' : 'member-count'\n\t\t\t},\n\t\t\tset(sorting) {\n\t\t\t\tthis.$store.commit('setGroupSorting', sorting === 'name' ? GroupSorting.GroupName : GroupSorting.UserCount)\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Admin has configured `sort_groups_by_name` in the system config\n\t\t */\n\t\tisGroupSortingEnforced() {\n\t\t\treturn this.$store.getters.getServerData.forceSortGroupByName\n\t\t},\n\n\t\tisModalOpen: {\n\t\t\tget() {\n\t\t\t\treturn this.open\n\t\t\t},\n\t\t\tset(open) {\n\t\t\t\tthis.$emit('update:open', open)\n\t\t\t},\n\t\t},\n\n\t\tshowConfig() {\n\t\t\treturn this.$store.getters.getShowConfig\n\t\t},\n\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\n\t\tshowLanguages: {\n\t\t\tget() {\n\t\t\t\treturn this.showConfig.showLanguages\n\t\t\t},\n\t\t\tset(status) {\n\t\t\t\tthis.setShowConfig('showLanguages', status)\n\t\t\t},\n\t\t},\n\n\t\tshowLastLogin: {\n\t\t\tget() {\n\t\t\t\treturn this.showConfig.showLastLogin\n\t\t\t},\n\t\t\tset(status) {\n\t\t\t\tthis.setShowConfig('showLastLogin', status)\n\t\t\t},\n\t\t},\n\n\t\tshowUserBackend: {\n\t\t\tget() {\n\t\t\t\treturn this.showConfig.showUserBackend\n\t\t\t},\n\t\t\tset(status) {\n\t\t\t\tthis.setShowConfig('showUserBackend', status)\n\t\t\t},\n\t\t},\n\n\t\tshowStoragePath: {\n\t\t\tget() {\n\t\t\t\treturn this.showConfig.showStoragePath\n\t\t\t},\n\t\t\tset(status) {\n\t\t\t\tthis.setShowConfig('showStoragePath', status)\n\t\t\t},\n\t\t},\n\n\t\tquotaOptions() {\n\t\t\t// convert the preset array into objects\n\t\t\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({ id: cur, label: cur }), [])\n\t\t\t// add default presets\n\t\t\tif (this.settings.allowUnlimitedQuota) {\n\t\t\t\tquotaPreset.unshift(unlimitedQuota)\n\t\t\t}\n\t\t\treturn quotaPreset\n\t\t},\n\n\t\tdefaultQuota: {\n\t\t\tget() {\n\t\t\t\tif (this.selectedQuota !== false) {\n\t\t\t\t\treturn this.selectedQuota\n\t\t\t\t}\n\t\t\t\tif (this.settings.defaultQuota !== unlimitedQuota.id && OC.Util.computerFileSize(this.settings.defaultQuota) >= 0) {\n\t\t\t\t\t// if value is valid, let's map the quotaOptions or return custom quota\n\t\t\t\t\treturn { id: this.settings.defaultQuota, label: this.settings.defaultQuota }\n\t\t\t\t}\n\t\t\t\treturn unlimitedQuota // unlimited\n\t\t\t},\n\t\t\tset(quota) {\n\t\t\t\tthis.selectedQuota = quota\n\t\t\t},\n\t\t},\n\n\t\tsendWelcomeMail: {\n\t\t\tget() {\n\t\t\t\treturn this.settings.newUserSendEmail\n\t\t\t},\n\t\t\tasync set(value) {\n\t\t\t\ttry {\n\t\t\t\t\tthis.loadingSendMail = true\n\t\t\t\t\tthis.$store.commit('setServerData', {\n\t\t\t\t\t\t...this.settings,\n\t\t\t\t\t\tnewUserSendEmail: value,\n\t\t\t\t\t})\n\t\t\t\t\tawait axios.post(generateUrl('/settings/users/preferences/newUser.sendEmail'), { value: value ? 'yes' : 'no' })\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error('could not update newUser.sendEmail preference: ' + e.message, e)\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingSendMail = false\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t},\n\n\tmethods: {\n\t\tsetShowConfig(key, status) {\n\t\t\tthis.$store.commit('setShowConfig', { key, value: status })\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t *\n\t\t * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n\t\t * @return {object} The validated quota object or unlimited quota if input is invalid\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\tif (typeof quota === 'object') {\n\t\t\t\tquota = quota?.id || quota.label\n\t\t\t}\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = parseFileSize(quota)\n\t\t\tif (validQuota === null) {\n\t\t\t\treturn unlimitedQuota\n\t\t\t} else {\n\t\t\t\t// unify format output\n\t\t\t\tquota = formatFileSize(parseFileSize(quota))\n\t\t\t\treturn { id: quota, label: quota }\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Dispatch default quota set request\n\t\t *\n\t\t * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n\t\t */\n\t\tsetDefaultQuota(quota = 'none') {\n\t\t\t// Make sure correct label is set for unlimited quota\n\t\t\tif (quota === 'none') {\n\t\t\t\tquota = unlimitedQuota\n\t\t\t}\n\t\t\tthis.$store.dispatch('setAppConfig', {\n\t\t\t\tapp: 'files',\n\t\t\t\tkey: 'default_quota',\n\t\t\t\t// ensure we only send the preset id\n\t\t\t\tvalue: quota.id ? quota.id : quota,\n\t\t\t}).then(() => {\n\t\t\t\tif (typeof quota !== 'object') {\n\t\t\t\t\tquota = { id: quota, label: quota }\n\t\t\t\t}\n\t\t\t\tthis.defaultQuota = quota\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\nfieldset {\n\tfont-weight: bold;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserSettingsDialog.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!./UserSettingsDialog.vue?vue&type=script&lang=js\"","\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!./UserSettingsDialog.vue?vue&type=style&index=0&id=ab9299ba&prod&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!./UserSettingsDialog.vue?vue&type=style&index=0&id=ab9299ba&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserSettingsDialog.vue?vue&type=template&id=ab9299ba&scoped=true\"\nimport script from \"./UserSettingsDialog.vue?vue&type=script&lang=js\"\nexport * from \"./UserSettingsDialog.vue?vue&type=script&lang=js\"\nimport style0 from \"./UserSettingsDialog.vue?vue&type=style&index=0&id=ab9299ba&prod&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 \"ab9299ba\",\n null\n \n)\n\nexport default component.exports","import { computed } from 'vue';\n/**\n * Format a group to a menu entry\n *\n * @param group the group\n */\nfunction formatGroupMenu(group) {\n if (typeof group === 'undefined') {\n return null;\n }\n const item = {\n id: group.id,\n title: group.name,\n usercount: group.usercount,\n count: Math.max(0, group.usercount - group.disabled),\n };\n return item;\n}\nexport const useFormatGroups = (groups) => {\n /**\n * All non-disabled non-admin groups\n */\n const userGroups = computed(() => {\n const formatted = groups.value\n // filter out disabled and admin\n .filter(group => group.id !== 'disabled' && group.id !== 'admin')\n // format group\n .map(group => formatGroupMenu(group))\n // remove invalid\n .filter(group => group !== null);\n return formatted;\n });\n /**\n * The admin group if found otherwise null\n */\n const adminGroup = computed(() => formatGroupMenu(groups.value.find(group => group.id === 'admin')));\n /**\n * The group of disabled users\n */\n const disabledGroup = computed(() => formatGroupMenu(groups.value.find(group => group.id === 'disabled')));\n return { adminGroup, disabledGroup, userGroups };\n};\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagementNavigation.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagementNavigation.vue?vue&type=script&setup=true&lang=ts\"","\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!./UserManagementNavigation.vue?vue&type=style&index=0&id=413f2c9e&prod&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!./UserManagementNavigation.vue?vue&type=style&index=0&id=413f2c9e&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserManagementNavigation.vue?vue&type=template&id=413f2c9e&scoped=true\"\nimport script from \"./UserManagementNavigation.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserManagementNavigation.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./UserManagementNavigation.vue?vue&type=style&index=0&id=413f2c9e&prod&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 \"413f2c9e\",\n null\n \n)\n\nexport default component.exports"],"names":["unlimitedQuota","id","label","t","defaultQuota","isObfuscated","user","keys","Object","length","at","___CSS_LOADER_EXPORT___","push","module","isVue2","util","warn","unrefElement","elRef","_a","plain","$el","defaultWindow","window","useSupported","callback","isMounted","instance","value","useMounted","Boolean","useElementVisibility","element","options","scrollTarget","threshold","elementIsVisible","target","root","rootMargin","immediate","isSupported","targets","_target","Array","isArray","map","filter","cleanup","isActive","stopWatch","targets2","root2","observer","IntersectionObserver","forEach","el","observe","disconnect","flush","stop","useIntersectionObserver","intersectionObserverEntries","isIntersecting","latestTime","entry","time","mounted","unmounted","globalThis","global","self","vElementVisibility","binding","handler","isVisible","v","Vue","directive","extend","name","props","dataComponent","type","Function","required","dataKey","String","dataSources","itemHeight","Number","extraProps","default","data","bufferItems","index","headerHeight","tableHeight","resizeObserver","computed","startIndex","Math","max","shownItems","ceil","renderedItems","slice","tbodyStyle","isOverScrolled","lastIndex","hiddenAfterItems","min","paddingTop","concat","paddingBottom","_this$$refs","_this$$refs2","tfoot","$refs","thead","ResizeObserver","debounce","_thead$clientHeight","_root$clientHeight","clientHeight","logger","debug","onScroll","addEventListener","beforeDestroy","methods","handleFooterVisibility","visible","$emit","round","scrollTop","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm","this","_c","_self","_setupProxy","staticClass","_t","_v","ref","attrs","style","_l","item","i","_b","key","tag","directives","rawName","expression","components","NcButton","NcModal","NcPasswordField","NcSelect","NcTextField","loading","newUser","quotaOptions","possibleManagers","managerLabel","showConfig","$store","getters","getShowConfig","settings","getServerData","usernameLabel","newUserGenerateUserID","minPasswordLength","getPasswordPolicyMinLength","groups","getGroups","group","sort","a","b","localeCompare","subAdminsGroups","getSubadminGroups","canAddGroups","assign","$isDisabled","canAdd","languages","commonLanguages","otherLanguages","beforeMount","searchUserManager","createUser","all","_this$$refs$username","_this$$refs$username$","dispatch","userid","password","displayName","email","mailAddress","subadmin","quota","language","code","manager","username","inputField","input","focus","call","error","response","ocs","meta","statuscode","_this$$refs$username2","_this$$refs$username3","_this$$refs$password","_this$$refs$password$","handleGroupInput","createGroup","_ref","gid","find","validateQuota","validQuota","OC","Util","computerFileSize","humanFileSize","languageFilterBy","option","search","some","_ref2","toLocaleLowerCase","includes","query","offset","limit","then","users","values","_g","$listeners","on","$event","preventDefault","apply","arguments","_s","$set","newUserRequireEmail","_e","isAdmin","model","$$v","showLanguages","class","NcLoadingIcon","filteredUsers","userCount","n","hasObfuscated","passwordLabel","showUserBackend","showStoragePath","showLastLogin","defineComponent","NcActionButton","NcActions","NcIconSvgWrapper","actions","disabled","edit","editSvg","toggleEdit","scopedSlots","_u","fn","proxy","action","icon","text","event","externalActions","userGroups","userSubAdminsGroups","availableGroups","groupClone","canRemove","usedSpace","used","size","usedQuota","pow","isNaN","userQuota","humanQuota","userLanguage","userLang","lang","userLastLoginTooltip","lastLogin","formatDate","userLastLogin","relativeModifiedDate","NcAvatar","NcProgressBar","UserRowActions","mixins","UserRowMixin","_this$user$email","selectedQuota","rand","random","toString","substring","loadingPossibleManagers","currentManager","editing","subadmins","delete","disable","wipe","editedDisplayName","displayname","editedPassword","editedMail","isLoadingUser","isLoadingField","uniqueId","encodeURIComponent","userGroupsLabels","join","userSubAdminsGroupsLabels","_this$user$quota","_this$user$quota2","formatFileSize","canEdit","getCurrentUser","uid","_this$user$quota3","parseFileSize","userActions","deleteUser","wipeUserDevices","enabled","enableDisableUser","sendWelcomeMail","editedUserQuota","get","set","availableLanguages","initManager","dialogs","confirmDestructive","YES_NO_BUTTONS","confirm","confirmClasses","cancel","result","showSuccess","timeout","finally","filterManagers","managers","userId","searchInitialUserManager","updateUserManager","showError","console","updateDisplayName","updatePassword","updateEmail","addUserGroup","isCreating","removeUserGroup","$route","params","selectedGroup","commit","addUserSubAdmin","removeUserSubAdmin","setUserQuota","undefined","_quota","setUserLanguage","_this$$refs$displayNa","$nextTick","displayNameField","_this$user$email2","_vm$user$displayname","_vm$user$email","_vm$userGroupsLabels","_vm$userSubAdminsGrou","backendCapabilities","setDisplayName","canChangePassword","setPassword","backend","storageLocation","freeze","Fragment","NcEmptyContent","NewUserModal","UserListFooter","UserListHeader","VirtualList","setup","mdiAccountGroup","rowHeight","UserRow","isInitialLoad","searchQuery","getUsers","quotaPreset","reduce","acc","cur","allowUnlimitedQuota","unshift","usersOffset","getUsersOffset","usersLimit","getUsersLimit","disabledUsersOffset","getDisabledUsersOffset","disabledUsersLimit","getDisabledUsersLimit","usersCount","watch","val","redirectIfDisabled","loadUsers","setNewUserDefaultGroup","created","Notification","showTemporary","resetForm","subscribe","resetSearch","unsubscribe","handleScrollEnd","closeModal","defaultLanguage","isDelegatedAdmin","currentGroup","allGroups","findIndex","usercount","$router","showNewUserForm","NcAppContent","UserList","pageHeading","_matchHeading$this$se","selectedGroupDecoded","admin","decodeURIComponent","orderBy","sortGroups","_window$OCA","_window$OCA$Settings","_window$OCA$Settings$","OCA","Settings","registerAction","AccountGroup","Delete","NcActionInput","NcAppNavigationItem","NcCounterBubble","NcNoteCard","Pencil","active","count","loadingRenameGroup","openGroupMenu","showRemoveGroupModal","handleGroupMenuOpen","renameGroup","trim","displayNameInput","querySelector","groupid","removeGroup","NcAppSettingsDialog","NcAppSettingsSection","NcCheckboxRadioSwitch","open","loadingSendMail","groupSorting","getGroupSorting","GroupSorting","GroupName","sorting","UserCount","isGroupSortingEnforced","forceSortGroupByName","isModalOpen","status","setShowConfig","newUserSendEmail","axios","post","generateUrl","e","message","setDefaultQuota","app","formatGroupMenu","title","_defineComponent","__name","__props","route","useRoute","router","useRouter","store","useStore","isDialogOpen","_route$params","getUserCount","getSortedGroups","adminGroup","disabledGroup","useFormatGroups","isAdminOrDelegatedAdmin","isAddGroupOpen","loadingAddGroup","hasAddGroupError","newGroupName","__sfc","groupId","showNewUserMenu","mdiAccount","mdiAccountOff","mdiCog","mdiPlus","mdiShieldAccount","NcActionText","NcAppNavigation","NcAppNavigationCaption","NcAppNavigationList","NcAppNavigationNew","GroupListItem","UserSettingsDialog","_setup","indexOf","_k","keyCode"],"sourceRoot":""}
|