1 |
- {"version":3,"file":"settings-users-8351.js?v=1b9468bd2e9b26a88624","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=style&index=0&id=36dd2d08&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=220321a2&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/NewUserModal.vue?vue&type=style&index=0&id=0634d81b&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=79fe702d&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/UserSettingsDialog.vue?vue&type=style&index=0&id=0a250c55&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/VirtualList.vue?vue&type=style&index=0&id=4377829d&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=style&index=0&id=68b27594&prod&lang=scss&scoped=true","webpack://nextcloud/./apps/settings/src/views/Users.vue?962b","webpack:///nextcloud/node_modules/vue-material-design-icons/AccountOff.vue","webpack:///nextcloud/node_modules/vue-material-design-icons/AccountOff.vue?vue&type=script&lang=js","webpack://nextcloud/./node_modules/vue-material-design-icons/AccountOff.vue?800f","webpack:///nextcloud/node_modules/vue-material-design-icons/AccountOff.vue?vue&type=template&id=4a2e1178","webpack://nextcloud/./node_modules/vue-material-design-icons/Cog.vue?4d6d","webpack:///nextcloud/node_modules/vue-material-design-icons/ShieldAccount.vue","webpack:///nextcloud/node_modules/vue-material-design-icons/ShieldAccount.vue?vue&type=script&lang=js","webpack://nextcloud/./node_modules/vue-material-design-icons/ShieldAccount.vue?d5b2","webpack:///nextcloud/node_modules/vue-material-design-icons/ShieldAccount.vue?vue&type=template&id=3937f138","webpack://nextcloud/./apps/settings/src/components/GroupListItem.vue?9f48","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?0348","webpack://nextcloud/./apps/settings/src/components/GroupListItem.vue?7b19","webpack://nextcloud/./apps/settings/src/components/UserList.vue?c96e","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?544e","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?eac5","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/utils/userUtils.ts","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?91be","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?afcf","webpack://nextcloud/./apps/settings/src/components/UserList.vue?02a4","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?2e1a","webpack://nextcloud/./apps/settings/src/components/Users/UserSettingsDialog.vue?f361","webpack:///nextcloud/apps/settings/src/views/Users.vue","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/views/Users.vue?2e4a","webpack://nextcloud/./apps/settings/src/views/Users.vue?cf86","webpack:///nextcloud/node_modules/vue-localstorage/dist/vue-local-storage.js"],"sourcesContent":["// 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-36dd2d08]{margin:0}.modal__content[data-v-36dd2d08]{display:flex;flex-direction:column;align-items:center;padding:20px;gap:4px 0}.modal__button-row[data-v-36dd2d08]{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-220321a2] .icon-vue{width:64px;height:64px}.empty[data-v-220321a2] .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-0634d81b]{display:flex;flex-direction:column;align-items:center;padding:20px;gap:4px 0}.modal__form #new-user-groups-input[data-v-0634d81b]{position:absolute;opacity:0;width:0}.modal__item[data-v-0634d81b]{width:100%}.modal__item[data-v-0634d81b]:not(:focus):not(:active){border-color:var(--color-border-dark)}.modal__hint[data-v-0634d81b]{color:var(--color-text-maxcontrast);margin-top:8px;align-self:flex-start}.modal__label[data-v-0634d81b]{display:block;padding:4px 0}.modal__select[data-v-0634d81b]{width:100%}.modal__submit[data-v-0634d81b]{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,CAGA,qDACC,iBAAA,CACA,SAAA,CAMA,OAAA,CAIF,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\\n\\t\\t/* fake input for groups validation */\\n\\t\\t#new-user-groups-input {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\topacity: 0;\\n\\t\\t\\t/* The \\\"hidden\\\" input is behind the NcSelect, so in general it does\\n\\t\\t\\t* not receives clicks. However, with Firefox, after the validation\\n\\t\\t\\t* fails, it will receive the first click done on it, so its width needs\\n\\t\\t\\t* to be set to 0 to prevent that (\\\"pointer-events: none\\\" does not\\n\\t\\t\\t* prevent it). */\\n\\t\\t\\twidth: 0;\\n\\t\\t}\\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-79fe702d]{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-79fe702d]:hover{background-color:var(--color-background-hover)}.user-list__row:hover .row__cell[data-v-79fe702d]:not(.row__cell--actions){background-color:var(--color-background-hover)}.user-list__row .select--fill[data-v-79fe702d]{max-width:calc(var(--cell-width-large) - 2*var(--cell-padding))}.row__cell[data-v-79fe702d]{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-79fe702d],.row__cell span[data-v-79fe702d],.row__cell label[data-v-79fe702d]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;overflow-wrap:anywhere}@media(min-width: 670px){.row__cell--avatar[data-v-79fe702d],.row__cell--displayname[data-v-79fe702d]{position:sticky;z-index:var(--sticky-column-z-index);background-color:var(--color-main-background)}.row__cell--avatar[data-v-79fe702d]{left:0}.row__cell--displayname[data-v-79fe702d]{left:var(--avatar-cell-width);border-right:1px solid var(--color-border)}}.row__cell--avatar[data-v-79fe702d]{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-79fe702d]{line-height:1.3em;white-space:unset}@supports(-webkit-line-clamp: 2){.row__cell--multiline span[data-v-79fe702d]{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.row__cell--large[data-v-79fe702d]{min-width:var(--cell-width-large);width:var(--cell-width-large)}.row__cell--obfuscated[data-v-79fe702d]{min-width:400px;width:400px}.row__cell--fill[data-v-79fe702d]{min-width:var(--cell-width-large);width:100%}.row__cell--actions[data-v-79fe702d]{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-79fe702d]{color:var(--color-text-maxcontrast)}.row__cell[data-v-79fe702d]{border-bottom:1px solid var(--color-border)}.row__cell[data-v-79fe702d] .v-select.select{min-width:var(--cell-min-width)}.row__progress[data-v-79fe702d]{margin-top:4px}.row__progress--warn[data-v-79fe702d]::-moz-progress-bar{background:var(--color-warning) !important}.row__progress--warn[data-v-79fe702d]::-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, `label[for=default-quota-select][data-v-0a250c55]{display:block;padding:4px 0}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/Users/UserSettingsDialog.vue\"],\"names\":[],\"mappings\":\"AACA,iDACC,aAAA,CACA,aAAA\",\"sourcesContent\":[\"\\nlabel[for=\\\"default-quota-select\\\"] {\\n\\tdisplay: block;\\n\\tpadding: 4px 0;\\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-4377829d]{--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-4377829d],.user-list__footer[data-v-4377829d]{position:sticky;display:block}.user-list__header[data-v-4377829d]{top:0;z-index:calc(var(--sticky-column-z-index) + 1)}.user-list__footer[data-v-4377829d]{left:0}.user-list__body[data-v-4377829d]{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-68b27594]{display:flex;overflow:hidden;flex-direction:column;max-height:100%}.app-navigation-entry__settings[data-v-68b27594]{height:auto !important;flex:0 0 auto}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/Users.vue\"],\"names\":[],\"mappings\":\"AACA,8BAEC,YAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAGD,iDACC,sBAAA,CAEA,aAAA\",\"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\\n.app-navigation-entry__settings {\\n\\theight: auto !important;\\n\\t// Prevent shrinking or growing\\n\\tflex: 0 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('Fragment',[_c('NcContent',{attrs:{\"app-name\":\"settings\"}},[_c('NcAppNavigation',{attrs:{\"aria-label\":_vm.t('settings', 'User management')},scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c('NcAppNavigationItem',{attrs:{\"id\":\"everyone\",\"exact\":true,\"name\":_vm.t('settings', 'Active users'),\"to\":{ name: 'users' }},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AccountGroup',{attrs:{\"size\":20}})]},proxy:true},{key:\"counter\",fn:function(){return [(_vm.userCount)?_c('NcCounterBubble',{attrs:{\"type\":!_vm.selectedGroupDecoded ? 'highlighted' : undefined}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.userCount)+\"\\n\\t\\t\\t\\t\\t\\t\")]):_vm._e()]},proxy:true}])}),_vm._v(\" \"),(_vm.settings.isAdmin)?_c('NcAppNavigationItem',{attrs:{\"id\":\"admin\",\"exact\":true,\"name\":_vm.t('settings', 'Admins'),\"to\":{ name: 'group', params: { selectedGroup: 'admin' } }},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('ShieldAccount',{attrs:{\"size\":20}})]},proxy:true},(_vm.adminGroupMenu.count > 0)?{key:\"counter\",fn:function(){return [_c('NcCounterBubble',{attrs:{\"type\":_vm.selectedGroupDecoded === 'admin' ? 'highlighted' : undefined}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.adminGroupMenu.count)+\"\\n\\t\\t\\t\\t\\t\\t\")])]},proxy:true}:null],null,true)}):_vm._e(),_vm._v(\" \"),(_vm.disabledGroupMenu.usercount > 0 || _vm.disabledGroupMenu.usercount === -1)?_c('NcAppNavigationItem',{attrs:{\"id\":\"disabled\",\"exact\":true,\"name\":_vm.t('settings', 'Disabled users'),\"to\":{ name: 'group', params: { selectedGroup: 'disabled' } }},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AccountOff',{attrs:{\"size\":20}})]},proxy:true},(_vm.disabledGroupMenu.usercount > 0)?{key:\"counter\",fn:function(){return [_c('NcCounterBubble',{attrs:{\"type\":_vm.selectedGroupDecoded === 'disabled' ? 'highlighted' : undefined}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.disabledGroupMenu.usercount)+\"\\n\\t\\t\\t\\t\\t\\t\")])]},proxy:true}:null],null,true)}):_vm._e(),_vm._v(\" \"),_c('NcAppNavigationCaption',{attrs:{\"name\":_vm.t('settings', 'Groups'),\"disabled\":_vm.loadingAddGroup,\"aria-label\":_vm.loadingAddGroup ? _vm.t('settings', 'Creating group …') : _vm.t('settings', 'Create group'),\"force-menu\":\"\",\"open\":_vm.isAddGroupOpen},on:{\"update:open\":function($event){_vm.isAddGroupOpen=$event}},scopedSlots:_vm._u([{key:\"actionsTriggerIcon\",fn:function(){return [(_vm.loadingAddGroup)?_c('NcLoadingIcon'):_c('Plus',{attrs:{\"size\":20}})]},proxy:true},{key:\"actions\",fn:function(){return [_c('NcActionText',{scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AccountGroup',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Create group'))+\"\\n\\t\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionInput',{attrs:{\"label\":_vm.t('settings', 'Group name'),\"data-cy-settings-new-group-name\":\"\",\"label-outside\":false,\"disabled\":_vm.loadingAddGroup,\"value\":_vm.newGroupName,\"error\":_vm.hasAddGroupError,\"helper-text\":_vm.hasAddGroupError ? _vm.t('settings', 'Please enter a valid group name') : ''},on:{\"update:value\":function($event){_vm.newGroupName=$event},\"submit\":_vm.createGroup}})]},proxy:true}])}),_vm._v(\" \"),_vm._l((_vm.groupList),function(group){return _c('GroupListItem',{key:group.id,attrs:{\"id\":group.id,\"active\":_vm.selectedGroupDecoded === group.id,\"name\":group.title,\"count\":group.count}})})]},proxy:true},{key:\"footer\",fn:function(){return [_c('ul',{staticClass:\"app-navigation-entry__settings\"},[_c('NcAppNavigationItem',{attrs:{\"name\":_vm.t('settings', 'User management settings')},on:{\"click\":function($event){_vm.isDialogOpen = true}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Cog',{attrs:{\"size\":20}})]},proxy:true}])})],1)]},proxy:true}])},[_c('NcAppNavigationNew',{attrs:{\"button-id\":\"new-user-button\",\"text\":_vm.t('settings','New user')},on:{\"click\":_vm.showNewUserMenu,\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.showNewUserMenu.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"]))return null;return _vm.showNewUserMenu.apply(null, arguments)}]},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Plus',{attrs:{\"size\":20}})]},proxy:true}])})],1),_vm._v(\" \"),_c('NcAppContent',{attrs:{\"page-heading\":_vm.pageHeading}},[_c('UserList',{attrs:{\"selected-group\":_vm.selectedGroupDecoded,\"external-actions\":_vm.externalActions}})],1)],1),_vm._v(\" \"),_c('UserSettingsDialog',{attrs:{\"open\":_vm.isDialogOpen},on:{\"update:open\":function($event){_vm.isDialogOpen=$event}}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon account-off-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,4A4,4 0 0,1 16,8C16,9.95 14.6,11.58 12.75,11.93L8.07,7.25C8.42,5.4 10.05,4 12,4M12.28,14L18.28,20L20,21.72L18.73,23L15.73,20H4V18C4,16.16 6.5,14.61 9.87,14.14L2.78,7.05L4.05,5.78L12.28,14M20,18V19.18L15.14,14.32C18,14.93 20,16.35 20,18Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"AccountOffIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./AccountOff.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./AccountOff.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./AccountOff.vue?vue&type=template&id=4a2e1178\"\nimport script from \"./AccountOff.vue?vue&type=script&lang=js\"\nexport * from \"./AccountOff.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../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","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon account-off-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M12,4A4,4 0 0,1 16,8C16,9.95 14.6,11.58 12.75,11.93L8.07,7.25C8.42,5.4 10.05,4 12,4M12.28,14L18.28,20L20,21.72L18.73,23L15.73,20H4V18C4,16.16 6.5,14.61 9.87,14.14L2.78,7.05L4.05,5.78L12.28,14M20,18V19.18L15.14,14.32C18,14.93 20,16.35 20,18Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./Cog.vue?vue&type=template&id=bcf30078\"\nimport script from \"./Cog.vue?vue&type=script&lang=js\"\nexport * from \"./Cog.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../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","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon shield-account-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,1L3,5V11C3,16.55 6.84,21.74 12,23C17.16,21.74 21,16.55 21,11V5L12,1M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M17.13,17C15.92,18.85 14.11,20.24 12,20.92C9.89,20.24 8.08,18.85 6.87,17C6.53,16.5 6.24,16 6,15.47C6,13.82 8.71,12.47 12,12.47C15.29,12.47 18,13.79 18,15.47C17.76,16 17.47,16.5 17.13,17Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ShieldAccountIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./ShieldAccount.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./ShieldAccount.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ShieldAccount.vue?vue&type=template&id=3937f138\"\nimport script from \"./ShieldAccount.vue?vue&type=script&lang=js\"\nexport * from \"./ShieldAccount.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../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","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon shield-account-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M12,1L3,5V11C3,16.55 6.84,21.74 12,23C17.16,21.74 21,16.55 21,11V5L12,1M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M17.13,17C15.92,18.85 14.11,20.24 12,20.92C9.89,20.24 8.08,18.85 6.87,17C6.53,16.5 6.24,16 6,15.47C6,13.82 8.71,12.47 12,12.47C15.29,12.47 18,13.79 18,15.47C17.76,16 17.47,16.5 17.13,17Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","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 users 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 }","<!--\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 users 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=36dd2d08&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=36dd2d08&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=36dd2d08&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=36dd2d08&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 \"36dd2d08\",\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 users')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.isInitialLoad && _vm.loading.users)?_c('NcLoadingIcon',{attrs:{\"name\":_vm.t('settings', 'Loading users …'),\"size\":64}}):_c('NcIconSvgWrapper',{attrs:{\"svg\":_vm.usersSvg}})]},proxy:true}],null,false,934871631)}):_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 users. This list is not fully rendered for performance reasons. The users 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 }","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=4377829d&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=4377829d&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=4377829d&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=4377829d&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 \"4377829d\",\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\"},[(!_vm.settings.isAdmin)?_c('NcTextField',{class:{ 'icon-loading-small': _vm.loading.groups },attrs:{\"id\":\"new-user-groups-input\",\"tabindex\":\"-1\",\"value\":_vm.newUser.groups,\"required\":!_vm.settings.isAdmin}}):_vm._e(),_vm._v(\" \"),_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},on:{\"input\":_vm.handleGroupInput,\"option:created\":_vm.createGroup}})],1),_vm._v(\" \"),(_vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin)?_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<!-- hidden input trick for vanilla html5 form validation -->\n\t\t\t\t<NcTextField v-if=\"!settings.isAdmin\"\n\t\t\t\t\tid=\"new-user-groups-input\"\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t:class=\"{ 'icon-loading-small': loading.groups }\"\n\t\t\t\t\t:value=\"newUser.groups\"\n\t\t\t\t\t:required=\"!settings.isAdmin\" />\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@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 && settings.isAdmin\"\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\n\t\t/* fake input for groups validation */\n\t\t#new-user-groups-input {\n\t\t\tposition: absolute;\n\t\t\topacity: 0;\n\t\t\t/* The \"hidden\" input is behind the NcSelect, so in general it does\n\t\t\t* not receives clicks. However, with Firefox, after the validation\n\t\t\t* fails, it will receive the first click done on it, so its width needs\n\t\t\t* to be set to 0 to prevent that (\"pointer-events: none\" does not\n\t\t\t* prevent it). */\n\t\t\twidth: 0;\n\t\t}\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=0634d81b&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=0634d81b&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=0634d81b&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=0634d81b&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 \"0634d81b\",\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 user …'),\"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 user'))+\"\\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 user 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 user 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 user 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 user 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 user 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 user 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=81dfc294\"\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 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","<!--\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 user …')\"\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 user') }}\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 user 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 user 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 user 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 user 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 user 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 manager in the context of an organization\n\t\t\treturn t('settings', 'Set user 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 user'),\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', 'Wipe all devices'),\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 user') : t('settings', 'Enable user'),\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 manager in the context of an organization\n\t\t\t\tshowError(t('setting', 'Failed to update user 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=79fe702d&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=79fe702d&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=79fe702d&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=79fe702d&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 \"79fe702d\",\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 users')\">\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 users …')\"\n\t\t\t\t\t:size=\"64\" />\n\t\t\t\t<NcIconSvgWrapper v-else\n\t\t\t\t\t:svg=\"usersSvg\" />\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 users. This list is not fully rendered for performance reasons. The users 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 Vue from 'vue'\nimport { Fragment } from 'vue-frag'\n\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 { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport { showError } from '@nextcloud/dialogs'\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.js'\n\nimport usersSvg from '../../img/users.svg?raw'\n\nconst newUser = {\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\tdata() {\n\t\treturn {\n\t\t\tUserRow,\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\tisInitialLoad: true,\n\t\t\trowHeight: 55,\n\t\t\tusersSvg,\n\t\t\tsearchQuery: '',\n\t\t\tnewUser: Object.assign({}, newUser),\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, old) {\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})\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 users', { error })\n\t\t\t\tshowError('Failed to load users')\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\tif (value && value.length > 0) {\n\t\t\t\t// setting new user 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=220321a2&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=220321a2&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=220321a2&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=220321a2&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 \"220321a2\",\n null\n \n)\n\nexport default component.exports","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', 'User 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 user 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\":\"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 users'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"default-settings\",\"name\":_vm.t('settings', 'Defaults')}},[_c('label',{attrs:{\"for\":\"default-quota-select\"}},[_vm._v(_vm._s(_vm.t('settings', 'Default quota')))]),_vm._v(\" \"),_c('NcSelect',{attrs:{\"input-id\":\"default-quota-select\",\"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', 'User 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 user 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=\"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 users') }}\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<label for=\"default-quota-select\">{{ t('settings', 'Default quota') }}</label>\n\t\t\t<NcSelect v-model=\"defaultQuota\"\n\t\t\t\tinput-id=\"default-quota-select\"\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 axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\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 NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'\n\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\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\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.getLocalstorage('showLanguages')\n\t\t\t},\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showLanguages', status)\n\t\t\t},\n\t\t},\n\n\t\tshowLastLogin: {\n\t\t\tget() {\n\t\t\t\treturn this.getLocalstorage('showLastLogin')\n\t\t\t},\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showLastLogin', status)\n\t\t\t},\n\t\t},\n\n\t\tshowUserBackend: {\n\t\t\tget() {\n\t\t\t\treturn this.getLocalstorage('showUserBackend')\n\t\t\t},\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showUserBackend', status)\n\t\t\t},\n\t\t},\n\n\t\tshowStoragePath: {\n\t\t\tget() {\n\t\t\t\treturn this.getLocalstorage('showStoragePath')\n\t\t\t},\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('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\tgetLocalstorage(key) {\n\t\t\t// force initialization\n\t\t\tconst localConfig = this.$localStorage.get(key)\n\t\t\t// if localstorage is null, fallback to original values\n\t\t\tthis.$store.commit('setShowConfig', { key, value: localConfig !== null ? localConfig === 'true' : this.showConfig[key] })\n\t\t\treturn this.showConfig[key]\n\t\t},\n\n\t\tsetLocalStorage(key, status) {\n\t\t\tthis.$store.commit('setShowConfig', { key, value: status })\n\t\t\tthis.$localStorage.set(key, status)\n\t\t\treturn 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 = OC.Util.computerFileSize(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 = OC.Util.humanFileSize(OC.Util.computerFileSize(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 lang=\"scss\" scoped>\nlabel[for=\"default-quota-select\"] {\n\tdisplay: block;\n\tpadding: 4px 0;\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=0a250c55&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!./UserSettingsDialog.vue?vue&type=style&index=0&id=0a250c55&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserSettingsDialog.vue?vue&type=template&id=0a250c55&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=0a250c55&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 \"0a250c55\",\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<NcContent app-name=\"settings\">\n\t\t\t<NcAppNavigation :aria-label=\"t('settings', 'User management')\">\n\t\t\t\t<NcAppNavigationNew button-id=\"new-user-button\"\n\t\t\t\t\t:text=\"t('settings','New user')\"\n\t\t\t\t\t@click=\"showNewUserMenu\"\n\t\t\t\t\t@keyup.enter=\"showNewUserMenu\"\n\t\t\t\t\t@keyup.space=\"showNewUserMenu\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Plus :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationNew>\n\n\t\t\t\t<template #list>\n\t\t\t\t\t<NcAppNavigationItem id=\"everyone\"\n\t\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t\t:name=\"t('settings', 'Active users')\"\n\t\t\t\t\t\t:to=\"{ name: 'users' }\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<AccountGroup :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template #counter>\n\t\t\t\t\t\t\t<NcCounterBubble v-if=\"userCount\" :type=\"!selectedGroupDecoded ? 'highlighted' : undefined\">\n\t\t\t\t\t\t\t\t{{ userCount }}\n\t\t\t\t\t\t\t</NcCounterBubble>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcAppNavigationItem>\n\n\t\t\t\t\t<NcAppNavigationItem v-if=\"settings.isAdmin\"\n\t\t\t\t\t\tid=\"admin\"\n\t\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t\t:name=\"t('settings', 'Admins')\"\n\t\t\t\t\t\t:to=\"{ name: 'group', params: { selectedGroup: 'admin' } }\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<ShieldAccount :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template v-if=\"adminGroupMenu.count > 0\" #counter>\n\t\t\t\t\t\t\t<NcCounterBubble :type=\"selectedGroupDecoded === 'admin' ? 'highlighted' : undefined\">\n\t\t\t\t\t\t\t\t{{ adminGroupMenu.count }}\n\t\t\t\t\t\t\t</NcCounterBubble>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcAppNavigationItem>\n\n\t\t\t\t\t<!-- Hide the disabled if none, if we don't have the data (-1) show it -->\n\t\t\t\t\t<NcAppNavigationItem v-if=\"disabledGroupMenu.usercount > 0 || disabledGroupMenu.usercount === -1\"\n\t\t\t\t\t\tid=\"disabled\"\n\t\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t\t:name=\"t('settings', 'Disabled users')\"\n\t\t\t\t\t\t:to=\"{ name: 'group', params: { selectedGroup: 'disabled' } }\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<AccountOff :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template v-if=\"disabledGroupMenu.usercount > 0\" #counter>\n\t\t\t\t\t\t\t<NcCounterBubble :type=\"selectedGroupDecoded === 'disabled' ? 'highlighted' : undefined\">\n\t\t\t\t\t\t\t\t{{ disabledGroupMenu.usercount }}\n\t\t\t\t\t\t\t</NcCounterBubble>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcAppNavigationItem>\n\n\t\t\t\t\t<NcAppNavigationCaption :name=\"t('settings', 'Groups')\"\n\t\t\t\t\t\t:disabled=\"loadingAddGroup\"\n\t\t\t\t\t\t:aria-label=\"loadingAddGroup ? t('settings', 'Creating group …') : t('settings', 'Create group')\"\n\t\t\t\t\t\tforce-menu\n\t\t\t\t\t\t:open.sync=\"isAddGroupOpen\">\n\t\t\t\t\t\t<template #actionsTriggerIcon>\n\t\t\t\t\t\t\t<NcLoadingIcon v-if=\"loadingAddGroup\" />\n\t\t\t\t\t\t\t<Plus v-else :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template #actions>\n\t\t\t\t\t\t\t<NcActionText>\n\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t<AccountGroup :size=\"20\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t{{ t('settings', 'Create group') }}\n\t\t\t\t\t\t\t</NcActionText>\n\t\t\t\t\t\t\t<NcActionInput :label=\"t('settings', 'Group name')\"\n\t\t\t\t\t\t\t\tdata-cy-settings-new-group-name\n\t\t\t\t\t\t\t\t:label-outside=\"false\"\n\t\t\t\t\t\t\t\t:disabled=\"loadingAddGroup\"\n\t\t\t\t\t\t\t\t:value.sync=\"newGroupName\"\n\t\t\t\t\t\t\t\t:error=\"hasAddGroupError\"\n\t\t\t\t\t\t\t\t:helper-text=\"hasAddGroupError ? t('settings', 'Please enter a valid group name') : ''\"\n\t\t\t\t\t\t\t\t@submit=\"createGroup\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcAppNavigationCaption>\n\n\t\t\t\t\t<GroupListItem v-for=\"group in groupList\"\n\t\t\t\t\t\t:id=\"group.id\"\n\t\t\t\t\t\t:key=\"group.id\"\n\t\t\t\t\t\t:active=\"selectedGroupDecoded === group.id\"\n\t\t\t\t\t\t:name=\"group.title\"\n\t\t\t\t\t\t:count=\"group.count\" />\n\t\t\t\t</template>\n\n\t\t\t\t<template #footer>\n\t\t\t\t\t<ul class=\"app-navigation-entry__settings\">\n\t\t\t\t\t\t<NcAppNavigationItem :name=\"t('settings', 'User management settings')\"\n\t\t\t\t\t\t\t@click=\"isDialogOpen = true\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<Cog :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcAppNavigationItem>\n\t\t\t\t\t</ul>\n\t\t\t\t</template>\n\t\t\t</NcAppNavigation>\n\n\t\t\t<NcAppContent :page-heading=\"pageHeading\">\n\t\t\t\t<UserList :selected-group=\"selectedGroupDecoded\"\n\t\t\t\t\t:external-actions=\"externalActions\" />\n\t\t\t</NcAppContent>\n\t\t</NcContent>\n\n\t\t<UserSettingsDialog :open.sync=\"isDialogOpen\" />\n\t</Fragment>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport VueLocalStorage from 'vue-localstorage'\nimport { Fragment } from 'vue-frag'\nimport { translate as t } from '@nextcloud/l10n'\nimport { showError } from '@nextcloud/dialogs'\n\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput.js'\nimport NcActionText from '@nextcloud/vue/dist/Components/NcActionText.js'\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\nimport NcAppNavigationCaption from '@nextcloud/vue/dist/Components/NcAppNavigationCaption.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcAppNavigationNew from '@nextcloud/vue/dist/Components/NcAppNavigationNew.js'\nimport NcContent from '@nextcloud/vue/dist/Components/NcContent.js'\nimport NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\n\nimport AccountGroup from 'vue-material-design-icons/AccountGroup.vue'\nimport AccountOff from 'vue-material-design-icons/AccountOff.vue'\nimport Cog from 'vue-material-design-icons/Cog.vue'\nimport Plus from 'vue-material-design-icons/Plus.vue'\nimport ShieldAccount from 'vue-material-design-icons/ShieldAccount.vue'\n\nimport GroupListItem from '../components/GroupListItem.vue'\nimport UserList from '../components/UserList.vue'\nimport UserSettingsDialog from '../components/Users/UserSettingsDialog.vue'\n\nVue.use(VueLocalStorage)\n\nexport default {\n\tname: 'Users',\n\n\tcomponents: {\n\t\tAccountGroup,\n\t\tAccountOff,\n\t\tCog,\n\t\tFragment,\n\t\tGroupListItem,\n\t\tNcActionInput,\n\t\tNcActionText,\n\t\tNcAppContent,\n\t\tNcAppNavigation,\n\t\tNcAppNavigationCaption,\n\t\tNcAppNavigationItem,\n\t\tNcAppNavigationNew,\n\t\tNcContent,\n\t\tNcCounterBubble,\n\t\tNcLoadingIcon,\n\t\tPlus,\n\t\tShieldAccount,\n\t\tUserList,\n\t\tUserSettingsDialog,\n\t},\n\n\tprops: {\n\t\tselectedGroup: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\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\tnewGroupName: '',\n\t\t\tisAddGroupOpen: false,\n\t\t\tloadingAddGroup: false,\n\t\t\thasAddGroupError: false,\n\t\t\tisDialogOpen: false,\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 users')\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 users'),\n\t\t\t}\n\t\t\treturn matchHeading[this.selectedGroupDecoded] ?? t('settings', 'User group: {group}', { group: this.selectedGroupDecoded })\n\t\t},\n\n\t\tshowConfig() {\n\t\t\treturn this.$store.getters.getShowConfig\n\t\t},\n\n\t\tselectedGroupDecoded() {\n\t\t\treturn this.selectedGroup ? decodeURIComponent(this.selectedGroup) : null\n\t\t},\n\n\t\tusers() {\n\t\t\treturn this.$store.getters.getUsers\n\t\t},\n\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\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\tuserCount() {\n\t\t\treturn this.$store.getters.getUserCount\n\t\t},\n\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\n\t\tgroupList() {\n\t\t\tconst groups = Array.isArray(this.groups) ? this.groups : []\n\n\t\t\treturn groups\n\t\t\t\t// filter out disabled and admin\n\t\t\t\t.filter(group => group.id !== 'disabled' && group.id !== 'admin')\n\t\t\t\t.map(group => this.formatGroupMenu(group))\n\t\t},\n\n\t\tadminGroupMenu() {\n\t\t\treturn this.formatGroupMenu(this.groups.find(group => group.id === 'admin'))\n\t\t},\n\n\t\tdisabledGroupMenu() {\n\t\t\treturn this.formatGroupMenu(this.groups.find(group => group.id === 'disabled'))\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\t// and add the registerAction method\n\t\tObject.assign(OCA, {\n\t\t\tSettings: {\n\t\t\t\tUserList: {\n\t\t\t\t\tregisterAction: this.registerAction,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\tshowNewUserMenu() {\n\t\t\tthis.$store.commit('setShowConfig', {\n\t\t\t\tkey: 'showNewUserForm',\n\t\t\t\tvalue: true,\n\t\t\t})\n\t\t},\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\n\t\t/**\n\t\t * Create a new group\n\t\t */\n\t\tasync createGroup() {\n\t\t\tthis.hasAddGroupError = false\n\t\t\tconst groupId = this.newGroupName.trim()\n\t\t\tif (groupId === '') {\n\t\t\t\tthis.hasAddGroupError = true\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isAddGroupOpen = false\n\t\t\tthis.loadingAddGroup = true\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addGroup', groupId)\n\t\t\t\tawait this.$router.push({\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tselectedGroup: encodeURIComponent(groupId),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tthis.newGroupName = ''\n\t\t\t} catch {\n\t\t\t\tshowError(t('settings', 'Failed to create group'))\n\t\t\t}\n\t\t\tthis.loadingAddGroup = false\n\t\t},\n\n\t\t/**\n\t\t * Format a group to a menu entry\n\t\t *\n\t\t * @param {object} group the group\n\t\t * @return {object}\n\t\t */\n\t\tformatGroupMenu(group) {\n\t\t\tconst item = {}\n\t\t\tif (typeof group === 'undefined') {\n\t\t\t\treturn {}\n\t\t\t}\n\n\t\t\titem.id = group.id\n\t\t\titem.title = group.name\n\t\t\titem.usercount = group.usercount\n\n\t\t\t// users count for all groups\n\t\t\tif (group.usercount - group.disabled > 0) {\n\t\t\t\titem.count = group.usercount - group.disabled\n\t\t\t}\n\n\t\t\treturn item\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\n.app-navigation-entry__settings {\n\theight: auto !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=style&index=0&id=68b27594&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!./Users.vue?vue&type=style&index=0&id=68b27594&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=68b27594&scoped=true\"\nimport script from \"./Users.vue?vue&type=script&lang=js\"\nexport * from \"./Users.vue?vue&type=script&lang=js\"\nimport style0 from \"./Users.vue?vue&type=style&index=0&id=68b27594&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 \"68b27594\",\n null\n \n)\n\nexport default component.exports","/**\n * vue-local-storage v0.6.0\n * (c) 2017 Alexander Avakov\n * @license MIT\n */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.VueLocalStorage = factory());\n}(this, (function () { 'use strict';\n\nvar VueLocalStorage = function VueLocalStorage () {\n this._properties = {};\n this._namespace = '';\n this._isSupported = true;\n};\n\nvar prototypeAccessors = { namespace: {} };\n\n/**\n * Namespace getter.\n *\n * @returns {string}\n */\nprototypeAccessors.namespace.get = function () {\n return this._namespace\n};\n\n/**\n * Namespace setter.\n *\n * @param {string} value\n */\nprototypeAccessors.namespace.set = function (value) {\n this._namespace = value ? (value + \".\") : '';\n};\n\n/**\n * Concatenates localStorage key with namespace prefix.\n *\n * @param {string} lsKey\n * @returns {string}\n * @private\n */\nVueLocalStorage.prototype._getLsKey = function _getLsKey (lsKey) {\n return (\"\" + (this._namespace) + lsKey)\n};\n\n/**\n * Set a value to localStorage giving respect to the namespace.\n *\n * @param {string} lsKey\n * @param {*} rawValue\n * @param {*} type\n * @private\n */\nVueLocalStorage.prototype._lsSet = function _lsSet (lsKey, rawValue, type) {\n var key = this._getLsKey(lsKey);\n var value = type && [Array, Object].includes(type)\n ? JSON.stringify(rawValue)\n : rawValue;\n\n window.localStorage.setItem(key, value);\n};\n\n/**\n * Get value from localStorage giving respect to the namespace.\n *\n * @param {string} lsKey\n * @returns {any}\n * @private\n */\nVueLocalStorage.prototype._lsGet = function _lsGet (lsKey) {\n var key = this._getLsKey(lsKey);\n\n return window.localStorage[key]\n};\n\n/**\n * Get value from localStorage\n *\n * @param {String} lsKey\n * @param {*} defaultValue\n * @param {*} defaultType\n * @returns {*}\n */\nVueLocalStorage.prototype.get = function get (lsKey, defaultValue, defaultType) {\n var this$1 = this;\n if ( defaultValue === void 0 ) defaultValue = null;\n if ( defaultType === void 0 ) defaultType = String;\n\n if (!this._isSupported) {\n return null\n }\n\n if (this._lsGet(lsKey)) {\n var type = defaultType;\n\n for (var key in this$1._properties) {\n if (key === lsKey) {\n type = this$1._properties[key].type;\n break\n }\n }\n\n return this._process(type, this._lsGet(lsKey))\n }\n\n return defaultValue !== null ? defaultValue : null\n};\n\n/**\n * Set localStorage value\n *\n * @param {String} lsKey\n * @param {*} value\n * @returns {*}\n */\nVueLocalStorage.prototype.set = function set (lsKey, value) {\n var this$1 = this;\n\n if (!this._isSupported) {\n return null\n }\n\n for (var key in this$1._properties) {\n var type = this$1._properties[key].type;\n\n if ((key === lsKey)) {\n this$1._lsSet(lsKey, value, type);\n\n return value\n }\n }\n\n this._lsSet(lsKey, value);\n\n return value\n};\n\n/**\n * Remove value from localStorage\n *\n * @param {String} lsKey\n */\nVueLocalStorage.prototype.remove = function remove (lsKey) {\n if (!this._isSupported) {\n return null\n }\n\n return window.localStorage.removeItem(lsKey)\n};\n\n/**\n * Add new property to localStorage\n *\n * @param {String} key\n * @param {function} type\n * @param {*} defaultValue\n */\nVueLocalStorage.prototype.addProperty = function addProperty (key, type, defaultValue) {\n if ( defaultValue === void 0 ) defaultValue = undefined;\n\n type = type || String;\n\n this._properties[key] = { type: type };\n\n if (!this._lsGet(key) && defaultValue !== null) {\n this._lsSet(key, defaultValue, type);\n }\n};\n\n/**\n * Process the value before return it from localStorage\n *\n * @param {String} type\n * @param {*} value\n * @returns {*}\n * @private\n */\nVueLocalStorage.prototype._process = function _process (type, value) {\n switch (type) {\n case Boolean:\n return value === 'true'\n case Number:\n return parseFloat(value)\n case Array:\n try {\n var array = JSON.parse(value);\n\n return Array.isArray(array) ? array : []\n } catch (e) {\n return []\n }\n case Object:\n try {\n return JSON.parse(value)\n } catch (e) {\n return {}\n }\n default:\n return value\n }\n};\n\nObject.defineProperties( VueLocalStorage.prototype, prototypeAccessors );\n\nvar vueLocalStorage = new VueLocalStorage();\n\nvar index = {\n /**\n * Install vue-local-storage plugin\n *\n * @param {Vue} Vue\n * @param {Object} options\n */\n install: function (Vue, options) {\n if ( options === void 0 ) options = {};\n\n if (typeof process !== 'undefined' &&\n (\n process.server ||\n process.SERVER_BUILD ||\n (process.env && process.env.VUE_ENV === 'server')\n )\n ) {\n return\n }\n\n var isSupported = true;\n\n try {\n var test = '__vue-localstorage-test__';\n\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n } catch (e) {\n isSupported = false;\n vueLocalStorage._isSupported = false;\n\n console.error('Local storage is not supported');\n }\n\n var name = options.name || 'localStorage';\n var bind = options.bind;\n\n if (options.namespace) {\n vueLocalStorage.namespace = options.namespace;\n }\n\n Vue.mixin({\n beforeCreate: function beforeCreate () {\n var this$1 = this;\n\n if (!isSupported) {\n return\n }\n\n if (this.$options[name]) {\n Object.keys(this.$options[name]).forEach(function (key) {\n var config = this$1.$options[name][key];\n var ref = [config.type, config.default];\n var type = ref[0];\n var defaultValue = ref[1];\n\n vueLocalStorage.addProperty(key, type, defaultValue);\n\n var existingProp = Object.getOwnPropertyDescriptor(vueLocalStorage, key);\n\n if (!existingProp) {\n var prop = {\n get: function () { return Vue.localStorage.get(key, defaultValue); },\n set: function (val) { return Vue.localStorage.set(key, val); },\n configurable: true\n };\n\n Object.defineProperty(vueLocalStorage, key, prop);\n Vue.util.defineReactive(vueLocalStorage, key, defaultValue);\n } else if (!Vue.config.silent) {\n console.log((key + \": is already defined and will be reused\"));\n }\n\n if ((bind || config.bind) && config.bind !== false) {\n this$1.$options.computed = this$1.$options.computed || {};\n\n if (!this$1.$options.computed[key]) {\n this$1.$options.computed[key] = {\n get: function () { return Vue.localStorage[key]; },\n set: function (val) { Vue.localStorage[key] = val; }\n };\n }\n }\n });\n }\n }\n });\n\n Vue[name] = vueLocalStorage;\n Vue.prototype[(\"$\" + name)] = vueLocalStorage;\n }\n};\n\nreturn index;\n\n})));\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","name","emits","props","title","type","String","fillColor","default","size","Number","_vm","this","_c","_self","_b","staticClass","attrs","on","$event","$emit","$attrs","_v","_s","_e","components","AccountGroup","Delete","Fragment","NcActionButton","NcActionInput","NcAppNavigationItem","NcButton","NcCounterBubble","NcModal","NcNoteCard","Pencil","active","Boolean","required","count","data","loadingRenameGroup","openGroupMenu","showRemoveGroupModal","computed","settings","$store","getters","getServerData","methods","handleGroupMenuOpen","renameGroup","gid","trim","displayName","$refs","displayNameInput","$el","querySelector","value","dispatch","groupid","removeGroup","error","showError","t","group","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","key","params","selectedGroup","encodeURIComponent","scopedSlots","_u","fn","proxy","undefined","isAdmin","ref","Vue","directive","vElementVisibility","extend","dataComponent","Object","Function","dataKey","dataSources","Array","itemHeight","extraProps","bufferItems","index","headerHeight","tableHeight","resizeObserver","startIndex","Math","max","shownItems","ceil","renderedItems","slice","tbodyStyle","isOverScrolled","length","lastIndex","hiddenAfterItems","min","paddingTop","paddingBottom","mounted","root","tfoot","thead","ResizeObserver","debounce","clientHeight","logger","debug","onScroll","observe","addEventListener","beforeDestroy","disconnect","handleFooterVisibility","visible","round","scrollTop","_setupProxy","_t","style","_l","item","i","tag","directives","rawName","expression","NcPasswordField","NcSelect","NcTextField","loading","newUser","quotaOptions","possibleManagers","managerLabel","showConfig","getShowConfig","usernameLabel","newUserGenerateUserID","minPasswordLength","getPasswordPolicyMinLength","groups","getGroups","filter","sort","a","b","localeCompare","subAdminsGroups","getSubadminGroups","canAddGroups","map","assign","$isDisabled","canAdd","languages","commonLanguages","otherLanguages","beforeMount","searchUserManager","createUser","all","userid","password","email","mailAddress","subadmin","quota","language","code","manager","username","inputField","input","focus","response","ocs","meta","statuscode","handleGroupInput","createGroup","_ref","find","validateQuota","validQuota","OC","Util","computerFileSize","humanFileSize","label","languageFilterBy","option","search","some","_ref2","toLocaleLowerCase","includes","query","offset","limit","then","users","values","_g","$listeners","preventDefault","apply","arguments","$set","newUserRequireEmail","class","model","callback","$$v","showLanguages","NcLoadingIcon","filteredUsers","userCount","n","hasObfuscated","passwordLabel","showUserBackend","showStoragePath","showLastLogin","defineComponent","NcActions","NcIconSvgWrapper","actions","disabled","edit","user","editSvg","toggleEdit","action","icon","text","event","externalActions","userGroups","userSubAdminsGroups","availableGroups","groupClone","canRemove","usedSpace","used","usedQuota","pow","isNaN","userQuota","humanQuota","userLanguage","userLang","concat","lang","userLastLoginTooltip","lastLogin","formatDate","userLastLogin","relativeModifiedDate","unlimitedQuota","defaultQuota","isObfuscated","keys","at","NcAvatar","NcProgressBar","UserRowActions","mixins","UserRowMixin","selectedQuota","rand","random","toString","substring","loadingPossibleManagers","currentManager","editing","subadmins","delete","disable","wipe","editedDisplayName","displayname","editedPassword","editedMail","isLoadingUser","isLoadingField","uniqueId","userGroupsLabels","join","userSubAdminsGroupsLabels","formatFileSize","canEdit","getCurrentUser","uid","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","console","updateDisplayName","updatePassword","updateEmail","addUserGroup","isCreating","removeUserGroup","$route","commit","addUserSubAdmin","removeUserSubAdmin","setUserQuota","setUserLanguage","$nextTick","displayNameField","backendCapabilities","setDisplayName","canChangePassword","setPassword","backend","storageLocation","NcEmptyContent","NewUserModal","UserListFooter","UserListHeader","VirtualList","UserRow","isInitialLoad","rowHeight","usersSvg","searchQuery","getUsers","quotaPreset","reduce","acc","cur","allowUnlimitedQuota","unshift","usersOffset","getUsersOffset","usersLimit","getUsersLimit","disabledUsersOffset","getDisabledUsersOffset","disabledUsersLimit","getDisabledUsersLimit","usersCount","watch","val","old","redirectIfDisabled","loadUsers","setNewUserDefaultGroup","created","Notification","showTemporary","resetForm","subscribe","resetSearch","unsubscribe","handleScrollEnd","closeModal","defaultLanguage","currentGroup","allGroups","findIndex","usercount","$router","showNewUserForm","NcAppSettingsDialog","NcAppSettingsSection","NcCheckboxRadioSwitch","open","loadingSendMail","isModalOpen","getLocalstorage","status","setLocalStorage","newUserSendEmail","axios","post","generateUrl","e","message","localConfig","$localStorage","setDefaultQuota","app","use","VueLocalStorage","AccountOff","Cog","GroupListItem","NcActionText","NcAppContent","NcAppNavigation","NcAppNavigationCaption","NcAppNavigationNew","NcContent","Plus","ShieldAccount","UserList","UserSettingsDialog","newGroupName","isAddGroupOpen","loadingAddGroup","hasAddGroupError","isDialogOpen","pageHeading","selectedGroupDecoded","admin","decodeURIComponent","getUserCount","groupList","isArray","formatGroupMenu","adminGroupMenu","disabledGroupMenu","orderBy","sortGroups","OCA","Settings","registerAction","showNewUserMenu","groupId","indexOf","_k","keyCode","exports","_properties","_namespace","_isSupported","prototypeAccessors","namespace","prototype","_getLsKey","lsKey","_lsSet","rawValue","JSON","stringify","window","localStorage","setItem","_lsGet","defaultValue","defaultType","_process","this$1","remove","removeItem","addProperty","parseFloat","array","parse","defineProperties","vueLocalStorage","install","process","server","SERVER_BUILD","env","VUE_ENV","isSupported","test","bind","mixin","beforeCreate","$options","forEach","config","getOwnPropertyDescriptor","silent","log","prop","configurable","defineProperty","util","defineReactive","factory"],"sourceRoot":""}
|