Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/dashboard/src/App.vue4
-rw-r--r--apps/files/src/views/TemplatePicker.vue2
-rw-r--r--apps/settings/src/components/UserList.vue3
-rw-r--r--apps/user_status/src/components/SetStatusModal.vue20
-rw-r--r--dist/dashboard-main.js4
-rw-r--r--dist/dashboard-main.js.map2
-rw-r--r--dist/files-main.js4
-rw-r--r--dist/files-main.js.map2
-rw-r--r--dist/settings-users-351.js4
-rw-r--r--dist/settings-users-351.js.map2
-rw-r--r--dist/settings-vue-settings-apps-users-management.js4
-rw-r--r--dist/settings-vue-settings-apps-users-management.js.map2
-rw-r--r--dist/user-status-modal-299.js4
-rw-r--r--dist/user-status-modal-299.js.map2
-rw-r--r--dist/user_status-menu.js4
-rw-r--r--dist/user_status-menu.js.map2
16 files changed, 21 insertions, 44 deletions
diff --git a/apps/dashboard/src/App.vue b/apps/dashboard/src/App.vue
index 75e8e6c0108..6360a6dd99a 100644
--- a/apps/dashboard/src/App.vue
+++ b/apps/dashboard/src/App.vue
@@ -34,7 +34,7 @@
@keyup.space="showModal">{{ t('dashboard', 'Customize') }}</a>
</div>
- <Modal v-if="modal" @close="closeModal">
+ <Modal v-if="modal" size="normal" @close="closeModal">
<div class="modal__content">
<h3>{{ t('dashboard', 'Edit widgets') }}</h3>
<ol class="panels">
@@ -553,9 +553,7 @@ export default {
.modal__content {
padding: 32px 16px;
- max-height: 70vh;
text-align: center;
- overflow: auto;
ol {
display: flex;
diff --git a/apps/files/src/views/TemplatePicker.vue b/apps/files/src/views/TemplatePicker.vue
index ade41a5416a..283841aa612 100644
--- a/apps/files/src/views/TemplatePicker.vue
+++ b/apps/files/src/views/TemplatePicker.vue
@@ -286,7 +286,7 @@ export default {
// Make sure we're relative for the loading emptycontent on top
::v-deep .modal-container {
position: relative;
- overflow-y: auto !important;
+ height: fit-content;
}
&__loading {
diff --git a/apps/settings/src/components/UserList.vue b/apps/settings/src/components/UserList.vue
index 0ea68fb40e6..ae06d9da62a 100644
--- a/apps/settings/src/components/UserList.vue
+++ b/apps/settings/src/components/UserList.vue
@@ -22,7 +22,7 @@
<template>
<div id="app-content" class="user-list-grid" @scroll.passive="onScroll">
- <Modal v-if="showConfig.showNewUserForm" @close="closeModal">
+ <Modal v-if="showConfig.showNewUserForm" size="small" @close="closeModal">
<form id="new-user"
:disabled="loading.all"
class="modal__content"
@@ -598,7 +598,6 @@ export default {
flex-direction: column;
align-items: center;
text-align: center;
- overflow: auto;
}
.modal__item {
margin-bottom: 16px;
diff --git a/apps/user_status/src/components/SetStatusModal.vue b/apps/user_status/src/components/SetStatusModal.vue
index c3b61db5e86..f9d10851ae3 100644
--- a/apps/user_status/src/components/SetStatusModal.vue
+++ b/apps/user_status/src/components/SetStatusModal.vue
@@ -233,29 +233,9 @@ export default {
</script>
<style lang="scss" scoped>
-// TODO: can be removed once migrated to @nextcloud-vue >= 5.0
-::v-deep {
- .modal-wrapper {
- .prev, .next {
- display: none !important;
- }
-
- .modal-container {
- max-height: 100% !important;
- }
- }
-
- .modal-header .modal-title {
- display: none;
- }
-}
.set-status-modal {
- min-height: 200px;
padding: 8px 20px 20px 20px;
- // Enable scrollbar for too long content, same way as in Dashboard customize
- max-height: 95vh;
- overflow: auto;
&__header {
text-align: center;
diff --git a/dist/dashboard-main.js b/dist/dashboard-main.js
index 72626d8c87a..ee29cf22d4d 100644
--- a/dist/dashboard-main.js
+++ b/dist/dashboard-main.js
@@ -1,3 +1,3 @@
/*! For license information please see dashboard-main.js.LICENSE.txt */
-!function(){"use strict";var n,e={63308:function(n,e,a){var o=a(20144),r=a(16453),i=a(22200),s=a(47450),d=a.n(s),c=a(9980),l=a.n(c),u=a(4820),A=a(79753),p={data:function(){return{isMobile:this._isMobile()}},beforeMount:function(){window.addEventListener("resize",this._onResize)},beforeDestroy:function(){window.removeEventListener("resize",this._onResize)},methods:{_onResize:function(){this.isMobile=this._isMobile()},_isMobile:function(){return document.documentElement.clientWidth<768}}},b=function(n){return(0,A.generateFilePath)("dashboard","","img/")+n},g=function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return"default"===n?e&&"backgroundColor"!==e?(0,A.generateUrl)("/apps/theming/image/background")+"?v="+window.OCA.Theming.cacheBuster:window.OCA.Accessibility&&"dark"===window.OCA.Accessibility.theme?b("eduardo-neves-pedra-azul.jpg"):b("kamil-porembinski-clouds.jpg"):"custom"===n?(0,A.generateUrl)("/apps/dashboard/background")+"?v="+t:b(n)};function C(n,t,e,a,o,r,i){try{var s=n[r](i),d=s.value}catch(n){return void e(n)}s.done?t(d):Promise.resolve(d).then(a,o)}function h(n){return function(){var t=this,e=arguments;return new Promise((function(a,o){var r=n.apply(t,e);function i(n){C(r,a,o,i,s,"next",n)}function s(n){C(r,a,o,i,s,"throw",n)}i(void 0)}))}}var v=(0,r.loadState)("dashboard","shippedBackgrounds"),m={name:"BackgroundSettings",props:{background:{type:String,default:"default"},themingDefaultBackground:{type:String,default:""}},data:function(){return{backgroundImage:(0,A.generateUrl)("/apps/dashboard/background")+"?v="+Date.now(),loading:!1}},computed:{shippedBackgrounds:function(){return Object.keys(v).map((function(n){return{name:n,url:b(n),preview:b("previews/"+n),details:v[n]}}))}},methods:{update:function(n){var t=this;return h(regeneratorRuntime.mark((function e(){var a,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a="custom"===n.type||"default"===n.type?n.type:n.value,t.backgroundImage=g(a,n.version,t.themingDefaultBackground),"color"!==n.type&&("default"!==n.type||"backgroundColor"!==t.themingDefaultBackground)){e.next=6;break}return t.$emit("update:background",n),t.loading=!1,e.abrupt("return");case 6:(o=new Image).onload=function(){t.$emit("update:background",n),t.loading=!1},o.src=t.backgroundImage;case 9:case"end":return e.stop()}}),e)})))()},setDefault:function(){var n=this;return h(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n.loading="default",t.next=3,u.default.post((0,A.generateUrl)("/apps/dashboard/background/default"));case 3:e=t.sent,n.update(e.data);case 5:case"end":return t.stop()}}),t)})))()},setShipped:function(n){var t=this;return h(regeneratorRuntime.mark((function e(){var a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.loading=n,e.next=3,u.default.post((0,A.generateUrl)("/apps/dashboard/background/shipped"),{value:n});case 3:a=e.sent,t.update(a.data);case 5:case"end":return e.stop()}}),e)})))()},setFile:function(n){var t=this;return h(regeneratorRuntime.mark((function e(){var a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.loading="custom",e.next=3,u.default.post((0,A.generateUrl)("/apps/dashboard/background/custom"),{value:n});case 3:a=e.sent,t.update(a.data);case 5:case"end":return e.stop()}}),e)})))()},pickColor:function(){var n=this;return h(regeneratorRuntime.mark((function t(){var e,a;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n.loading="color",e=OCA&&OCA.Theming?OCA.Theming.color:"#0082c9",t.next=4,u.default.post((0,A.generateUrl)("/apps/dashboard/background/color"),{value:e});case 4:a=t.sent,n.update(a.data);case 6:case"end":return t.stop()}}),t)})))()},pickFile:function(){var n=this;window.OC.dialogs.filepicker(t("dashboard","Insert from {productName}",{productName:OC.theme.name}),(function(t,e){e===OC.dialogs.FILEPICKER_TYPE_CHOOSE&&n.setFile(t)}),!1,["image/png","image/gif","image/jpeg","image/svg"],!0,OC.dialogs.FILEPICKER_TYPE_CHOOSE)}}},f=m,k=a(93379),x=a.n(k),y=a(7795),w=a.n(y),_=a(90569),S=a.n(_),B=a(3565),D=a.n(B),O=a(19216),E=a.n(O),F=a(44589),G=a.n(F),I=a(56510),T={};T.styleTagTransform=G(),T.setAttributes=D(),T.insert=S().bind(null,"head"),T.domAPI=w(),T.insertStyleElement=E(),x()(I.Z,T),I.Z&&I.Z.locals&&I.Z.locals;var j=a(51900),R=(0,j.Z)(f,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"background-selector"},[e("button",{staticClass:"background filepicker",class:{active:"custom"===n.background},attrs:{tabindex:"0"},on:{click:n.pickFile}},[n._v("\n\t\t"+n._s(n.t("dashboard","Pick from Files"))+"\n\t")]),n._v(" "),e("button",{staticClass:"background default",class:{"icon-loading":"default"===n.loading,active:"default"===n.background},attrs:{tabindex:"0"},on:{click:n.setDefault}},[n._v("\n\t\t"+n._s(n.t("dashboard","Default images"))+"\n\t")]),n._v(" "),e("button",{staticClass:"background color",class:{active:"custom"===n.background},attrs:{tabindex:"0"},on:{click:n.pickColor}},[n._v("\n\t\t"+n._s(n.t("dashboard","Plain background"))+"\n\t")]),n._v(" "),n._l(n.shippedBackgrounds,(function(t){return e("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.details.attribution,expression:"shippedBackground.details.attribution"}],key:t.name,staticClass:"background",class:{"icon-loading":n.loading===t.name,active:n.background===t.name},style:{"background-image":"url("+t.preview+")"},attrs:{tabindex:"0"},on:{click:function(e){return n.setShipped(t.name)}}})}))],2)}),[],!1,null,"e4c3a7ca",null).exports,z=(0,r.loadState)("dashboard","panels"),P=(0,r.loadState)("dashboard","firstRun"),L=(0,r.loadState)("dashboard","background"),U=(0,r.loadState)("dashboard","themingDefaultBackground"),N=(0,r.loadState)("dashboard","version"),W=(0,r.loadState)("dashboard","shippedBackgrounds"),M={weather:{text:t("dashboard","Weather"),icon:"icon-weather-status"},status:{text:t("dashboard","Status"),icon:"icon-user-status-online"}},q={name:"App",components:{Modal:d(),Draggable:l(),BackgroundSettings:R},mixins:[p],data:function(){var n,t;return{isAdmin:(0,i.getCurrentUser)().isAdmin,timer:new Date,registeredStatus:[],callbacks:{},callbacksStatus:{},allCallbacksStatus:{},statusInfo:M,enabledStatuses:(0,r.loadState)("dashboard","statuses"),panels:z,firstRun:P,displayName:null===(n=(0,i.getCurrentUser)())||void 0===n?void 0:n.displayName,uid:null===(t=(0,i.getCurrentUser)())||void 0===t?void 0:t.uid,layout:(0,r.loadState)("dashboard","layout").filter((function(n){return z[n]})),modal:!1,appStoreUrl:(0,A.generateUrl)("/settings/apps/dashboard"),statuses:{},background:L,themingDefaultBackground:U,version:N}},computed:{backgroundImage:function(){return g(this.background,this.version,this.themingDefaultBackground)},backgroundStyle:function(){return"default"===this.background&&"backgroundColor"===this.themingDefaultBackground||this.background.match(/#[0-9A-Fa-f]{6}/g)?null:{backgroundImage:"url(".concat(this.backgroundImage,")")}},greeting:function(){var n,e=this.timer.getHours();n=e>=22||e<5?"night":e>=18?"evening":e>=12?"afternoon":"morning";var a={morning:{generic:t("dashboard","Good morning"),withName:t("dashboard","Good morning, {name}",{name:this.displayName},void 0,{escape:!1})},afternoon:{generic:t("dashboard","Good afternoon"),withName:t("dashboard","Good afternoon, {name}",{name:this.displayName},void 0,{escape:!1})},evening:{generic:t("dashboard","Good evening"),withName:t("dashboard","Good evening, {name}",{name:this.displayName},void 0,{escape:!1})},night:{generic:t("dashboard","Hello"),withName:t("dashboard","Hello, {name}",{name:this.displayName},void 0,{escape:!1})}};return{text:this.displayName&&this.uid!==this.displayName?a[n].withName:a[n].generic}},isActive:function(){var n=this;return function(t){return n.layout.indexOf(t.id)>-1}},isStatusActive:function(){var n=this;return function(t){return!(t in n.enabledStatuses)||n.enabledStatuses[t]}},sortedAllStatuses:function(){return Object.keys(this.allCallbacksStatus).slice().sort(this.sortStatuses)},sortedPanels:function(){var n=this;return Object.values(this.panels).sort((function(t,e){var a=n.layout.indexOf(t.id),o=n.layout.indexOf(e.id);return-1===a||-1===o?o-a||t.id-e.id:a-o||t.id-e.id}))},sortedRegisteredStatus:function(){return this.registeredStatus.slice().sort(this.sortStatuses)}},watch:{callbacks:function(){this.rerenderPanels()},callbacksStatus:function(){for(var n in this.callbacksStatus){var t=this.$refs["status-"+n];this.statuses[n]&&this.statuses[n].mounted||(t?(this.callbacksStatus[n](t[0]),o.default.set(this.statuses,n,{mounted:!0})):console.error("Failed to register panel in the frontend as no backend data was provided for "+n))}}},mounted:function(){var n=this;this.updateGlobalStyles(),this.updateSkipLink(),window.addEventListener("scroll",this.handleScroll),setInterval((function(){n.timer=new Date}),3e4),this.firstRun&&window.addEventListener("scroll",this.disableFirstrunHint)},destroyed:function(){window.removeEventListener("scroll",this.handleScroll)},methods:{register:function(n,t){o.default.set(this.callbacks,n,t)},registerStatus:function(n,t){var e=this;o.default.set(this.allCallbacksStatus,n,t),this.isStatusActive(n)&&(this.registeredStatus.push(n),this.$nextTick((function(){o.default.set(e.callbacksStatus,n,t)})))},rerenderPanels:function(){for(var n in this.callbacks){var t=this.$refs[n];-1!==this.layout.indexOf(n)&&(this.panels[n]&&this.panels[n].mounted||(t?(this.callbacks[n](t[0],{widget:this.panels[n]}),o.default.set(this.panels[n],"mounted",!0)):console.error("Failed to register panel in the frontend as no backend data was provided for "+n)))}},saveLayout:function(){u.default.post((0,A.generateUrl)("/apps/dashboard/layout"),{layout:this.layout.join(",")})},saveStatuses:function(){u.default.post((0,A.generateUrl)("/apps/dashboard/statuses"),{statuses:JSON.stringify(this.enabledStatuses)})},showModal:function(){this.modal=!0,this.firstRun=!1},closeModal:function(){this.modal=!1},updateCheckbox:function(n,t){var e=this,a=this.layout.indexOf(n.id);!t&&a>-1?this.layout.splice(a,1):this.layout.push(n.id),o.default.set(this.panels[n.id],"mounted",!1),this.saveLayout(),this.$nextTick((function(){return e.rerenderPanels()}))},disableFirstrunHint:function(){var n=this;window.removeEventListener("scroll",this.disableFirstrunHint),setTimeout((function(){n.firstRun=!1}),1e3)},updateBackground:function(n){this.background="custom"===n.type||"default"===n.type?n.type:n.value,this.version=n.version,this.updateGlobalStyles()},updateGlobalStyles:function(){document.body.setAttribute("data-dashboard-background",this.background),window.OCA.Theming.inverted&&document.body.classList.add("dashboard--inverted"),"dark"===(W[this.background]?W[this.background].theming:"light")?document.body.classList.add("dashboard--dark"):document.body.classList.remove("dashboard--dark")},updateSkipLink:function(){document.getElementsByClassName("skip-navigation")[0].setAttribute("href","#app-dashboard")},updateStatusCheckbox:function(n,t){t?this.enableStatus(n):this.disableStatus(n)},enableStatus:function(n){this.enabledStatuses[n]=!0,this.registerStatus(n,this.allCallbacksStatus[n]),this.saveStatuses()},disableStatus:function(n){var t=this;this.enabledStatuses[n]=!1;var e=this.registeredStatus.findIndex((function(t){return t===n}));-1!==e&&(this.registeredStatus.splice(e,1),o.default.set(this.statuses,n,{mounted:!1}),this.$nextTick((function(){o.default.delete(t.callbacksStatus,n)}))),this.saveStatuses()},sortStatuses:function(n,t){var e=n.toLowerCase(),a=t.toLowerCase();return e>a?1:e<a?-1:0},handleScroll:function(){window.scrollY>70?document.body.classList.add("dashboard--scrolled"):document.body.classList.remove("dashboard--scrolled")}}},Z=a(79547),H={};H.styleTagTransform=G(),H.setAttributes=D(),H.insert=S().bind(null,"head"),H.domAPI=w(),H.insertStyleElement=E(),x()(Z.Z,H),Z.Z&&Z.Z.locals&&Z.Z.locals;var Y=(0,j.Z)(q,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{style:n.backgroundStyle,attrs:{id:"app-dashboard"}},[e("h2",[n._v(n._s(n.greeting.text))]),n._v(" "),e("ul",{staticClass:"statuses"},n._l(n.sortedRegisteredStatus,(function(n){return e("div",{key:n,attrs:{id:"status-"+n}},[e("div",{ref:"status-"+n,refInFor:!0})])})),0),n._v(" "),e("Draggable",n._b({staticClass:"panels",attrs:{handle:".panel--header"},on:{end:n.saveLayout},model:{value:n.layout,callback:function(t){n.layout=t},expression:"layout"}},"Draggable",{swapThreshold:.3,delay:500,delayOnTouchOnly:!0,touchStartThreshold:3},!1),n._l(n.layout,(function(t){return e("div",{key:n.panels[t].id,staticClass:"panel"},[e("div",{staticClass:"panel--header"},[e("h2",{class:n.panels[t].iconClass},[n._v("\n\t\t\t\t\t"+n._s(n.panels[t].title)+"\n\t\t\t\t")])]),n._v(" "),e("div",{staticClass:"panel--content",class:{loading:!n.panels[t].mounted}},[e("div",{ref:n.panels[t].id,refInFor:!0,attrs:{"data-id":n.panels[t].id}})])])})),0),n._v(" "),e("div",{staticClass:"footer"},[e("a",{staticClass:"edit-panels icon-rename",attrs:{tabindex:"0"},on:{click:n.showModal,keyup:[function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.showModal.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])?null:n.showModal.apply(null,arguments)}]}},[n._v(n._s(n.t("dashboard","Customize")))])]),n._v(" "),n.modal?e("Modal",{on:{close:n.closeModal}},[e("div",{staticClass:"modal__content"},[e("h3",[n._v(n._s(n.t("dashboard","Edit widgets")))]),n._v(" "),e("ol",{staticClass:"panels"},n._l(n.sortedAllStatuses,(function(t){return e("li",{key:t},[e("input",{staticClass:"checkbox",attrs:{id:"status-checkbox-"+t,type:"checkbox"},domProps:{checked:n.isStatusActive(t)},on:{input:function(e){return n.updateStatusCheckbox(t,e.target.checked)}}}),n._v(" "),e("label",{class:n.statusInfo[t].icon,attrs:{for:"status-checkbox-"+t}},[n._v("\n\t\t\t\t\t\t"+n._s(n.statusInfo[t].text)+"\n\t\t\t\t\t")])])})),0),n._v(" "),e("Draggable",n._b({staticClass:"panels",attrs:{tag:"ol",handle:".draggable"},on:{end:n.saveLayout},model:{value:n.layout,callback:function(t){n.layout=t},expression:"layout"}},"Draggable",{swapThreshold:.3,delay:500,delayOnTouchOnly:!0,touchStartThreshold:3},!1),n._l(n.sortedPanels,(function(t){return e("li",{key:t.id},[e("input",{staticClass:"checkbox",attrs:{id:"panel-checkbox-"+t.id,type:"checkbox"},domProps:{checked:n.isActive(t)},on:{input:function(e){return n.updateCheckbox(t,e.target.checked)}}}),n._v(" "),e("label",{class:n.isActive(t)?"draggable "+t.iconClass:t.iconClass,attrs:{for:"panel-checkbox-"+t.id}},[n._v("\n\t\t\t\t\t\t"+n._s(t.title)+"\n\t\t\t\t\t")])])})),0),n._v(" "),n.isAdmin?e("a",{staticClass:"button",attrs:{href:n.appStoreUrl}},[n._v(n._s(n.t("dashboard","Get more widgets from the App Store")))]):n._e(),n._v(" "),e("h3",[n._v(n._s(n.t("dashboard","Change background image")))]),n._v(" "),e("BackgroundSettings",{attrs:{background:n.background,"theming-default-background":n.themingDefaultBackground},on:{"update:background":n.updateBackground}}),n._v(" "),e("h3",[n._v(n._s(n.t("dashboard","Weather service")))]),n._v(" "),e("p",[n._v("\n\t\t\t\t"+n._s(n.t("dashboard","For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information."))+"\n\t\t\t")]),n._v(" "),e("p",{staticClass:"credits--end"},[e("a",{attrs:{href:"https://api.met.no/doc/TermsOfService",target:"_blank",rel:"noopener"}},[n._v(n._s(n.t("dashboard","Weather data from Met.no")))]),n._v(",\n\t\t\t\t"),e("a",{attrs:{href:"https://wiki.osmfoundation.org/wiki/Privacy_Policy",target:"_blank",rel:"noopener"}},[n._v(n._s(n.t("dashboard","geocoding with Nominatim")))]),n._v(",\n\t\t\t\t"),e("a",{attrs:{href:"https://www.opentopodata.org/#public-api",target:"_blank",rel:"noopener"}},[n._v(n._s(n.t("dashboard","elevation data from OpenTopoData")))]),n._v(".\n\t\t\t")])],1)]):n._e()],1)}),[],!1,null,"b86c858a",null),$=Y.exports,K=a(9944),Q=a(15168),J=a.n(Q);a.nc=btoa((0,i.getRequestToken)()),o.default.directive("Tooltip",J()),o.default.prototype.t=K.translate,window.OCA.Files||(window.OCA.Files={}),Object.assign(window.OCA.Files,{App:{fileList:{filesClient:OC.Files.getClient()}}},window.OCA.Files);var V=new(o.default.extend($))({}).$mount("#app-content-vue");window.OCA.Dashboard={register:function(n,t){return V.register(n,t)},registerStatus:function(n,t){return V.registerStatus(n,t)}}},79547:function(n,t,e){var a=e(87537),o=e.n(a),r=e(23645),i=e.n(r)()(o());i.push([n.id,"#app-dashboard[data-v-b86c858a]{width:100%;min-height:100vh;background-size:cover;background-position:center center;background-repeat:no-repeat;background-attachment:fixed;background-color:var(--color-primary);--color-background-translucent: rgba(255, 255, 255, 0.8);--background-blur: blur(10px)}#body-user.theme--dark #app-dashboard[data-v-b86c858a]{background-color:var(--color-main-background);--color-background-translucent: rgba(24, 24, 24, 0.8)}#body-user.theme--highcontrast #app-dashboard[data-v-b86c858a]{background-color:var(--color-main-background);--color-background-translucent: var(--color-main-background)}#app-dashboard>h2[data-v-b86c858a]{color:var(--color-primary-text);text-align:center;font-size:32px;line-height:130%;padding:10vh 16px 0px}.panels[data-v-b86c858a]{width:auto;margin:auto;max-width:1500px;display:flex;justify-content:center;flex-direction:row;align-items:flex-start;flex-wrap:wrap}.panel[data-v-b86c858a],.panels>div[data-v-b86c858a]{width:320px;max-width:100%;margin:16px;background-color:var(--color-background-translucent);-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur);border-radius:var(--border-radius-large)}#body-user.theme--highcontrast .panel[data-v-b86c858a],#body-user.theme--highcontrast .panels>div[data-v-b86c858a]{border:2px solid var(--color-border)}.panel.sortable-ghost[data-v-b86c858a],.panels>div.sortable-ghost[data-v-b86c858a]{opacity:.1}.panel>.panel--header[data-v-b86c858a],.panels>div>.panel--header[data-v-b86c858a]{display:flex;z-index:1;top:50px;padding:16px;cursor:grab}.panel>.panel--header[data-v-b86c858a],.panel>.panel--header[data-v-b86c858a] *,.panels>div>.panel--header[data-v-b86c858a],.panels>div>.panel--header[data-v-b86c858a] *{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.panel>.panel--header[data-v-b86c858a]:active,.panels>div>.panel--header[data-v-b86c858a]:active{cursor:grabbing}.panel>.panel--header a[data-v-b86c858a],.panels>div>.panel--header a[data-v-b86c858a]{flex-grow:1}.panel>.panel--header>h2[data-v-b86c858a],.panels>div>.panel--header>h2[data-v-b86c858a]{display:block;flex-grow:1;margin:0;font-size:20px;line-height:24px;font-weight:bold;background-size:32px;background-position:14px 12px;padding:16px 8px 16px 60px;height:56px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:grab}.panel>.panel--content[data-v-b86c858a],.panels>div>.panel--content[data-v-b86c858a]{margin:0 16px 16px 16px;height:420px;overflow:hidden}@media only screen and (max-width: 709px){.panel>.panel--content[data-v-b86c858a],.panels>div>.panel--content[data-v-b86c858a]{height:auto}}.footer[data-v-b86c858a]{text-align:center;transition:bottom var(--animation-slow) ease-in-out;bottom:0;padding:44px 0}.edit-panels[data-v-b86c858a]{display:inline-block;margin:auto;background-position:16px center;padding:12px 16px;padding-left:36px;border-radius:var(--border-radius-pill);max-width:200px;opacity:1;text-align:center}.edit-panels[data-v-b86c858a],.statuses[data-v-b86c858a] .action-item .action-item__menutoggle,.statuses[data-v-b86c858a] .action-item.action-item--open .action-item__menutoggle{background-color:var(--color-background-translucent);-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.edit-panels[data-v-b86c858a]:hover,.edit-panels[data-v-b86c858a]:focus,.edit-panels[data-v-b86c858a]:active,.statuses[data-v-b86c858a] .action-item .action-item__menutoggle:hover,.statuses[data-v-b86c858a] .action-item .action-item__menutoggle:focus,.statuses[data-v-b86c858a] .action-item .action-item__menutoggle:active,.statuses[data-v-b86c858a] .action-item.action-item--open .action-item__menutoggle:hover,.statuses[data-v-b86c858a] .action-item.action-item--open .action-item__menutoggle:focus,.statuses[data-v-b86c858a] .action-item.action-item--open .action-item__menutoggle:active{background-color:var(--color-background-hover)}.modal__content[data-v-b86c858a]{padding:32px 16px;max-height:70vh;text-align:center;overflow:auto}.modal__content ol[data-v-b86c858a]{display:flex;flex-direction:row;justify-content:center;list-style-type:none;padding-bottom:16px}.modal__content li label[data-v-b86c858a]{display:block;padding:48px 8px 16px 8px;margin:8px;width:160px;background-color:var(--color-background-hover);border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-size:24px;background-position:center 16px;text-align:center}.modal__content li label[data-v-b86c858a]:hover{border-color:var(--color-primary)}.modal__content li input:focus+label[data-v-b86c858a]{border-color:var(--color-primary)}.modal__content h3[data-v-b86c858a]{font-weight:bold}.modal__content h3[data-v-b86c858a]:not(:first-of-type){margin-top:64px}.modal__content .button[data-v-b86c858a]{display:inline-block;padding:10px 16px;margin:0}.modal__content p[data-v-b86c858a]{max-width:650px;margin:0 auto}.modal__content p a[data-v-b86c858a]:hover,.modal__content p a[data-v-b86c858a]:focus{border-bottom:2px solid var(--color-border)}.modal__content .credits--end[data-v-b86c858a]{padding-bottom:32px;color:var(--color-text-maxcontrast)}.modal__content .credits--end a[data-v-b86c858a]{color:var(--color-text-maxcontrast)}.flip-list-move[data-v-b86c858a]{transition:transform var(--animation-slow)}.statuses[data-v-b86c858a]{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap;margin-bottom:36px}.statuses>div[data-v-b86c858a]{margin:8px}","",{version:3,sources:["webpack://./apps/dashboard/src/App.vue"],names:[],mappings:"AAqZA,gCACC,UAAA,CACA,gBAAA,CACA,qBAAA,CACA,iCAAA,CACA,2BAAA,CACA,2BAAA,CACA,qCAAA,CACA,wDAAA,CACA,6BAAA,CAEA,uDACC,6CAAA,CACA,qDAAA,CAGD,+DACC,6CAAA,CACA,4DAAA,CAGD,mCACC,+BAAA,CACA,iBAAA,CACA,cAAA,CACA,gBAAA,CACA,qBAAA,CAIF,yBACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,sBAAA,CACA,cAAA,CAGD,qDACC,WAAA,CACA,cAAA,CACA,WAAA,CACA,oDAAA,CACA,8CAAA,CACA,sCAAA,CACA,wCAAA,CAEA,mHACC,oCAAA,CAGD,mFACE,UAAA,CAGF,mFACC,YAAA,CACA,SAAA,CACA,QAAA,CACA,YAAA,CACA,WAAA,CAEA,4KACC,0BAAA,CACA,wBAAA,CACA,uBAAA,CACA,qBAAA,CACA,oBAAA,CACA,gBAAA,CAGD,iGACC,eAAA,CAGD,uFACC,WAAA,CAGD,yFACC,aAAA,CACA,WAAA,CACA,QAAA,CACA,cAAA,CACA,gBAAA,CACA,gBAAA,CACA,oBAAA,CACA,6BAAA,CACA,0BAAA,CACA,WAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,WAAA,CAIF,qFACC,uBAAA,CACA,YAAA,CAEA,eAAA,CAID,0CACC,qFACC,WAAA,CAAA,CAKH,yBACC,iBAAA,CACA,mDAAA,CACA,QAAA,CACA,cAAA,CAGD,8BACC,oBAAA,CACA,WAAA,CACA,+BAAA,CACA,iBAAA,CACA,iBAAA,CACA,uCAAA,CACA,eAAA,CACA,SAAA,CACA,iBAAA,CAGD,oLAGC,oDAAA,CACA,8CAAA,CACA,sCAAA,CAEA,qlBAGC,8CAAA,CAIF,iCACC,iBAAA,CACA,eAAA,CACA,iBAAA,CACA,aAAA,CAEA,oCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,oBAAA,CACA,mBAAA,CAGA,0CACC,aAAA,CACA,yBAAA,CACA,UAAA,CACA,WAAA,CACA,8CAAA,CACA,6CAAA,CACA,wCAAA,CACA,oBAAA,CACA,+BAAA,CACA,iBAAA,CAEA,gDACC,iCAAA,CAIF,sDACC,iCAAA,CAIF,oCACC,gBAAA,CAEA,wDACC,eAAA,CAKF,yCACC,oBAAA,CACA,iBAAA,CACA,QAAA,CAGD,mCACC,eAAA,CACA,aAAA,CAEA,sFAEC,2CAAA,CAIF,+CACC,mBAAA,CACA,mCAAA,CAEA,iDACC,mCAAA,CAKH,iCACC,0CAAA,CAGD,2BACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,cAAA,CACA,kBAAA,CAEA,+BACC,UAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#app-dashboard {\n\twidth: 100%;\n\tmin-height: 100vh;\n\tbackground-size: cover;\n\tbackground-position: center center;\n\tbackground-repeat: no-repeat;\n\tbackground-attachment: fixed;\n\tbackground-color: var(--color-primary);\n\t--color-background-translucent: rgba(255, 255, 255, 0.8);\n\t--background-blur: blur(10px);\n\n\t#body-user.theme--dark & {\n\t\tbackground-color: var(--color-main-background);\n\t\t--color-background-translucent: rgba(24, 24, 24, 0.8);\n\t}\n\n\t#body-user.theme--highcontrast & {\n\t\tbackground-color: var(--color-main-background);\n\t\t--color-background-translucent: var(--color-main-background);\n\t}\n\n\t> h2 {\n\t\tcolor: var(--color-primary-text);\n\t\ttext-align: center;\n\t\tfont-size: 32px;\n\t\tline-height: 130%;\n\t\tpadding: 10vh 16px 0px;\n\t}\n}\n\n.panels {\n\twidth: auto;\n\tmargin: auto;\n\tmax-width: 1500px;\n\tdisplay: flex;\n\tjustify-content: center;\n\tflex-direction: row;\n\talign-items: flex-start;\n\tflex-wrap: wrap;\n}\n\n.panel, .panels > div {\n\twidth: 320px;\n\tmax-width: 100%;\n\tmargin: 16px;\n\tbackground-color: var(--color-background-translucent);\n\t-webkit-backdrop-filter: var(--background-blur);\n\tbackdrop-filter: var(--background-blur);\n\tborder-radius: var(--border-radius-large);\n\n\t#body-user.theme--highcontrast & {\n\t\tborder: 2px solid var(--color-border);\n\t}\n\n\t&.sortable-ghost {\n\t\t opacity: 0.1;\n\t}\n\n\t& > .panel--header {\n\t\tdisplay: flex;\n\t\tz-index: 1;\n\t\ttop: 50px;\n\t\tpadding: 16px;\n\t\tcursor: grab;\n\n\t\t&, ::v-deep * {\n\t\t\t-webkit-touch-callout: none;\n\t\t\t-webkit-user-select: none;\n\t\t\t-khtml-user-select: none;\n\t\t\t-moz-user-select: none;\n\t\t\t-ms-user-select: none;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&:active {\n\t\t\tcursor: grabbing;\n\t\t}\n\n\t\ta {\n\t\t\tflex-grow: 1;\n\t\t}\n\n\t\t> h2 {\n\t\t\tdisplay: block;\n\t\t\tflex-grow: 1;\n\t\t\tmargin: 0;\n\t\t\tfont-size: 20px;\n\t\t\tline-height: 24px;\n\t\t\tfont-weight: bold;\n\t\t\tbackground-size: 32px;\n\t\t\tbackground-position: 14px 12px;\n\t\t\tpadding: 16px 8px 16px 60px;\n\t\t\theight: 56px;\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\tcursor: grab;\n\t\t}\n\t}\n\n\t& > .panel--content {\n\t\tmargin: 0 16px 16px 16px;\n\t\theight: 420px;\n\t\t// We specifically do not want scrollbars inside widgets\n\t\toverflow: hidden;\n\t}\n\n\t// No need to extend height of widgets if only one column is shown\n\t@media only screen and (max-width: 709px) {\n\t\t& > .panel--content {\n\t\t\theight: auto;\n\t\t}\n\t}\n}\n\n.footer {\n\ttext-align: center;\n\ttransition: bottom var(--animation-slow) ease-in-out;\n\tbottom: 0;\n\tpadding: 44px 0;\n}\n\n.edit-panels {\n\tdisplay: inline-block;\n\tmargin:auto;\n\tbackground-position: 16px center;\n\tpadding: 12px 16px;\n\tpadding-left: 36px;\n\tborder-radius: var(--border-radius-pill);\n\tmax-width: 200px;\n\topacity: 1;\n\ttext-align: center;\n}\n\n.edit-panels,\n.statuses ::v-deep .action-item .action-item__menutoggle,\n.statuses ::v-deep .action-item.action-item--open .action-item__menutoggle {\n\tbackground-color: var(--color-background-translucent);\n\t-webkit-backdrop-filter: var(--background-blur);\n\tbackdrop-filter: var(--background-blur);\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n}\n\n.modal__content {\n\tpadding: 32px 16px;\n\tmax-height: 70vh;\n\ttext-align: center;\n\toverflow: auto;\n\n\tol {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tjustify-content: center;\n\t\tlist-style-type: none;\n\t\tpadding-bottom: 16px;\n\t}\n\tli {\n\t\tlabel {\n\t\t\tdisplay: block;\n\t\t\tpadding: 48px 8px 16px 8px;\n\t\t\tmargin: 8px;\n\t\t\twidth: 160px;\n\t\t\tbackground-color: var(--color-background-hover);\n\t\t\tborder: 2px solid var(--color-main-background);\n\t\t\tborder-radius: var(--border-radius-large);\n\t\t\tbackground-size: 24px;\n\t\t\tbackground-position: center 16px;\n\t\t\ttext-align: center;\n\n\t\t\t&:hover {\n\t\t\t\tborder-color: var(--color-primary);\n\t\t\t}\n\t\t}\n\n\t\tinput:focus + label {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\t}\n\n\th3 {\n\t\tfont-weight: bold;\n\n\t\t&:not(:first-of-type) {\n\t\t\tmargin-top: 64px;\n\t\t}\n\t}\n\n\t// Adjust design of 'Get more widgets' button\n\t.button {\n\t\tdisplay: inline-block;\n\t\tpadding: 10px 16px;\n\t\tmargin: 0;\n\t}\n\n\tp {\n\t\tmax-width: 650px;\n\t\tmargin: 0 auto;\n\n\t\ta:hover,\n\t\ta:focus {\n\t\t\tborder-bottom: 2px solid var(--color-border);\n\t\t}\n\t}\n\n\t.credits--end {\n\t\tpadding-bottom: 32px;\n\t\tcolor: var(--color-text-maxcontrast);\n\n\t\ta {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n\n.flip-list-move {\n\ttransition: transform var(--animation-slow);\n}\n\n.statuses {\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: center;\n\tflex-wrap: wrap;\n\tmargin-bottom: 36px;\n\n\t& > div {\n\t\tmargin: 8px;\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},56510:function(n,t,e){var a=e(87537),o=e.n(a),r=e(23645),i=e.n(r)()(o());i.push([n.id,'.background-selector[data-v-e4c3a7ca]{display:flex;flex-wrap:wrap;justify-content:center}.background-selector .background[data-v-e4c3a7ca]{width:176px;height:96px;margin:8px;background-size:cover;background-position:center center;text-align:center;border-radius:var(--border-radius-large);border:2px solid var(--color-main-background);overflow:hidden}.background-selector .background.current[data-v-e4c3a7ca]{background-image:var(--color-background-dark)}.background-selector .background.filepicker[data-v-e4c3a7ca],.background-selector .background.default[data-v-e4c3a7ca],.background-selector .background.color[data-v-e4c3a7ca]{border-color:var(--color-border)}.background-selector .background.color[data-v-e4c3a7ca]{background-color:var(--color-primary);color:var(--color-primary-text)}.background-selector .background.active[data-v-e4c3a7ca],.background-selector .background[data-v-e4c3a7ca]:hover,.background-selector .background[data-v-e4c3a7ca]:focus{border:2px solid var(--color-primary)}.background-selector .background.active[data-v-e4c3a7ca]:not(.icon-loading):after{background-image:var(--icon-checkmark-fff);background-repeat:no-repeat;background-position:center;background-size:44px;content:"";display:block;height:100%}body.theme--dark .background-selector .background.active[data-v-e4c3a7ca]:not(.icon-loading):after{background-image:var(--icon-checkmark-000)}',"",{version:3,sources:["webpack://./apps/dashboard/src/components/BackgroundSettings.vue"],names:[],mappings:"AA4IA,sCACC,YAAA,CACA,cAAA,CACA,sBAAA,CAEA,kDACC,WAAA,CACA,WAAA,CACA,UAAA,CACA,qBAAA,CACA,iCAAA,CACA,iBAAA,CACA,wCAAA,CACA,6CAAA,CACA,eAAA,CAEA,0DACC,6CAAA,CAGD,+KACC,gCAAA,CAGD,wDACC,qCAAA,CACA,+BAAA,CAGD,yKAGC,qCAAA,CAGD,kFACC,0CAAA,CACA,2BAAA,CACA,0BAAA,CACA,oBAAA,CACA,UAAA,CACA,aAAA,CACA,WAAA,CAEA,mGACC,0CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.background-selector {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tjustify-content: center;\n\n\t.background {\n\t\twidth: 176px;\n\t\theight: 96px;\n\t\tmargin: 8px;\n\t\tbackground-size: cover;\n\t\tbackground-position: center center;\n\t\ttext-align: center;\n\t\tborder-radius: var(--border-radius-large);\n\t\tborder: 2px solid var(--color-main-background);\n\t\toverflow: hidden;\n\n\t\t&.current {\n\t\t\tbackground-image: var(--color-background-dark);\n\t\t}\n\n\t\t&.filepicker, &.default, &.color {\n\t\t\tborder-color: var(--color-border);\n\t\t}\n\n\t\t&.color {\n\t\t\tbackground-color: var(--color-primary);\n\t\t\tcolor: var(--color-primary-text);\n\t\t}\n\n\t\t&.active,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\tborder: 2px solid var(--color-primary);\n\t\t}\n\n\t\t&.active:not(.icon-loading):after {\n\t\t\tbackground-image: var(--icon-checkmark-fff);\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-position: center;\n\t\t\tbackground-size: 44px;\n\t\t\tcontent: '';\n\t\t\tdisplay: block;\n\t\t\theight: 100%;\n\n\t\t\tbody.theme--dark & {\n\t\t\t\tbackground-image: var(--icon-checkmark-000);\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=i}},a={};function o(n){var t=a[n];if(void 0!==t)return t.exports;var r=a[n]={id:n,loaded:!1,exports:{}};return e[n].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.m=e,o.amdD=function(){throw new Error("define cannot be used indirect")},o.amdO={},n=[],o.O=function(t,e,a,r){if(!e){var i=1/0;for(l=0;l<n.length;l++){e=n[l][0],a=n[l][1],r=n[l][2];for(var s=!0,d=0;d<e.length;d++)(!1&r||i>=r)&&Object.keys(o.O).every((function(n){return o.O[n](e[d])}))?e.splice(d--,1):(s=!1,r<i&&(i=r));if(s){n.splice(l--,1);var c=a();void 0!==c&&(t=c)}}return t}r=r||0;for(var l=n.length;l>0&&n[l-1][2]>r;l--)n[l]=n[l-1];n[l]=[e,a,r]},o.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return o.d(t,{a:t}),t},o.d=function(n,t){for(var e in t)o.o(t,e)&&!o.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),o.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},o.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},o.nmd=function(n){return n.paths=[],n.children||(n.children=[]),n},o.j=773,function(){o.b=document.baseURI||self.location.href;var n={773:0};o.O.j=function(t){return 0===n[t]};var t=function(t,e){var a,r,i=e[0],s=e[1],d=e[2],c=0;if(i.some((function(t){return 0!==n[t]}))){for(a in s)o.o(s,a)&&(o.m[a]=s[a]);if(d)var l=d(o)}for(t&&t(e);c<i.length;c++)r=i[c],o.o(n,r)&&n[r]&&n[r][0](),n[r]=0;return o.O(l)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(t.bind(null,0)),e.push=t.bind(null,e.push.bind(e))}();var r=o.O(void 0,[874],(function(){return o(63308)}));r=o.O(r)}();
-//# sourceMappingURL=dashboard-main.js.map?v=ecf336a0375d0a9475d0 \ No newline at end of file
+!function(){"use strict";var n,e={91415:function(n,e,a){var o=a(20144),r=a(16453),i=a(22200),d=a(47450),s=a.n(d),c=a(9980),l=a.n(c),u=a(4820),A=a(79753),p={data:function(){return{isMobile:this._isMobile()}},beforeMount:function(){window.addEventListener("resize",this._onResize)},beforeDestroy:function(){window.removeEventListener("resize",this._onResize)},methods:{_onResize:function(){this.isMobile=this._isMobile()},_isMobile:function(){return document.documentElement.clientWidth<768}}},g=function(n){return(0,A.generateFilePath)("dashboard","","img/")+n},b=function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return"default"===n?e&&"backgroundColor"!==e?(0,A.generateUrl)("/apps/theming/image/background")+"?v="+window.OCA.Theming.cacheBuster:window.OCA.Accessibility&&"dark"===window.OCA.Accessibility.theme?g("eduardo-neves-pedra-azul.jpg"):g("kamil-porembinski-clouds.jpg"):"custom"===n?(0,A.generateUrl)("/apps/dashboard/background")+"?v="+t:g(n)};function C(n,t,e,a,o,r,i){try{var d=n[r](i),s=d.value}catch(n){return void e(n)}d.done?t(s):Promise.resolve(s).then(a,o)}function h(n){return function(){var t=this,e=arguments;return new Promise((function(a,o){var r=n.apply(t,e);function i(n){C(r,a,o,i,d,"next",n)}function d(n){C(r,a,o,i,d,"throw",n)}i(void 0)}))}}var f=(0,r.loadState)("dashboard","shippedBackgrounds"),v={name:"BackgroundSettings",props:{background:{type:String,default:"default"},themingDefaultBackground:{type:String,default:""}},data:function(){return{backgroundImage:(0,A.generateUrl)("/apps/dashboard/background")+"?v="+Date.now(),loading:!1}},computed:{shippedBackgrounds:function(){return Object.keys(f).map((function(n){return{name:n,url:g(n),preview:g("previews/"+n),details:f[n]}}))}},methods:{update:function(n){var t=this;return h(regeneratorRuntime.mark((function e(){var a,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a="custom"===n.type||"default"===n.type?n.type:n.value,t.backgroundImage=b(a,n.version,t.themingDefaultBackground),"color"!==n.type&&("default"!==n.type||"backgroundColor"!==t.themingDefaultBackground)){e.next=6;break}return t.$emit("update:background",n),t.loading=!1,e.abrupt("return");case 6:(o=new Image).onload=function(){t.$emit("update:background",n),t.loading=!1},o.src=t.backgroundImage;case 9:case"end":return e.stop()}}),e)})))()},setDefault:function(){var n=this;return h(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n.loading="default",t.next=3,u.default.post((0,A.generateUrl)("/apps/dashboard/background/default"));case 3:e=t.sent,n.update(e.data);case 5:case"end":return t.stop()}}),t)})))()},setShipped:function(n){var t=this;return h(regeneratorRuntime.mark((function e(){var a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.loading=n,e.next=3,u.default.post((0,A.generateUrl)("/apps/dashboard/background/shipped"),{value:n});case 3:a=e.sent,t.update(a.data);case 5:case"end":return e.stop()}}),e)})))()},setFile:function(n){var t=this;return h(regeneratorRuntime.mark((function e(){var a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.loading="custom",e.next=3,u.default.post((0,A.generateUrl)("/apps/dashboard/background/custom"),{value:n});case 3:a=e.sent,t.update(a.data);case 5:case"end":return e.stop()}}),e)})))()},pickColor:function(){var n=this;return h(regeneratorRuntime.mark((function t(){var e,a;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n.loading="color",e=OCA&&OCA.Theming?OCA.Theming.color:"#0082c9",t.next=4,u.default.post((0,A.generateUrl)("/apps/dashboard/background/color"),{value:e});case 4:a=t.sent,n.update(a.data);case 6:case"end":return t.stop()}}),t)})))()},pickFile:function(){var n=this;window.OC.dialogs.filepicker(t("dashboard","Insert from {productName}",{productName:OC.theme.name}),(function(t,e){e===OC.dialogs.FILEPICKER_TYPE_CHOOSE&&n.setFile(t)}),!1,["image/png","image/gif","image/jpeg","image/svg"],!0,OC.dialogs.FILEPICKER_TYPE_CHOOSE)}}},m=v,k=a(93379),x=a.n(k),y=a(7795),w=a.n(y),_=a(90569),S=a.n(_),B=a(3565),D=a.n(B),O=a(19216),E=a.n(O),F=a(44589),G=a.n(F),I=a(56510),T={};T.styleTagTransform=G(),T.setAttributes=D(),T.insert=S().bind(null,"head"),T.domAPI=w(),T.insertStyleElement=E(),x()(I.Z,T),I.Z&&I.Z.locals&&I.Z.locals;var j=a(51900),z=(0,j.Z)(m,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"background-selector"},[e("button",{staticClass:"background filepicker",class:{active:"custom"===n.background},attrs:{tabindex:"0"},on:{click:n.pickFile}},[n._v("\n\t\t"+n._s(n.t("dashboard","Pick from Files"))+"\n\t")]),n._v(" "),e("button",{staticClass:"background default",class:{"icon-loading":"default"===n.loading,active:"default"===n.background},attrs:{tabindex:"0"},on:{click:n.setDefault}},[n._v("\n\t\t"+n._s(n.t("dashboard","Default images"))+"\n\t")]),n._v(" "),e("button",{staticClass:"background color",class:{active:"custom"===n.background},attrs:{tabindex:"0"},on:{click:n.pickColor}},[n._v("\n\t\t"+n._s(n.t("dashboard","Plain background"))+"\n\t")]),n._v(" "),n._l(n.shippedBackgrounds,(function(t){return e("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.details.attribution,expression:"shippedBackground.details.attribution"}],key:t.name,staticClass:"background",class:{"icon-loading":n.loading===t.name,active:n.background===t.name},style:{"background-image":"url("+t.preview+")"},attrs:{tabindex:"0"},on:{click:function(e){return n.setShipped(t.name)}}})}))],2)}),[],!1,null,"e4c3a7ca",null).exports,R=(0,r.loadState)("dashboard","panels"),P=(0,r.loadState)("dashboard","firstRun"),L=(0,r.loadState)("dashboard","background"),U=(0,r.loadState)("dashboard","themingDefaultBackground"),N=(0,r.loadState)("dashboard","version"),W=(0,r.loadState)("dashboard","shippedBackgrounds"),M={weather:{text:t("dashboard","Weather"),icon:"icon-weather-status"},status:{text:t("dashboard","Status"),icon:"icon-user-status-online"}},q={name:"App",components:{Modal:s(),Draggable:l(),BackgroundSettings:z},mixins:[p],data:function(){var n,t;return{isAdmin:(0,i.getCurrentUser)().isAdmin,timer:new Date,registeredStatus:[],callbacks:{},callbacksStatus:{},allCallbacksStatus:{},statusInfo:M,enabledStatuses:(0,r.loadState)("dashboard","statuses"),panels:R,firstRun:P,displayName:null===(n=(0,i.getCurrentUser)())||void 0===n?void 0:n.displayName,uid:null===(t=(0,i.getCurrentUser)())||void 0===t?void 0:t.uid,layout:(0,r.loadState)("dashboard","layout").filter((function(n){return R[n]})),modal:!1,appStoreUrl:(0,A.generateUrl)("/settings/apps/dashboard"),statuses:{},background:L,themingDefaultBackground:U,version:N}},computed:{backgroundImage:function(){return b(this.background,this.version,this.themingDefaultBackground)},backgroundStyle:function(){return"default"===this.background&&"backgroundColor"===this.themingDefaultBackground||this.background.match(/#[0-9A-Fa-f]{6}/g)?null:{backgroundImage:"url(".concat(this.backgroundImage,")")}},greeting:function(){var n,e=this.timer.getHours();n=e>=22||e<5?"night":e>=18?"evening":e>=12?"afternoon":"morning";var a={morning:{generic:t("dashboard","Good morning"),withName:t("dashboard","Good morning, {name}",{name:this.displayName},void 0,{escape:!1})},afternoon:{generic:t("dashboard","Good afternoon"),withName:t("dashboard","Good afternoon, {name}",{name:this.displayName},void 0,{escape:!1})},evening:{generic:t("dashboard","Good evening"),withName:t("dashboard","Good evening, {name}",{name:this.displayName},void 0,{escape:!1})},night:{generic:t("dashboard","Hello"),withName:t("dashboard","Hello, {name}",{name:this.displayName},void 0,{escape:!1})}};return{text:this.displayName&&this.uid!==this.displayName?a[n].withName:a[n].generic}},isActive:function(){var n=this;return function(t){return n.layout.indexOf(t.id)>-1}},isStatusActive:function(){var n=this;return function(t){return!(t in n.enabledStatuses)||n.enabledStatuses[t]}},sortedAllStatuses:function(){return Object.keys(this.allCallbacksStatus).slice().sort(this.sortStatuses)},sortedPanels:function(){var n=this;return Object.values(this.panels).sort((function(t,e){var a=n.layout.indexOf(t.id),o=n.layout.indexOf(e.id);return-1===a||-1===o?o-a||t.id-e.id:a-o||t.id-e.id}))},sortedRegisteredStatus:function(){return this.registeredStatus.slice().sort(this.sortStatuses)}},watch:{callbacks:function(){this.rerenderPanels()},callbacksStatus:function(){for(var n in this.callbacksStatus){var t=this.$refs["status-"+n];this.statuses[n]&&this.statuses[n].mounted||(t?(this.callbacksStatus[n](t[0]),o.default.set(this.statuses,n,{mounted:!0})):console.error("Failed to register panel in the frontend as no backend data was provided for "+n))}}},mounted:function(){var n=this;this.updateGlobalStyles(),this.updateSkipLink(),window.addEventListener("scroll",this.handleScroll),setInterval((function(){n.timer=new Date}),3e4),this.firstRun&&window.addEventListener("scroll",this.disableFirstrunHint)},destroyed:function(){window.removeEventListener("scroll",this.handleScroll)},methods:{register:function(n,t){o.default.set(this.callbacks,n,t)},registerStatus:function(n,t){var e=this;o.default.set(this.allCallbacksStatus,n,t),this.isStatusActive(n)&&(this.registeredStatus.push(n),this.$nextTick((function(){o.default.set(e.callbacksStatus,n,t)})))},rerenderPanels:function(){for(var n in this.callbacks){var t=this.$refs[n];-1!==this.layout.indexOf(n)&&(this.panels[n]&&this.panels[n].mounted||(t?(this.callbacks[n](t[0],{widget:this.panels[n]}),o.default.set(this.panels[n],"mounted",!0)):console.error("Failed to register panel in the frontend as no backend data was provided for "+n)))}},saveLayout:function(){u.default.post((0,A.generateUrl)("/apps/dashboard/layout"),{layout:this.layout.join(",")})},saveStatuses:function(){u.default.post((0,A.generateUrl)("/apps/dashboard/statuses"),{statuses:JSON.stringify(this.enabledStatuses)})},showModal:function(){this.modal=!0,this.firstRun=!1},closeModal:function(){this.modal=!1},updateCheckbox:function(n,t){var e=this,a=this.layout.indexOf(n.id);!t&&a>-1?this.layout.splice(a,1):this.layout.push(n.id),o.default.set(this.panels[n.id],"mounted",!1),this.saveLayout(),this.$nextTick((function(){return e.rerenderPanels()}))},disableFirstrunHint:function(){var n=this;window.removeEventListener("scroll",this.disableFirstrunHint),setTimeout((function(){n.firstRun=!1}),1e3)},updateBackground:function(n){this.background="custom"===n.type||"default"===n.type?n.type:n.value,this.version=n.version,this.updateGlobalStyles()},updateGlobalStyles:function(){document.body.setAttribute("data-dashboard-background",this.background),window.OCA.Theming.inverted&&document.body.classList.add("dashboard--inverted"),"dark"===(W[this.background]?W[this.background].theming:"light")?document.body.classList.add("dashboard--dark"):document.body.classList.remove("dashboard--dark")},updateSkipLink:function(){document.getElementsByClassName("skip-navigation")[0].setAttribute("href","#app-dashboard")},updateStatusCheckbox:function(n,t){t?this.enableStatus(n):this.disableStatus(n)},enableStatus:function(n){this.enabledStatuses[n]=!0,this.registerStatus(n,this.allCallbacksStatus[n]),this.saveStatuses()},disableStatus:function(n){var t=this;this.enabledStatuses[n]=!1;var e=this.registeredStatus.findIndex((function(t){return t===n}));-1!==e&&(this.registeredStatus.splice(e,1),o.default.set(this.statuses,n,{mounted:!1}),this.$nextTick((function(){o.default.delete(t.callbacksStatus,n)}))),this.saveStatuses()},sortStatuses:function(n,t){var e=n.toLowerCase(),a=t.toLowerCase();return e>a?1:e<a?-1:0},handleScroll:function(){window.scrollY>70?document.body.classList.add("dashboard--scrolled"):document.body.classList.remove("dashboard--scrolled")}}},Z=a(45389),H={};H.styleTagTransform=G(),H.setAttributes=D(),H.insert=S().bind(null,"head"),H.domAPI=w(),H.insertStyleElement=E(),x()(Z.Z,H),Z.Z&&Z.Z.locals&&Z.Z.locals;var Y=(0,j.Z)(q,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{style:n.backgroundStyle,attrs:{id:"app-dashboard"}},[e("h2",[n._v(n._s(n.greeting.text))]),n._v(" "),e("ul",{staticClass:"statuses"},n._l(n.sortedRegisteredStatus,(function(n){return e("div",{key:n,attrs:{id:"status-"+n}},[e("div",{ref:"status-"+n,refInFor:!0})])})),0),n._v(" "),e("Draggable",n._b({staticClass:"panels",attrs:{handle:".panel--header"},on:{end:n.saveLayout},model:{value:n.layout,callback:function(t){n.layout=t},expression:"layout"}},"Draggable",{swapThreshold:.3,delay:500,delayOnTouchOnly:!0,touchStartThreshold:3},!1),n._l(n.layout,(function(t){return e("div",{key:n.panels[t].id,staticClass:"panel"},[e("div",{staticClass:"panel--header"},[e("h2",{class:n.panels[t].iconClass},[n._v("\n\t\t\t\t\t"+n._s(n.panels[t].title)+"\n\t\t\t\t")])]),n._v(" "),e("div",{staticClass:"panel--content",class:{loading:!n.panels[t].mounted}},[e("div",{ref:n.panels[t].id,refInFor:!0,attrs:{"data-id":n.panels[t].id}})])])})),0),n._v(" "),e("div",{staticClass:"footer"},[e("a",{staticClass:"edit-panels icon-rename",attrs:{tabindex:"0"},on:{click:n.showModal,keyup:[function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.showModal.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])?null:n.showModal.apply(null,arguments)}]}},[n._v(n._s(n.t("dashboard","Customize")))])]),n._v(" "),n.modal?e("Modal",{attrs:{size:"normal"},on:{close:n.closeModal}},[e("div",{staticClass:"modal__content"},[e("h3",[n._v(n._s(n.t("dashboard","Edit widgets")))]),n._v(" "),e("ol",{staticClass:"panels"},n._l(n.sortedAllStatuses,(function(t){return e("li",{key:t},[e("input",{staticClass:"checkbox",attrs:{id:"status-checkbox-"+t,type:"checkbox"},domProps:{checked:n.isStatusActive(t)},on:{input:function(e){return n.updateStatusCheckbox(t,e.target.checked)}}}),n._v(" "),e("label",{class:n.statusInfo[t].icon,attrs:{for:"status-checkbox-"+t}},[n._v("\n\t\t\t\t\t\t"+n._s(n.statusInfo[t].text)+"\n\t\t\t\t\t")])])})),0),n._v(" "),e("Draggable",n._b({staticClass:"panels",attrs:{tag:"ol",handle:".draggable"},on:{end:n.saveLayout},model:{value:n.layout,callback:function(t){n.layout=t},expression:"layout"}},"Draggable",{swapThreshold:.3,delay:500,delayOnTouchOnly:!0,touchStartThreshold:3},!1),n._l(n.sortedPanels,(function(t){return e("li",{key:t.id},[e("input",{staticClass:"checkbox",attrs:{id:"panel-checkbox-"+t.id,type:"checkbox"},domProps:{checked:n.isActive(t)},on:{input:function(e){return n.updateCheckbox(t,e.target.checked)}}}),n._v(" "),e("label",{class:n.isActive(t)?"draggable "+t.iconClass:t.iconClass,attrs:{for:"panel-checkbox-"+t.id}},[n._v("\n\t\t\t\t\t\t"+n._s(t.title)+"\n\t\t\t\t\t")])])})),0),n._v(" "),n.isAdmin?e("a",{staticClass:"button",attrs:{href:n.appStoreUrl}},[n._v(n._s(n.t("dashboard","Get more widgets from the App Store")))]):n._e(),n._v(" "),e("h3",[n._v(n._s(n.t("dashboard","Change background image")))]),n._v(" "),e("BackgroundSettings",{attrs:{background:n.background,"theming-default-background":n.themingDefaultBackground},on:{"update:background":n.updateBackground}}),n._v(" "),e("h3",[n._v(n._s(n.t("dashboard","Weather service")))]),n._v(" "),e("p",[n._v("\n\t\t\t\t"+n._s(n.t("dashboard","For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information."))+"\n\t\t\t")]),n._v(" "),e("p",{staticClass:"credits--end"},[e("a",{attrs:{href:"https://api.met.no/doc/TermsOfService",target:"_blank",rel:"noopener"}},[n._v(n._s(n.t("dashboard","Weather data from Met.no")))]),n._v(",\n\t\t\t\t"),e("a",{attrs:{href:"https://wiki.osmfoundation.org/wiki/Privacy_Policy",target:"_blank",rel:"noopener"}},[n._v(n._s(n.t("dashboard","geocoding with Nominatim")))]),n._v(",\n\t\t\t\t"),e("a",{attrs:{href:"https://www.opentopodata.org/#public-api",target:"_blank",rel:"noopener"}},[n._v(n._s(n.t("dashboard","elevation data from OpenTopoData")))]),n._v(".\n\t\t\t")])],1)]):n._e()],1)}),[],!1,null,"2c8fd7c4",null),$=Y.exports,K=a(9944),Q=a(15168),J=a.n(Q);a.nc=btoa((0,i.getRequestToken)()),o.default.directive("Tooltip",J()),o.default.prototype.t=K.translate,window.OCA.Files||(window.OCA.Files={}),Object.assign(window.OCA.Files,{App:{fileList:{filesClient:OC.Files.getClient()}}},window.OCA.Files);var V=new(o.default.extend($))({}).$mount("#app-content-vue");window.OCA.Dashboard={register:function(n,t){return V.register(n,t)},registerStatus:function(n,t){return V.registerStatus(n,t)}}},45389:function(n,t,e){var a=e(87537),o=e.n(a),r=e(23645),i=e.n(r)()(o());i.push([n.id,"#app-dashboard[data-v-2c8fd7c4]{width:100%;min-height:100vh;background-size:cover;background-position:center center;background-repeat:no-repeat;background-attachment:fixed;background-color:var(--color-primary);--color-background-translucent: rgba(255, 255, 255, 0.8);--background-blur: blur(10px)}#body-user.theme--dark #app-dashboard[data-v-2c8fd7c4]{background-color:var(--color-main-background);--color-background-translucent: rgba(24, 24, 24, 0.8)}#body-user.theme--highcontrast #app-dashboard[data-v-2c8fd7c4]{background-color:var(--color-main-background);--color-background-translucent: var(--color-main-background)}#app-dashboard>h2[data-v-2c8fd7c4]{color:var(--color-primary-text);text-align:center;font-size:32px;line-height:130%;padding:10vh 16px 0px}.panels[data-v-2c8fd7c4]{width:auto;margin:auto;max-width:1500px;display:flex;justify-content:center;flex-direction:row;align-items:flex-start;flex-wrap:wrap}.panel[data-v-2c8fd7c4],.panels>div[data-v-2c8fd7c4]{width:320px;max-width:100%;margin:16px;background-color:var(--color-background-translucent);-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur);border-radius:var(--border-radius-large)}#body-user.theme--highcontrast .panel[data-v-2c8fd7c4],#body-user.theme--highcontrast .panels>div[data-v-2c8fd7c4]{border:2px solid var(--color-border)}.panel.sortable-ghost[data-v-2c8fd7c4],.panels>div.sortable-ghost[data-v-2c8fd7c4]{opacity:.1}.panel>.panel--header[data-v-2c8fd7c4],.panels>div>.panel--header[data-v-2c8fd7c4]{display:flex;z-index:1;top:50px;padding:16px;cursor:grab}.panel>.panel--header[data-v-2c8fd7c4],.panel>.panel--header[data-v-2c8fd7c4] *,.panels>div>.panel--header[data-v-2c8fd7c4],.panels>div>.panel--header[data-v-2c8fd7c4] *{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.panel>.panel--header[data-v-2c8fd7c4]:active,.panels>div>.panel--header[data-v-2c8fd7c4]:active{cursor:grabbing}.panel>.panel--header a[data-v-2c8fd7c4],.panels>div>.panel--header a[data-v-2c8fd7c4]{flex-grow:1}.panel>.panel--header>h2[data-v-2c8fd7c4],.panels>div>.panel--header>h2[data-v-2c8fd7c4]{display:block;flex-grow:1;margin:0;font-size:20px;line-height:24px;font-weight:bold;background-size:32px;background-position:14px 12px;padding:16px 8px 16px 60px;height:56px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:grab}.panel>.panel--content[data-v-2c8fd7c4],.panels>div>.panel--content[data-v-2c8fd7c4]{margin:0 16px 16px 16px;height:420px;overflow:hidden}@media only screen and (max-width: 709px){.panel>.panel--content[data-v-2c8fd7c4],.panels>div>.panel--content[data-v-2c8fd7c4]{height:auto}}.footer[data-v-2c8fd7c4]{text-align:center;transition:bottom var(--animation-slow) ease-in-out;bottom:0;padding:44px 0}.edit-panels[data-v-2c8fd7c4]{display:inline-block;margin:auto;background-position:16px center;padding:12px 16px;padding-left:36px;border-radius:var(--border-radius-pill);max-width:200px;opacity:1;text-align:center}.edit-panels[data-v-2c8fd7c4],.statuses[data-v-2c8fd7c4] .action-item .action-item__menutoggle,.statuses[data-v-2c8fd7c4] .action-item.action-item--open .action-item__menutoggle{background-color:var(--color-background-translucent);-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.edit-panels[data-v-2c8fd7c4]:hover,.edit-panels[data-v-2c8fd7c4]:focus,.edit-panels[data-v-2c8fd7c4]:active,.statuses[data-v-2c8fd7c4] .action-item .action-item__menutoggle:hover,.statuses[data-v-2c8fd7c4] .action-item .action-item__menutoggle:focus,.statuses[data-v-2c8fd7c4] .action-item .action-item__menutoggle:active,.statuses[data-v-2c8fd7c4] .action-item.action-item--open .action-item__menutoggle:hover,.statuses[data-v-2c8fd7c4] .action-item.action-item--open .action-item__menutoggle:focus,.statuses[data-v-2c8fd7c4] .action-item.action-item--open .action-item__menutoggle:active{background-color:var(--color-background-hover)}.modal__content[data-v-2c8fd7c4]{padding:32px 16px;text-align:center}.modal__content ol[data-v-2c8fd7c4]{display:flex;flex-direction:row;justify-content:center;list-style-type:none;padding-bottom:16px}.modal__content li label[data-v-2c8fd7c4]{display:block;padding:48px 8px 16px 8px;margin:8px;width:160px;background-color:var(--color-background-hover);border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-size:24px;background-position:center 16px;text-align:center}.modal__content li label[data-v-2c8fd7c4]:hover{border-color:var(--color-primary)}.modal__content li input:focus+label[data-v-2c8fd7c4]{border-color:var(--color-primary)}.modal__content h3[data-v-2c8fd7c4]{font-weight:bold}.modal__content h3[data-v-2c8fd7c4]:not(:first-of-type){margin-top:64px}.modal__content .button[data-v-2c8fd7c4]{display:inline-block;padding:10px 16px;margin:0}.modal__content p[data-v-2c8fd7c4]{max-width:650px;margin:0 auto}.modal__content p a[data-v-2c8fd7c4]:hover,.modal__content p a[data-v-2c8fd7c4]:focus{border-bottom:2px solid var(--color-border)}.modal__content .credits--end[data-v-2c8fd7c4]{padding-bottom:32px;color:var(--color-text-maxcontrast)}.modal__content .credits--end a[data-v-2c8fd7c4]{color:var(--color-text-maxcontrast)}.flip-list-move[data-v-2c8fd7c4]{transition:transform var(--animation-slow)}.statuses[data-v-2c8fd7c4]{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap;margin-bottom:36px}.statuses>div[data-v-2c8fd7c4]{margin:8px}","",{version:3,sources:["webpack://./apps/dashboard/src/App.vue"],names:[],mappings:"AAqZA,gCACC,UAAA,CACA,gBAAA,CACA,qBAAA,CACA,iCAAA,CACA,2BAAA,CACA,2BAAA,CACA,qCAAA,CACA,wDAAA,CACA,6BAAA,CAEA,uDACC,6CAAA,CACA,qDAAA,CAGD,+DACC,6CAAA,CACA,4DAAA,CAGD,mCACC,+BAAA,CACA,iBAAA,CACA,cAAA,CACA,gBAAA,CACA,qBAAA,CAIF,yBACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,sBAAA,CACA,cAAA,CAGD,qDACC,WAAA,CACA,cAAA,CACA,WAAA,CACA,oDAAA,CACA,8CAAA,CACA,sCAAA,CACA,wCAAA,CAEA,mHACC,oCAAA,CAGD,mFACE,UAAA,CAGF,mFACC,YAAA,CACA,SAAA,CACA,QAAA,CACA,YAAA,CACA,WAAA,CAEA,4KACC,0BAAA,CACA,wBAAA,CACA,uBAAA,CACA,qBAAA,CACA,oBAAA,CACA,gBAAA,CAGD,iGACC,eAAA,CAGD,uFACC,WAAA,CAGD,yFACC,aAAA,CACA,WAAA,CACA,QAAA,CACA,cAAA,CACA,gBAAA,CACA,gBAAA,CACA,oBAAA,CACA,6BAAA,CACA,0BAAA,CACA,WAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,WAAA,CAIF,qFACC,uBAAA,CACA,YAAA,CAEA,eAAA,CAID,0CACC,qFACC,WAAA,CAAA,CAKH,yBACC,iBAAA,CACA,mDAAA,CACA,QAAA,CACA,cAAA,CAGD,8BACC,oBAAA,CACA,WAAA,CACA,+BAAA,CACA,iBAAA,CACA,iBAAA,CACA,uCAAA,CACA,eAAA,CACA,SAAA,CACA,iBAAA,CAGD,oLAGC,oDAAA,CACA,8CAAA,CACA,sCAAA,CAEA,qlBAGC,8CAAA,CAIF,iCACC,iBAAA,CACA,iBAAA,CAEA,oCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,oBAAA,CACA,mBAAA,CAGA,0CACC,aAAA,CACA,yBAAA,CACA,UAAA,CACA,WAAA,CACA,8CAAA,CACA,6CAAA,CACA,wCAAA,CACA,oBAAA,CACA,+BAAA,CACA,iBAAA,CAEA,gDACC,iCAAA,CAIF,sDACC,iCAAA,CAIF,oCACC,gBAAA,CAEA,wDACC,eAAA,CAKF,yCACC,oBAAA,CACA,iBAAA,CACA,QAAA,CAGD,mCACC,eAAA,CACA,aAAA,CAEA,sFAEC,2CAAA,CAIF,+CACC,mBAAA,CACA,mCAAA,CAEA,iDACC,mCAAA,CAKH,iCACC,0CAAA,CAGD,2BACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,cAAA,CACA,kBAAA,CAEA,+BACC,UAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#app-dashboard {\n\twidth: 100%;\n\tmin-height: 100vh;\n\tbackground-size: cover;\n\tbackground-position: center center;\n\tbackground-repeat: no-repeat;\n\tbackground-attachment: fixed;\n\tbackground-color: var(--color-primary);\n\t--color-background-translucent: rgba(255, 255, 255, 0.8);\n\t--background-blur: blur(10px);\n\n\t#body-user.theme--dark & {\n\t\tbackground-color: var(--color-main-background);\n\t\t--color-background-translucent: rgba(24, 24, 24, 0.8);\n\t}\n\n\t#body-user.theme--highcontrast & {\n\t\tbackground-color: var(--color-main-background);\n\t\t--color-background-translucent: var(--color-main-background);\n\t}\n\n\t> h2 {\n\t\tcolor: var(--color-primary-text);\n\t\ttext-align: center;\n\t\tfont-size: 32px;\n\t\tline-height: 130%;\n\t\tpadding: 10vh 16px 0px;\n\t}\n}\n\n.panels {\n\twidth: auto;\n\tmargin: auto;\n\tmax-width: 1500px;\n\tdisplay: flex;\n\tjustify-content: center;\n\tflex-direction: row;\n\talign-items: flex-start;\n\tflex-wrap: wrap;\n}\n\n.panel, .panels > div {\n\twidth: 320px;\n\tmax-width: 100%;\n\tmargin: 16px;\n\tbackground-color: var(--color-background-translucent);\n\t-webkit-backdrop-filter: var(--background-blur);\n\tbackdrop-filter: var(--background-blur);\n\tborder-radius: var(--border-radius-large);\n\n\t#body-user.theme--highcontrast & {\n\t\tborder: 2px solid var(--color-border);\n\t}\n\n\t&.sortable-ghost {\n\t\t opacity: 0.1;\n\t}\n\n\t& > .panel--header {\n\t\tdisplay: flex;\n\t\tz-index: 1;\n\t\ttop: 50px;\n\t\tpadding: 16px;\n\t\tcursor: grab;\n\n\t\t&, ::v-deep * {\n\t\t\t-webkit-touch-callout: none;\n\t\t\t-webkit-user-select: none;\n\t\t\t-khtml-user-select: none;\n\t\t\t-moz-user-select: none;\n\t\t\t-ms-user-select: none;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&:active {\n\t\t\tcursor: grabbing;\n\t\t}\n\n\t\ta {\n\t\t\tflex-grow: 1;\n\t\t}\n\n\t\t> h2 {\n\t\t\tdisplay: block;\n\t\t\tflex-grow: 1;\n\t\t\tmargin: 0;\n\t\t\tfont-size: 20px;\n\t\t\tline-height: 24px;\n\t\t\tfont-weight: bold;\n\t\t\tbackground-size: 32px;\n\t\t\tbackground-position: 14px 12px;\n\t\t\tpadding: 16px 8px 16px 60px;\n\t\t\theight: 56px;\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\tcursor: grab;\n\t\t}\n\t}\n\n\t& > .panel--content {\n\t\tmargin: 0 16px 16px 16px;\n\t\theight: 420px;\n\t\t// We specifically do not want scrollbars inside widgets\n\t\toverflow: hidden;\n\t}\n\n\t// No need to extend height of widgets if only one column is shown\n\t@media only screen and (max-width: 709px) {\n\t\t& > .panel--content {\n\t\t\theight: auto;\n\t\t}\n\t}\n}\n\n.footer {\n\ttext-align: center;\n\ttransition: bottom var(--animation-slow) ease-in-out;\n\tbottom: 0;\n\tpadding: 44px 0;\n}\n\n.edit-panels {\n\tdisplay: inline-block;\n\tmargin:auto;\n\tbackground-position: 16px center;\n\tpadding: 12px 16px;\n\tpadding-left: 36px;\n\tborder-radius: var(--border-radius-pill);\n\tmax-width: 200px;\n\topacity: 1;\n\ttext-align: center;\n}\n\n.edit-panels,\n.statuses ::v-deep .action-item .action-item__menutoggle,\n.statuses ::v-deep .action-item.action-item--open .action-item__menutoggle {\n\tbackground-color: var(--color-background-translucent);\n\t-webkit-backdrop-filter: var(--background-blur);\n\tbackdrop-filter: var(--background-blur);\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n}\n\n.modal__content {\n\tpadding: 32px 16px;\n\ttext-align: center;\n\n\tol {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tjustify-content: center;\n\t\tlist-style-type: none;\n\t\tpadding-bottom: 16px;\n\t}\n\tli {\n\t\tlabel {\n\t\t\tdisplay: block;\n\t\t\tpadding: 48px 8px 16px 8px;\n\t\t\tmargin: 8px;\n\t\t\twidth: 160px;\n\t\t\tbackground-color: var(--color-background-hover);\n\t\t\tborder: 2px solid var(--color-main-background);\n\t\t\tborder-radius: var(--border-radius-large);\n\t\t\tbackground-size: 24px;\n\t\t\tbackground-position: center 16px;\n\t\t\ttext-align: center;\n\n\t\t\t&:hover {\n\t\t\t\tborder-color: var(--color-primary);\n\t\t\t}\n\t\t}\n\n\t\tinput:focus + label {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\t}\n\n\th3 {\n\t\tfont-weight: bold;\n\n\t\t&:not(:first-of-type) {\n\t\t\tmargin-top: 64px;\n\t\t}\n\t}\n\n\t// Adjust design of 'Get more widgets' button\n\t.button {\n\t\tdisplay: inline-block;\n\t\tpadding: 10px 16px;\n\t\tmargin: 0;\n\t}\n\n\tp {\n\t\tmax-width: 650px;\n\t\tmargin: 0 auto;\n\n\t\ta:hover,\n\t\ta:focus {\n\t\t\tborder-bottom: 2px solid var(--color-border);\n\t\t}\n\t}\n\n\t.credits--end {\n\t\tpadding-bottom: 32px;\n\t\tcolor: var(--color-text-maxcontrast);\n\n\t\ta {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n\n.flip-list-move {\n\ttransition: transform var(--animation-slow);\n}\n\n.statuses {\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: center;\n\tflex-wrap: wrap;\n\tmargin-bottom: 36px;\n\n\t& > div {\n\t\tmargin: 8px;\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},56510:function(n,t,e){var a=e(87537),o=e.n(a),r=e(23645),i=e.n(r)()(o());i.push([n.id,'.background-selector[data-v-e4c3a7ca]{display:flex;flex-wrap:wrap;justify-content:center}.background-selector .background[data-v-e4c3a7ca]{width:176px;height:96px;margin:8px;background-size:cover;background-position:center center;text-align:center;border-radius:var(--border-radius-large);border:2px solid var(--color-main-background);overflow:hidden}.background-selector .background.current[data-v-e4c3a7ca]{background-image:var(--color-background-dark)}.background-selector .background.filepicker[data-v-e4c3a7ca],.background-selector .background.default[data-v-e4c3a7ca],.background-selector .background.color[data-v-e4c3a7ca]{border-color:var(--color-border)}.background-selector .background.color[data-v-e4c3a7ca]{background-color:var(--color-primary);color:var(--color-primary-text)}.background-selector .background.active[data-v-e4c3a7ca],.background-selector .background[data-v-e4c3a7ca]:hover,.background-selector .background[data-v-e4c3a7ca]:focus{border:2px solid var(--color-primary)}.background-selector .background.active[data-v-e4c3a7ca]:not(.icon-loading):after{background-image:var(--icon-checkmark-fff);background-repeat:no-repeat;background-position:center;background-size:44px;content:"";display:block;height:100%}body.theme--dark .background-selector .background.active[data-v-e4c3a7ca]:not(.icon-loading):after{background-image:var(--icon-checkmark-000)}',"",{version:3,sources:["webpack://./apps/dashboard/src/components/BackgroundSettings.vue"],names:[],mappings:"AA4IA,sCACC,YAAA,CACA,cAAA,CACA,sBAAA,CAEA,kDACC,WAAA,CACA,WAAA,CACA,UAAA,CACA,qBAAA,CACA,iCAAA,CACA,iBAAA,CACA,wCAAA,CACA,6CAAA,CACA,eAAA,CAEA,0DACC,6CAAA,CAGD,+KACC,gCAAA,CAGD,wDACC,qCAAA,CACA,+BAAA,CAGD,yKAGC,qCAAA,CAGD,kFACC,0CAAA,CACA,2BAAA,CACA,0BAAA,CACA,oBAAA,CACA,UAAA,CACA,aAAA,CACA,WAAA,CAEA,mGACC,0CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.background-selector {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tjustify-content: center;\n\n\t.background {\n\t\twidth: 176px;\n\t\theight: 96px;\n\t\tmargin: 8px;\n\t\tbackground-size: cover;\n\t\tbackground-position: center center;\n\t\ttext-align: center;\n\t\tborder-radius: var(--border-radius-large);\n\t\tborder: 2px solid var(--color-main-background);\n\t\toverflow: hidden;\n\n\t\t&.current {\n\t\t\tbackground-image: var(--color-background-dark);\n\t\t}\n\n\t\t&.filepicker, &.default, &.color {\n\t\t\tborder-color: var(--color-border);\n\t\t}\n\n\t\t&.color {\n\t\t\tbackground-color: var(--color-primary);\n\t\t\tcolor: var(--color-primary-text);\n\t\t}\n\n\t\t&.active,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\tborder: 2px solid var(--color-primary);\n\t\t}\n\n\t\t&.active:not(.icon-loading):after {\n\t\t\tbackground-image: var(--icon-checkmark-fff);\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-position: center;\n\t\t\tbackground-size: 44px;\n\t\t\tcontent: '';\n\t\t\tdisplay: block;\n\t\t\theight: 100%;\n\n\t\t\tbody.theme--dark & {\n\t\t\t\tbackground-image: var(--icon-checkmark-000);\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=i}},a={};function o(n){var t=a[n];if(void 0!==t)return t.exports;var r=a[n]={id:n,loaded:!1,exports:{}};return e[n].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.m=e,o.amdD=function(){throw new Error("define cannot be used indirect")},o.amdO={},n=[],o.O=function(t,e,a,r){if(!e){var i=1/0;for(l=0;l<n.length;l++){e=n[l][0],a=n[l][1],r=n[l][2];for(var d=!0,s=0;s<e.length;s++)(!1&r||i>=r)&&Object.keys(o.O).every((function(n){return o.O[n](e[s])}))?e.splice(s--,1):(d=!1,r<i&&(i=r));if(d){n.splice(l--,1);var c=a();void 0!==c&&(t=c)}}return t}r=r||0;for(var l=n.length;l>0&&n[l-1][2]>r;l--)n[l]=n[l-1];n[l]=[e,a,r]},o.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return o.d(t,{a:t}),t},o.d=function(n,t){for(var e in t)o.o(t,e)&&!o.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),o.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},o.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},o.nmd=function(n){return n.paths=[],n.children||(n.children=[]),n},o.j=773,function(){o.b=document.baseURI||self.location.href;var n={773:0};o.O.j=function(t){return 0===n[t]};var t=function(t,e){var a,r,i=e[0],d=e[1],s=e[2],c=0;if(i.some((function(t){return 0!==n[t]}))){for(a in d)o.o(d,a)&&(o.m[a]=d[a]);if(s)var l=s(o)}for(t&&t(e);c<i.length;c++)r=i[c],o.o(n,r)&&n[r]&&n[r][0](),n[r]=0;return o.O(l)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(t.bind(null,0)),e.push=t.bind(null,e.push.bind(e))}();var r=o.O(void 0,[874],(function(){return o(91415)}));r=o.O(r)}();
+//# sourceMappingURL=dashboard-main.js.map?v=fbe0e08eb35a82e8b4cf \ No newline at end of file
diff --git a/dist/dashboard-main.js.map b/dist/dashboard-main.js.map
index 265b601e7d6..c6924424ed1 100644
--- a/dist/dashboard-main.js.map
+++ b/dist/dashboard-main.js.map
@@ -1 +1 @@
-{"version":3,"file":"dashboard-main.js?v=ecf336a0375d0a9475d0","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/dashboard/src/mixins/isMobile.js","webpack:///nextcloud/apps/dashboard/src/helpers/prefixWithBaseUrl.js","webpack:///nextcloud/apps/dashboard/src/helpers/getBackgroundUrl.js","webpack:///nextcloud/apps/dashboard/src/components/BackgroundSettings.vue","webpack:///nextcloud/apps/dashboard/src/components/BackgroundSettings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/dashboard/src/components/BackgroundSettings.vue?8d16","webpack://nextcloud/./apps/dashboard/src/components/BackgroundSettings.vue?20a7","webpack:///nextcloud/apps/dashboard/src/components/BackgroundSettings.vue?vue&type=template&id=e4c3a7ca&scoped=true&","webpack:///nextcloud/apps/dashboard/src/App.vue","webpack:///nextcloud/apps/dashboard/src/App.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/dashboard/src/App.vue?4e24","webpack://nextcloud/./apps/dashboard/src/App.vue?d9a5","webpack:///nextcloud/apps/dashboard/src/App.vue?vue&type=template&id=b86c858a&scoped=true&","webpack:///nextcloud/apps/dashboard/src/main.js","webpack:///nextcloud/apps/dashboard/src/App.vue?vue&type=style&index=0&id=b86c858a&lang=scss&scoped=true&","webpack:///nextcloud/apps/dashboard/src/components/BackgroundSettings.vue?vue&type=style&index=0&id=e4c3a7ca&scoped=true&lang=scss&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tisMobile: this._isMobile(),\n\t\t}\n\t},\n\tbeforeMount() {\n\t\twindow.addEventListener('resize', this._onResize)\n\t},\n\tbeforeDestroy() {\n\t\twindow.removeEventListener('resize', this._onResize)\n\t},\n\tmethods: {\n\t\t_onResize() {\n\t\t\t// Update mobile mode\n\t\t\tthis.isMobile = this._isMobile()\n\t\t},\n\t\t_isMobile() {\n\t\t\t// check if content width is under 768px\n\t\t\treturn document.documentElement.clientWidth < 768\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateFilePath } from '@nextcloud/router'\n\nexport default (url) => generateFilePath('dashboard', '', 'img/') + url\n","/**\n * @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n *\n * @author Avior <florian.bouillon@delta-wings.net>\n * @author Julien Veyssier <eneiluj@posteo.net>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateUrl } from '@nextcloud/router'\nimport prefixWithBaseUrl from './prefixWithBaseUrl'\n\nexport default (background, time = 0, themingDefaultBackground = '') => {\n\tif (background === 'default') {\n\t\tif (themingDefaultBackground && themingDefaultBackground !== 'backgroundColor') {\n\t\t\treturn generateUrl('/apps/theming/image/background') + '?v=' + window.OCA.Theming.cacheBuster\n\t\t}\n\t\tif (window.OCA.Accessibility && window.OCA.Accessibility.theme === 'dark') {\n\t\t\treturn prefixWithBaseUrl('eduardo-neves-pedra-azul.jpg')\n\t\t}\n\t\treturn prefixWithBaseUrl('kamil-porembinski-clouds.jpg')\n\t} else if (background === 'custom') {\n\t\treturn generateUrl('/apps/dashboard/background') + '?v=' + time\n\t}\n\treturn prefixWithBaseUrl(background)\n}\n","<!--\n - @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\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<div class=\"background-selector\">\n\t\t<button class=\"background filepicker\"\n\t\t\t:class=\"{ active: background === 'custom' }\"\n\t\t\ttabindex=\"0\"\n\t\t\t@click=\"pickFile\">\n\t\t\t{{ t('dashboard', 'Pick from Files') }}\n\t\t</button>\n\t\t<button class=\"background default\"\n\t\t\ttabindex=\"0\"\n\t\t\t:class=\"{ 'icon-loading': loading === 'default', active: background === 'default' }\"\n\t\t\t@click=\"setDefault\">\n\t\t\t{{ t('dashboard', 'Default images') }}\n\t\t</button>\n\t\t<button class=\"background color\"\n\t\t\t:class=\"{ active: background === 'custom' }\"\n\t\t\ttabindex=\"0\"\n\t\t\t@click=\"pickColor\">\n\t\t\t{{ t('dashboard', 'Plain background') }}\n\t\t</button>\n\t\t<button v-for=\"shippedBackground in shippedBackgrounds\"\n\t\t\t:key=\"shippedBackground.name\"\n\t\t\tv-tooltip=\"shippedBackground.details.attribution\"\n\t\t\t:class=\"{ 'icon-loading': loading === shippedBackground.name, active: background === shippedBackground.name }\"\n\t\t\ttabindex=\"0\"\n\t\t\tclass=\"background\"\n\t\t\t:style=\"{ 'background-image': 'url(' + shippedBackground.preview + ')' }\"\n\t\t\t@click=\"setShipped(shippedBackground.name)\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport getBackgroundUrl from './../helpers/getBackgroundUrl'\nimport prefixWithBaseUrl from './../helpers/prefixWithBaseUrl'\nconst shippedBackgroundList = loadState('dashboard', 'shippedBackgrounds')\n\nexport default {\n\tname: 'BackgroundSettings',\n\tprops: {\n\t\tbackground: {\n\t\t\ttype: String,\n\t\t\tdefault: 'default',\n\t\t},\n\t\tthemingDefaultBackground: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tbackgroundImage: generateUrl('/apps/dashboard/background') + '?v=' + Date.now(),\n\t\t\tloading: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tshippedBackgrounds() {\n\t\t\treturn Object.keys(shippedBackgroundList).map((item) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: item,\n\t\t\t\t\turl: prefixWithBaseUrl(item),\n\t\t\t\t\tpreview: prefixWithBaseUrl('previews/' + item),\n\t\t\t\t\tdetails: shippedBackgroundList[item],\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\tasync update(data) {\n\t\t\tconst background = data.type === 'custom' || data.type === 'default' ? data.type : data.value\n\t\t\tthis.backgroundImage = getBackgroundUrl(background, data.version, this.themingDefaultBackground)\n\t\t\tif (data.type === 'color' || (data.type === 'default' && this.themingDefaultBackground === 'backgroundColor')) {\n\t\t\t\tthis.$emit('update:background', data)\n\t\t\t\tthis.loading = false\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst image = new Image()\n\t\t\timage.onload = () => {\n\t\t\t\tthis.$emit('update:background', data)\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t\timage.src = this.backgroundImage\n\t\t},\n\t\tasync setDefault() {\n\t\t\tthis.loading = 'default'\n\t\t\tconst result = await axios.post(generateUrl('/apps/dashboard/background/default'))\n\t\t\tthis.update(result.data)\n\t\t},\n\t\tasync setShipped(shipped) {\n\t\t\tthis.loading = shipped\n\t\t\tconst result = await axios.post(generateUrl('/apps/dashboard/background/shipped'), { value: shipped })\n\t\t\tthis.update(result.data)\n\t\t},\n\t\tasync setFile(path) {\n\t\t\tthis.loading = 'custom'\n\t\t\tconst result = await axios.post(generateUrl('/apps/dashboard/background/custom'), { value: path })\n\t\t\tthis.update(result.data)\n\t\t},\n\t\tasync pickColor() {\n\t\t\tthis.loading = 'color'\n\t\t\tconst color = OCA && OCA.Theming ? OCA.Theming.color : '#0082c9'\n\t\t\tconst result = await axios.post(generateUrl('/apps/dashboard/background/color'), { value: color })\n\t\t\tthis.update(result.data)\n\t\t},\n\t\tpickFile() {\n\t\t\twindow.OC.dialogs.filepicker(t('dashboard', 'Insert from {productName}', { productName: OC.theme.name }), (path, type) => {\n\t\t\t\tif (type === OC.dialogs.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\t\tthis.setFile(path)\n\t\t\t\t}\n\t\t\t}, false, ['image/png', 'image/gif', 'image/jpeg', 'image/svg'], true, OC.dialogs.FILEPICKER_TYPE_CHOOSE)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.background-selector {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tjustify-content: center;\n\n\t.background {\n\t\twidth: 176px;\n\t\theight: 96px;\n\t\tmargin: 8px;\n\t\tbackground-size: cover;\n\t\tbackground-position: center center;\n\t\ttext-align: center;\n\t\tborder-radius: var(--border-radius-large);\n\t\tborder: 2px solid var(--color-main-background);\n\t\toverflow: hidden;\n\n\t\t&.current {\n\t\t\tbackground-image: var(--color-background-dark);\n\t\t}\n\n\t\t&.filepicker, &.default, &.color {\n\t\t\tborder-color: var(--color-border);\n\t\t}\n\n\t\t&.color {\n\t\t\tbackground-color: var(--color-primary);\n\t\t\tcolor: var(--color-primary-text);\n\t\t}\n\n\t\t&.active,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\tborder: 2px solid var(--color-primary);\n\t\t}\n\n\t\t&.active:not(.icon-loading):after {\n\t\t\tbackground-image: var(--icon-checkmark-fff);\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-position: center;\n\t\t\tbackground-size: 44px;\n\t\t\tcontent: '';\n\t\t\tdisplay: block;\n\t\t\theight: 100%;\n\n\t\t\tbody.theme--dark & {\n\t\t\t\tbackground-image: var(--icon-checkmark-000);\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!./BackgroundSettings.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!./BackgroundSettings.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!./BackgroundSettings.vue?vue&type=style&index=0&id=e4c3a7ca&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BackgroundSettings.vue?vue&type=style&index=0&id=e4c3a7ca&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./BackgroundSettings.vue?vue&type=template&id=e4c3a7ca&scoped=true&\"\nimport script from \"./BackgroundSettings.vue?vue&type=script&lang=js&\"\nexport * from \"./BackgroundSettings.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BackgroundSettings.vue?vue&type=style&index=0&id=e4c3a7ca&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e4c3a7ca\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"background-selector\"},[_c('button',{staticClass:\"background filepicker\",class:{ active: _vm.background === 'custom' },attrs:{\"tabindex\":\"0\"},on:{\"click\":_vm.pickFile}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('dashboard', 'Pick from Files'))+\"\\n\\t\")]),_vm._v(\" \"),_c('button',{staticClass:\"background default\",class:{ 'icon-loading': _vm.loading === 'default', active: _vm.background === 'default' },attrs:{\"tabindex\":\"0\"},on:{\"click\":_vm.setDefault}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('dashboard', 'Default images'))+\"\\n\\t\")]),_vm._v(\" \"),_c('button',{staticClass:\"background color\",class:{ active: _vm.background === 'custom' },attrs:{\"tabindex\":\"0\"},on:{\"click\":_vm.pickColor}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('dashboard', 'Plain background'))+\"\\n\\t\")]),_vm._v(\" \"),_vm._l((_vm.shippedBackgrounds),function(shippedBackground){return _c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(shippedBackground.details.attribution),expression:\"shippedBackground.details.attribution\"}],key:shippedBackground.name,staticClass:\"background\",class:{ 'icon-loading': _vm.loading === shippedBackground.name, active: _vm.background === shippedBackground.name },style:({ 'background-image': 'url(' + shippedBackground.preview + ')' }),attrs:{\"tabindex\":\"0\"},on:{\"click\":function($event){return _vm.setShipped(shippedBackground.name)}}})})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div id=\"app-dashboard\" :style=\"backgroundStyle\">\n\t\t<h2>{{ greeting.text }}</h2>\n\t\t<ul class=\"statuses\">\n\t\t\t<div v-for=\"status in sortedRegisteredStatus\"\n\t\t\t\t:id=\"'status-' + status\"\n\t\t\t\t:key=\"status\">\n\t\t\t\t<div :ref=\"'status-' + status\" />\n\t\t\t</div>\n\t\t</ul>\n\n\t\t<Draggable v-model=\"layout\"\n\t\t\tclass=\"panels\"\n\t\t\tv-bind=\"{swapThreshold: 0.30, delay: 500, delayOnTouchOnly: true, touchStartThreshold: 3}\"\n\t\t\thandle=\".panel--header\"\n\t\t\t@end=\"saveLayout\">\n\t\t\t<div v-for=\"panelId in layout\" :key=\"panels[panelId].id\" class=\"panel\">\n\t\t\t\t<div class=\"panel--header\">\n\t\t\t\t\t<h2 :class=\"panels[panelId].iconClass\">\n\t\t\t\t\t\t{{ panels[panelId].title }}\n\t\t\t\t\t</h2>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"panel--content\" :class=\"{ loading: !panels[panelId].mounted }\">\n\t\t\t\t\t<div :ref=\"panels[panelId].id\" :data-id=\"panels[panelId].id\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Draggable>\n\n\t\t<div class=\"footer\">\n\t\t\t<a class=\"edit-panels icon-rename\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t@click=\"showModal\"\n\t\t\t\t@keyup.enter=\"showModal\"\n\t\t\t\t@keyup.space=\"showModal\">{{ t('dashboard', 'Customize') }}</a>\n\t\t</div>\n\n\t\t<Modal v-if=\"modal\" @close=\"closeModal\">\n\t\t\t<div class=\"modal__content\">\n\t\t\t\t<h3>{{ t('dashboard', 'Edit widgets') }}</h3>\n\t\t\t\t<ol class=\"panels\">\n\t\t\t\t\t<li v-for=\"status in sortedAllStatuses\" :key=\"status\">\n\t\t\t\t\t\t<input :id=\"'status-checkbox-' + status\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\"\n\t\t\t\t\t\t\t:checked=\"isStatusActive(status)\"\n\t\t\t\t\t\t\t@input=\"updateStatusCheckbox(status, $event.target.checked)\">\n\t\t\t\t\t\t<label :for=\"'status-checkbox-' + status\" :class=\"statusInfo[status].icon\">\n\t\t\t\t\t\t\t{{ statusInfo[status].text }}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t</li>\n\t\t\t\t</ol>\n\t\t\t\t<Draggable v-model=\"layout\"\n\t\t\t\t\tclass=\"panels\"\n\t\t\t\t\ttag=\"ol\"\n\t\t\t\t\tv-bind=\"{swapThreshold: 0.30, delay: 500, delayOnTouchOnly: true, touchStartThreshold: 3}\"\n\t\t\t\t\thandle=\".draggable\"\n\t\t\t\t\t@end=\"saveLayout\">\n\t\t\t\t\t<li v-for=\"panel in sortedPanels\" :key=\"panel.id\">\n\t\t\t\t\t\t<input :id=\"'panel-checkbox-' + panel.id\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\"\n\t\t\t\t\t\t\t:checked=\"isActive(panel)\"\n\t\t\t\t\t\t\t@input=\"updateCheckbox(panel, $event.target.checked)\">\n\t\t\t\t\t\t<label :for=\"'panel-checkbox-' + panel.id\" :class=\"isActive(panel) ? 'draggable ' + panel.iconClass : panel.iconClass\">\n\t\t\t\t\t\t\t{{ panel.title }}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t</li>\n\t\t\t\t</Draggable>\n\n\t\t\t\t<a v-if=\"isAdmin\" :href=\"appStoreUrl\" class=\"button\">{{ t('dashboard', 'Get more widgets from the App Store') }}</a>\n\n\t\t\t\t<h3>{{ t('dashboard', 'Change background image') }}</h3>\n\t\t\t\t<BackgroundSettings :background=\"background\"\n\t\t\t\t\t:theming-default-background=\"themingDefaultBackground\"\n\t\t\t\t\t@update:background=\"updateBackground\" />\n\n\t\t\t\t<h3>{{ t('dashboard', 'Weather service') }}</h3>\n\t\t\t\t<p>\n\t\t\t\t\t{{ t('dashboard', 'For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information.') }}\n\t\t\t\t</p>\n\t\t\t\t<p class=\"credits--end\">\n\t\t\t\t\t<a href=\"https://api.met.no/doc/TermsOfService\" target=\"_blank\" rel=\"noopener\">{{ t('dashboard', 'Weather data from Met.no') }}</a>,\n\t\t\t\t\t<a href=\"https://wiki.osmfoundation.org/wiki/Privacy_Policy\" target=\"_blank\" rel=\"noopener\">{{ t('dashboard', 'geocoding with Nominatim') }}</a>,\n\t\t\t\t\t<a href=\"https://www.opentopodata.org/#public-api\" target=\"_blank\" rel=\"noopener\">{{ t('dashboard', 'elevation data from OpenTopoData') }}</a>.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</Modal>\n\t</div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport Modal from '@nextcloud/vue/dist/Components/Modal'\nimport Draggable from 'vuedraggable'\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport isMobile from './mixins/isMobile'\nimport BackgroundSettings from './components/BackgroundSettings'\nimport getBackgroundUrl from './helpers/getBackgroundUrl'\n\nconst panels = loadState('dashboard', 'panels')\nconst firstRun = loadState('dashboard', 'firstRun')\nconst background = loadState('dashboard', 'background')\nconst themingDefaultBackground = loadState('dashboard', 'themingDefaultBackground')\nconst version = loadState('dashboard', 'version')\nconst shippedBackgroundList = loadState('dashboard', 'shippedBackgrounds')\nconst statusInfo = {\n\tweather: {\n\t\ttext: t('dashboard', 'Weather'),\n\t\ticon: 'icon-weather-status',\n\t},\n\tstatus: {\n\t\ttext: t('dashboard', 'Status'),\n\t\ticon: 'icon-user-status-online',\n\t},\n}\n\nexport default {\n\tname: 'App',\n\tcomponents: {\n\t\tModal,\n\t\tDraggable,\n\t\tBackgroundSettings,\n\t},\n\tmixins: [\n\t\tisMobile,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tisAdmin: getCurrentUser().isAdmin,\n\t\t\ttimer: new Date(),\n\t\t\tregisteredStatus: [],\n\t\t\tcallbacks: {},\n\t\t\tcallbacksStatus: {},\n\t\t\tallCallbacksStatus: {},\n\t\t\tstatusInfo,\n\t\t\tenabledStatuses: loadState('dashboard', 'statuses'),\n\t\t\tpanels,\n\t\t\tfirstRun,\n\t\t\tdisplayName: getCurrentUser()?.displayName,\n\t\t\tuid: getCurrentUser()?.uid,\n\t\t\tlayout: loadState('dashboard', 'layout').filter((panelId) => panels[panelId]),\n\t\t\tmodal: false,\n\t\t\tappStoreUrl: generateUrl('/settings/apps/dashboard'),\n\t\t\tstatuses: {},\n\t\t\tbackground,\n\t\t\tthemingDefaultBackground,\n\t\t\tversion,\n\t\t}\n\t},\n\tcomputed: {\n\t\tbackgroundImage() {\n\t\t\treturn getBackgroundUrl(this.background, this.version, this.themingDefaultBackground)\n\t\t},\n\t\tbackgroundStyle() {\n\t\t\tif ((this.background === 'default' && this.themingDefaultBackground === 'backgroundColor')\n\t\t\t\t|| this.background.match(/#[0-9A-Fa-f]{6}/g)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tbackgroundImage: `url(${this.backgroundImage})`,\n\t\t\t}\n\t\t},\n\t\tgreeting() {\n\t\t\tconst time = this.timer.getHours()\n\n\t\t\t// Determine part of the day\n\t\t\tlet partOfDay\n\t\t\tif (time >= 22 || time < 5) {\n\t\t\t\tpartOfDay = 'night'\n\t\t\t} else if (time >= 18) {\n\t\t\t\tpartOfDay = 'evening'\n\t\t\t} else if (time >= 12) {\n\t\t\t\tpartOfDay = 'afternoon'\n\t\t\t} else {\n\t\t\t\tpartOfDay = 'morning'\n\t\t\t}\n\n\t\t\t// Define the greetings\n\t\t\tconst good = {\n\t\t\t\tmorning: {\n\t\t\t\t\tgeneric: t('dashboard', 'Good morning'),\n\t\t\t\t\twithName: t('dashboard', 'Good morning, {name}', { name: this.displayName }, undefined, { escape: false }),\n\t\t\t\t},\n\t\t\t\tafternoon: {\n\t\t\t\t\tgeneric: t('dashboard', 'Good afternoon'),\n\t\t\t\t\twithName: t('dashboard', 'Good afternoon, {name}', { name: this.displayName }, undefined, { escape: false }),\n\t\t\t\t},\n\t\t\t\tevening: {\n\t\t\t\t\tgeneric: t('dashboard', 'Good evening'),\n\t\t\t\t\twithName: t('dashboard', 'Good evening, {name}', { name: this.displayName }, undefined, { escape: false }),\n\t\t\t\t},\n\t\t\t\tnight: {\n\t\t\t\t\t// Don't use \"Good night\" as it's not a greeting\n\t\t\t\t\tgeneric: t('dashboard', 'Hello'),\n\t\t\t\t\twithName: t('dashboard', 'Hello, {name}', { name: this.displayName }, undefined, { escape: false }),\n\t\t\t\t},\n\t\t\t}\n\n\t\t\t// Figure out which greeting to show\n\t\t\tconst shouldShowName = this.displayName && this.uid !== this.displayName\n\t\t\treturn { text: shouldShowName ? good[partOfDay].withName : good[partOfDay].generic }\n\t\t},\n\t\tisActive() {\n\t\t\treturn (panel) => this.layout.indexOf(panel.id) > -1\n\t\t},\n\t\tisStatusActive() {\n\t\t\treturn (status) => !(status in this.enabledStatuses) || this.enabledStatuses[status]\n\t\t},\n\t\tsortedAllStatuses() {\n\t\t\treturn Object.keys(this.allCallbacksStatus).slice().sort(this.sortStatuses)\n\t\t},\n\t\tsortedPanels() {\n\t\t\treturn Object.values(this.panels).sort((a, b) => {\n\t\t\t\tconst indexA = this.layout.indexOf(a.id)\n\t\t\t\tconst indexB = this.layout.indexOf(b.id)\n\t\t\t\tif (indexA === -1 || indexB === -1) {\n\t\t\t\t\treturn indexB - indexA || a.id - b.id\n\t\t\t\t}\n\t\t\t\treturn indexA - indexB || a.id - b.id\n\t\t\t})\n\t\t},\n\t\tsortedRegisteredStatus() {\n\t\t\treturn this.registeredStatus.slice().sort(this.sortStatuses)\n\t\t},\n\t},\n\twatch: {\n\t\tcallbacks() {\n\t\t\tthis.rerenderPanels()\n\t\t},\n\t\tcallbacksStatus() {\n\t\t\tfor (const app in this.callbacksStatus) {\n\t\t\t\tconst element = this.$refs['status-' + app]\n\t\t\t\tif (this.statuses[app] && this.statuses[app].mounted) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.callbacksStatus[app](element[0])\n\t\t\t\t\tVue.set(this.statuses, app, { mounted: true })\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('Failed to register panel in the frontend as no backend data was provided for ' + app)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.updateGlobalStyles()\n\t\tthis.updateSkipLink()\n\t\twindow.addEventListener('scroll', this.handleScroll)\n\n\t\tsetInterval(() => {\n\t\t\tthis.timer = new Date()\n\t\t}, 30000)\n\n\t\tif (this.firstRun) {\n\t\t\twindow.addEventListener('scroll', this.disableFirstrunHint)\n\t\t}\n\t},\n\tdestroyed() {\n\t\twindow.removeEventListener('scroll', this.handleScroll)\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Method to register panels that will be called by the integrating apps\n\t\t *\n\t\t * @param {string} app The unique app id for the widget\n\t\t * @param {Function} callback The callback function to register a panel which gets the DOM element passed as parameter\n\t\t */\n\t\tregister(app, callback) {\n\t\t\tVue.set(this.callbacks, app, callback)\n\t\t},\n\t\tregisterStatus(app, callback) {\n\t\t\t// always save callbacks in case user enables the status later\n\t\t\tVue.set(this.allCallbacksStatus, app, callback)\n\t\t\t// register only if status is enabled or missing from config\n\t\t\tif (this.isStatusActive(app)) {\n\t\t\t\tthis.registeredStatus.push(app)\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tVue.set(this.callbacksStatus, app, callback)\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\trerenderPanels() {\n\t\t\tfor (const app in this.callbacks) {\n\t\t\t\tconst element = this.$refs[app]\n\t\t\t\tif (this.layout.indexOf(app) === -1) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (this.panels[app] && this.panels[app].mounted) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.callbacks[app](element[0], {\n\t\t\t\t\t\twidget: this.panels[app],\n\t\t\t\t\t})\n\t\t\t\t\tVue.set(this.panels[app], 'mounted', true)\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('Failed to register panel in the frontend as no backend data was provided for ' + app)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsaveLayout() {\n\t\t\taxios.post(generateUrl('/apps/dashboard/layout'), {\n\t\t\t\tlayout: this.layout.join(','),\n\t\t\t})\n\t\t},\n\t\tsaveStatuses() {\n\t\t\taxios.post(generateUrl('/apps/dashboard/statuses'), {\n\t\t\t\tstatuses: JSON.stringify(this.enabledStatuses),\n\t\t\t})\n\t\t},\n\t\tshowModal() {\n\t\t\tthis.modal = true\n\t\t\tthis.firstRun = false\n\t\t},\n\t\tcloseModal() {\n\t\t\tthis.modal = false\n\t\t},\n\t\tupdateCheckbox(panel, currentValue) {\n\t\t\tconst index = this.layout.indexOf(panel.id)\n\t\t\tif (!currentValue && index > -1) {\n\t\t\t\tthis.layout.splice(index, 1)\n\n\t\t\t} else {\n\t\t\t\tthis.layout.push(panel.id)\n\t\t\t}\n\t\t\tVue.set(this.panels[panel.id], 'mounted', false)\n\t\t\tthis.saveLayout()\n\t\t\tthis.$nextTick(() => this.rerenderPanels())\n\t\t},\n\t\tdisableFirstrunHint() {\n\t\t\twindow.removeEventListener('scroll', this.disableFirstrunHint)\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.firstRun = false\n\t\t\t}, 1000)\n\t\t},\n\t\tupdateBackground(data) {\n\t\t\tthis.background = data.type === 'custom' || data.type === 'default' ? data.type : data.value\n\t\t\tthis.version = data.version\n\t\t\tthis.updateGlobalStyles()\n\t\t},\n\t\tupdateGlobalStyles() {\n\t\t\tdocument.body.setAttribute('data-dashboard-background', this.background)\n\t\t\tif (window.OCA.Theming.inverted) {\n\t\t\t\tdocument.body.classList.add('dashboard--inverted')\n\t\t\t}\n\n\t\t\tconst shippedBackgroundTheme = shippedBackgroundList[this.background] ? shippedBackgroundList[this.background].theming : 'light'\n\t\t\tif (shippedBackgroundTheme === 'dark') {\n\t\t\t\tdocument.body.classList.add('dashboard--dark')\n\t\t\t} else {\n\t\t\t\tdocument.body.classList.remove('dashboard--dark')\n\t\t\t}\n\t\t},\n\t\tupdateSkipLink() {\n\t\t\t// Make sure \"Skip to main content\" link points to the app content\n\t\t\tdocument.getElementsByClassName('skip-navigation')[0].setAttribute('href', '#app-dashboard')\n\t\t},\n\t\tupdateStatusCheckbox(app, checked) {\n\t\t\tif (checked) {\n\t\t\t\tthis.enableStatus(app)\n\t\t\t} else {\n\t\t\t\tthis.disableStatus(app)\n\t\t\t}\n\t\t},\n\t\tenableStatus(app) {\n\t\t\tthis.enabledStatuses[app] = true\n\t\t\tthis.registerStatus(app, this.allCallbacksStatus[app])\n\t\t\tthis.saveStatuses()\n\t\t},\n\t\tdisableStatus(app) {\n\t\t\tthis.enabledStatuses[app] = false\n\t\t\tconst i = this.registeredStatus.findIndex((s) => s === app)\n\t\t\tif (i !== -1) {\n\t\t\t\tthis.registeredStatus.splice(i, 1)\n\t\t\t\tVue.set(this.statuses, app, { mounted: false })\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tVue.delete(this.callbacksStatus, app)\n\t\t\t\t})\n\t\t\t}\n\t\t\tthis.saveStatuses()\n\t\t},\n\t\tsortStatuses(a, b) {\n\t\t\tconst al = a.toLowerCase()\n\t\t\tconst bl = b.toLowerCase()\n\t\t\treturn al > bl\n\t\t\t\t? 1\n\t\t\t\t: al < bl\n\t\t\t\t\t? -1\n\t\t\t\t\t: 0\n\t\t},\n\t\thandleScroll() {\n\t\t\tif (window.scrollY > 70) {\n\t\t\t\tdocument.body.classList.add('dashboard--scrolled')\n\t\t\t} else {\n\t\t\t\tdocument.body.classList.remove('dashboard--scrolled')\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n#app-dashboard {\n\twidth: 100%;\n\tmin-height: 100vh;\n\tbackground-size: cover;\n\tbackground-position: center center;\n\tbackground-repeat: no-repeat;\n\tbackground-attachment: fixed;\n\tbackground-color: var(--color-primary);\n\t--color-background-translucent: rgba(255, 255, 255, 0.8);\n\t--background-blur: blur(10px);\n\n\t#body-user.theme--dark & {\n\t\tbackground-color: var(--color-main-background);\n\t\t--color-background-translucent: rgba(24, 24, 24, 0.8);\n\t}\n\n\t#body-user.theme--highcontrast & {\n\t\tbackground-color: var(--color-main-background);\n\t\t--color-background-translucent: var(--color-main-background);\n\t}\n\n\t> h2 {\n\t\tcolor: var(--color-primary-text);\n\t\ttext-align: center;\n\t\tfont-size: 32px;\n\t\tline-height: 130%;\n\t\tpadding: 10vh 16px 0px;\n\t}\n}\n\n.panels {\n\twidth: auto;\n\tmargin: auto;\n\tmax-width: 1500px;\n\tdisplay: flex;\n\tjustify-content: center;\n\tflex-direction: row;\n\talign-items: flex-start;\n\tflex-wrap: wrap;\n}\n\n.panel, .panels > div {\n\twidth: 320px;\n\tmax-width: 100%;\n\tmargin: 16px;\n\tbackground-color: var(--color-background-translucent);\n\t-webkit-backdrop-filter: var(--background-blur);\n\tbackdrop-filter: var(--background-blur);\n\tborder-radius: var(--border-radius-large);\n\n\t#body-user.theme--highcontrast & {\n\t\tborder: 2px solid var(--color-border);\n\t}\n\n\t&.sortable-ghost {\n\t\t opacity: 0.1;\n\t}\n\n\t& > .panel--header {\n\t\tdisplay: flex;\n\t\tz-index: 1;\n\t\ttop: 50px;\n\t\tpadding: 16px;\n\t\tcursor: grab;\n\n\t\t&, ::v-deep * {\n\t\t\t-webkit-touch-callout: none;\n\t\t\t-webkit-user-select: none;\n\t\t\t-khtml-user-select: none;\n\t\t\t-moz-user-select: none;\n\t\t\t-ms-user-select: none;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&:active {\n\t\t\tcursor: grabbing;\n\t\t}\n\n\t\ta {\n\t\t\tflex-grow: 1;\n\t\t}\n\n\t\t> h2 {\n\t\t\tdisplay: block;\n\t\t\tflex-grow: 1;\n\t\t\tmargin: 0;\n\t\t\tfont-size: 20px;\n\t\t\tline-height: 24px;\n\t\t\tfont-weight: bold;\n\t\t\tbackground-size: 32px;\n\t\t\tbackground-position: 14px 12px;\n\t\t\tpadding: 16px 8px 16px 60px;\n\t\t\theight: 56px;\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\tcursor: grab;\n\t\t}\n\t}\n\n\t& > .panel--content {\n\t\tmargin: 0 16px 16px 16px;\n\t\theight: 420px;\n\t\t// We specifically do not want scrollbars inside widgets\n\t\toverflow: hidden;\n\t}\n\n\t// No need to extend height of widgets if only one column is shown\n\t@media only screen and (max-width: 709px) {\n\t\t& > .panel--content {\n\t\t\theight: auto;\n\t\t}\n\t}\n}\n\n.footer {\n\ttext-align: center;\n\ttransition: bottom var(--animation-slow) ease-in-out;\n\tbottom: 0;\n\tpadding: 44px 0;\n}\n\n.edit-panels {\n\tdisplay: inline-block;\n\tmargin:auto;\n\tbackground-position: 16px center;\n\tpadding: 12px 16px;\n\tpadding-left: 36px;\n\tborder-radius: var(--border-radius-pill);\n\tmax-width: 200px;\n\topacity: 1;\n\ttext-align: center;\n}\n\n.edit-panels,\n.statuses ::v-deep .action-item .action-item__menutoggle,\n.statuses ::v-deep .action-item.action-item--open .action-item__menutoggle {\n\tbackground-color: var(--color-background-translucent);\n\t-webkit-backdrop-filter: var(--background-blur);\n\tbackdrop-filter: var(--background-blur);\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n}\n\n.modal__content {\n\tpadding: 32px 16px;\n\tmax-height: 70vh;\n\ttext-align: center;\n\toverflow: auto;\n\n\tol {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tjustify-content: center;\n\t\tlist-style-type: none;\n\t\tpadding-bottom: 16px;\n\t}\n\tli {\n\t\tlabel {\n\t\t\tdisplay: block;\n\t\t\tpadding: 48px 8px 16px 8px;\n\t\t\tmargin: 8px;\n\t\t\twidth: 160px;\n\t\t\tbackground-color: var(--color-background-hover);\n\t\t\tborder: 2px solid var(--color-main-background);\n\t\t\tborder-radius: var(--border-radius-large);\n\t\t\tbackground-size: 24px;\n\t\t\tbackground-position: center 16px;\n\t\t\ttext-align: center;\n\n\t\t\t&:hover {\n\t\t\t\tborder-color: var(--color-primary);\n\t\t\t}\n\t\t}\n\n\t\tinput:focus + label {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\t}\n\n\th3 {\n\t\tfont-weight: bold;\n\n\t\t&:not(:first-of-type) {\n\t\t\tmargin-top: 64px;\n\t\t}\n\t}\n\n\t// Adjust design of 'Get more widgets' button\n\t.button {\n\t\tdisplay: inline-block;\n\t\tpadding: 10px 16px;\n\t\tmargin: 0;\n\t}\n\n\tp {\n\t\tmax-width: 650px;\n\t\tmargin: 0 auto;\n\n\t\ta:hover,\n\t\ta:focus {\n\t\t\tborder-bottom: 2px solid var(--color-border);\n\t\t}\n\t}\n\n\t.credits--end {\n\t\tpadding-bottom: 32px;\n\t\tcolor: var(--color-text-maxcontrast);\n\n\t\ta {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n\n.flip-list-move {\n\ttransition: transform var(--animation-slow);\n}\n\n.statuses {\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: center;\n\tflex-wrap: wrap;\n\tmargin-bottom: 36px;\n\n\t& > div {\n\t\tmargin: 8px;\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!./App.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!./App.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!./App.vue?vue&type=style&index=0&id=b86c858a&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!./App.vue?vue&type=style&index=0&id=b86c858a&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=b86c858a&scoped=true&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=b86c858a&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 \"b86c858a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{style:(_vm.backgroundStyle),attrs:{\"id\":\"app-dashboard\"}},[_c('h2',[_vm._v(_vm._s(_vm.greeting.text))]),_vm._v(\" \"),_c('ul',{staticClass:\"statuses\"},_vm._l((_vm.sortedRegisteredStatus),function(status){return _c('div',{key:status,attrs:{\"id\":'status-' + status}},[_c('div',{ref:'status-' + status,refInFor:true})])}),0),_vm._v(\" \"),_c('Draggable',_vm._b({staticClass:\"panels\",attrs:{\"handle\":\".panel--header\"},on:{\"end\":_vm.saveLayout},model:{value:(_vm.layout),callback:function ($$v) {_vm.layout=$$v},expression:\"layout\"}},'Draggable',{swapThreshold: 0.30, delay: 500, delayOnTouchOnly: true, touchStartThreshold: 3},false),_vm._l((_vm.layout),function(panelId){return _c('div',{key:_vm.panels[panelId].id,staticClass:\"panel\"},[_c('div',{staticClass:\"panel--header\"},[_c('h2',{class:_vm.panels[panelId].iconClass},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.panels[panelId].title)+\"\\n\\t\\t\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"panel--content\",class:{ loading: !_vm.panels[panelId].mounted }},[_c('div',{ref:_vm.panels[panelId].id,refInFor:true,attrs:{\"data-id\":_vm.panels[panelId].id}})])])}),0),_vm._v(\" \"),_c('div',{staticClass:\"footer\"},[_c('a',{staticClass:\"edit-panels icon-rename\",attrs:{\"tabindex\":\"0\"},on:{\"click\":_vm.showModal,\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.showModal.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"])){ return null; }return _vm.showModal.apply(null, arguments)}]}},[_vm._v(_vm._s(_vm.t('dashboard', 'Customize')))])]),_vm._v(\" \"),(_vm.modal)?_c('Modal',{on:{\"close\":_vm.closeModal}},[_c('div',{staticClass:\"modal__content\"},[_c('h3',[_vm._v(_vm._s(_vm.t('dashboard', 'Edit widgets')))]),_vm._v(\" \"),_c('ol',{staticClass:\"panels\"},_vm._l((_vm.sortedAllStatuses),function(status){return _c('li',{key:status},[_c('input',{staticClass:\"checkbox\",attrs:{\"id\":'status-checkbox-' + status,\"type\":\"checkbox\"},domProps:{\"checked\":_vm.isStatusActive(status)},on:{\"input\":function($event){return _vm.updateStatusCheckbox(status, $event.target.checked)}}}),_vm._v(\" \"),_c('label',{class:_vm.statusInfo[status].icon,attrs:{\"for\":'status-checkbox-' + status}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.statusInfo[status].text)+\"\\n\\t\\t\\t\\t\\t\")])])}),0),_vm._v(\" \"),_c('Draggable',_vm._b({staticClass:\"panels\",attrs:{\"tag\":\"ol\",\"handle\":\".draggable\"},on:{\"end\":_vm.saveLayout},model:{value:(_vm.layout),callback:function ($$v) {_vm.layout=$$v},expression:\"layout\"}},'Draggable',{swapThreshold: 0.30, delay: 500, delayOnTouchOnly: true, touchStartThreshold: 3},false),_vm._l((_vm.sortedPanels),function(panel){return _c('li',{key:panel.id},[_c('input',{staticClass:\"checkbox\",attrs:{\"id\":'panel-checkbox-' + panel.id,\"type\":\"checkbox\"},domProps:{\"checked\":_vm.isActive(panel)},on:{\"input\":function($event){return _vm.updateCheckbox(panel, $event.target.checked)}}}),_vm._v(\" \"),_c('label',{class:_vm.isActive(panel) ? 'draggable ' + panel.iconClass : panel.iconClass,attrs:{\"for\":'panel-checkbox-' + panel.id}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(panel.title)+\"\\n\\t\\t\\t\\t\\t\")])])}),0),_vm._v(\" \"),(_vm.isAdmin)?_c('a',{staticClass:\"button\",attrs:{\"href\":_vm.appStoreUrl}},[_vm._v(_vm._s(_vm.t('dashboard', 'Get more widgets from the App Store')))]):_vm._e(),_vm._v(\" \"),_c('h3',[_vm._v(_vm._s(_vm.t('dashboard', 'Change background image')))]),_vm._v(\" \"),_c('BackgroundSettings',{attrs:{\"background\":_vm.background,\"theming-default-background\":_vm.themingDefaultBackground},on:{\"update:background\":_vm.updateBackground}}),_vm._v(\" \"),_c('h3',[_vm._v(_vm._s(_vm.t('dashboard', 'Weather service')))]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('dashboard', 'For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information.'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('p',{staticClass:\"credits--end\"},[_c('a',{attrs:{\"href\":\"https://api.met.no/doc/TermsOfService\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(_vm._s(_vm.t('dashboard', 'Weather data from Met.no')))]),_vm._v(\",\\n\\t\\t\\t\\t\"),_c('a',{attrs:{\"href\":\"https://wiki.osmfoundation.org/wiki/Privacy_Policy\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(_vm._s(_vm.t('dashboard', 'geocoding with Nominatim')))]),_vm._v(\",\\n\\t\\t\\t\\t\"),_c('a',{attrs:{\"href\":\"https://www.opentopodata.org/#public-api\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(_vm._s(_vm.t('dashboard', 'elevation data from OpenTopoData')))]),_vm._v(\".\\n\\t\\t\\t\")])],1)]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport App from './App.vue'\nimport { translate as t } from '@nextcloud/l10n'\nimport VTooltip from '@nextcloud/vue/dist/Directives/Tooltip'\nimport { getRequestToken } from '@nextcloud/auth'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.directive('Tooltip', VTooltip)\n\nVue.prototype.t = t\n\n// FIXME workaround to make the sidebar work\nif (!window.OCA.Files) {\n\twindow.OCA.Files = {}\n}\n\nObject.assign(window.OCA.Files, { App: { fileList: { filesClient: OC.Files.getClient() } } }, window.OCA.Files)\n\nconst Dashboard = Vue.extend(App)\nconst Instance = new Dashboard({}).$mount('#app-content-vue')\n\nwindow.OCA.Dashboard = {\n\tregister: (app, callback) => Instance.register(app, callback),\n\tregisterStatus: (app, callback) => Instance.registerStatus(app, callback),\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#app-dashboard[data-v-b86c858a]{width:100%;min-height:100vh;background-size:cover;background-position:center center;background-repeat:no-repeat;background-attachment:fixed;background-color:var(--color-primary);--color-background-translucent: rgba(255, 255, 255, 0.8);--background-blur: blur(10px)}#body-user.theme--dark #app-dashboard[data-v-b86c858a]{background-color:var(--color-main-background);--color-background-translucent: rgba(24, 24, 24, 0.8)}#body-user.theme--highcontrast #app-dashboard[data-v-b86c858a]{background-color:var(--color-main-background);--color-background-translucent: var(--color-main-background)}#app-dashboard>h2[data-v-b86c858a]{color:var(--color-primary-text);text-align:center;font-size:32px;line-height:130%;padding:10vh 16px 0px}.panels[data-v-b86c858a]{width:auto;margin:auto;max-width:1500px;display:flex;justify-content:center;flex-direction:row;align-items:flex-start;flex-wrap:wrap}.panel[data-v-b86c858a],.panels>div[data-v-b86c858a]{width:320px;max-width:100%;margin:16px;background-color:var(--color-background-translucent);-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur);border-radius:var(--border-radius-large)}#body-user.theme--highcontrast .panel[data-v-b86c858a],#body-user.theme--highcontrast .panels>div[data-v-b86c858a]{border:2px solid var(--color-border)}.panel.sortable-ghost[data-v-b86c858a],.panels>div.sortable-ghost[data-v-b86c858a]{opacity:.1}.panel>.panel--header[data-v-b86c858a],.panels>div>.panel--header[data-v-b86c858a]{display:flex;z-index:1;top:50px;padding:16px;cursor:grab}.panel>.panel--header[data-v-b86c858a],.panel>.panel--header[data-v-b86c858a] *,.panels>div>.panel--header[data-v-b86c858a],.panels>div>.panel--header[data-v-b86c858a] *{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.panel>.panel--header[data-v-b86c858a]:active,.panels>div>.panel--header[data-v-b86c858a]:active{cursor:grabbing}.panel>.panel--header a[data-v-b86c858a],.panels>div>.panel--header a[data-v-b86c858a]{flex-grow:1}.panel>.panel--header>h2[data-v-b86c858a],.panels>div>.panel--header>h2[data-v-b86c858a]{display:block;flex-grow:1;margin:0;font-size:20px;line-height:24px;font-weight:bold;background-size:32px;background-position:14px 12px;padding:16px 8px 16px 60px;height:56px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:grab}.panel>.panel--content[data-v-b86c858a],.panels>div>.panel--content[data-v-b86c858a]{margin:0 16px 16px 16px;height:420px;overflow:hidden}@media only screen and (max-width: 709px){.panel>.panel--content[data-v-b86c858a],.panels>div>.panel--content[data-v-b86c858a]{height:auto}}.footer[data-v-b86c858a]{text-align:center;transition:bottom var(--animation-slow) ease-in-out;bottom:0;padding:44px 0}.edit-panels[data-v-b86c858a]{display:inline-block;margin:auto;background-position:16px center;padding:12px 16px;padding-left:36px;border-radius:var(--border-radius-pill);max-width:200px;opacity:1;text-align:center}.edit-panels[data-v-b86c858a],.statuses[data-v-b86c858a] .action-item .action-item__menutoggle,.statuses[data-v-b86c858a] .action-item.action-item--open .action-item__menutoggle{background-color:var(--color-background-translucent);-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.edit-panels[data-v-b86c858a]:hover,.edit-panels[data-v-b86c858a]:focus,.edit-panels[data-v-b86c858a]:active,.statuses[data-v-b86c858a] .action-item .action-item__menutoggle:hover,.statuses[data-v-b86c858a] .action-item .action-item__menutoggle:focus,.statuses[data-v-b86c858a] .action-item .action-item__menutoggle:active,.statuses[data-v-b86c858a] .action-item.action-item--open .action-item__menutoggle:hover,.statuses[data-v-b86c858a] .action-item.action-item--open .action-item__menutoggle:focus,.statuses[data-v-b86c858a] .action-item.action-item--open .action-item__menutoggle:active{background-color:var(--color-background-hover)}.modal__content[data-v-b86c858a]{padding:32px 16px;max-height:70vh;text-align:center;overflow:auto}.modal__content ol[data-v-b86c858a]{display:flex;flex-direction:row;justify-content:center;list-style-type:none;padding-bottom:16px}.modal__content li label[data-v-b86c858a]{display:block;padding:48px 8px 16px 8px;margin:8px;width:160px;background-color:var(--color-background-hover);border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-size:24px;background-position:center 16px;text-align:center}.modal__content li label[data-v-b86c858a]:hover{border-color:var(--color-primary)}.modal__content li input:focus+label[data-v-b86c858a]{border-color:var(--color-primary)}.modal__content h3[data-v-b86c858a]{font-weight:bold}.modal__content h3[data-v-b86c858a]:not(:first-of-type){margin-top:64px}.modal__content .button[data-v-b86c858a]{display:inline-block;padding:10px 16px;margin:0}.modal__content p[data-v-b86c858a]{max-width:650px;margin:0 auto}.modal__content p a[data-v-b86c858a]:hover,.modal__content p a[data-v-b86c858a]:focus{border-bottom:2px solid var(--color-border)}.modal__content .credits--end[data-v-b86c858a]{padding-bottom:32px;color:var(--color-text-maxcontrast)}.modal__content .credits--end a[data-v-b86c858a]{color:var(--color-text-maxcontrast)}.flip-list-move[data-v-b86c858a]{transition:transform var(--animation-slow)}.statuses[data-v-b86c858a]{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap;margin-bottom:36px}.statuses>div[data-v-b86c858a]{margin:8px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/dashboard/src/App.vue\"],\"names\":[],\"mappings\":\"AAqZA,gCACC,UAAA,CACA,gBAAA,CACA,qBAAA,CACA,iCAAA,CACA,2BAAA,CACA,2BAAA,CACA,qCAAA,CACA,wDAAA,CACA,6BAAA,CAEA,uDACC,6CAAA,CACA,qDAAA,CAGD,+DACC,6CAAA,CACA,4DAAA,CAGD,mCACC,+BAAA,CACA,iBAAA,CACA,cAAA,CACA,gBAAA,CACA,qBAAA,CAIF,yBACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,sBAAA,CACA,cAAA,CAGD,qDACC,WAAA,CACA,cAAA,CACA,WAAA,CACA,oDAAA,CACA,8CAAA,CACA,sCAAA,CACA,wCAAA,CAEA,mHACC,oCAAA,CAGD,mFACE,UAAA,CAGF,mFACC,YAAA,CACA,SAAA,CACA,QAAA,CACA,YAAA,CACA,WAAA,CAEA,4KACC,0BAAA,CACA,wBAAA,CACA,uBAAA,CACA,qBAAA,CACA,oBAAA,CACA,gBAAA,CAGD,iGACC,eAAA,CAGD,uFACC,WAAA,CAGD,yFACC,aAAA,CACA,WAAA,CACA,QAAA,CACA,cAAA,CACA,gBAAA,CACA,gBAAA,CACA,oBAAA,CACA,6BAAA,CACA,0BAAA,CACA,WAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,WAAA,CAIF,qFACC,uBAAA,CACA,YAAA,CAEA,eAAA,CAID,0CACC,qFACC,WAAA,CAAA,CAKH,yBACC,iBAAA,CACA,mDAAA,CACA,QAAA,CACA,cAAA,CAGD,8BACC,oBAAA,CACA,WAAA,CACA,+BAAA,CACA,iBAAA,CACA,iBAAA,CACA,uCAAA,CACA,eAAA,CACA,SAAA,CACA,iBAAA,CAGD,oLAGC,oDAAA,CACA,8CAAA,CACA,sCAAA,CAEA,qlBAGC,8CAAA,CAIF,iCACC,iBAAA,CACA,eAAA,CACA,iBAAA,CACA,aAAA,CAEA,oCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,oBAAA,CACA,mBAAA,CAGA,0CACC,aAAA,CACA,yBAAA,CACA,UAAA,CACA,WAAA,CACA,8CAAA,CACA,6CAAA,CACA,wCAAA,CACA,oBAAA,CACA,+BAAA,CACA,iBAAA,CAEA,gDACC,iCAAA,CAIF,sDACC,iCAAA,CAIF,oCACC,gBAAA,CAEA,wDACC,eAAA,CAKF,yCACC,oBAAA,CACA,iBAAA,CACA,QAAA,CAGD,mCACC,eAAA,CACA,aAAA,CAEA,sFAEC,2CAAA,CAIF,+CACC,mBAAA,CACA,mCAAA,CAEA,iDACC,mCAAA,CAKH,iCACC,0CAAA,CAGD,2BACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,cAAA,CACA,kBAAA,CAEA,+BACC,UAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#app-dashboard {\\n\\twidth: 100%;\\n\\tmin-height: 100vh;\\n\\tbackground-size: cover;\\n\\tbackground-position: center center;\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-attachment: fixed;\\n\\tbackground-color: var(--color-primary);\\n\\t--color-background-translucent: rgba(255, 255, 255, 0.8);\\n\\t--background-blur: blur(10px);\\n\\n\\t#body-user.theme--dark & {\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t--color-background-translucent: rgba(24, 24, 24, 0.8);\\n\\t}\\n\\n\\t#body-user.theme--highcontrast & {\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t--color-background-translucent: var(--color-main-background);\\n\\t}\\n\\n\\t> h2 {\\n\\t\\tcolor: var(--color-primary-text);\\n\\t\\ttext-align: center;\\n\\t\\tfont-size: 32px;\\n\\t\\tline-height: 130%;\\n\\t\\tpadding: 10vh 16px 0px;\\n\\t}\\n}\\n\\n.panels {\\n\\twidth: auto;\\n\\tmargin: auto;\\n\\tmax-width: 1500px;\\n\\tdisplay: flex;\\n\\tjustify-content: center;\\n\\tflex-direction: row;\\n\\talign-items: flex-start;\\n\\tflex-wrap: wrap;\\n}\\n\\n.panel, .panels > div {\\n\\twidth: 320px;\\n\\tmax-width: 100%;\\n\\tmargin: 16px;\\n\\tbackground-color: var(--color-background-translucent);\\n\\t-webkit-backdrop-filter: var(--background-blur);\\n\\tbackdrop-filter: var(--background-blur);\\n\\tborder-radius: var(--border-radius-large);\\n\\n\\t#body-user.theme--highcontrast & {\\n\\t\\tborder: 2px solid var(--color-border);\\n\\t}\\n\\n\\t&.sortable-ghost {\\n\\t\\t opacity: 0.1;\\n\\t}\\n\\n\\t& > .panel--header {\\n\\t\\tdisplay: flex;\\n\\t\\tz-index: 1;\\n\\t\\ttop: 50px;\\n\\t\\tpadding: 16px;\\n\\t\\tcursor: grab;\\n\\n\\t\\t&, ::v-deep * {\\n\\t\\t\\t-webkit-touch-callout: none;\\n\\t\\t\\t-webkit-user-select: none;\\n\\t\\t\\t-khtml-user-select: none;\\n\\t\\t\\t-moz-user-select: none;\\n\\t\\t\\t-ms-user-select: none;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&:active {\\n\\t\\t\\tcursor: grabbing;\\n\\t\\t}\\n\\n\\t\\ta {\\n\\t\\t\\tflex-grow: 1;\\n\\t\\t}\\n\\n\\t\\t> h2 {\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tflex-grow: 1;\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tfont-size: 20px;\\n\\t\\t\\tline-height: 24px;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tbackground-size: 32px;\\n\\t\\t\\tbackground-position: 14px 12px;\\n\\t\\t\\tpadding: 16px 8px 16px 60px;\\n\\t\\t\\theight: 56px;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\tcursor: grab;\\n\\t\\t}\\n\\t}\\n\\n\\t& > .panel--content {\\n\\t\\tmargin: 0 16px 16px 16px;\\n\\t\\theight: 420px;\\n\\t\\t// We specifically do not want scrollbars inside widgets\\n\\t\\toverflow: hidden;\\n\\t}\\n\\n\\t// No need to extend height of widgets if only one column is shown\\n\\t@media only screen and (max-width: 709px) {\\n\\t\\t& > .panel--content {\\n\\t\\t\\theight: auto;\\n\\t\\t}\\n\\t}\\n}\\n\\n.footer {\\n\\ttext-align: center;\\n\\ttransition: bottom var(--animation-slow) ease-in-out;\\n\\tbottom: 0;\\n\\tpadding: 44px 0;\\n}\\n\\n.edit-panels {\\n\\tdisplay: inline-block;\\n\\tmargin:auto;\\n\\tbackground-position: 16px center;\\n\\tpadding: 12px 16px;\\n\\tpadding-left: 36px;\\n\\tborder-radius: var(--border-radius-pill);\\n\\tmax-width: 200px;\\n\\topacity: 1;\\n\\ttext-align: center;\\n}\\n\\n.edit-panels,\\n.statuses ::v-deep .action-item .action-item__menutoggle,\\n.statuses ::v-deep .action-item.action-item--open .action-item__menutoggle {\\n\\tbackground-color: var(--color-background-translucent);\\n\\t-webkit-backdrop-filter: var(--background-blur);\\n\\tbackdrop-filter: var(--background-blur);\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t}\\n}\\n\\n.modal__content {\\n\\tpadding: 32px 16px;\\n\\tmax-height: 70vh;\\n\\ttext-align: center;\\n\\toverflow: auto;\\n\\n\\tol {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tjustify-content: center;\\n\\t\\tlist-style-type: none;\\n\\t\\tpadding-bottom: 16px;\\n\\t}\\n\\tli {\\n\\t\\tlabel {\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tpadding: 48px 8px 16px 8px;\\n\\t\\t\\tmargin: 8px;\\n\\t\\t\\twidth: 160px;\\n\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\t\\tbackground-size: 24px;\\n\\t\\t\\tbackground-position: center 16px;\\n\\t\\t\\ttext-align: center;\\n\\n\\t\\t\\t&:hover {\\n\\t\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tinput:focus + label {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\t}\\n\\n\\th3 {\\n\\t\\tfont-weight: bold;\\n\\n\\t\\t&:not(:first-of-type) {\\n\\t\\t\\tmargin-top: 64px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Adjust design of 'Get more widgets' button\\n\\t.button {\\n\\t\\tdisplay: inline-block;\\n\\t\\tpadding: 10px 16px;\\n\\t\\tmargin: 0;\\n\\t}\\n\\n\\tp {\\n\\t\\tmax-width: 650px;\\n\\t\\tmargin: 0 auto;\\n\\n\\t\\ta:hover,\\n\\t\\ta:focus {\\n\\t\\t\\tborder-bottom: 2px solid var(--color-border);\\n\\t\\t}\\n\\t}\\n\\n\\t.credits--end {\\n\\t\\tpadding-bottom: 32px;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\n\\t\\ta {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n}\\n\\n.flip-list-move {\\n\\ttransition: transform var(--animation-slow);\\n}\\n\\n.statuses {\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\tjustify-content: center;\\n\\tflex-wrap: wrap;\\n\\tmargin-bottom: 36px;\\n\\n\\t& > div {\\n\\t\\tmargin: 8px;\\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, \".background-selector[data-v-e4c3a7ca]{display:flex;flex-wrap:wrap;justify-content:center}.background-selector .background[data-v-e4c3a7ca]{width:176px;height:96px;margin:8px;background-size:cover;background-position:center center;text-align:center;border-radius:var(--border-radius-large);border:2px solid var(--color-main-background);overflow:hidden}.background-selector .background.current[data-v-e4c3a7ca]{background-image:var(--color-background-dark)}.background-selector .background.filepicker[data-v-e4c3a7ca],.background-selector .background.default[data-v-e4c3a7ca],.background-selector .background.color[data-v-e4c3a7ca]{border-color:var(--color-border)}.background-selector .background.color[data-v-e4c3a7ca]{background-color:var(--color-primary);color:var(--color-primary-text)}.background-selector .background.active[data-v-e4c3a7ca],.background-selector .background[data-v-e4c3a7ca]:hover,.background-selector .background[data-v-e4c3a7ca]:focus{border:2px solid var(--color-primary)}.background-selector .background.active[data-v-e4c3a7ca]:not(.icon-loading):after{background-image:var(--icon-checkmark-fff);background-repeat:no-repeat;background-position:center;background-size:44px;content:\\\"\\\";display:block;height:100%}body.theme--dark .background-selector .background.active[data-v-e4c3a7ca]:not(.icon-loading):after{background-image:var(--icon-checkmark-000)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/dashboard/src/components/BackgroundSettings.vue\"],\"names\":[],\"mappings\":\"AA4IA,sCACC,YAAA,CACA,cAAA,CACA,sBAAA,CAEA,kDACC,WAAA,CACA,WAAA,CACA,UAAA,CACA,qBAAA,CACA,iCAAA,CACA,iBAAA,CACA,wCAAA,CACA,6CAAA,CACA,eAAA,CAEA,0DACC,6CAAA,CAGD,+KACC,gCAAA,CAGD,wDACC,qCAAA,CACA,+BAAA,CAGD,yKAGC,qCAAA,CAGD,kFACC,0CAAA,CACA,2BAAA,CACA,0BAAA,CACA,oBAAA,CACA,UAAA,CACA,aAAA,CACA,WAAA,CAEA,mGACC,0CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.background-selector {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tjustify-content: center;\\n\\n\\t.background {\\n\\t\\twidth: 176px;\\n\\t\\theight: 96px;\\n\\t\\tmargin: 8px;\\n\\t\\tbackground-size: cover;\\n\\t\\tbackground-position: center center;\\n\\t\\ttext-align: center;\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\toverflow: hidden;\\n\\n\\t\\t&.current {\\n\\t\\t\\tbackground-image: var(--color-background-dark);\\n\\t\\t}\\n\\n\\t\\t&.filepicker, &.default, &.color {\\n\\t\\t\\tborder-color: var(--color-border);\\n\\t\\t}\\n\\n\\t\\t&.color {\\n\\t\\t\\tbackground-color: var(--color-primary);\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t}\\n\\n\\t\\t&.active,\\n\\t\\t&:hover,\\n\\t\\t&:focus {\\n\\t\\t\\tborder: 2px solid var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&.active:not(.icon-loading):after {\\n\\t\\t\\tbackground-image: var(--icon-checkmark-fff);\\n\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t\\tbackground-position: center;\\n\\t\\t\\tbackground-size: 44px;\\n\\t\\t\\tcontent: '';\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\theight: 100%;\\n\\n\\t\\t\\tbody.theme--dark & {\\n\\t\\t\\t\\tbackground-image: var(--icon-checkmark-000);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 773;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t773: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(63308); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","data","isMobile","this","_isMobile","beforeMount","window","addEventListener","_onResize","beforeDestroy","removeEventListener","methods","document","documentElement","clientWidth","url","generateFilePath","background","time","themingDefaultBackground","generateUrl","OCA","Theming","cacheBuster","Accessibility","theme","prefixWithBaseUrl","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_h","$createElement","_c","_self","staticClass","class","active","attrs","on","pickFile","_v","_s","t","loading","setDefault","pickColor","_l","shippedBackground","directives","name","rawName","value","details","expression","key","style","preview","$event","setShipped","greeting","text","status","ref","refInFor","_b","saveLayout","model","callback","$$v","layout","swapThreshold","delay","delayOnTouchOnly","touchStartThreshold","panelId","panels","id","iconClass","title","mounted","showModal","type","indexOf","_k","keyCode","apply","arguments","closeModal","domProps","isStatusActive","updateStatusCheckbox","target","checked","statusInfo","icon","panel","isActive","updateCheckbox","appStoreUrl","_e","updateBackground","__webpack_nonce__","btoa","getRequestToken","Vue","VTooltip","Files","Object","assign","App","fileList","filesClient","OC","getClient","Instance","$mount","Dashboard","register","app","registerStatus","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","amdD","Error","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"dashboard-main.js?v=fbe0e08eb35a82e8b4cf","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/dashboard/src/mixins/isMobile.js","webpack:///nextcloud/apps/dashboard/src/helpers/prefixWithBaseUrl.js","webpack:///nextcloud/apps/dashboard/src/helpers/getBackgroundUrl.js","webpack:///nextcloud/apps/dashboard/src/components/BackgroundSettings.vue","webpack:///nextcloud/apps/dashboard/src/components/BackgroundSettings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/dashboard/src/components/BackgroundSettings.vue?8d16","webpack://nextcloud/./apps/dashboard/src/components/BackgroundSettings.vue?20a7","webpack:///nextcloud/apps/dashboard/src/components/BackgroundSettings.vue?vue&type=template&id=e4c3a7ca&scoped=true&","webpack:///nextcloud/apps/dashboard/src/App.vue","webpack:///nextcloud/apps/dashboard/src/App.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/dashboard/src/App.vue?989e","webpack://nextcloud/./apps/dashboard/src/App.vue?d9a5","webpack:///nextcloud/apps/dashboard/src/App.vue?vue&type=template&id=2c8fd7c4&scoped=true&","webpack:///nextcloud/apps/dashboard/src/main.js","webpack:///nextcloud/apps/dashboard/src/App.vue?vue&type=style&index=0&id=2c8fd7c4&lang=scss&scoped=true&","webpack:///nextcloud/apps/dashboard/src/components/BackgroundSettings.vue?vue&type=style&index=0&id=e4c3a7ca&scoped=true&lang=scss&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tisMobile: this._isMobile(),\n\t\t}\n\t},\n\tbeforeMount() {\n\t\twindow.addEventListener('resize', this._onResize)\n\t},\n\tbeforeDestroy() {\n\t\twindow.removeEventListener('resize', this._onResize)\n\t},\n\tmethods: {\n\t\t_onResize() {\n\t\t\t// Update mobile mode\n\t\t\tthis.isMobile = this._isMobile()\n\t\t},\n\t\t_isMobile() {\n\t\t\t// check if content width is under 768px\n\t\t\treturn document.documentElement.clientWidth < 768\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateFilePath } from '@nextcloud/router'\n\nexport default (url) => generateFilePath('dashboard', '', 'img/') + url\n","/**\n * @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n *\n * @author Avior <florian.bouillon@delta-wings.net>\n * @author Julien Veyssier <eneiluj@posteo.net>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateUrl } from '@nextcloud/router'\nimport prefixWithBaseUrl from './prefixWithBaseUrl'\n\nexport default (background, time = 0, themingDefaultBackground = '') => {\n\tif (background === 'default') {\n\t\tif (themingDefaultBackground && themingDefaultBackground !== 'backgroundColor') {\n\t\t\treturn generateUrl('/apps/theming/image/background') + '?v=' + window.OCA.Theming.cacheBuster\n\t\t}\n\t\tif (window.OCA.Accessibility && window.OCA.Accessibility.theme === 'dark') {\n\t\t\treturn prefixWithBaseUrl('eduardo-neves-pedra-azul.jpg')\n\t\t}\n\t\treturn prefixWithBaseUrl('kamil-porembinski-clouds.jpg')\n\t} else if (background === 'custom') {\n\t\treturn generateUrl('/apps/dashboard/background') + '?v=' + time\n\t}\n\treturn prefixWithBaseUrl(background)\n}\n","<!--\n - @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\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<div class=\"background-selector\">\n\t\t<button class=\"background filepicker\"\n\t\t\t:class=\"{ active: background === 'custom' }\"\n\t\t\ttabindex=\"0\"\n\t\t\t@click=\"pickFile\">\n\t\t\t{{ t('dashboard', 'Pick from Files') }}\n\t\t</button>\n\t\t<button class=\"background default\"\n\t\t\ttabindex=\"0\"\n\t\t\t:class=\"{ 'icon-loading': loading === 'default', active: background === 'default' }\"\n\t\t\t@click=\"setDefault\">\n\t\t\t{{ t('dashboard', 'Default images') }}\n\t\t</button>\n\t\t<button class=\"background color\"\n\t\t\t:class=\"{ active: background === 'custom' }\"\n\t\t\ttabindex=\"0\"\n\t\t\t@click=\"pickColor\">\n\t\t\t{{ t('dashboard', 'Plain background') }}\n\t\t</button>\n\t\t<button v-for=\"shippedBackground in shippedBackgrounds\"\n\t\t\t:key=\"shippedBackground.name\"\n\t\t\tv-tooltip=\"shippedBackground.details.attribution\"\n\t\t\t:class=\"{ 'icon-loading': loading === shippedBackground.name, active: background === shippedBackground.name }\"\n\t\t\ttabindex=\"0\"\n\t\t\tclass=\"background\"\n\t\t\t:style=\"{ 'background-image': 'url(' + shippedBackground.preview + ')' }\"\n\t\t\t@click=\"setShipped(shippedBackground.name)\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport getBackgroundUrl from './../helpers/getBackgroundUrl'\nimport prefixWithBaseUrl from './../helpers/prefixWithBaseUrl'\nconst shippedBackgroundList = loadState('dashboard', 'shippedBackgrounds')\n\nexport default {\n\tname: 'BackgroundSettings',\n\tprops: {\n\t\tbackground: {\n\t\t\ttype: String,\n\t\t\tdefault: 'default',\n\t\t},\n\t\tthemingDefaultBackground: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tbackgroundImage: generateUrl('/apps/dashboard/background') + '?v=' + Date.now(),\n\t\t\tloading: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tshippedBackgrounds() {\n\t\t\treturn Object.keys(shippedBackgroundList).map((item) => {\n\t\t\t\treturn {\n\t\t\t\t\tname: item,\n\t\t\t\t\turl: prefixWithBaseUrl(item),\n\t\t\t\t\tpreview: prefixWithBaseUrl('previews/' + item),\n\t\t\t\t\tdetails: shippedBackgroundList[item],\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\tasync update(data) {\n\t\t\tconst background = data.type === 'custom' || data.type === 'default' ? data.type : data.value\n\t\t\tthis.backgroundImage = getBackgroundUrl(background, data.version, this.themingDefaultBackground)\n\t\t\tif (data.type === 'color' || (data.type === 'default' && this.themingDefaultBackground === 'backgroundColor')) {\n\t\t\t\tthis.$emit('update:background', data)\n\t\t\t\tthis.loading = false\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst image = new Image()\n\t\t\timage.onload = () => {\n\t\t\t\tthis.$emit('update:background', data)\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t\timage.src = this.backgroundImage\n\t\t},\n\t\tasync setDefault() {\n\t\t\tthis.loading = 'default'\n\t\t\tconst result = await axios.post(generateUrl('/apps/dashboard/background/default'))\n\t\t\tthis.update(result.data)\n\t\t},\n\t\tasync setShipped(shipped) {\n\t\t\tthis.loading = shipped\n\t\t\tconst result = await axios.post(generateUrl('/apps/dashboard/background/shipped'), { value: shipped })\n\t\t\tthis.update(result.data)\n\t\t},\n\t\tasync setFile(path) {\n\t\t\tthis.loading = 'custom'\n\t\t\tconst result = await axios.post(generateUrl('/apps/dashboard/background/custom'), { value: path })\n\t\t\tthis.update(result.data)\n\t\t},\n\t\tasync pickColor() {\n\t\t\tthis.loading = 'color'\n\t\t\tconst color = OCA && OCA.Theming ? OCA.Theming.color : '#0082c9'\n\t\t\tconst result = await axios.post(generateUrl('/apps/dashboard/background/color'), { value: color })\n\t\t\tthis.update(result.data)\n\t\t},\n\t\tpickFile() {\n\t\t\twindow.OC.dialogs.filepicker(t('dashboard', 'Insert from {productName}', { productName: OC.theme.name }), (path, type) => {\n\t\t\t\tif (type === OC.dialogs.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\t\tthis.setFile(path)\n\t\t\t\t}\n\t\t\t}, false, ['image/png', 'image/gif', 'image/jpeg', 'image/svg'], true, OC.dialogs.FILEPICKER_TYPE_CHOOSE)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.background-selector {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tjustify-content: center;\n\n\t.background {\n\t\twidth: 176px;\n\t\theight: 96px;\n\t\tmargin: 8px;\n\t\tbackground-size: cover;\n\t\tbackground-position: center center;\n\t\ttext-align: center;\n\t\tborder-radius: var(--border-radius-large);\n\t\tborder: 2px solid var(--color-main-background);\n\t\toverflow: hidden;\n\n\t\t&.current {\n\t\t\tbackground-image: var(--color-background-dark);\n\t\t}\n\n\t\t&.filepicker, &.default, &.color {\n\t\t\tborder-color: var(--color-border);\n\t\t}\n\n\t\t&.color {\n\t\t\tbackground-color: var(--color-primary);\n\t\t\tcolor: var(--color-primary-text);\n\t\t}\n\n\t\t&.active,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\tborder: 2px solid var(--color-primary);\n\t\t}\n\n\t\t&.active:not(.icon-loading):after {\n\t\t\tbackground-image: var(--icon-checkmark-fff);\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-position: center;\n\t\t\tbackground-size: 44px;\n\t\t\tcontent: '';\n\t\t\tdisplay: block;\n\t\t\theight: 100%;\n\n\t\t\tbody.theme--dark & {\n\t\t\t\tbackground-image: var(--icon-checkmark-000);\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!./BackgroundSettings.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!./BackgroundSettings.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!./BackgroundSettings.vue?vue&type=style&index=0&id=e4c3a7ca&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BackgroundSettings.vue?vue&type=style&index=0&id=e4c3a7ca&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./BackgroundSettings.vue?vue&type=template&id=e4c3a7ca&scoped=true&\"\nimport script from \"./BackgroundSettings.vue?vue&type=script&lang=js&\"\nexport * from \"./BackgroundSettings.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BackgroundSettings.vue?vue&type=style&index=0&id=e4c3a7ca&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e4c3a7ca\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"background-selector\"},[_c('button',{staticClass:\"background filepicker\",class:{ active: _vm.background === 'custom' },attrs:{\"tabindex\":\"0\"},on:{\"click\":_vm.pickFile}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('dashboard', 'Pick from Files'))+\"\\n\\t\")]),_vm._v(\" \"),_c('button',{staticClass:\"background default\",class:{ 'icon-loading': _vm.loading === 'default', active: _vm.background === 'default' },attrs:{\"tabindex\":\"0\"},on:{\"click\":_vm.setDefault}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('dashboard', 'Default images'))+\"\\n\\t\")]),_vm._v(\" \"),_c('button',{staticClass:\"background color\",class:{ active: _vm.background === 'custom' },attrs:{\"tabindex\":\"0\"},on:{\"click\":_vm.pickColor}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('dashboard', 'Plain background'))+\"\\n\\t\")]),_vm._v(\" \"),_vm._l((_vm.shippedBackgrounds),function(shippedBackground){return _c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(shippedBackground.details.attribution),expression:\"shippedBackground.details.attribution\"}],key:shippedBackground.name,staticClass:\"background\",class:{ 'icon-loading': _vm.loading === shippedBackground.name, active: _vm.background === shippedBackground.name },style:({ 'background-image': 'url(' + shippedBackground.preview + ')' }),attrs:{\"tabindex\":\"0\"},on:{\"click\":function($event){return _vm.setShipped(shippedBackground.name)}}})})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div id=\"app-dashboard\" :style=\"backgroundStyle\">\n\t\t<h2>{{ greeting.text }}</h2>\n\t\t<ul class=\"statuses\">\n\t\t\t<div v-for=\"status in sortedRegisteredStatus\"\n\t\t\t\t:id=\"'status-' + status\"\n\t\t\t\t:key=\"status\">\n\t\t\t\t<div :ref=\"'status-' + status\" />\n\t\t\t</div>\n\t\t</ul>\n\n\t\t<Draggable v-model=\"layout\"\n\t\t\tclass=\"panels\"\n\t\t\tv-bind=\"{swapThreshold: 0.30, delay: 500, delayOnTouchOnly: true, touchStartThreshold: 3}\"\n\t\t\thandle=\".panel--header\"\n\t\t\t@end=\"saveLayout\">\n\t\t\t<div v-for=\"panelId in layout\" :key=\"panels[panelId].id\" class=\"panel\">\n\t\t\t\t<div class=\"panel--header\">\n\t\t\t\t\t<h2 :class=\"panels[panelId].iconClass\">\n\t\t\t\t\t\t{{ panels[panelId].title }}\n\t\t\t\t\t</h2>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"panel--content\" :class=\"{ loading: !panels[panelId].mounted }\">\n\t\t\t\t\t<div :ref=\"panels[panelId].id\" :data-id=\"panels[panelId].id\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Draggable>\n\n\t\t<div class=\"footer\">\n\t\t\t<a class=\"edit-panels icon-rename\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t@click=\"showModal\"\n\t\t\t\t@keyup.enter=\"showModal\"\n\t\t\t\t@keyup.space=\"showModal\">{{ t('dashboard', 'Customize') }}</a>\n\t\t</div>\n\n\t\t<Modal v-if=\"modal\" size=\"normal\" @close=\"closeModal\">\n\t\t\t<div class=\"modal__content\">\n\t\t\t\t<h3>{{ t('dashboard', 'Edit widgets') }}</h3>\n\t\t\t\t<ol class=\"panels\">\n\t\t\t\t\t<li v-for=\"status in sortedAllStatuses\" :key=\"status\">\n\t\t\t\t\t\t<input :id=\"'status-checkbox-' + status\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\"\n\t\t\t\t\t\t\t:checked=\"isStatusActive(status)\"\n\t\t\t\t\t\t\t@input=\"updateStatusCheckbox(status, $event.target.checked)\">\n\t\t\t\t\t\t<label :for=\"'status-checkbox-' + status\" :class=\"statusInfo[status].icon\">\n\t\t\t\t\t\t\t{{ statusInfo[status].text }}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t</li>\n\t\t\t\t</ol>\n\t\t\t\t<Draggable v-model=\"layout\"\n\t\t\t\t\tclass=\"panels\"\n\t\t\t\t\ttag=\"ol\"\n\t\t\t\t\tv-bind=\"{swapThreshold: 0.30, delay: 500, delayOnTouchOnly: true, touchStartThreshold: 3}\"\n\t\t\t\t\thandle=\".draggable\"\n\t\t\t\t\t@end=\"saveLayout\">\n\t\t\t\t\t<li v-for=\"panel in sortedPanels\" :key=\"panel.id\">\n\t\t\t\t\t\t<input :id=\"'panel-checkbox-' + panel.id\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\"\n\t\t\t\t\t\t\t:checked=\"isActive(panel)\"\n\t\t\t\t\t\t\t@input=\"updateCheckbox(panel, $event.target.checked)\">\n\t\t\t\t\t\t<label :for=\"'panel-checkbox-' + panel.id\" :class=\"isActive(panel) ? 'draggable ' + panel.iconClass : panel.iconClass\">\n\t\t\t\t\t\t\t{{ panel.title }}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t</li>\n\t\t\t\t</Draggable>\n\n\t\t\t\t<a v-if=\"isAdmin\" :href=\"appStoreUrl\" class=\"button\">{{ t('dashboard', 'Get more widgets from the App Store') }}</a>\n\n\t\t\t\t<h3>{{ t('dashboard', 'Change background image') }}</h3>\n\t\t\t\t<BackgroundSettings :background=\"background\"\n\t\t\t\t\t:theming-default-background=\"themingDefaultBackground\"\n\t\t\t\t\t@update:background=\"updateBackground\" />\n\n\t\t\t\t<h3>{{ t('dashboard', 'Weather service') }}</h3>\n\t\t\t\t<p>\n\t\t\t\t\t{{ t('dashboard', 'For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information.') }}\n\t\t\t\t</p>\n\t\t\t\t<p class=\"credits--end\">\n\t\t\t\t\t<a href=\"https://api.met.no/doc/TermsOfService\" target=\"_blank\" rel=\"noopener\">{{ t('dashboard', 'Weather data from Met.no') }}</a>,\n\t\t\t\t\t<a href=\"https://wiki.osmfoundation.org/wiki/Privacy_Policy\" target=\"_blank\" rel=\"noopener\">{{ t('dashboard', 'geocoding with Nominatim') }}</a>,\n\t\t\t\t\t<a href=\"https://www.opentopodata.org/#public-api\" target=\"_blank\" rel=\"noopener\">{{ t('dashboard', 'elevation data from OpenTopoData') }}</a>.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</Modal>\n\t</div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport Modal from '@nextcloud/vue/dist/Components/Modal'\nimport Draggable from 'vuedraggable'\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport isMobile from './mixins/isMobile'\nimport BackgroundSettings from './components/BackgroundSettings'\nimport getBackgroundUrl from './helpers/getBackgroundUrl'\n\nconst panels = loadState('dashboard', 'panels')\nconst firstRun = loadState('dashboard', 'firstRun')\nconst background = loadState('dashboard', 'background')\nconst themingDefaultBackground = loadState('dashboard', 'themingDefaultBackground')\nconst version = loadState('dashboard', 'version')\nconst shippedBackgroundList = loadState('dashboard', 'shippedBackgrounds')\nconst statusInfo = {\n\tweather: {\n\t\ttext: t('dashboard', 'Weather'),\n\t\ticon: 'icon-weather-status',\n\t},\n\tstatus: {\n\t\ttext: t('dashboard', 'Status'),\n\t\ticon: 'icon-user-status-online',\n\t},\n}\n\nexport default {\n\tname: 'App',\n\tcomponents: {\n\t\tModal,\n\t\tDraggable,\n\t\tBackgroundSettings,\n\t},\n\tmixins: [\n\t\tisMobile,\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tisAdmin: getCurrentUser().isAdmin,\n\t\t\ttimer: new Date(),\n\t\t\tregisteredStatus: [],\n\t\t\tcallbacks: {},\n\t\t\tcallbacksStatus: {},\n\t\t\tallCallbacksStatus: {},\n\t\t\tstatusInfo,\n\t\t\tenabledStatuses: loadState('dashboard', 'statuses'),\n\t\t\tpanels,\n\t\t\tfirstRun,\n\t\t\tdisplayName: getCurrentUser()?.displayName,\n\t\t\tuid: getCurrentUser()?.uid,\n\t\t\tlayout: loadState('dashboard', 'layout').filter((panelId) => panels[panelId]),\n\t\t\tmodal: false,\n\t\t\tappStoreUrl: generateUrl('/settings/apps/dashboard'),\n\t\t\tstatuses: {},\n\t\t\tbackground,\n\t\t\tthemingDefaultBackground,\n\t\t\tversion,\n\t\t}\n\t},\n\tcomputed: {\n\t\tbackgroundImage() {\n\t\t\treturn getBackgroundUrl(this.background, this.version, this.themingDefaultBackground)\n\t\t},\n\t\tbackgroundStyle() {\n\t\t\tif ((this.background === 'default' && this.themingDefaultBackground === 'backgroundColor')\n\t\t\t\t|| this.background.match(/#[0-9A-Fa-f]{6}/g)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tbackgroundImage: `url(${this.backgroundImage})`,\n\t\t\t}\n\t\t},\n\t\tgreeting() {\n\t\t\tconst time = this.timer.getHours()\n\n\t\t\t// Determine part of the day\n\t\t\tlet partOfDay\n\t\t\tif (time >= 22 || time < 5) {\n\t\t\t\tpartOfDay = 'night'\n\t\t\t} else if (time >= 18) {\n\t\t\t\tpartOfDay = 'evening'\n\t\t\t} else if (time >= 12) {\n\t\t\t\tpartOfDay = 'afternoon'\n\t\t\t} else {\n\t\t\t\tpartOfDay = 'morning'\n\t\t\t}\n\n\t\t\t// Define the greetings\n\t\t\tconst good = {\n\t\t\t\tmorning: {\n\t\t\t\t\tgeneric: t('dashboard', 'Good morning'),\n\t\t\t\t\twithName: t('dashboard', 'Good morning, {name}', { name: this.displayName }, undefined, { escape: false }),\n\t\t\t\t},\n\t\t\t\tafternoon: {\n\t\t\t\t\tgeneric: t('dashboard', 'Good afternoon'),\n\t\t\t\t\twithName: t('dashboard', 'Good afternoon, {name}', { name: this.displayName }, undefined, { escape: false }),\n\t\t\t\t},\n\t\t\t\tevening: {\n\t\t\t\t\tgeneric: t('dashboard', 'Good evening'),\n\t\t\t\t\twithName: t('dashboard', 'Good evening, {name}', { name: this.displayName }, undefined, { escape: false }),\n\t\t\t\t},\n\t\t\t\tnight: {\n\t\t\t\t\t// Don't use \"Good night\" as it's not a greeting\n\t\t\t\t\tgeneric: t('dashboard', 'Hello'),\n\t\t\t\t\twithName: t('dashboard', 'Hello, {name}', { name: this.displayName }, undefined, { escape: false }),\n\t\t\t\t},\n\t\t\t}\n\n\t\t\t// Figure out which greeting to show\n\t\t\tconst shouldShowName = this.displayName && this.uid !== this.displayName\n\t\t\treturn { text: shouldShowName ? good[partOfDay].withName : good[partOfDay].generic }\n\t\t},\n\t\tisActive() {\n\t\t\treturn (panel) => this.layout.indexOf(panel.id) > -1\n\t\t},\n\t\tisStatusActive() {\n\t\t\treturn (status) => !(status in this.enabledStatuses) || this.enabledStatuses[status]\n\t\t},\n\t\tsortedAllStatuses() {\n\t\t\treturn Object.keys(this.allCallbacksStatus).slice().sort(this.sortStatuses)\n\t\t},\n\t\tsortedPanels() {\n\t\t\treturn Object.values(this.panels).sort((a, b) => {\n\t\t\t\tconst indexA = this.layout.indexOf(a.id)\n\t\t\t\tconst indexB = this.layout.indexOf(b.id)\n\t\t\t\tif (indexA === -1 || indexB === -1) {\n\t\t\t\t\treturn indexB - indexA || a.id - b.id\n\t\t\t\t}\n\t\t\t\treturn indexA - indexB || a.id - b.id\n\t\t\t})\n\t\t},\n\t\tsortedRegisteredStatus() {\n\t\t\treturn this.registeredStatus.slice().sort(this.sortStatuses)\n\t\t},\n\t},\n\twatch: {\n\t\tcallbacks() {\n\t\t\tthis.rerenderPanels()\n\t\t},\n\t\tcallbacksStatus() {\n\t\t\tfor (const app in this.callbacksStatus) {\n\t\t\t\tconst element = this.$refs['status-' + app]\n\t\t\t\tif (this.statuses[app] && this.statuses[app].mounted) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.callbacksStatus[app](element[0])\n\t\t\t\t\tVue.set(this.statuses, app, { mounted: true })\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('Failed to register panel in the frontend as no backend data was provided for ' + app)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.updateGlobalStyles()\n\t\tthis.updateSkipLink()\n\t\twindow.addEventListener('scroll', this.handleScroll)\n\n\t\tsetInterval(() => {\n\t\t\tthis.timer = new Date()\n\t\t}, 30000)\n\n\t\tif (this.firstRun) {\n\t\t\twindow.addEventListener('scroll', this.disableFirstrunHint)\n\t\t}\n\t},\n\tdestroyed() {\n\t\twindow.removeEventListener('scroll', this.handleScroll)\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Method to register panels that will be called by the integrating apps\n\t\t *\n\t\t * @param {string} app The unique app id for the widget\n\t\t * @param {Function} callback The callback function to register a panel which gets the DOM element passed as parameter\n\t\t */\n\t\tregister(app, callback) {\n\t\t\tVue.set(this.callbacks, app, callback)\n\t\t},\n\t\tregisterStatus(app, callback) {\n\t\t\t// always save callbacks in case user enables the status later\n\t\t\tVue.set(this.allCallbacksStatus, app, callback)\n\t\t\t// register only if status is enabled or missing from config\n\t\t\tif (this.isStatusActive(app)) {\n\t\t\t\tthis.registeredStatus.push(app)\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tVue.set(this.callbacksStatus, app, callback)\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\trerenderPanels() {\n\t\t\tfor (const app in this.callbacks) {\n\t\t\t\tconst element = this.$refs[app]\n\t\t\t\tif (this.layout.indexOf(app) === -1) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (this.panels[app] && this.panels[app].mounted) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.callbacks[app](element[0], {\n\t\t\t\t\t\twidget: this.panels[app],\n\t\t\t\t\t})\n\t\t\t\t\tVue.set(this.panels[app], 'mounted', true)\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('Failed to register panel in the frontend as no backend data was provided for ' + app)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsaveLayout() {\n\t\t\taxios.post(generateUrl('/apps/dashboard/layout'), {\n\t\t\t\tlayout: this.layout.join(','),\n\t\t\t})\n\t\t},\n\t\tsaveStatuses() {\n\t\t\taxios.post(generateUrl('/apps/dashboard/statuses'), {\n\t\t\t\tstatuses: JSON.stringify(this.enabledStatuses),\n\t\t\t})\n\t\t},\n\t\tshowModal() {\n\t\t\tthis.modal = true\n\t\t\tthis.firstRun = false\n\t\t},\n\t\tcloseModal() {\n\t\t\tthis.modal = false\n\t\t},\n\t\tupdateCheckbox(panel, currentValue) {\n\t\t\tconst index = this.layout.indexOf(panel.id)\n\t\t\tif (!currentValue && index > -1) {\n\t\t\t\tthis.layout.splice(index, 1)\n\n\t\t\t} else {\n\t\t\t\tthis.layout.push(panel.id)\n\t\t\t}\n\t\t\tVue.set(this.panels[panel.id], 'mounted', false)\n\t\t\tthis.saveLayout()\n\t\t\tthis.$nextTick(() => this.rerenderPanels())\n\t\t},\n\t\tdisableFirstrunHint() {\n\t\t\twindow.removeEventListener('scroll', this.disableFirstrunHint)\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.firstRun = false\n\t\t\t}, 1000)\n\t\t},\n\t\tupdateBackground(data) {\n\t\t\tthis.background = data.type === 'custom' || data.type === 'default' ? data.type : data.value\n\t\t\tthis.version = data.version\n\t\t\tthis.updateGlobalStyles()\n\t\t},\n\t\tupdateGlobalStyles() {\n\t\t\tdocument.body.setAttribute('data-dashboard-background', this.background)\n\t\t\tif (window.OCA.Theming.inverted) {\n\t\t\t\tdocument.body.classList.add('dashboard--inverted')\n\t\t\t}\n\n\t\t\tconst shippedBackgroundTheme = shippedBackgroundList[this.background] ? shippedBackgroundList[this.background].theming : 'light'\n\t\t\tif (shippedBackgroundTheme === 'dark') {\n\t\t\t\tdocument.body.classList.add('dashboard--dark')\n\t\t\t} else {\n\t\t\t\tdocument.body.classList.remove('dashboard--dark')\n\t\t\t}\n\t\t},\n\t\tupdateSkipLink() {\n\t\t\t// Make sure \"Skip to main content\" link points to the app content\n\t\t\tdocument.getElementsByClassName('skip-navigation')[0].setAttribute('href', '#app-dashboard')\n\t\t},\n\t\tupdateStatusCheckbox(app, checked) {\n\t\t\tif (checked) {\n\t\t\t\tthis.enableStatus(app)\n\t\t\t} else {\n\t\t\t\tthis.disableStatus(app)\n\t\t\t}\n\t\t},\n\t\tenableStatus(app) {\n\t\t\tthis.enabledStatuses[app] = true\n\t\t\tthis.registerStatus(app, this.allCallbacksStatus[app])\n\t\t\tthis.saveStatuses()\n\t\t},\n\t\tdisableStatus(app) {\n\t\t\tthis.enabledStatuses[app] = false\n\t\t\tconst i = this.registeredStatus.findIndex((s) => s === app)\n\t\t\tif (i !== -1) {\n\t\t\t\tthis.registeredStatus.splice(i, 1)\n\t\t\t\tVue.set(this.statuses, app, { mounted: false })\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tVue.delete(this.callbacksStatus, app)\n\t\t\t\t})\n\t\t\t}\n\t\t\tthis.saveStatuses()\n\t\t},\n\t\tsortStatuses(a, b) {\n\t\t\tconst al = a.toLowerCase()\n\t\t\tconst bl = b.toLowerCase()\n\t\t\treturn al > bl\n\t\t\t\t? 1\n\t\t\t\t: al < bl\n\t\t\t\t\t? -1\n\t\t\t\t\t: 0\n\t\t},\n\t\thandleScroll() {\n\t\t\tif (window.scrollY > 70) {\n\t\t\t\tdocument.body.classList.add('dashboard--scrolled')\n\t\t\t} else {\n\t\t\t\tdocument.body.classList.remove('dashboard--scrolled')\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n#app-dashboard {\n\twidth: 100%;\n\tmin-height: 100vh;\n\tbackground-size: cover;\n\tbackground-position: center center;\n\tbackground-repeat: no-repeat;\n\tbackground-attachment: fixed;\n\tbackground-color: var(--color-primary);\n\t--color-background-translucent: rgba(255, 255, 255, 0.8);\n\t--background-blur: blur(10px);\n\n\t#body-user.theme--dark & {\n\t\tbackground-color: var(--color-main-background);\n\t\t--color-background-translucent: rgba(24, 24, 24, 0.8);\n\t}\n\n\t#body-user.theme--highcontrast & {\n\t\tbackground-color: var(--color-main-background);\n\t\t--color-background-translucent: var(--color-main-background);\n\t}\n\n\t> h2 {\n\t\tcolor: var(--color-primary-text);\n\t\ttext-align: center;\n\t\tfont-size: 32px;\n\t\tline-height: 130%;\n\t\tpadding: 10vh 16px 0px;\n\t}\n}\n\n.panels {\n\twidth: auto;\n\tmargin: auto;\n\tmax-width: 1500px;\n\tdisplay: flex;\n\tjustify-content: center;\n\tflex-direction: row;\n\talign-items: flex-start;\n\tflex-wrap: wrap;\n}\n\n.panel, .panels > div {\n\twidth: 320px;\n\tmax-width: 100%;\n\tmargin: 16px;\n\tbackground-color: var(--color-background-translucent);\n\t-webkit-backdrop-filter: var(--background-blur);\n\tbackdrop-filter: var(--background-blur);\n\tborder-radius: var(--border-radius-large);\n\n\t#body-user.theme--highcontrast & {\n\t\tborder: 2px solid var(--color-border);\n\t}\n\n\t&.sortable-ghost {\n\t\t opacity: 0.1;\n\t}\n\n\t& > .panel--header {\n\t\tdisplay: flex;\n\t\tz-index: 1;\n\t\ttop: 50px;\n\t\tpadding: 16px;\n\t\tcursor: grab;\n\n\t\t&, ::v-deep * {\n\t\t\t-webkit-touch-callout: none;\n\t\t\t-webkit-user-select: none;\n\t\t\t-khtml-user-select: none;\n\t\t\t-moz-user-select: none;\n\t\t\t-ms-user-select: none;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&:active {\n\t\t\tcursor: grabbing;\n\t\t}\n\n\t\ta {\n\t\t\tflex-grow: 1;\n\t\t}\n\n\t\t> h2 {\n\t\t\tdisplay: block;\n\t\t\tflex-grow: 1;\n\t\t\tmargin: 0;\n\t\t\tfont-size: 20px;\n\t\t\tline-height: 24px;\n\t\t\tfont-weight: bold;\n\t\t\tbackground-size: 32px;\n\t\t\tbackground-position: 14px 12px;\n\t\t\tpadding: 16px 8px 16px 60px;\n\t\t\theight: 56px;\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\tcursor: grab;\n\t\t}\n\t}\n\n\t& > .panel--content {\n\t\tmargin: 0 16px 16px 16px;\n\t\theight: 420px;\n\t\t// We specifically do not want scrollbars inside widgets\n\t\toverflow: hidden;\n\t}\n\n\t// No need to extend height of widgets if only one column is shown\n\t@media only screen and (max-width: 709px) {\n\t\t& > .panel--content {\n\t\t\theight: auto;\n\t\t}\n\t}\n}\n\n.footer {\n\ttext-align: center;\n\ttransition: bottom var(--animation-slow) ease-in-out;\n\tbottom: 0;\n\tpadding: 44px 0;\n}\n\n.edit-panels {\n\tdisplay: inline-block;\n\tmargin:auto;\n\tbackground-position: 16px center;\n\tpadding: 12px 16px;\n\tpadding-left: 36px;\n\tborder-radius: var(--border-radius-pill);\n\tmax-width: 200px;\n\topacity: 1;\n\ttext-align: center;\n}\n\n.edit-panels,\n.statuses ::v-deep .action-item .action-item__menutoggle,\n.statuses ::v-deep .action-item.action-item--open .action-item__menutoggle {\n\tbackground-color: var(--color-background-translucent);\n\t-webkit-backdrop-filter: var(--background-blur);\n\tbackdrop-filter: var(--background-blur);\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n}\n\n.modal__content {\n\tpadding: 32px 16px;\n\ttext-align: center;\n\n\tol {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tjustify-content: center;\n\t\tlist-style-type: none;\n\t\tpadding-bottom: 16px;\n\t}\n\tli {\n\t\tlabel {\n\t\t\tdisplay: block;\n\t\t\tpadding: 48px 8px 16px 8px;\n\t\t\tmargin: 8px;\n\t\t\twidth: 160px;\n\t\t\tbackground-color: var(--color-background-hover);\n\t\t\tborder: 2px solid var(--color-main-background);\n\t\t\tborder-radius: var(--border-radius-large);\n\t\t\tbackground-size: 24px;\n\t\t\tbackground-position: center 16px;\n\t\t\ttext-align: center;\n\n\t\t\t&:hover {\n\t\t\t\tborder-color: var(--color-primary);\n\t\t\t}\n\t\t}\n\n\t\tinput:focus + label {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\t}\n\n\th3 {\n\t\tfont-weight: bold;\n\n\t\t&:not(:first-of-type) {\n\t\t\tmargin-top: 64px;\n\t\t}\n\t}\n\n\t// Adjust design of 'Get more widgets' button\n\t.button {\n\t\tdisplay: inline-block;\n\t\tpadding: 10px 16px;\n\t\tmargin: 0;\n\t}\n\n\tp {\n\t\tmax-width: 650px;\n\t\tmargin: 0 auto;\n\n\t\ta:hover,\n\t\ta:focus {\n\t\t\tborder-bottom: 2px solid var(--color-border);\n\t\t}\n\t}\n\n\t.credits--end {\n\t\tpadding-bottom: 32px;\n\t\tcolor: var(--color-text-maxcontrast);\n\n\t\ta {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n\n.flip-list-move {\n\ttransition: transform var(--animation-slow);\n}\n\n.statuses {\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: center;\n\tflex-wrap: wrap;\n\tmargin-bottom: 36px;\n\n\t& > div {\n\t\tmargin: 8px;\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!./App.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!./App.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!./App.vue?vue&type=style&index=0&id=2c8fd7c4&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!./App.vue?vue&type=style&index=0&id=2c8fd7c4&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=2c8fd7c4&scoped=true&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=2c8fd7c4&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 \"2c8fd7c4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{style:(_vm.backgroundStyle),attrs:{\"id\":\"app-dashboard\"}},[_c('h2',[_vm._v(_vm._s(_vm.greeting.text))]),_vm._v(\" \"),_c('ul',{staticClass:\"statuses\"},_vm._l((_vm.sortedRegisteredStatus),function(status){return _c('div',{key:status,attrs:{\"id\":'status-' + status}},[_c('div',{ref:'status-' + status,refInFor:true})])}),0),_vm._v(\" \"),_c('Draggable',_vm._b({staticClass:\"panels\",attrs:{\"handle\":\".panel--header\"},on:{\"end\":_vm.saveLayout},model:{value:(_vm.layout),callback:function ($$v) {_vm.layout=$$v},expression:\"layout\"}},'Draggable',{swapThreshold: 0.30, delay: 500, delayOnTouchOnly: true, touchStartThreshold: 3},false),_vm._l((_vm.layout),function(panelId){return _c('div',{key:_vm.panels[panelId].id,staticClass:\"panel\"},[_c('div',{staticClass:\"panel--header\"},[_c('h2',{class:_vm.panels[panelId].iconClass},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.panels[panelId].title)+\"\\n\\t\\t\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"panel--content\",class:{ loading: !_vm.panels[panelId].mounted }},[_c('div',{ref:_vm.panels[panelId].id,refInFor:true,attrs:{\"data-id\":_vm.panels[panelId].id}})])])}),0),_vm._v(\" \"),_c('div',{staticClass:\"footer\"},[_c('a',{staticClass:\"edit-panels icon-rename\",attrs:{\"tabindex\":\"0\"},on:{\"click\":_vm.showModal,\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.showModal.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"])){ return null; }return _vm.showModal.apply(null, arguments)}]}},[_vm._v(_vm._s(_vm.t('dashboard', 'Customize')))])]),_vm._v(\" \"),(_vm.modal)?_c('Modal',{attrs:{\"size\":\"normal\"},on:{\"close\":_vm.closeModal}},[_c('div',{staticClass:\"modal__content\"},[_c('h3',[_vm._v(_vm._s(_vm.t('dashboard', 'Edit widgets')))]),_vm._v(\" \"),_c('ol',{staticClass:\"panels\"},_vm._l((_vm.sortedAllStatuses),function(status){return _c('li',{key:status},[_c('input',{staticClass:\"checkbox\",attrs:{\"id\":'status-checkbox-' + status,\"type\":\"checkbox\"},domProps:{\"checked\":_vm.isStatusActive(status)},on:{\"input\":function($event){return _vm.updateStatusCheckbox(status, $event.target.checked)}}}),_vm._v(\" \"),_c('label',{class:_vm.statusInfo[status].icon,attrs:{\"for\":'status-checkbox-' + status}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.statusInfo[status].text)+\"\\n\\t\\t\\t\\t\\t\")])])}),0),_vm._v(\" \"),_c('Draggable',_vm._b({staticClass:\"panels\",attrs:{\"tag\":\"ol\",\"handle\":\".draggable\"},on:{\"end\":_vm.saveLayout},model:{value:(_vm.layout),callback:function ($$v) {_vm.layout=$$v},expression:\"layout\"}},'Draggable',{swapThreshold: 0.30, delay: 500, delayOnTouchOnly: true, touchStartThreshold: 3},false),_vm._l((_vm.sortedPanels),function(panel){return _c('li',{key:panel.id},[_c('input',{staticClass:\"checkbox\",attrs:{\"id\":'panel-checkbox-' + panel.id,\"type\":\"checkbox\"},domProps:{\"checked\":_vm.isActive(panel)},on:{\"input\":function($event){return _vm.updateCheckbox(panel, $event.target.checked)}}}),_vm._v(\" \"),_c('label',{class:_vm.isActive(panel) ? 'draggable ' + panel.iconClass : panel.iconClass,attrs:{\"for\":'panel-checkbox-' + panel.id}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(panel.title)+\"\\n\\t\\t\\t\\t\\t\")])])}),0),_vm._v(\" \"),(_vm.isAdmin)?_c('a',{staticClass:\"button\",attrs:{\"href\":_vm.appStoreUrl}},[_vm._v(_vm._s(_vm.t('dashboard', 'Get more widgets from the App Store')))]):_vm._e(),_vm._v(\" \"),_c('h3',[_vm._v(_vm._s(_vm.t('dashboard', 'Change background image')))]),_vm._v(\" \"),_c('BackgroundSettings',{attrs:{\"background\":_vm.background,\"theming-default-background\":_vm.themingDefaultBackground},on:{\"update:background\":_vm.updateBackground}}),_vm._v(\" \"),_c('h3',[_vm._v(_vm._s(_vm.t('dashboard', 'Weather service')))]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('dashboard', 'For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information.'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('p',{staticClass:\"credits--end\"},[_c('a',{attrs:{\"href\":\"https://api.met.no/doc/TermsOfService\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(_vm._s(_vm.t('dashboard', 'Weather data from Met.no')))]),_vm._v(\",\\n\\t\\t\\t\\t\"),_c('a',{attrs:{\"href\":\"https://wiki.osmfoundation.org/wiki/Privacy_Policy\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(_vm._s(_vm.t('dashboard', 'geocoding with Nominatim')))]),_vm._v(\",\\n\\t\\t\\t\\t\"),_c('a',{attrs:{\"href\":\"https://www.opentopodata.org/#public-api\",\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(_vm._s(_vm.t('dashboard', 'elevation data from OpenTopoData')))]),_vm._v(\".\\n\\t\\t\\t\")])],1)]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport App from './App.vue'\nimport { translate as t } from '@nextcloud/l10n'\nimport VTooltip from '@nextcloud/vue/dist/Directives/Tooltip'\nimport { getRequestToken } from '@nextcloud/auth'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.directive('Tooltip', VTooltip)\n\nVue.prototype.t = t\n\n// FIXME workaround to make the sidebar work\nif (!window.OCA.Files) {\n\twindow.OCA.Files = {}\n}\n\nObject.assign(window.OCA.Files, { App: { fileList: { filesClient: OC.Files.getClient() } } }, window.OCA.Files)\n\nconst Dashboard = Vue.extend(App)\nconst Instance = new Dashboard({}).$mount('#app-content-vue')\n\nwindow.OCA.Dashboard = {\n\tregister: (app, callback) => Instance.register(app, callback),\n\tregisterStatus: (app, callback) => Instance.registerStatus(app, callback),\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#app-dashboard[data-v-2c8fd7c4]{width:100%;min-height:100vh;background-size:cover;background-position:center center;background-repeat:no-repeat;background-attachment:fixed;background-color:var(--color-primary);--color-background-translucent: rgba(255, 255, 255, 0.8);--background-blur: blur(10px)}#body-user.theme--dark #app-dashboard[data-v-2c8fd7c4]{background-color:var(--color-main-background);--color-background-translucent: rgba(24, 24, 24, 0.8)}#body-user.theme--highcontrast #app-dashboard[data-v-2c8fd7c4]{background-color:var(--color-main-background);--color-background-translucent: var(--color-main-background)}#app-dashboard>h2[data-v-2c8fd7c4]{color:var(--color-primary-text);text-align:center;font-size:32px;line-height:130%;padding:10vh 16px 0px}.panels[data-v-2c8fd7c4]{width:auto;margin:auto;max-width:1500px;display:flex;justify-content:center;flex-direction:row;align-items:flex-start;flex-wrap:wrap}.panel[data-v-2c8fd7c4],.panels>div[data-v-2c8fd7c4]{width:320px;max-width:100%;margin:16px;background-color:var(--color-background-translucent);-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur);border-radius:var(--border-radius-large)}#body-user.theme--highcontrast .panel[data-v-2c8fd7c4],#body-user.theme--highcontrast .panels>div[data-v-2c8fd7c4]{border:2px solid var(--color-border)}.panel.sortable-ghost[data-v-2c8fd7c4],.panels>div.sortable-ghost[data-v-2c8fd7c4]{opacity:.1}.panel>.panel--header[data-v-2c8fd7c4],.panels>div>.panel--header[data-v-2c8fd7c4]{display:flex;z-index:1;top:50px;padding:16px;cursor:grab}.panel>.panel--header[data-v-2c8fd7c4],.panel>.panel--header[data-v-2c8fd7c4] *,.panels>div>.panel--header[data-v-2c8fd7c4],.panels>div>.panel--header[data-v-2c8fd7c4] *{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.panel>.panel--header[data-v-2c8fd7c4]:active,.panels>div>.panel--header[data-v-2c8fd7c4]:active{cursor:grabbing}.panel>.panel--header a[data-v-2c8fd7c4],.panels>div>.panel--header a[data-v-2c8fd7c4]{flex-grow:1}.panel>.panel--header>h2[data-v-2c8fd7c4],.panels>div>.panel--header>h2[data-v-2c8fd7c4]{display:block;flex-grow:1;margin:0;font-size:20px;line-height:24px;font-weight:bold;background-size:32px;background-position:14px 12px;padding:16px 8px 16px 60px;height:56px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:grab}.panel>.panel--content[data-v-2c8fd7c4],.panels>div>.panel--content[data-v-2c8fd7c4]{margin:0 16px 16px 16px;height:420px;overflow:hidden}@media only screen and (max-width: 709px){.panel>.panel--content[data-v-2c8fd7c4],.panels>div>.panel--content[data-v-2c8fd7c4]{height:auto}}.footer[data-v-2c8fd7c4]{text-align:center;transition:bottom var(--animation-slow) ease-in-out;bottom:0;padding:44px 0}.edit-panels[data-v-2c8fd7c4]{display:inline-block;margin:auto;background-position:16px center;padding:12px 16px;padding-left:36px;border-radius:var(--border-radius-pill);max-width:200px;opacity:1;text-align:center}.edit-panels[data-v-2c8fd7c4],.statuses[data-v-2c8fd7c4] .action-item .action-item__menutoggle,.statuses[data-v-2c8fd7c4] .action-item.action-item--open .action-item__menutoggle{background-color:var(--color-background-translucent);-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.edit-panels[data-v-2c8fd7c4]:hover,.edit-panels[data-v-2c8fd7c4]:focus,.edit-panels[data-v-2c8fd7c4]:active,.statuses[data-v-2c8fd7c4] .action-item .action-item__menutoggle:hover,.statuses[data-v-2c8fd7c4] .action-item .action-item__menutoggle:focus,.statuses[data-v-2c8fd7c4] .action-item .action-item__menutoggle:active,.statuses[data-v-2c8fd7c4] .action-item.action-item--open .action-item__menutoggle:hover,.statuses[data-v-2c8fd7c4] .action-item.action-item--open .action-item__menutoggle:focus,.statuses[data-v-2c8fd7c4] .action-item.action-item--open .action-item__menutoggle:active{background-color:var(--color-background-hover)}.modal__content[data-v-2c8fd7c4]{padding:32px 16px;text-align:center}.modal__content ol[data-v-2c8fd7c4]{display:flex;flex-direction:row;justify-content:center;list-style-type:none;padding-bottom:16px}.modal__content li label[data-v-2c8fd7c4]{display:block;padding:48px 8px 16px 8px;margin:8px;width:160px;background-color:var(--color-background-hover);border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-size:24px;background-position:center 16px;text-align:center}.modal__content li label[data-v-2c8fd7c4]:hover{border-color:var(--color-primary)}.modal__content li input:focus+label[data-v-2c8fd7c4]{border-color:var(--color-primary)}.modal__content h3[data-v-2c8fd7c4]{font-weight:bold}.modal__content h3[data-v-2c8fd7c4]:not(:first-of-type){margin-top:64px}.modal__content .button[data-v-2c8fd7c4]{display:inline-block;padding:10px 16px;margin:0}.modal__content p[data-v-2c8fd7c4]{max-width:650px;margin:0 auto}.modal__content p a[data-v-2c8fd7c4]:hover,.modal__content p a[data-v-2c8fd7c4]:focus{border-bottom:2px solid var(--color-border)}.modal__content .credits--end[data-v-2c8fd7c4]{padding-bottom:32px;color:var(--color-text-maxcontrast)}.modal__content .credits--end a[data-v-2c8fd7c4]{color:var(--color-text-maxcontrast)}.flip-list-move[data-v-2c8fd7c4]{transition:transform var(--animation-slow)}.statuses[data-v-2c8fd7c4]{display:flex;flex-direction:row;justify-content:center;flex-wrap:wrap;margin-bottom:36px}.statuses>div[data-v-2c8fd7c4]{margin:8px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/dashboard/src/App.vue\"],\"names\":[],\"mappings\":\"AAqZA,gCACC,UAAA,CACA,gBAAA,CACA,qBAAA,CACA,iCAAA,CACA,2BAAA,CACA,2BAAA,CACA,qCAAA,CACA,wDAAA,CACA,6BAAA,CAEA,uDACC,6CAAA,CACA,qDAAA,CAGD,+DACC,6CAAA,CACA,4DAAA,CAGD,mCACC,+BAAA,CACA,iBAAA,CACA,cAAA,CACA,gBAAA,CACA,qBAAA,CAIF,yBACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,sBAAA,CACA,cAAA,CAGD,qDACC,WAAA,CACA,cAAA,CACA,WAAA,CACA,oDAAA,CACA,8CAAA,CACA,sCAAA,CACA,wCAAA,CAEA,mHACC,oCAAA,CAGD,mFACE,UAAA,CAGF,mFACC,YAAA,CACA,SAAA,CACA,QAAA,CACA,YAAA,CACA,WAAA,CAEA,4KACC,0BAAA,CACA,wBAAA,CACA,uBAAA,CACA,qBAAA,CACA,oBAAA,CACA,gBAAA,CAGD,iGACC,eAAA,CAGD,uFACC,WAAA,CAGD,yFACC,aAAA,CACA,WAAA,CACA,QAAA,CACA,cAAA,CACA,gBAAA,CACA,gBAAA,CACA,oBAAA,CACA,6BAAA,CACA,0BAAA,CACA,WAAA,CACA,kBAAA,CACA,eAAA,CACA,sBAAA,CACA,WAAA,CAIF,qFACC,uBAAA,CACA,YAAA,CAEA,eAAA,CAID,0CACC,qFACC,WAAA,CAAA,CAKH,yBACC,iBAAA,CACA,mDAAA,CACA,QAAA,CACA,cAAA,CAGD,8BACC,oBAAA,CACA,WAAA,CACA,+BAAA,CACA,iBAAA,CACA,iBAAA,CACA,uCAAA,CACA,eAAA,CACA,SAAA,CACA,iBAAA,CAGD,oLAGC,oDAAA,CACA,8CAAA,CACA,sCAAA,CAEA,qlBAGC,8CAAA,CAIF,iCACC,iBAAA,CACA,iBAAA,CAEA,oCACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,oBAAA,CACA,mBAAA,CAGA,0CACC,aAAA,CACA,yBAAA,CACA,UAAA,CACA,WAAA,CACA,8CAAA,CACA,6CAAA,CACA,wCAAA,CACA,oBAAA,CACA,+BAAA,CACA,iBAAA,CAEA,gDACC,iCAAA,CAIF,sDACC,iCAAA,CAIF,oCACC,gBAAA,CAEA,wDACC,eAAA,CAKF,yCACC,oBAAA,CACA,iBAAA,CACA,QAAA,CAGD,mCACC,eAAA,CACA,aAAA,CAEA,sFAEC,2CAAA,CAIF,+CACC,mBAAA,CACA,mCAAA,CAEA,iDACC,mCAAA,CAKH,iCACC,0CAAA,CAGD,2BACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,cAAA,CACA,kBAAA,CAEA,+BACC,UAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#app-dashboard {\\n\\twidth: 100%;\\n\\tmin-height: 100vh;\\n\\tbackground-size: cover;\\n\\tbackground-position: center center;\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-attachment: fixed;\\n\\tbackground-color: var(--color-primary);\\n\\t--color-background-translucent: rgba(255, 255, 255, 0.8);\\n\\t--background-blur: blur(10px);\\n\\n\\t#body-user.theme--dark & {\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t--color-background-translucent: rgba(24, 24, 24, 0.8);\\n\\t}\\n\\n\\t#body-user.theme--highcontrast & {\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\t--color-background-translucent: var(--color-main-background);\\n\\t}\\n\\n\\t> h2 {\\n\\t\\tcolor: var(--color-primary-text);\\n\\t\\ttext-align: center;\\n\\t\\tfont-size: 32px;\\n\\t\\tline-height: 130%;\\n\\t\\tpadding: 10vh 16px 0px;\\n\\t}\\n}\\n\\n.panels {\\n\\twidth: auto;\\n\\tmargin: auto;\\n\\tmax-width: 1500px;\\n\\tdisplay: flex;\\n\\tjustify-content: center;\\n\\tflex-direction: row;\\n\\talign-items: flex-start;\\n\\tflex-wrap: wrap;\\n}\\n\\n.panel, .panels > div {\\n\\twidth: 320px;\\n\\tmax-width: 100%;\\n\\tmargin: 16px;\\n\\tbackground-color: var(--color-background-translucent);\\n\\t-webkit-backdrop-filter: var(--background-blur);\\n\\tbackdrop-filter: var(--background-blur);\\n\\tborder-radius: var(--border-radius-large);\\n\\n\\t#body-user.theme--highcontrast & {\\n\\t\\tborder: 2px solid var(--color-border);\\n\\t}\\n\\n\\t&.sortable-ghost {\\n\\t\\t opacity: 0.1;\\n\\t}\\n\\n\\t& > .panel--header {\\n\\t\\tdisplay: flex;\\n\\t\\tz-index: 1;\\n\\t\\ttop: 50px;\\n\\t\\tpadding: 16px;\\n\\t\\tcursor: grab;\\n\\n\\t\\t&, ::v-deep * {\\n\\t\\t\\t-webkit-touch-callout: none;\\n\\t\\t\\t-webkit-user-select: none;\\n\\t\\t\\t-khtml-user-select: none;\\n\\t\\t\\t-moz-user-select: none;\\n\\t\\t\\t-ms-user-select: none;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&:active {\\n\\t\\t\\tcursor: grabbing;\\n\\t\\t}\\n\\n\\t\\ta {\\n\\t\\t\\tflex-grow: 1;\\n\\t\\t}\\n\\n\\t\\t> h2 {\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tflex-grow: 1;\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tfont-size: 20px;\\n\\t\\t\\tline-height: 24px;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tbackground-size: 32px;\\n\\t\\t\\tbackground-position: 14px 12px;\\n\\t\\t\\tpadding: 16px 8px 16px 60px;\\n\\t\\t\\theight: 56px;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\tcursor: grab;\\n\\t\\t}\\n\\t}\\n\\n\\t& > .panel--content {\\n\\t\\tmargin: 0 16px 16px 16px;\\n\\t\\theight: 420px;\\n\\t\\t// We specifically do not want scrollbars inside widgets\\n\\t\\toverflow: hidden;\\n\\t}\\n\\n\\t// No need to extend height of widgets if only one column is shown\\n\\t@media only screen and (max-width: 709px) {\\n\\t\\t& > .panel--content {\\n\\t\\t\\theight: auto;\\n\\t\\t}\\n\\t}\\n}\\n\\n.footer {\\n\\ttext-align: center;\\n\\ttransition: bottom var(--animation-slow) ease-in-out;\\n\\tbottom: 0;\\n\\tpadding: 44px 0;\\n}\\n\\n.edit-panels {\\n\\tdisplay: inline-block;\\n\\tmargin:auto;\\n\\tbackground-position: 16px center;\\n\\tpadding: 12px 16px;\\n\\tpadding-left: 36px;\\n\\tborder-radius: var(--border-radius-pill);\\n\\tmax-width: 200px;\\n\\topacity: 1;\\n\\ttext-align: center;\\n}\\n\\n.edit-panels,\\n.statuses ::v-deep .action-item .action-item__menutoggle,\\n.statuses ::v-deep .action-item.action-item--open .action-item__menutoggle {\\n\\tbackground-color: var(--color-background-translucent);\\n\\t-webkit-backdrop-filter: var(--background-blur);\\n\\tbackdrop-filter: var(--background-blur);\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t}\\n}\\n\\n.modal__content {\\n\\tpadding: 32px 16px;\\n\\ttext-align: center;\\n\\n\\tol {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tjustify-content: center;\\n\\t\\tlist-style-type: none;\\n\\t\\tpadding-bottom: 16px;\\n\\t}\\n\\tli {\\n\\t\\tlabel {\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tpadding: 48px 8px 16px 8px;\\n\\t\\t\\tmargin: 8px;\\n\\t\\t\\twidth: 160px;\\n\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\t\\tbackground-size: 24px;\\n\\t\\t\\tbackground-position: center 16px;\\n\\t\\t\\ttext-align: center;\\n\\n\\t\\t\\t&:hover {\\n\\t\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tinput:focus + label {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\t}\\n\\n\\th3 {\\n\\t\\tfont-weight: bold;\\n\\n\\t\\t&:not(:first-of-type) {\\n\\t\\t\\tmargin-top: 64px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Adjust design of 'Get more widgets' button\\n\\t.button {\\n\\t\\tdisplay: inline-block;\\n\\t\\tpadding: 10px 16px;\\n\\t\\tmargin: 0;\\n\\t}\\n\\n\\tp {\\n\\t\\tmax-width: 650px;\\n\\t\\tmargin: 0 auto;\\n\\n\\t\\ta:hover,\\n\\t\\ta:focus {\\n\\t\\t\\tborder-bottom: 2px solid var(--color-border);\\n\\t\\t}\\n\\t}\\n\\n\\t.credits--end {\\n\\t\\tpadding-bottom: 32px;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\n\\t\\ta {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n}\\n\\n.flip-list-move {\\n\\ttransition: transform var(--animation-slow);\\n}\\n\\n.statuses {\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\tjustify-content: center;\\n\\tflex-wrap: wrap;\\n\\tmargin-bottom: 36px;\\n\\n\\t& > div {\\n\\t\\tmargin: 8px;\\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, \".background-selector[data-v-e4c3a7ca]{display:flex;flex-wrap:wrap;justify-content:center}.background-selector .background[data-v-e4c3a7ca]{width:176px;height:96px;margin:8px;background-size:cover;background-position:center center;text-align:center;border-radius:var(--border-radius-large);border:2px solid var(--color-main-background);overflow:hidden}.background-selector .background.current[data-v-e4c3a7ca]{background-image:var(--color-background-dark)}.background-selector .background.filepicker[data-v-e4c3a7ca],.background-selector .background.default[data-v-e4c3a7ca],.background-selector .background.color[data-v-e4c3a7ca]{border-color:var(--color-border)}.background-selector .background.color[data-v-e4c3a7ca]{background-color:var(--color-primary);color:var(--color-primary-text)}.background-selector .background.active[data-v-e4c3a7ca],.background-selector .background[data-v-e4c3a7ca]:hover,.background-selector .background[data-v-e4c3a7ca]:focus{border:2px solid var(--color-primary)}.background-selector .background.active[data-v-e4c3a7ca]:not(.icon-loading):after{background-image:var(--icon-checkmark-fff);background-repeat:no-repeat;background-position:center;background-size:44px;content:\\\"\\\";display:block;height:100%}body.theme--dark .background-selector .background.active[data-v-e4c3a7ca]:not(.icon-loading):after{background-image:var(--icon-checkmark-000)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/dashboard/src/components/BackgroundSettings.vue\"],\"names\":[],\"mappings\":\"AA4IA,sCACC,YAAA,CACA,cAAA,CACA,sBAAA,CAEA,kDACC,WAAA,CACA,WAAA,CACA,UAAA,CACA,qBAAA,CACA,iCAAA,CACA,iBAAA,CACA,wCAAA,CACA,6CAAA,CACA,eAAA,CAEA,0DACC,6CAAA,CAGD,+KACC,gCAAA,CAGD,wDACC,qCAAA,CACA,+BAAA,CAGD,yKAGC,qCAAA,CAGD,kFACC,0CAAA,CACA,2BAAA,CACA,0BAAA,CACA,oBAAA,CACA,UAAA,CACA,aAAA,CACA,WAAA,CAEA,mGACC,0CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.background-selector {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tjustify-content: center;\\n\\n\\t.background {\\n\\t\\twidth: 176px;\\n\\t\\theight: 96px;\\n\\t\\tmargin: 8px;\\n\\t\\tbackground-size: cover;\\n\\t\\tbackground-position: center center;\\n\\t\\ttext-align: center;\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\toverflow: hidden;\\n\\n\\t\\t&.current {\\n\\t\\t\\tbackground-image: var(--color-background-dark);\\n\\t\\t}\\n\\n\\t\\t&.filepicker, &.default, &.color {\\n\\t\\t\\tborder-color: var(--color-border);\\n\\t\\t}\\n\\n\\t\\t&.color {\\n\\t\\t\\tbackground-color: var(--color-primary);\\n\\t\\t\\tcolor: var(--color-primary-text);\\n\\t\\t}\\n\\n\\t\\t&.active,\\n\\t\\t&:hover,\\n\\t\\t&:focus {\\n\\t\\t\\tborder: 2px solid var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&.active:not(.icon-loading):after {\\n\\t\\t\\tbackground-image: var(--icon-checkmark-fff);\\n\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t\\tbackground-position: center;\\n\\t\\t\\tbackground-size: 44px;\\n\\t\\t\\tcontent: '';\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\theight: 100%;\\n\\n\\t\\t\\tbody.theme--dark & {\\n\\t\\t\\t\\tbackground-image: var(--icon-checkmark-000);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 773;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t773: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(91415); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","data","isMobile","this","_isMobile","beforeMount","window","addEventListener","_onResize","beforeDestroy","removeEventListener","methods","document","documentElement","clientWidth","url","generateFilePath","background","time","themingDefaultBackground","generateUrl","OCA","Theming","cacheBuster","Accessibility","theme","prefixWithBaseUrl","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_h","$createElement","_c","_self","staticClass","class","active","attrs","on","pickFile","_v","_s","t","loading","setDefault","pickColor","_l","shippedBackground","directives","name","rawName","value","details","expression","key","style","preview","$event","setShipped","greeting","text","status","ref","refInFor","_b","saveLayout","model","callback","$$v","layout","swapThreshold","delay","delayOnTouchOnly","touchStartThreshold","panelId","panels","id","iconClass","title","mounted","showModal","type","indexOf","_k","keyCode","apply","arguments","closeModal","domProps","isStatusActive","updateStatusCheckbox","target","checked","statusInfo","icon","panel","isActive","updateCheckbox","appStoreUrl","_e","updateBackground","__webpack_nonce__","btoa","getRequestToken","Vue","VTooltip","Files","Object","assign","App","fileList","filesClient","OC","getClient","Instance","$mount","Dashboard","register","app","registerStatus","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","amdD","Error","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/files-main.js b/dist/files-main.js
index a499aea0b1d..c6d8472667d 100644
--- a/dist/files-main.js
+++ b/dist/files-main.js
@@ -1,3 +1,3 @@
/*! For license information please see files-main.js.LICENSE.txt */
-!function(){"use strict";var e,n={34940:function(e,n,i){var r=i(20144);function a(e,n){for(var t=0;t<n.length;t++){var i=n[t];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var o=function(){function e(){var n,t;!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),t=void 0,(n="_settings")in this?Object.defineProperty(this,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):this[n]=t,this._settings=[],console.debug("OCA.Files.Settings initialized")}var n,t;return n=e,(t=[{key:"register",value:function(e){return this._settings.filter((function(n){return n.name===e.name})).length>0?(console.error("A setting with the same name is already registered"),!1):(this._settings.push(e),!0)}},{key:"settings",get:function(){return this._settings}}])&&a(n.prototype,t),Object.defineProperty(n,"prototype",{writable:!1}),e}(),l={name:"Setting",props:{el:{type:Function,required:!0}},mounted:function(){this.$el.appendChild(this.el())}},s=i(51900),c={name:"Settings",components:{Setting:(0,s.Z)(l,(function(){var e=this.$createElement;return(this._self._c||e)("div")}),[],!1,null,null,null).exports},data:function(){return{settings:OCA.Files.Settings.settings}}},u=(0,s.Z)(c,(function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("div",{attrs:{id:"files-app-extra-settings"}},[e._l(e.settings,(function(e){return[t("Setting",{key:e.name,attrs:{el:e.el}})]}))],2)}),[],!1,null,"31c9bb4b",null).exports;function d(e,n){for(var t=0;t<n.length;t++){var i=n[t];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}var m=function(){function e(n,t){var i=t.el,r=t.open,a=t.close;!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),p(this,"_close",void 0),p(this,"_el",void 0),p(this,"_name",void 0),p(this,"_open",void 0),this._name=n,this._el=i,this._open=r,this._close=a,"function"!=typeof this._open&&(this._open=function(){}),"function"!=typeof this._close&&(this._close=function(){})}var n,t;return n=e,(t=[{key:"name",get:function(){return this._name}},{key:"el",get:function(){return this._el}},{key:"open",get:function(){return this._open}},{key:"close",get:function(){return this._close}}])&&d(n.prototype,t),Object.defineProperty(n,"prototype",{writable:!1}),e}();r.default.prototype.t=t,window.OCA.Files||(window.OCA.Files={}),Object.assign(window.OCA.Files,{Settings:new o}),Object.assign(window.OCA.Files.Settings,{Setting:m}),window.addEventListener("DOMContentLoaded",(function(){if(!window.TESTING){new r.default({el:"#files-app-settings",render:function(e){return e(u)}});var e=document.getElementById("app-settings-header");e&&e.addEventListener("click",(function(e){var n=e.currentTarget.children[0].classList.contains("opened");OCA.Files.Settings.settings.forEach((function(e){return n?e.close():e.open()}))}))}}));var f=i(17499),A=i(16453),v=i(9944),h=i(79753),g=i(22200),C=function(){var e,n,t,i,r=(null===(e=OCA)||void 0===e||null===(n=e.Files)||void 0===n||null===(t=n.App)||void 0===t||null===(i=t.currentFileList)||void 0===i?void 0:i.dirInfo)||{path:"/",name:""};return"".concat(r.path,"/").concat(r.name).replace(/\/\//gi,"/")},b=i(4820),w=i(62520),y=i(26932),_=i(97e3),k=i.n(_),x=i(47450),E=i.n(x);function P(e,n,t,i,r,a,o){try{var l=e[a](o),s=l.value}catch(e){return void t(e)}l.done?n(s):Promise.resolve(s).then(i,r)}function O(e){return function(){var n=this,t=arguments;return new Promise((function(i,r){var a=e.apply(n,t);function o(e){P(a,i,r,o,l,"next",e)}function l(e){P(a,i,r,o,l,"throw",e)}o(void 0)}))}}var T=function(){var e=O(regeneratorRuntime.mark((function e(){var n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,b.default.get((0,h.generateOcsUrl)("apps/files/api/v1/templates"));case 2:return n=e.sent,e.abrupt("return",n.data.ocs.data);case 4:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),F=function(){var e=O(regeneratorRuntime.mark((function e(n,t,i){var r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,b.default.post((0,h.generateOcsUrl)("apps/files/api/v1/templates/create"),{filePath:n,templatePath:t,templateType:i});case 2:return r=e.sent,e.abrupt("return",r.data.ocs.data);case 4:case"end":return e.stop()}}),e)})));return function(n,t,i){return e.apply(this,arguments)}}(),S=256,B={name:"TemplatePreview",inheritAttrs:!1,props:{basename:{type:String,required:!0},checked:{type:Boolean,default:!1},fileid:{type:[String,Number],required:!0},filename:{type:String,required:!0},previewUrl:{type:String,default:null},hasPreview:{type:Boolean,default:!0},mime:{type:String,required:!0},ratio:{type:Number,default:null}},data:function(){return{failedPreview:!1}},computed:{nameWithoutExt:function(){return this.basename.indexOf(".")>-1?this.basename.split(".").slice(0,-1).join("."):this.basename},id:function(){return"template-picker-".concat(this.fileid)},realPreviewUrl:function(){return this.failedPreview&&this.mimeIcon?this.mimeIcon:this.previewUrl?this.previewUrl:(0,g.getCurrentUser)()?(0,h.generateUrl)("/core/preview?fileId=".concat(this.fileid,"&x=").concat(S,"&y=").concat(S,"&a=1")):(0,h.generateUrl)("/apps/files_sharing/publicpreview/".concat(document.getElementById("sharingToken")&&document.getElementById("sharingToken").value,"?fileId=").concat(this.fileid,"&file=").concat(function(e){var n=(e.startsWith("/")?e:"/".concat(e)).split("/"),t="";return n.forEach((function(e){""!==e&&(t+="/"+encodeURIComponent(e))})),t}(this.filename),"&x=").concat(S,"&y=").concat(S,"&a=1"))},mimeIcon:function(){return OC.MimeType.getIconUrl(this.mime)}},methods:{onCheck:function(){this.$emit("check",this.fileid)},onFailure:function(){this.failedPreview=!0}}},j=B,I=i(93379),M=i.n(I),D=i(7795),U=i.n(D),L=i(90569),R=i.n(L),Z=i(3565),q=i.n(Z),W=i(19216),N=i.n(W),$=i(44589),z=i.n($),G=i(78299),Y={};Y.styleTagTransform=z(),Y.setAttributes=q(),Y.insert=R().bind(null,"head"),Y.domAPI=U(),Y.insertStyleElement=N(),M()(G.Z,Y),G.Z&&G.Z.locals&&G.Z.locals;var Q=(0,s.Z)(j,(function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("li",{staticClass:"template-picker__item"},[t("input",{staticClass:"radio",attrs:{id:e.id,type:"radio",name:"template-picker"},domProps:{checked:e.checked},on:{change:e.onCheck}}),e._v(" "),t("label",{staticClass:"template-picker__label",attrs:{for:e.id}},[t("div",{staticClass:"template-picker__preview",class:e.failedPreview?"template-picker__preview--failed":""},[t("img",{staticClass:"template-picker__image",attrs:{src:e.realPreviewUrl,alt:"",draggable:"false"},on:{error:e.onFailure}})]),e._v(" "),t("span",{staticClass:"template-picker__title"},[e._v("\n\t\t\t"+e._s(e.nameWithoutExt)+"\n\t\t")])])])}),[],!1,null,"440aea22",null).exports;function H(e,n,t,i,r,a,o){try{var l=e[a](o),s=l.value}catch(e){return void t(e)}l.done?n(s):Promise.resolve(s).then(i,r)}function K(e){return function(){var n=this,t=arguments;return new Promise((function(i,r){var a=e.apply(n,t);function o(e){H(a,i,r,o,l,"next",e)}function l(e){H(a,i,r,o,l,"throw",e)}o(void 0)}))}}var J={name:"TemplatePicker",components:{EmptyContent:k(),Modal:E(),TemplatePreview:Q},props:{logger:{type:Object,required:!0}},data:function(){return{checked:-1,loading:!1,name:null,opened:!1,provider:null}},computed:{nameWithoutExt:function(){return this.name.indexOf(".")>-1?this.name.split(".").slice(0,-1).join("."):this.name},emptyTemplate:function(){var e,n;return{basename:t("files","Blank"),fileid:-1,filename:this.t("files","Blank"),hasPreview:!1,mime:(null===(e=this.provider)||void 0===e?void 0:e.mimetypes[0])||(null===(n=this.provider)||void 0===n?void 0:n.mimetypes)}},selectedTemplate:function(){var e=this;return this.provider.templates.find((function(n){return n.fileid===e.checked}))},style:function(){return{"--margin":"8px","--width":"160px","--border":"2px","--fullwidth":"180px","--height":this.provider.ratio?Math.round(160/this.provider.ratio)+"px":null}}},methods:{open:function(e,n){var t=this;return K(regeneratorRuntime.mark((function i(){var r,a;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return t.checked=t.emptyTemplate.fileid,t.name=e,t.provider=n,i.next=5,T();case 5:if(r=i.sent,null!==(a=r.find((function(e){return e.app===n.app&&e.label===n.label})))){i.next=9;break}throw new Error("Failed to match provider in results");case 9:if(t.provider=a,0!==a.templates.length){i.next=13;break}return t.onSubmit(),i.abrupt("return");case 13:t.opened=!0;case 14:case"end":return i.stop()}}),i)})))()},close:function(){this.checked=this.emptyTemplate.fileid,this.loading=!1,this.name=null,this.opened=!1,this.provider=null},onCheck:function(e){this.checked=e},onSubmit:function(){var e=this;return K(regeneratorRuntime.mark((function n(){var t,i,r,a,o,l,s,c,u,d,p,m;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return e.loading=!0,a=C(),o=null===(t=OCA)||void 0===t||null===(i=t.Files)||void 0===i||null===(r=i.App)||void 0===r?void 0:r.currentFileList,e.nameWithoutExt===e.name&&(e.logger.debug("Fixed invalid filename",{name:e.name,extension:null===(l=e.provider)||void 0===l?void 0:l.extension}),e.name=e.name+(null===(s=e.provider)||void 0===s?void 0:s.extension)),n.prev=4,n.next=7,F((0,w.normalize)("".concat(a,"/").concat(e.name)),null===(c=e.selectedTemplate)||void 0===c?void 0:c.filename,null===(u=e.selectedTemplate)||void 0===u?void 0:u.templateType);case 7:return d=n.sent,e.logger.debug("Created new file",d),n.next=11,null==o?void 0:o.addAndFetchFileInfo(e.name).then((function(e,n){return n}));case 11:p=n.sent,m=new OCA.Files.FileInfoModel(p,{filesClient:null==o?void 0:o.filesClient}),OCA.Files.fileActions.getDefaultFileAction(d.mime,"file",OC.PERMISSION_ALL).action(d.basename,{$file:null==o?void 0:o.findFileEl(e.name),dir:a,fileList:o,fileActions:null==o?void 0:o.fileActions,fileInfoModel:m}),e.close(),n.next=23;break;case 18:n.prev=18,n.t0=n.catch(4),e.logger.error("Error while creating the new file from template"),console.error(n.t0),(0,y.x2)(e.t("files","Unable to create new file from template"));case 23:return n.prev=23,e.loading=!1,n.finish(23);case 26:case"end":return n.stop()}}),n,null,[[4,18,23,26]])})))()}}},V=J,X=i(64530),ee={};ee.styleTagTransform=z(),ee.setAttributes=q(),ee.insert=R().bind(null,"head"),ee.domAPI=U(),ee.insertStyleElement=N(),M()(X.Z,ee),X.Z&&X.Z.locals&&X.Z.locals;var ne=(0,s.Z)(V,(function(){var e=this,n=e.$createElement,t=e._self._c||n;return e.opened?t("Modal",{staticClass:"templates-picker",attrs:{"clear-view-delay":-1,size:"large"},on:{close:e.close}},[t("form",{staticClass:"templates-picker__form",style:e.style,on:{submit:function(n){return n.preventDefault(),n.stopPropagation(),e.onSubmit.apply(null,arguments)}}},[t("h2",[e._v(e._s(e.t("files","Pick a template for {name}",{name:e.nameWithoutExt})))]),e._v(" "),t("ul",{staticClass:"templates-picker__list"},[t("TemplatePreview",e._b({attrs:{checked:e.checked===e.emptyTemplate.fileid},on:{check:e.onCheck}},"TemplatePreview",e.emptyTemplate,!1)),e._v(" "),e._l(e.provider.templates,(function(n){return t("TemplatePreview",e._b({key:n.fileid,attrs:{checked:e.checked===n.fileid,ratio:e.provider.ratio},on:{check:e.onCheck}},"TemplatePreview",n,!1))}))],2),e._v(" "),t("div",{staticClass:"templates-picker__buttons"},[t("button",{on:{click:e.close}},[e._v("\n\t\t\t\t"+e._s(e.t("files","Cancel"))+"\n\t\t\t")]),e._v(" "),t("input",{staticClass:"primary",attrs:{type:"submit","aria-label":e.t("files","Create a new file with the selected template")},domProps:{value:e.t("files","Create")}})])]),e._v(" "),e.loading?t("EmptyContent",{staticClass:"templates-picker__loading",attrs:{icon:"icon-loading"}},[e._v("\n\t\t"+e._s(e.t("files","Creating file"))+"\n\t")]):e._e()],1):e._e()}),[],!1,null,"717d45aa",null),te=ne.exports;function ie(e,n,t,i,r,a,o){try{var l=e[a](o),s=l.value}catch(e){return void t(e)}l.done?n(s):Promise.resolve(s).then(i,r)}var re=(0,f.getLoggerBuilder)().setApp("files").detectUser().build();r.default.mixin({methods:{t:v.translate,n:v.translatePlural}});var ae=document.createElement("div");ae.id="template-picker",document.body.appendChild(ae);var oe=(0,A.loadState)("files","templates",[]),le=(0,A.loadState)("files","templates_path",!1);re.debug("Templates providers",oe),re.debug("Templates folder",{templatesPath:le});var se=new(r.default.extend(te))({name:"TemplatePicker",propsData:{logger:re}});se.$mount("#template-picker"),window.addEventListener("DOMContentLoaded",(function(){if(!le){re.debug("Templates folder not initialized");var e={attach:function(e){e.addMenuEntry({id:"template-init",displayName:(0,v.translate)("files","Set up templates folder"),templateName:(0,v.translate)("files","Templates"),iconClass:"icon-template-add",fileType:"file",actionHandler:function(n){ue(n),e.removeMenuEntry("template-init")}})}};OC.Plugins.register("OCA.Files.NewFileMenu",e)}})),oe.forEach((function(e,n){var t={attach:function(t){var i=t.fileList;"files"!==i.id&&"files.public"!==i.id||t.addMenuEntry({id:"template-new-".concat(e.app,"-").concat(n),displayName:e.label,templateName:e.label+e.extension,iconClass:e.iconClass||"icon-file",fileType:"file",actionHandler:function(n){se.open(n,e)}})}};OC.Plugins.register("OCA.Files.NewFileMenu",t)}));var ce,ue=function(){var e,n=(e=regeneratorRuntime.mark((function e(n){var t,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=(C()+"/".concat(n)).replace("//","/"),e.prev=1,re.debug("Initializing the templates directory",{templatePath:t}),e.next=5,b.default.post((0,h.generateOcsUrl)("apps/files/api/v1/templates/path"),{templatePath:t,copySystemTemplates:!0});case 5:i=e.sent,OCA.Files.App.currentFileList.changeDirectory(t,!0,!0),oe=i.data.ocs.data.templates,le=i.data.ocs.data.template_path,e.next=15;break;case 11:e.prev=11,e.t0=e.catch(1),re.error("Unable to initialize the templates directory"),(0,y.x2)((0,v.translate)("files","Unable to initialize the templates directory"));case 15:case"end":return e.stop()}}),e,null,[[1,11]])})),function(){var n=this,t=arguments;return new Promise((function(i,r){var a=e.apply(n,t);function o(e){ie(a,i,r,o,l,"next",e)}function l(e){ie(a,i,r,o,l,"throw",e)}o(void 0)}))});return function(e){return n.apply(this,arguments)}}(),de=i(74854);ce={attach:function(e){var n=this;(0,de.subscribe)("nextcloud:unified-search.search",(function(n){var t=n.query;e.setFilter(t)})),(0,de.subscribe)("nextcloud:unified-search.reset",(function(){n.query=null,e.setFilter("")}))}},window.OC.Plugins.register("OCA.Files.FileList",ce)},78299:function(e,n,t){var i=t(87537),r=t.n(i),a=t(23645),o=t.n(a)()(r());o.push([e.id,".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:transparent !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}","",{version:3,sources:["webpack://./apps/files/src/components/TemplatePreview.vue"],names:[],mappings:"AAsJC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,uCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n"],sourceRoot:""}]),n.Z=o},64530:function(e,n,t){var i=t(87537),r=t.n(i),a=t(23645),o=t.n(a)()(r());o.push([e.id,".templates-picker__form[data-v-717d45aa]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-717d45aa]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-717d45aa]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-717d45aa]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-717d45aa],.templates-picker__buttons input[type=submit][data-v-717d45aa]{height:44px}.templates-picker[data-v-717d45aa] .modal-container{position:relative;overflow-y:auto !important}.templates-picker__loading[data-v-717d45aa]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}","",{version:3,sources:["webpack://./apps/files/src/views/TemplatePicker.vue"],names:[],mappings:"AAuPC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,qDACC,iBAAA,CACA,0BAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t\toverflow-y: auto !important;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n"],sourceRoot:""}]),n.Z=o}},i={};function r(e){var t=i[e];if(void 0!==t)return t.exports;var a=i[e]={id:e,loaded:!1,exports:{}};return n[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=n,r.amdD=function(){throw new Error("define cannot be used indirect")},r.amdO={},e=[],r.O=function(n,t,i,a){if(!t){var o=1/0;for(u=0;u<e.length;u++){t=e[u][0],i=e[u][1],a=e[u][2];for(var l=!0,s=0;s<t.length;s++)(!1&a||o>=a)&&Object.keys(r.O).every((function(e){return r.O[e](t[s])}))?t.splice(s--,1):(l=!1,a<o&&(o=a));if(l){e.splice(u--,1);var c=i();void 0!==c&&(n=c)}}return n}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[t,i,a]},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,{a:n}),n},r.d=function(e,n){for(var t in n)r.o(n,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},r.j=181,function(){r.b=document.baseURI||self.location.href;var e={181:0};r.O.j=function(n){return 0===e[n]};var n=function(n,t){var i,a,o=t[0],l=t[1],s=t[2],c=0;if(o.some((function(n){return 0!==e[n]}))){for(i in l)r.o(l,i)&&(r.m[i]=l[i]);if(s)var u=s(r)}for(n&&n(t);c<o.length;c++)a=o[c],r.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return r.O(u)},t=self.webpackChunknextcloud=self.webpackChunknextcloud||[];t.forEach(n.bind(null,0)),t.push=n.bind(null,t.push.bind(t))}();var a=r.O(void 0,[874],(function(){return r(34940)}));a=r.O(a)}();
-//# sourceMappingURL=files-main.js.map?v=7a6e1c09cee0b05920fe \ No newline at end of file
+!function(){"use strict";var e,n={23682:function(e,n,i){var r=i(20144);function a(e,n){for(var t=0;t<n.length;t++){var i=n[t];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}var o=function(){function e(){var n,t;!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),t=void 0,(n="_settings")in this?Object.defineProperty(this,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):this[n]=t,this._settings=[],console.debug("OCA.Files.Settings initialized")}var n,t;return n=e,(t=[{key:"register",value:function(e){return this._settings.filter((function(n){return n.name===e.name})).length>0?(console.error("A setting with the same name is already registered"),!1):(this._settings.push(e),!0)}},{key:"settings",get:function(){return this._settings}}])&&a(n.prototype,t),Object.defineProperty(n,"prototype",{writable:!1}),e}(),l={name:"Setting",props:{el:{type:Function,required:!0}},mounted:function(){this.$el.appendChild(this.el())}},s=i(51900),c={name:"Settings",components:{Setting:(0,s.Z)(l,(function(){var e=this.$createElement;return(this._self._c||e)("div")}),[],!1,null,null,null).exports},data:function(){return{settings:OCA.Files.Settings.settings}}},u=(0,s.Z)(c,(function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("div",{attrs:{id:"files-app-extra-settings"}},[e._l(e.settings,(function(e){return[t("Setting",{key:e.name,attrs:{el:e.el}})]}))],2)}),[],!1,null,"31c9bb4b",null).exports;function d(e,n){for(var t=0;t<n.length;t++){var i=n[t];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}var f=function(){function e(n,t){var i=t.el,r=t.open,a=t.close;!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),p(this,"_close",void 0),p(this,"_el",void 0),p(this,"_name",void 0),p(this,"_open",void 0),this._name=n,this._el=i,this._open=r,this._close=a,"function"!=typeof this._open&&(this._open=function(){}),"function"!=typeof this._close&&(this._close=function(){})}var n,t;return n=e,(t=[{key:"name",get:function(){return this._name}},{key:"el",get:function(){return this._el}},{key:"open",get:function(){return this._open}},{key:"close",get:function(){return this._close}}])&&d(n.prototype,t),Object.defineProperty(n,"prototype",{writable:!1}),e}();r.default.prototype.t=t,window.OCA.Files||(window.OCA.Files={}),Object.assign(window.OCA.Files,{Settings:new o}),Object.assign(window.OCA.Files.Settings,{Setting:f}),window.addEventListener("DOMContentLoaded",(function(){if(!window.TESTING){new r.default({el:"#files-app-settings",render:function(e){return e(u)}});var e=document.getElementById("app-settings-header");e&&e.addEventListener("click",(function(e){var n=e.currentTarget.children[0].classList.contains("opened");OCA.Files.Settings.settings.forEach((function(e){return n?e.close():e.open()}))}))}}));var m=i(17499),A=i(16453),v=i(9944),h=i(79753),g=i(22200),C=function(){var e,n,t,i,r=(null===(e=OCA)||void 0===e||null===(n=e.Files)||void 0===n||null===(t=n.App)||void 0===t||null===(i=t.currentFileList)||void 0===i?void 0:i.dirInfo)||{path:"/",name:""};return"".concat(r.path,"/").concat(r.name).replace(/\/\//gi,"/")},b=i(4820),w=i(62520),y=i(26932),_=i(97e3),k=i.n(_),x=i(47450),E=i.n(x);function P(e,n,t,i,r,a,o){try{var l=e[a](o),s=l.value}catch(e){return void t(e)}l.done?n(s):Promise.resolve(s).then(i,r)}function O(e){return function(){var n=this,t=arguments;return new Promise((function(i,r){var a=e.apply(n,t);function o(e){P(a,i,r,o,l,"next",e)}function l(e){P(a,i,r,o,l,"throw",e)}o(void 0)}))}}var T=function(){var e=O(regeneratorRuntime.mark((function e(){var n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,b.default.get((0,h.generateOcsUrl)("apps/files/api/v1/templates"));case 2:return n=e.sent,e.abrupt("return",n.data.ocs.data);case 4:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),F=function(){var e=O(regeneratorRuntime.mark((function e(n,t,i){var r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,b.default.post((0,h.generateOcsUrl)("apps/files/api/v1/templates/create"),{filePath:n,templatePath:t,templateType:i});case 2:return r=e.sent,e.abrupt("return",r.data.ocs.data);case 4:case"end":return e.stop()}}),e)})));return function(n,t,i){return e.apply(this,arguments)}}(),S=256,B={name:"TemplatePreview",inheritAttrs:!1,props:{basename:{type:String,required:!0},checked:{type:Boolean,default:!1},fileid:{type:[String,Number],required:!0},filename:{type:String,required:!0},previewUrl:{type:String,default:null},hasPreview:{type:Boolean,default:!0},mime:{type:String,required:!0},ratio:{type:Number,default:null}},data:function(){return{failedPreview:!1}},computed:{nameWithoutExt:function(){return this.basename.indexOf(".")>-1?this.basename.split(".").slice(0,-1).join("."):this.basename},id:function(){return"template-picker-".concat(this.fileid)},realPreviewUrl:function(){return this.failedPreview&&this.mimeIcon?this.mimeIcon:this.previewUrl?this.previewUrl:(0,g.getCurrentUser)()?(0,h.generateUrl)("/core/preview?fileId=".concat(this.fileid,"&x=").concat(S,"&y=").concat(S,"&a=1")):(0,h.generateUrl)("/apps/files_sharing/publicpreview/".concat(document.getElementById("sharingToken")&&document.getElementById("sharingToken").value,"?fileId=").concat(this.fileid,"&file=").concat(function(e){var n=(e.startsWith("/")?e:"/".concat(e)).split("/"),t="";return n.forEach((function(e){""!==e&&(t+="/"+encodeURIComponent(e))})),t}(this.filename),"&x=").concat(S,"&y=").concat(S,"&a=1"))},mimeIcon:function(){return OC.MimeType.getIconUrl(this.mime)}},methods:{onCheck:function(){this.$emit("check",this.fileid)},onFailure:function(){this.failedPreview=!0}}},j=B,I=i(93379),M=i.n(I),D=i(7795),U=i.n(D),L=i(90569),R=i.n(L),Z=i(3565),q=i.n(Z),W=i(19216),N=i.n(W),$=i(44589),z=i.n($),G=i(78299),Y={};Y.styleTagTransform=z(),Y.setAttributes=q(),Y.insert=R().bind(null,"head"),Y.domAPI=U(),Y.insertStyleElement=N(),M()(G.Z,Y),G.Z&&G.Z.locals&&G.Z.locals;var Q=(0,s.Z)(j,(function(){var e=this,n=e.$createElement,t=e._self._c||n;return t("li",{staticClass:"template-picker__item"},[t("input",{staticClass:"radio",attrs:{id:e.id,type:"radio",name:"template-picker"},domProps:{checked:e.checked},on:{change:e.onCheck}}),e._v(" "),t("label",{staticClass:"template-picker__label",attrs:{for:e.id}},[t("div",{staticClass:"template-picker__preview",class:e.failedPreview?"template-picker__preview--failed":""},[t("img",{staticClass:"template-picker__image",attrs:{src:e.realPreviewUrl,alt:"",draggable:"false"},on:{error:e.onFailure}})]),e._v(" "),t("span",{staticClass:"template-picker__title"},[e._v("\n\t\t\t"+e._s(e.nameWithoutExt)+"\n\t\t")])])])}),[],!1,null,"440aea22",null).exports;function H(e,n,t,i,r,a,o){try{var l=e[a](o),s=l.value}catch(e){return void t(e)}l.done?n(s):Promise.resolve(s).then(i,r)}function K(e){return function(){var n=this,t=arguments;return new Promise((function(i,r){var a=e.apply(n,t);function o(e){H(a,i,r,o,l,"next",e)}function l(e){H(a,i,r,o,l,"throw",e)}o(void 0)}))}}var J={name:"TemplatePicker",components:{EmptyContent:k(),Modal:E(),TemplatePreview:Q},props:{logger:{type:Object,required:!0}},data:function(){return{checked:-1,loading:!1,name:null,opened:!1,provider:null}},computed:{nameWithoutExt:function(){return this.name.indexOf(".")>-1?this.name.split(".").slice(0,-1).join("."):this.name},emptyTemplate:function(){var e,n;return{basename:t("files","Blank"),fileid:-1,filename:this.t("files","Blank"),hasPreview:!1,mime:(null===(e=this.provider)||void 0===e?void 0:e.mimetypes[0])||(null===(n=this.provider)||void 0===n?void 0:n.mimetypes)}},selectedTemplate:function(){var e=this;return this.provider.templates.find((function(n){return n.fileid===e.checked}))},style:function(){return{"--margin":"8px","--width":"160px","--border":"2px","--fullwidth":"180px","--height":this.provider.ratio?Math.round(160/this.provider.ratio)+"px":null}}},methods:{open:function(e,n){var t=this;return K(regeneratorRuntime.mark((function i(){var r,a;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return t.checked=t.emptyTemplate.fileid,t.name=e,t.provider=n,i.next=5,T();case 5:if(r=i.sent,null!==(a=r.find((function(e){return e.app===n.app&&e.label===n.label})))){i.next=9;break}throw new Error("Failed to match provider in results");case 9:if(t.provider=a,0!==a.templates.length){i.next=13;break}return t.onSubmit(),i.abrupt("return");case 13:t.opened=!0;case 14:case"end":return i.stop()}}),i)})))()},close:function(){this.checked=this.emptyTemplate.fileid,this.loading=!1,this.name=null,this.opened=!1,this.provider=null},onCheck:function(e){this.checked=e},onSubmit:function(){var e=this;return K(regeneratorRuntime.mark((function n(){var t,i,r,a,o,l,s,c,u,d,p,f;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return e.loading=!0,a=C(),o=null===(t=OCA)||void 0===t||null===(i=t.Files)||void 0===i||null===(r=i.App)||void 0===r?void 0:r.currentFileList,e.nameWithoutExt===e.name&&(e.logger.debug("Fixed invalid filename",{name:e.name,extension:null===(l=e.provider)||void 0===l?void 0:l.extension}),e.name=e.name+(null===(s=e.provider)||void 0===s?void 0:s.extension)),n.prev=4,n.next=7,F((0,w.normalize)("".concat(a,"/").concat(e.name)),null===(c=e.selectedTemplate)||void 0===c?void 0:c.filename,null===(u=e.selectedTemplate)||void 0===u?void 0:u.templateType);case 7:return d=n.sent,e.logger.debug("Created new file",d),n.next=11,null==o?void 0:o.addAndFetchFileInfo(e.name).then((function(e,n){return n}));case 11:p=n.sent,f=new OCA.Files.FileInfoModel(p,{filesClient:null==o?void 0:o.filesClient}),OCA.Files.fileActions.getDefaultFileAction(d.mime,"file",OC.PERMISSION_ALL).action(d.basename,{$file:null==o?void 0:o.findFileEl(e.name),dir:a,fileList:o,fileActions:null==o?void 0:o.fileActions,fileInfoModel:f}),e.close(),n.next=23;break;case 18:n.prev=18,n.t0=n.catch(4),e.logger.error("Error while creating the new file from template"),console.error(n.t0),(0,y.x2)(e.t("files","Unable to create new file from template"));case 23:return n.prev=23,e.loading=!1,n.finish(23);case 26:case"end":return n.stop()}}),n,null,[[4,18,23,26]])})))()}}},V=J,X=i(16745),ee={};ee.styleTagTransform=z(),ee.setAttributes=q(),ee.insert=R().bind(null,"head"),ee.domAPI=U(),ee.insertStyleElement=N(),M()(X.Z,ee),X.Z&&X.Z.locals&&X.Z.locals;var ne=(0,s.Z)(V,(function(){var e=this,n=e.$createElement,t=e._self._c||n;return e.opened?t("Modal",{staticClass:"templates-picker",attrs:{"clear-view-delay":-1,size:"large"},on:{close:e.close}},[t("form",{staticClass:"templates-picker__form",style:e.style,on:{submit:function(n){return n.preventDefault(),n.stopPropagation(),e.onSubmit.apply(null,arguments)}}},[t("h2",[e._v(e._s(e.t("files","Pick a template for {name}",{name:e.nameWithoutExt})))]),e._v(" "),t("ul",{staticClass:"templates-picker__list"},[t("TemplatePreview",e._b({attrs:{checked:e.checked===e.emptyTemplate.fileid},on:{check:e.onCheck}},"TemplatePreview",e.emptyTemplate,!1)),e._v(" "),e._l(e.provider.templates,(function(n){return t("TemplatePreview",e._b({key:n.fileid,attrs:{checked:e.checked===n.fileid,ratio:e.provider.ratio},on:{check:e.onCheck}},"TemplatePreview",n,!1))}))],2),e._v(" "),t("div",{staticClass:"templates-picker__buttons"},[t("button",{on:{click:e.close}},[e._v("\n\t\t\t\t"+e._s(e.t("files","Cancel"))+"\n\t\t\t")]),e._v(" "),t("input",{staticClass:"primary",attrs:{type:"submit","aria-label":e.t("files","Create a new file with the selected template")},domProps:{value:e.t("files","Create")}})])]),e._v(" "),e.loading?t("EmptyContent",{staticClass:"templates-picker__loading",attrs:{icon:"icon-loading"}},[e._v("\n\t\t"+e._s(e.t("files","Creating file"))+"\n\t")]):e._e()],1):e._e()}),[],!1,null,"278f6b79",null),te=ne.exports;function ie(e,n,t,i,r,a,o){try{var l=e[a](o),s=l.value}catch(e){return void t(e)}l.done?n(s):Promise.resolve(s).then(i,r)}var re=(0,m.getLoggerBuilder)().setApp("files").detectUser().build();r.default.mixin({methods:{t:v.translate,n:v.translatePlural}});var ae=document.createElement("div");ae.id="template-picker",document.body.appendChild(ae);var oe=(0,A.loadState)("files","templates",[]),le=(0,A.loadState)("files","templates_path",!1);re.debug("Templates providers",oe),re.debug("Templates folder",{templatesPath:le});var se=new(r.default.extend(te))({name:"TemplatePicker",propsData:{logger:re}});se.$mount("#template-picker"),window.addEventListener("DOMContentLoaded",(function(){if(!le){re.debug("Templates folder not initialized");var e={attach:function(e){e.addMenuEntry({id:"template-init",displayName:(0,v.translate)("files","Set up templates folder"),templateName:(0,v.translate)("files","Templates"),iconClass:"icon-template-add",fileType:"file",actionHandler:function(n){ue(n),e.removeMenuEntry("template-init")}})}};OC.Plugins.register("OCA.Files.NewFileMenu",e)}})),oe.forEach((function(e,n){var t={attach:function(t){var i=t.fileList;"files"!==i.id&&"files.public"!==i.id||t.addMenuEntry({id:"template-new-".concat(e.app,"-").concat(n),displayName:e.label,templateName:e.label+e.extension,iconClass:e.iconClass||"icon-file",fileType:"file",actionHandler:function(n){se.open(n,e)}})}};OC.Plugins.register("OCA.Files.NewFileMenu",t)}));var ce,ue=function(){var e,n=(e=regeneratorRuntime.mark((function e(n){var t,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=(C()+"/".concat(n)).replace("//","/"),e.prev=1,re.debug("Initializing the templates directory",{templatePath:t}),e.next=5,b.default.post((0,h.generateOcsUrl)("apps/files/api/v1/templates/path"),{templatePath:t,copySystemTemplates:!0});case 5:i=e.sent,OCA.Files.App.currentFileList.changeDirectory(t,!0,!0),oe=i.data.ocs.data.templates,le=i.data.ocs.data.template_path,e.next=15;break;case 11:e.prev=11,e.t0=e.catch(1),re.error("Unable to initialize the templates directory"),(0,y.x2)((0,v.translate)("files","Unable to initialize the templates directory"));case 15:case"end":return e.stop()}}),e,null,[[1,11]])})),function(){var n=this,t=arguments;return new Promise((function(i,r){var a=e.apply(n,t);function o(e){ie(a,i,r,o,l,"next",e)}function l(e){ie(a,i,r,o,l,"throw",e)}o(void 0)}))});return function(e){return n.apply(this,arguments)}}(),de=i(74854);ce={attach:function(e){var n=this;(0,de.subscribe)("nextcloud:unified-search.search",(function(n){var t=n.query;e.setFilter(t)})),(0,de.subscribe)("nextcloud:unified-search.reset",(function(){n.query=null,e.setFilter("")}))}},window.OC.Plugins.register("OCA.Files.FileList",ce)},78299:function(e,n,t){var i=t(87537),r=t.n(i),a=t(23645),o=t.n(a)()(r());o.push([e.id,".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:transparent !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}","",{version:3,sources:["webpack://./apps/files/src/components/TemplatePreview.vue"],names:[],mappings:"AAsJC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,uCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n"],sourceRoot:""}]),n.Z=o},16745:function(e,n,t){var i=t(87537),r=t.n(i),a=t(23645),o=t.n(a)()(r());o.push([e.id,".templates-picker__form[data-v-278f6b79]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-278f6b79]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-278f6b79]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-278f6b79]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-278f6b79],.templates-picker__buttons input[type=submit][data-v-278f6b79]{height:44px}.templates-picker[data-v-278f6b79] .modal-container{position:relative;height:fit-content}.templates-picker__loading[data-v-278f6b79]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}","",{version:3,sources:["webpack://./apps/files/src/views/TemplatePicker.vue"],names:[],mappings:"AAuPC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,qDACC,iBAAA,CACA,kBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t\theight: fit-content;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n"],sourceRoot:""}]),n.Z=o}},i={};function r(e){var t=i[e];if(void 0!==t)return t.exports;var a=i[e]={id:e,loaded:!1,exports:{}};return n[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=n,r.amdD=function(){throw new Error("define cannot be used indirect")},r.amdO={},e=[],r.O=function(n,t,i,a){if(!t){var o=1/0;for(u=0;u<e.length;u++){t=e[u][0],i=e[u][1],a=e[u][2];for(var l=!0,s=0;s<t.length;s++)(!1&a||o>=a)&&Object.keys(r.O).every((function(e){return r.O[e](t[s])}))?t.splice(s--,1):(l=!1,a<o&&(o=a));if(l){e.splice(u--,1);var c=i();void 0!==c&&(n=c)}}return n}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[t,i,a]},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,{a:n}),n},r.d=function(e,n){for(var t in n)r.o(n,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},r.j=181,function(){r.b=document.baseURI||self.location.href;var e={181:0};r.O.j=function(n){return 0===e[n]};var n=function(n,t){var i,a,o=t[0],l=t[1],s=t[2],c=0;if(o.some((function(n){return 0!==e[n]}))){for(i in l)r.o(l,i)&&(r.m[i]=l[i]);if(s)var u=s(r)}for(n&&n(t);c<o.length;c++)a=o[c],r.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return r.O(u)},t=self.webpackChunknextcloud=self.webpackChunknextcloud||[];t.forEach(n.bind(null,0)),t.push=n.bind(null,t.push.bind(t))}();var a=r.O(void 0,[874],(function(){return r(23682)}));a=r.O(a)}();
+//# sourceMappingURL=files-main.js.map?v=f1cb79f0b735dbcf537d \ No newline at end of file
diff --git a/dist/files-main.js.map b/dist/files-main.js.map
index 4ecb634120d..afa06533da3 100644
--- a/dist/files-main.js.map
+++ b/dist/files-main.js.map
@@ -1 +1 @@
-{"version":3,"file":"files-main.js?v=7a6e1c09cee0b05920fe","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/views/Settings.vue","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=template&id=47cd8aa6&","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=template&id=31c9bb4b&scoped=true&","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/files-app-settings.js","webpack:///nextcloud/apps/files/src/utils/davUtils.js","webpack:///nextcloud/apps/files/src/services/Templates.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?ab98","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?81db","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=template&id=440aea22&scoped=true&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?9e0e","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?afd8","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=template&id=717d45aa&scoped=true&","webpack:///nextcloud/apps/files/src/templates.js","webpack:///nextcloud/apps/files/src/legacy/filelistSearch.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=style&index=0&id=440aea22&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=style&index=0&id=717d45aa&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Gary Kim <gary@garykim.dev>\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 class Settings {\n\n\t_settings\n\n\tconstructor() {\n\t\tthis._settings = []\n\t\tconsole.debug('OCA.Files.Settings initialized')\n\t}\n\n\t/**\n\t * Register a new setting\n\t *\n\t * @since 19.0.0\n\t * @param {OCA.Files.Settings.Setting} view element to add to settings\n\t * @return {boolean} whether registering was successful\n\t */\n\tregister(view) {\n\t\tif (this._settings.filter(e => e.name === view.name).length > 0) {\n\t\t\tconsole.error('A setting with the same name is already registered')\n\t\t\treturn false\n\t\t}\n\t\tthis._settings.push(view)\n\t\treturn true\n\t}\n\n\t/**\n\t * All settings elements\n\t *\n\t * @return {OCA.Files.Settings.Setting[]} All currently registered settings\n\t */\n\tget settings() {\n\t\treturn this._settings\n\t}\n\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.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!./Setting.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<div />\n</template>\n<script>\nexport default {\n\tname: 'Setting',\n\tprops: {\n\t\tel: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.appendChild(this.el())\n\t},\n}\n</script>\n<style>\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.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!./Settings.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<template>\n\t<div id=\"files-app-extra-settings\">\n\t\t<template v-for=\"setting in settings\">\n\t\t\t<Setting :key=\"setting.name\" :el=\"setting.el\" />\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport Setting from '../components/Setting'\n\nexport default {\n\tname: 'Settings',\n\tcomponents: {\n\t\tSetting,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsettings: OCA.Files.Settings.settings,\n\t\t}\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=47cd8aa6&\"\nimport script from \"./Setting.vue?vue&type=script&lang=js&\"\nexport * from \"./Setting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=31c9bb4b&scoped=true&\"\nimport script from \"./Settings.vue?vue&type=script&lang=js&\"\nexport * from \"./Settings.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"31c9bb4b\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"files-app-extra-settings\"}},[_vm._l((_vm.settings),function(setting){return [_c('Setting',{key:setting.name,attrs:{\"el\":setting.el}})]})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Gary Kim <gary@garykim.dev>\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 class Setting {\n\n\t_close\n\t_el\n\t_name\n\t_open\n\n\t/**\n\t * Create a new files app setting\n\t *\n\t * @since 19.0.0\n\t * @param {string} name the name of this setting\n\t * @param {object} component the component\n\t * @param {Function} component.el function that returns an unmounted dom element to be added\n\t * @param {Function} [component.open] callback for when setting is added\n\t * @param {Function} [component.close] callback for when setting is closed\n\t */\n\tconstructor(name, { el, open, close }) {\n\t\tthis._name = name\n\t\tthis._el = el\n\t\tthis._open = open\n\t\tthis._close = close\n\n\t\tif (typeof this._open !== 'function') {\n\t\t\tthis._open = () => {}\n\t\t}\n\n\t\tif (typeof this._close !== 'function') {\n\t\t\tthis._close = () => {}\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this._name\n\t}\n\n\tget el() {\n\t\treturn this._el\n\t}\n\n\tget open() {\n\t\treturn this._open\n\t}\n\n\tget close() {\n\t\treturn this._close\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Gary Kim <gary@garykim.dev>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Settings from './services/Settings'\nimport SettingsView from './views/Settings'\nimport Setting from './models/Setting'\n\nVue.prototype.t = t\n\n// Init Files App Settings Service\nif (!window.OCA.Files) {\n\twindow.OCA.Files = {}\n}\nObject.assign(window.OCA.Files, { Settings: new Settings() })\nObject.assign(window.OCA.Files.Settings, { Setting })\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (window.TESTING) {\n\t\treturn\n\t}\n\t// Init Vue app\n\t// eslint-disable-next-line\n\tnew Vue({\n\t\tel: '#files-app-settings',\n\t\trender: h => h(SettingsView),\n\t})\n\n\tconst appSettingsHeader = document.getElementById('app-settings-header')\n\tif (appSettingsHeader) {\n\t\tappSettingsHeader.addEventListener('click', e => {\n\t\t\tconst opened = e.currentTarget.children[0].classList.contains('opened')\n\t\t\tOCA.Files.Settings.settings.forEach(e => opened ? e.close() : e.open())\n\t\t})\n\t}\n})\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport const getRootPath = function() {\n\tif (getCurrentUser()) {\n\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`)\n\t} else {\n\t\treturn generateRemoteUrl('webdav').replace('/remote.php', '/public.php')\n\t}\n}\n\nexport const isPublic = function() {\n\treturn !getCurrentUser()\n}\n\nexport const getToken = function() {\n\treturn document.getElementById('sharingToken') && document.getElementById('sharingToken').value\n}\n\n/**\n * Return the current directory, fallback to root\n *\n * @return {string}\n */\nexport const getCurrentDirectory = function() {\n\tconst currentDirInfo = OCA?.Files?.App?.currentFileList?.dirInfo\n\t\t|| { path: '/', name: '' }\n\n\t// Make sure we don't have double slashes\n\treturn `${currentDirInfo.path}/${currentDirInfo.name}`.replace(/\\/\\//gi, '/')\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nexport const getTemplates = async function() {\n\tconst response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new file from a specified template\n *\n * @param {string} filePath The new file destination path\n * @param {string} templatePath The template source path\n * @param {string} templateType The template type e.g 'user'\n */\nexport const createFromTemplate = async function(filePath, templatePath, templateType) {\n\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {\n\t\tfilePath,\n\t\ttemplatePath,\n\t\ttemplateType,\n\t})\n\treturn response.data.ocs.data\n}\n","<!--\n - @copyright Copyright (c) 2020 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<li class=\"template-picker__item\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\ttype=\"radio\"\n\t\t\tclass=\"radio\"\n\t\t\tname=\"template-picker\"\n\t\t\t@change=\"onCheck\">\n\n\t\t<label :for=\"id\" class=\"template-picker__label\">\n\t\t\t<div class=\"template-picker__preview\"\n\t\t\t\t:class=\"failedPreview ? 'template-picker__preview--failed' : ''\">\n\t\t\t\t<img class=\"template-picker__image\"\n\t\t\t\t\t:src=\"realPreviewUrl\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t@error=\"onFailure\">\n\t\t\t</div>\n\n\t\t\t<span class=\"template-picker__title\">\n\t\t\t\t{{ nameWithoutExt }}\n\t\t\t</span>\n\t\t</label>\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { encodeFilePath } from '../utils/fileUtils'\nimport { getToken, isPublic } from '../utils/davUtils'\n\n// preview width generation\nconst previewWidth = 256\n\nexport default {\n\tname: 'TemplatePreview',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfileid: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpreviewUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\thasPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmime: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tratio: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfailedPreview: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.basename.indexOf('.') > -1 ? this.basename.split('.').slice(0, -1).join('.') : this.basename\n\t\t},\n\n\t\tid() {\n\t\t\treturn `template-picker-${this.fileid}`\n\t\t},\n\n\t\trealPreviewUrl() {\n\t\t\t// If original preview failed, fallback to mime icon\n\t\t\tif (this.failedPreview && this.mimeIcon) {\n\t\t\t\treturn this.mimeIcon\n\t\t\t}\n\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn this.previewUrl\n\t\t\t}\n\t\t\t// TODO: find a nicer standard way of doing this?\n\t\t\tif (isPublic()) {\n\t\t\t\treturn generateUrl(`/apps/files_sharing/publicpreview/${getToken()}?fileId=${this.fileid}&file=${encodeFilePath(this.filename)}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t\t}\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.fileid}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t},\n\n\t\tmimeIcon() {\n\t\t\treturn OC.MimeType.getIconUrl(this.mime)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonCheck() {\n\t\t\tthis.$emit('check', this.fileid)\n\t\t},\n\t\tonFailure() {\n\t\t\tthis.failedPreview = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n</style>\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst encodeFilePath = function(path) {\n\tconst pathSections = (path.startsWith('/') ? path : `/${path}`).split('/')\n\tlet relativePath = ''\n\tpathSections.forEach((section) => {\n\t\tif (section !== '') {\n\t\t\trelativePath += '/' + encodeURIComponent(section)\n\t\t}\n\t})\n\treturn relativePath\n}\n\n/**\n * Extract dir and name from file path\n *\n * @param {string} path the full path\n * @return {string[]} [dirPath, fileName]\n */\nconst extractFilePaths = function(path) {\n\tconst pathSections = path.split('/')\n\tconst fileName = pathSections[pathSections.length - 1]\n\tconst dirPath = pathSections.slice(0, pathSections.length - 1).join('/')\n\treturn [dirPath, fileName]\n}\n\nexport { encodeFilePath, extractFilePaths }\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.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!./TemplatePreview.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!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&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!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePreview.vue?vue&type=template&id=440aea22&scoped=true&\"\nimport script from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&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 \"440aea22\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{staticClass:\"template-picker__item\"},[_c('input',{staticClass:\"radio\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"template-picker\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onCheck}}),_vm._v(\" \"),_c('label',{staticClass:\"template-picker__label\",attrs:{\"for\":_vm.id}},[_c('div',{staticClass:\"template-picker__preview\",class:_vm.failedPreview ? 'template-picker__preview--failed' : ''},[_c('img',{staticClass:\"template-picker__image\",attrs:{\"src\":_vm.realPreviewUrl,\"alt\":\"\",\"draggable\":\"false\"},on:{\"error\":_vm.onFailure}})]),_vm._v(\" \"),_c('span',{staticClass:\"template-picker__title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.nameWithoutExt)+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 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<Modal v-if=\"opened\"\n\t\t:clear-view-delay=\"-1\"\n\t\tclass=\"templates-picker\"\n\t\tsize=\"large\"\n\t\t@close=\"close\">\n\t\t<form class=\"templates-picker__form\"\n\t\t\t:style=\"style\"\n\t\t\t@submit.prevent.stop=\"onSubmit\">\n\t\t\t<h2>{{ t('files', 'Pick a template for {name}', { name: nameWithoutExt }) }}</h2>\n\n\t\t\t<!-- Templates list -->\n\t\t\t<ul class=\"templates-picker__list\">\n\t\t\t\t<TemplatePreview v-bind=\"emptyTemplate\"\n\t\t\t\t\t:checked=\"checked === emptyTemplate.fileid\"\n\t\t\t\t\t@check=\"onCheck\" />\n\n\t\t\t\t<TemplatePreview v-for=\"template in provider.templates\"\n\t\t\t\t\t:key=\"template.fileid\"\n\t\t\t\t\tv-bind=\"template\"\n\t\t\t\t\t:checked=\"checked === template.fileid\"\n\t\t\t\t\t:ratio=\"provider.ratio\"\n\t\t\t\t\t@check=\"onCheck\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Cancel and submit -->\n\t\t\t<div class=\"templates-picker__buttons\">\n\t\t\t\t<button @click=\"close\">\n\t\t\t\t\t{{ t('files', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<input type=\"submit\"\n\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t:value=\"t('files', 'Create')\"\n\t\t\t\t\t:aria-label=\"t('files', 'Create a new file with the selected template')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<EmptyContent v-if=\"loading\" class=\"templates-picker__loading\" icon=\"icon-loading\">\n\t\t\t{{ t('files', 'Creating file') }}\n\t\t</EmptyContent>\n\t</Modal>\n</template>\n\n<script>\nimport { normalize } from 'path'\nimport { showError } from '@nextcloud/dialogs'\nimport EmptyContent from '@nextcloud/vue/dist/Components/EmptyContent'\nimport Modal from '@nextcloud/vue/dist/Components/Modal'\n\nimport { getCurrentDirectory } from '../utils/davUtils'\nimport { createFromTemplate, getTemplates } from '../services/Templates'\nimport TemplatePreview from '../components/TemplatePreview'\n\nconst border = 2\nconst margin = 8\nconst width = margin * 20\n\nexport default {\n\tname: 'TemplatePicker',\n\n\tcomponents: {\n\t\tEmptyContent,\n\t\tModal,\n\t\tTemplatePreview,\n\t},\n\n\tprops: {\n\t\tlogger: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Check empty template by default\n\t\t\tchecked: -1,\n\t\t\tloading: false,\n\t\t\tname: null,\n\t\t\topened: false,\n\t\t\tprovider: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.name.indexOf('.') > -1\n\t\t\t\t? this.name.split('.').slice(0, -1).join('.')\n\t\t\t\t: this.name\n\t\t},\n\n\t\temptyTemplate() {\n\t\t\treturn {\n\t\t\t\tbasename: t('files', 'Blank'),\n\t\t\t\tfileid: -1,\n\t\t\t\tfilename: this.t('files', 'Blank'),\n\t\t\t\thasPreview: false,\n\t\t\t\tmime: this.provider?.mimetypes[0] || this.provider?.mimetypes,\n\t\t\t}\n\t\t},\n\n\t\tselectedTemplate() {\n\t\t\treturn this.provider.templates.find(template => template.fileid === this.checked)\n\t\t},\n\n\t\t/**\n\t\t * Style css vars bin,d\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t'--margin': margin + 'px',\n\t\t\t\t'--width': width + 'px',\n\t\t\t\t'--border': border + 'px',\n\t\t\t\t'--fullwidth': width + 2 * margin + 2 * border + 'px',\n\t\t\t\t'--height': this.provider.ratio ? Math.round(width / this.provider.ratio) + 'px' : null,\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the picker\n\t\t *\n\t\t * @param {string} name the file name to create\n\t\t * @param {object} provider the template provider picked\n\t\t */\n\t\tasync open(name, provider) {\n\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.name = name\n\t\t\tthis.provider = provider\n\n\t\t\tconst templates = await getTemplates()\n\t\t\tconst fetchedProvider = templates.find((fetchedProvider) => fetchedProvider.app === provider.app && fetchedProvider.label === provider.label)\n\t\t\tif (fetchedProvider === null) {\n\t\t\t\tthrow new Error('Failed to match provider in results')\n\t\t\t}\n\t\t\tthis.provider = fetchedProvider\n\n\t\t\t// If there is no templates available, just create an empty file\n\t\t\tif (fetchedProvider.templates.length === 0) {\n\t\t\t\tthis.onSubmit()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Else, open the picker\n\t\t\tthis.opened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the picker and reset variables\n\t\t */\n\t\tclose() {\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.loading = false\n\t\t\tthis.name = null\n\t\t\tthis.opened = false\n\t\t\tthis.provider = null\n\t\t},\n\n\t\t/**\n\t\t * Manages the radio template picker change\n\t\t *\n\t\t * @param {number} fileid the selected template file id\n\t\t */\n\t\tonCheck(fileid) {\n\t\t\tthis.checked = fileid\n\t\t},\n\n\t\tasync onSubmit() {\n\t\t\tthis.loading = true\n\t\t\tconst currentDirectory = getCurrentDirectory()\n\t\t\tconst fileList = OCA?.Files?.App?.currentFileList\n\n\t\t\t// If the file doesn't have an extension, add the default one\n\t\t\tif (this.nameWithoutExt === this.name) {\n\t\t\t\tthis.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })\n\t\t\t\tthis.name = this.name + this.provider?.extension\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst fileInfo = await createFromTemplate(\n\t\t\t\t\tnormalize(`${currentDirectory}/${this.name}`),\n\t\t\t\t\tthis.selectedTemplate?.filename,\n\t\t\t\t\tthis.selectedTemplate?.templateType,\n\t\t\t\t)\n\t\t\t\tthis.logger.debug('Created new file', fileInfo)\n\n\t\t\t\tconst data = await fileList?.addAndFetchFileInfo(this.name).then((status, data) => data)\n\n\t\t\t\tconst model = new OCA.Files.FileInfoModel(data, {\n\t\t\t\t\tfilesClient: fileList?.filesClient,\n\t\t\t\t})\n\t\t\t\t// Run default action\n\t\t\t\tconst fileAction = OCA.Files.fileActions.getDefaultFileAction(fileInfo.mime, 'file', OC.PERMISSION_ALL)\n\t\t\t\tfileAction.action(fileInfo.basename, {\n\t\t\t\t\t$file: fileList?.findFileEl(this.name),\n\t\t\t\t\tdir: currentDirectory,\n\t\t\t\t\tfileList,\n\t\t\t\t\tfileActions: fileList?.fileActions,\n\t\t\t\t\tfileInfoModel: model,\n\t\t\t\t})\n\n\t\t\t\tthis.close()\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Error while creating the new file from template')\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(this.t('files', 'Unable to create new file from template'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t\toverflow-y: auto !important;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.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!./TemplatePicker.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!./TemplatePicker.vue?vue&type=style&index=0&id=717d45aa&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!./TemplatePicker.vue?vue&type=style&index=0&id=717d45aa&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePicker.vue?vue&type=template&id=717d45aa&scoped=true&\"\nimport script from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePicker.vue?vue&type=style&index=0&id=717d45aa&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 \"717d45aa\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.opened)?_c('Modal',{staticClass:\"templates-picker\",attrs:{\"clear-view-delay\":-1,\"size\":\"large\"},on:{\"close\":_vm.close}},[_c('form',{staticClass:\"templates-picker__form\",style:(_vm.style),on:{\"submit\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onSubmit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('files', 'Pick a template for {name}', { name: _vm.nameWithoutExt })))]),_vm._v(\" \"),_c('ul',{staticClass:\"templates-picker__list\"},[_c('TemplatePreview',_vm._b({attrs:{\"checked\":_vm.checked === _vm.emptyTemplate.fileid},on:{\"check\":_vm.onCheck}},'TemplatePreview',_vm.emptyTemplate,false)),_vm._v(\" \"),_vm._l((_vm.provider.templates),function(template){return _c('TemplatePreview',_vm._b({key:template.fileid,attrs:{\"checked\":_vm.checked === template.fileid,\"ratio\":_vm.provider.ratio},on:{\"check\":_vm.onCheck}},'TemplatePreview',template,false))})],2),_vm._v(\" \"),_c('div',{staticClass:\"templates-picker__buttons\"},[_c('button',{on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"aria-label\":_vm.t('files', 'Create a new file with the selected template')},domProps:{\"value\":_vm.t('files', 'Create')}})])]),_vm._v(\" \"),(_vm.loading)?_c('EmptyContent',{staticClass:\"templates-picker__loading\",attrs:{\"icon\":\"icon-loading\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files', 'Creating file'))+\"\\n\\t\")]):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentDirectory } from './utils/davUtils'\nimport axios from '@nextcloud/axios'\nimport Vue from 'vue'\n\nimport TemplatePickerView from './views/TemplatePicker'\nimport { showError } from '@nextcloud/dialogs'\n\n// Set up logger\nconst logger = getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n\n// Add translates functions\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\n// Create document root\nconst TemplatePickerRoot = document.createElement('div')\nTemplatePickerRoot.id = 'template-picker'\ndocument.body.appendChild(TemplatePickerRoot)\n\n// Retrieve and init templates\nlet templates = loadState('files', 'templates', [])\nlet templatesPath = loadState('files', 'templates_path', false)\nlogger.debug('Templates providers', templates)\nlogger.debug('Templates folder', { templatesPath })\n\n// Init vue app\nconst View = Vue.extend(TemplatePickerView)\nconst TemplatePicker = new View({\n\tname: 'TemplatePicker',\n\tpropsData: {\n\t\tlogger,\n\t},\n})\nTemplatePicker.$mount('#template-picker')\n\n// Init template engine after load to make sure it's the last injected entry\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (!templatesPath) {\n\t\tlogger.debug('Templates folder not initialized')\n\t\tconst initTemplatesPlugin = {\n\t\t\tattach(menu) {\n\t\t\t\t// register the new menu entry\n\t\t\t\tmenu.addMenuEntry({\n\t\t\t\t\tid: 'template-init',\n\t\t\t\t\tdisplayName: t('files', 'Set up templates folder'),\n\t\t\t\t\ttemplateName: t('files', 'Templates'),\n\t\t\t\t\ticonClass: 'icon-template-add',\n\t\t\t\t\tfileType: 'file',\n\t\t\t\t\tactionHandler(name) {\n\t\t\t\t\t\tinitTemplatesFolder(name)\n\t\t\t\t\t\tmenu.removeMenuEntry('template-init')\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t\tOC.Plugins.register('OCA.Files.NewFileMenu', initTemplatesPlugin)\n\t}\n})\n\n// Init template files menu\ntemplates.forEach((provider, index) => {\n\tconst newTemplatePlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: `template-new-${provider.app}-${index}`,\n\t\t\t\tdisplayName: provider.label,\n\t\t\t\ttemplateName: provider.label + provider.extension,\n\t\t\t\ticonClass: provider.iconClass || 'icon-file',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tTemplatePicker.open(name, provider)\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newTemplatePlugin)\n})\n\n/**\n * Init the template directory\n *\n * @param {string} name the templates folder name\n */\nconst initTemplatesFolder = async function(name) {\n\tconst templatePath = (getCurrentDirectory() + `/${name}`).replace('//', '/')\n\ttry {\n\t\tlogger.debug('Initializing the templates directory', { templatePath })\n\t\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/path'), {\n\t\t\ttemplatePath,\n\t\t\tcopySystemTemplates: true,\n\t\t})\n\n\t\t// Go to template directory\n\t\tOCA.Files.App.currentFileList.changeDirectory(templatePath, true, true)\n\n\t\ttemplates = response.data.ocs.data.templates\n\t\ttemplatesPath = response.data.ocs.data.template_path\n\t} catch (error) {\n\t\tlogger.error('Unable to initialize the templates directory')\n\t\tshowError(t('files', 'Unable to initialize the templates directory'))\n\t}\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\n(function() {\n\n\tconst FilesPlugin = {\n\t\tattach(fileList) {\n\t\t\tsubscribe('nextcloud:unified-search.search', ({ query }) => {\n\t\t\t\tfileList.setFilter(query)\n\t\t\t})\n\t\t\tsubscribe('nextcloud:unified-search.reset', () => {\n\t\t\t\tthis.query = null\n\t\t\t\tfileList.setFilter('')\n\t\t\t})\n\n\t\t},\n\t}\n\n\twindow.OC.Plugins.register('OCA.Files.FileList', FilesPlugin)\n\n})()\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:transparent !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/TemplatePreview.vue\"],\"names\":[],\"mappings\":\"AAsJC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,uCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.template-picker {\\n\\t&__item {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: flex;\\n\\t\\t// Align in the middle of the grid\\n\\t\\talign-items: center;\\n\\t\\tflex: 1 1;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&, * {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&::before {\\n\\t\\t\\tdisplay: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\t// Stretch so all entries are the same width\\n\\t\\tflex: 1 1;\\n\\t\\twidth: var(--width);\\n\\t\\tmin-height: var(--height);\\n\\t\\tmax-height: var(--height);\\n\\t\\tpadding: 0;\\n\\t\\tborder: var(--border) solid var(--color-border);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\n\\t\\tinput:checked + label > & {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&--failed {\\n\\t\\t\\t// Make sure to properly center fallback icon\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\t}\\n\\n\\t&__image {\\n\\t\\tmax-width: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n\\n\\t// Failed preview, fallback to mime icon\\n\\t&__preview--failed &__image {\\n\\t\\twidth: calc(var(--margin) * 8);\\n\\t\\t// Center mime icon\\n\\t\\tmargin: auto;\\n\\t\\tbackground-color: transparent !important;\\n\\n\\t\\tobject-fit: initial;\\n\\t}\\n\\n\\t&__title {\\n\\t\\toverflow: hidden;\\n\\t\\t// also count preview border\\n\\t\\tmax-width: calc(var(--width) + 2*2px);\\n\\t\\tpadding: var(--margin);\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\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, \".templates-picker__form[data-v-717d45aa]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-717d45aa]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-717d45aa]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-717d45aa]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-717d45aa],.templates-picker__buttons input[type=submit][data-v-717d45aa]{height:44px}.templates-picker[data-v-717d45aa] .modal-container{position:relative;overflow-y:auto !important}.templates-picker__loading[data-v-717d45aa]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/TemplatePicker.vue\"],\"names\":[],\"mappings\":\"AAuPC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,qDACC,iBAAA,CACA,0BAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.templates-picker {\\n\\t&__form {\\n\\t\\tpadding: calc(var(--margin) * 2);\\n\\t\\t// Will be handled by the buttons\\n\\t\\tpadding-bottom: 0;\\n\\n\\t\\th2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: var(--margin) 0 calc(var(--margin) * 2);\\n\\t\\t}\\n\\t}\\n\\n\\t&__list {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-gap: calc(var(--margin) * 2);\\n\\t\\tgrid-auto-columns: 1fr;\\n\\t\\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\\n\\t\\tmax-width: calc(var(--fullwidth) * 6);\\n\\t\\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\\n\\t\\t// Make sure all rows are the same height\\n\\t\\tgrid-auto-rows: 1fr;\\n\\t\\t// Center the columns set\\n\\t\\tjustify-content: center;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: calc(var(--margin) * 2) var(--margin);\\n\\t\\tposition: sticky;\\n\\t\\tbottom: 0;\\n\\t\\tbackground-image: linear-gradient(0, var(--gradient-main-background));\\n\\n\\t\\tbutton, input[type='submit'] {\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Make sure we're relative for the loading emptycontent on top\\n\\t::v-deep .modal-container {\\n\\t\\tposition: relative;\\n\\t\\toverflow-y: auto !important;\\n\\t}\\n\\n\\t&__loading {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tmargin: 0;\\n\\t\\tbackground-color: var(--color-main-background-translucent);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 181;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t181: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(34940); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","Settings","this","_settings","console","debug","view","filter","e","name","length","error","push","_h","$createElement","_self","_c","_vm","attrs","_l","setting","key","el","Setting","open","close","_name","_el","_open","_close","Vue","t","window","OCA","Files","Object","assign","addEventListener","TESTING","render","h","SettingsView","appSettingsHeader","document","getElementById","opened","currentTarget","children","classList","contains","settings","forEach","getCurrentDirectory","currentDirInfo","App","currentFileList","dirInfo","path","replace","getTemplates","axios","generateOcsUrl","response","data","ocs","createFromTemplate","filePath","templatePath","templateType","getCurrentUser","value","pathSections","startsWith","split","relativePath","section","encodeURIComponent","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","staticClass","id","domProps","checked","on","onCheck","_v","class","failedPreview","realPreviewUrl","onFailure","_s","nameWithoutExt","style","$event","preventDefault","stopPropagation","onSubmit","apply","arguments","_b","emptyTemplate","fileid","provider","template","ratio","_e","logger","getLoggerBuilder","setApp","detectUser","build","methods","n","TemplatePickerRoot","createElement","body","appendChild","templates","loadState","templatesPath","TemplatePicker","TemplatePickerView","propsData","$mount","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","initTemplatesFolder","removeMenuEntry","OC","Plugins","register","index","newTemplatePlugin","fileList","app","label","extension","FilesPlugin","copySystemTemplates","changeDirectory","template_path","showError","subscribe","query","setFilter","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","amdD","Error","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","keys","every","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"files-main.js?v=f1cb79f0b735dbcf537d","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/views/Settings.vue","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=template&id=47cd8aa6&","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=template&id=31c9bb4b&scoped=true&","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/files-app-settings.js","webpack:///nextcloud/apps/files/src/utils/davUtils.js","webpack:///nextcloud/apps/files/src/services/Templates.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?ab98","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?81db","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=template&id=440aea22&scoped=true&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?d2b0","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?afd8","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=template&id=278f6b79&scoped=true&","webpack:///nextcloud/apps/files/src/templates.js","webpack:///nextcloud/apps/files/src/legacy/filelistSearch.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=style&index=0&id=440aea22&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=style&index=0&id=278f6b79&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Gary Kim <gary@garykim.dev>\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 class Settings {\n\n\t_settings\n\n\tconstructor() {\n\t\tthis._settings = []\n\t\tconsole.debug('OCA.Files.Settings initialized')\n\t}\n\n\t/**\n\t * Register a new setting\n\t *\n\t * @since 19.0.0\n\t * @param {OCA.Files.Settings.Setting} view element to add to settings\n\t * @return {boolean} whether registering was successful\n\t */\n\tregister(view) {\n\t\tif (this._settings.filter(e => e.name === view.name).length > 0) {\n\t\t\tconsole.error('A setting with the same name is already registered')\n\t\t\treturn false\n\t\t}\n\t\tthis._settings.push(view)\n\t\treturn true\n\t}\n\n\t/**\n\t * All settings elements\n\t *\n\t * @return {OCA.Files.Settings.Setting[]} All currently registered settings\n\t */\n\tget settings() {\n\t\treturn this._settings\n\t}\n\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Setting.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!./Setting.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<div />\n</template>\n<script>\nexport default {\n\tname: 'Setting',\n\tprops: {\n\t\tel: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.appendChild(this.el())\n\t},\n}\n</script>\n<style>\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.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!./Settings.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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<template>\n\t<div id=\"files-app-extra-settings\">\n\t\t<template v-for=\"setting in settings\">\n\t\t\t<Setting :key=\"setting.name\" :el=\"setting.el\" />\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport Setting from '../components/Setting'\n\nexport default {\n\tname: 'Settings',\n\tcomponents: {\n\t\tSetting,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsettings: OCA.Files.Settings.settings,\n\t\t}\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n</style>\n","import { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=47cd8aa6&\"\nimport script from \"./Setting.vue?vue&type=script&lang=js&\"\nexport * from \"./Setting.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=31c9bb4b&scoped=true&\"\nimport script from \"./Settings.vue?vue&type=script&lang=js&\"\nexport * from \"./Settings.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"31c9bb4b\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"files-app-extra-settings\"}},[_vm._l((_vm.settings),function(setting){return [_c('Setting',{key:setting.name,attrs:{\"el\":setting.el}})]})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Gary Kim <gary@garykim.dev>\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 class Setting {\n\n\t_close\n\t_el\n\t_name\n\t_open\n\n\t/**\n\t * Create a new files app setting\n\t *\n\t * @since 19.0.0\n\t * @param {string} name the name of this setting\n\t * @param {object} component the component\n\t * @param {Function} component.el function that returns an unmounted dom element to be added\n\t * @param {Function} [component.open] callback for when setting is added\n\t * @param {Function} [component.close] callback for when setting is closed\n\t */\n\tconstructor(name, { el, open, close }) {\n\t\tthis._name = name\n\t\tthis._el = el\n\t\tthis._open = open\n\t\tthis._close = close\n\n\t\tif (typeof this._open !== 'function') {\n\t\t\tthis._open = () => {}\n\t\t}\n\n\t\tif (typeof this._close !== 'function') {\n\t\t\tthis._close = () => {}\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this._name\n\t}\n\n\tget el() {\n\t\treturn this._el\n\t}\n\n\tget open() {\n\t\treturn this._open\n\t}\n\n\tget close() {\n\t\treturn this._close\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Gary Kim <gary@garykim.dev>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Settings from './services/Settings'\nimport SettingsView from './views/Settings'\nimport Setting from './models/Setting'\n\nVue.prototype.t = t\n\n// Init Files App Settings Service\nif (!window.OCA.Files) {\n\twindow.OCA.Files = {}\n}\nObject.assign(window.OCA.Files, { Settings: new Settings() })\nObject.assign(window.OCA.Files.Settings, { Setting })\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (window.TESTING) {\n\t\treturn\n\t}\n\t// Init Vue app\n\t// eslint-disable-next-line\n\tnew Vue({\n\t\tel: '#files-app-settings',\n\t\trender: h => h(SettingsView),\n\t})\n\n\tconst appSettingsHeader = document.getElementById('app-settings-header')\n\tif (appSettingsHeader) {\n\t\tappSettingsHeader.addEventListener('click', e => {\n\t\t\tconst opened = e.currentTarget.children[0].classList.contains('opened')\n\t\t\tOCA.Files.Settings.settings.forEach(e => opened ? e.close() : e.open())\n\t\t})\n\t}\n})\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport const getRootPath = function() {\n\tif (getCurrentUser()) {\n\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`)\n\t} else {\n\t\treturn generateRemoteUrl('webdav').replace('/remote.php', '/public.php')\n\t}\n}\n\nexport const isPublic = function() {\n\treturn !getCurrentUser()\n}\n\nexport const getToken = function() {\n\treturn document.getElementById('sharingToken') && document.getElementById('sharingToken').value\n}\n\n/**\n * Return the current directory, fallback to root\n *\n * @return {string}\n */\nexport const getCurrentDirectory = function() {\n\tconst currentDirInfo = OCA?.Files?.App?.currentFileList?.dirInfo\n\t\t|| { path: '/', name: '' }\n\n\t// Make sure we don't have double slashes\n\treturn `${currentDirInfo.path}/${currentDirInfo.name}`.replace(/\\/\\//gi, '/')\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nexport const getTemplates = async function() {\n\tconst response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new file from a specified template\n *\n * @param {string} filePath The new file destination path\n * @param {string} templatePath The template source path\n * @param {string} templateType The template type e.g 'user'\n */\nexport const createFromTemplate = async function(filePath, templatePath, templateType) {\n\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {\n\t\tfilePath,\n\t\ttemplatePath,\n\t\ttemplateType,\n\t})\n\treturn response.data.ocs.data\n}\n","<!--\n - @copyright Copyright (c) 2020 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<li class=\"template-picker__item\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\ttype=\"radio\"\n\t\t\tclass=\"radio\"\n\t\t\tname=\"template-picker\"\n\t\t\t@change=\"onCheck\">\n\n\t\t<label :for=\"id\" class=\"template-picker__label\">\n\t\t\t<div class=\"template-picker__preview\"\n\t\t\t\t:class=\"failedPreview ? 'template-picker__preview--failed' : ''\">\n\t\t\t\t<img class=\"template-picker__image\"\n\t\t\t\t\t:src=\"realPreviewUrl\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t@error=\"onFailure\">\n\t\t\t</div>\n\n\t\t\t<span class=\"template-picker__title\">\n\t\t\t\t{{ nameWithoutExt }}\n\t\t\t</span>\n\t\t</label>\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { encodeFilePath } from '../utils/fileUtils'\nimport { getToken, isPublic } from '../utils/davUtils'\n\n// preview width generation\nconst previewWidth = 256\n\nexport default {\n\tname: 'TemplatePreview',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfileid: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpreviewUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\thasPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmime: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tratio: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfailedPreview: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.basename.indexOf('.') > -1 ? this.basename.split('.').slice(0, -1).join('.') : this.basename\n\t\t},\n\n\t\tid() {\n\t\t\treturn `template-picker-${this.fileid}`\n\t\t},\n\n\t\trealPreviewUrl() {\n\t\t\t// If original preview failed, fallback to mime icon\n\t\t\tif (this.failedPreview && this.mimeIcon) {\n\t\t\t\treturn this.mimeIcon\n\t\t\t}\n\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn this.previewUrl\n\t\t\t}\n\t\t\t// TODO: find a nicer standard way of doing this?\n\t\t\tif (isPublic()) {\n\t\t\t\treturn generateUrl(`/apps/files_sharing/publicpreview/${getToken()}?fileId=${this.fileid}&file=${encodeFilePath(this.filename)}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t\t}\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.fileid}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t},\n\n\t\tmimeIcon() {\n\t\t\treturn OC.MimeType.getIconUrl(this.mime)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonCheck() {\n\t\t\tthis.$emit('check', this.fileid)\n\t\t},\n\t\tonFailure() {\n\t\t\tthis.failedPreview = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n</style>\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst encodeFilePath = function(path) {\n\tconst pathSections = (path.startsWith('/') ? path : `/${path}`).split('/')\n\tlet relativePath = ''\n\tpathSections.forEach((section) => {\n\t\tif (section !== '') {\n\t\t\trelativePath += '/' + encodeURIComponent(section)\n\t\t}\n\t})\n\treturn relativePath\n}\n\n/**\n * Extract dir and name from file path\n *\n * @param {string} path the full path\n * @return {string[]} [dirPath, fileName]\n */\nconst extractFilePaths = function(path) {\n\tconst pathSections = path.split('/')\n\tconst fileName = pathSections[pathSections.length - 1]\n\tconst dirPath = pathSections.slice(0, pathSections.length - 1).join('/')\n\treturn [dirPath, fileName]\n}\n\nexport { encodeFilePath, extractFilePaths }\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.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!./TemplatePreview.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!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&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!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePreview.vue?vue&type=template&id=440aea22&scoped=true&\"\nimport script from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&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 \"440aea22\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{staticClass:\"template-picker__item\"},[_c('input',{staticClass:\"radio\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"template-picker\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onCheck}}),_vm._v(\" \"),_c('label',{staticClass:\"template-picker__label\",attrs:{\"for\":_vm.id}},[_c('div',{staticClass:\"template-picker__preview\",class:_vm.failedPreview ? 'template-picker__preview--failed' : ''},[_c('img',{staticClass:\"template-picker__image\",attrs:{\"src\":_vm.realPreviewUrl,\"alt\":\"\",\"draggable\":\"false\"},on:{\"error\":_vm.onFailure}})]),_vm._v(\" \"),_c('span',{staticClass:\"template-picker__title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.nameWithoutExt)+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 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<Modal v-if=\"opened\"\n\t\t:clear-view-delay=\"-1\"\n\t\tclass=\"templates-picker\"\n\t\tsize=\"large\"\n\t\t@close=\"close\">\n\t\t<form class=\"templates-picker__form\"\n\t\t\t:style=\"style\"\n\t\t\t@submit.prevent.stop=\"onSubmit\">\n\t\t\t<h2>{{ t('files', 'Pick a template for {name}', { name: nameWithoutExt }) }}</h2>\n\n\t\t\t<!-- Templates list -->\n\t\t\t<ul class=\"templates-picker__list\">\n\t\t\t\t<TemplatePreview v-bind=\"emptyTemplate\"\n\t\t\t\t\t:checked=\"checked === emptyTemplate.fileid\"\n\t\t\t\t\t@check=\"onCheck\" />\n\n\t\t\t\t<TemplatePreview v-for=\"template in provider.templates\"\n\t\t\t\t\t:key=\"template.fileid\"\n\t\t\t\t\tv-bind=\"template\"\n\t\t\t\t\t:checked=\"checked === template.fileid\"\n\t\t\t\t\t:ratio=\"provider.ratio\"\n\t\t\t\t\t@check=\"onCheck\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Cancel and submit -->\n\t\t\t<div class=\"templates-picker__buttons\">\n\t\t\t\t<button @click=\"close\">\n\t\t\t\t\t{{ t('files', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<input type=\"submit\"\n\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t:value=\"t('files', 'Create')\"\n\t\t\t\t\t:aria-label=\"t('files', 'Create a new file with the selected template')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<EmptyContent v-if=\"loading\" class=\"templates-picker__loading\" icon=\"icon-loading\">\n\t\t\t{{ t('files', 'Creating file') }}\n\t\t</EmptyContent>\n\t</Modal>\n</template>\n\n<script>\nimport { normalize } from 'path'\nimport { showError } from '@nextcloud/dialogs'\nimport EmptyContent from '@nextcloud/vue/dist/Components/EmptyContent'\nimport Modal from '@nextcloud/vue/dist/Components/Modal'\n\nimport { getCurrentDirectory } from '../utils/davUtils'\nimport { createFromTemplate, getTemplates } from '../services/Templates'\nimport TemplatePreview from '../components/TemplatePreview'\n\nconst border = 2\nconst margin = 8\nconst width = margin * 20\n\nexport default {\n\tname: 'TemplatePicker',\n\n\tcomponents: {\n\t\tEmptyContent,\n\t\tModal,\n\t\tTemplatePreview,\n\t},\n\n\tprops: {\n\t\tlogger: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Check empty template by default\n\t\t\tchecked: -1,\n\t\t\tloading: false,\n\t\t\tname: null,\n\t\t\topened: false,\n\t\t\tprovider: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.name.indexOf('.') > -1\n\t\t\t\t? this.name.split('.').slice(0, -1).join('.')\n\t\t\t\t: this.name\n\t\t},\n\n\t\temptyTemplate() {\n\t\t\treturn {\n\t\t\t\tbasename: t('files', 'Blank'),\n\t\t\t\tfileid: -1,\n\t\t\t\tfilename: this.t('files', 'Blank'),\n\t\t\t\thasPreview: false,\n\t\t\t\tmime: this.provider?.mimetypes[0] || this.provider?.mimetypes,\n\t\t\t}\n\t\t},\n\n\t\tselectedTemplate() {\n\t\t\treturn this.provider.templates.find(template => template.fileid === this.checked)\n\t\t},\n\n\t\t/**\n\t\t * Style css vars bin,d\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t'--margin': margin + 'px',\n\t\t\t\t'--width': width + 'px',\n\t\t\t\t'--border': border + 'px',\n\t\t\t\t'--fullwidth': width + 2 * margin + 2 * border + 'px',\n\t\t\t\t'--height': this.provider.ratio ? Math.round(width / this.provider.ratio) + 'px' : null,\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the picker\n\t\t *\n\t\t * @param {string} name the file name to create\n\t\t * @param {object} provider the template provider picked\n\t\t */\n\t\tasync open(name, provider) {\n\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.name = name\n\t\t\tthis.provider = provider\n\n\t\t\tconst templates = await getTemplates()\n\t\t\tconst fetchedProvider = templates.find((fetchedProvider) => fetchedProvider.app === provider.app && fetchedProvider.label === provider.label)\n\t\t\tif (fetchedProvider === null) {\n\t\t\t\tthrow new Error('Failed to match provider in results')\n\t\t\t}\n\t\t\tthis.provider = fetchedProvider\n\n\t\t\t// If there is no templates available, just create an empty file\n\t\t\tif (fetchedProvider.templates.length === 0) {\n\t\t\t\tthis.onSubmit()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Else, open the picker\n\t\t\tthis.opened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the picker and reset variables\n\t\t */\n\t\tclose() {\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.loading = false\n\t\t\tthis.name = null\n\t\t\tthis.opened = false\n\t\t\tthis.provider = null\n\t\t},\n\n\t\t/**\n\t\t * Manages the radio template picker change\n\t\t *\n\t\t * @param {number} fileid the selected template file id\n\t\t */\n\t\tonCheck(fileid) {\n\t\t\tthis.checked = fileid\n\t\t},\n\n\t\tasync onSubmit() {\n\t\t\tthis.loading = true\n\t\t\tconst currentDirectory = getCurrentDirectory()\n\t\t\tconst fileList = OCA?.Files?.App?.currentFileList\n\n\t\t\t// If the file doesn't have an extension, add the default one\n\t\t\tif (this.nameWithoutExt === this.name) {\n\t\t\t\tthis.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })\n\t\t\t\tthis.name = this.name + this.provider?.extension\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst fileInfo = await createFromTemplate(\n\t\t\t\t\tnormalize(`${currentDirectory}/${this.name}`),\n\t\t\t\t\tthis.selectedTemplate?.filename,\n\t\t\t\t\tthis.selectedTemplate?.templateType,\n\t\t\t\t)\n\t\t\t\tthis.logger.debug('Created new file', fileInfo)\n\n\t\t\t\tconst data = await fileList?.addAndFetchFileInfo(this.name).then((status, data) => data)\n\n\t\t\t\tconst model = new OCA.Files.FileInfoModel(data, {\n\t\t\t\t\tfilesClient: fileList?.filesClient,\n\t\t\t\t})\n\t\t\t\t// Run default action\n\t\t\t\tconst fileAction = OCA.Files.fileActions.getDefaultFileAction(fileInfo.mime, 'file', OC.PERMISSION_ALL)\n\t\t\t\tfileAction.action(fileInfo.basename, {\n\t\t\t\t\t$file: fileList?.findFileEl(this.name),\n\t\t\t\t\tdir: currentDirectory,\n\t\t\t\t\tfileList,\n\t\t\t\t\tfileActions: fileList?.fileActions,\n\t\t\t\t\tfileInfoModel: model,\n\t\t\t\t})\n\n\t\t\t\tthis.close()\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Error while creating the new file from template')\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(this.t('files', 'Unable to create new file from template'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t\theight: fit-content;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.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!./TemplatePicker.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!./TemplatePicker.vue?vue&type=style&index=0&id=278f6b79&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!./TemplatePicker.vue?vue&type=style&index=0&id=278f6b79&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePicker.vue?vue&type=template&id=278f6b79&scoped=true&\"\nimport script from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePicker.vue?vue&type=style&index=0&id=278f6b79&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 \"278f6b79\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.opened)?_c('Modal',{staticClass:\"templates-picker\",attrs:{\"clear-view-delay\":-1,\"size\":\"large\"},on:{\"close\":_vm.close}},[_c('form',{staticClass:\"templates-picker__form\",style:(_vm.style),on:{\"submit\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onSubmit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('files', 'Pick a template for {name}', { name: _vm.nameWithoutExt })))]),_vm._v(\" \"),_c('ul',{staticClass:\"templates-picker__list\"},[_c('TemplatePreview',_vm._b({attrs:{\"checked\":_vm.checked === _vm.emptyTemplate.fileid},on:{\"check\":_vm.onCheck}},'TemplatePreview',_vm.emptyTemplate,false)),_vm._v(\" \"),_vm._l((_vm.provider.templates),function(template){return _c('TemplatePreview',_vm._b({key:template.fileid,attrs:{\"checked\":_vm.checked === template.fileid,\"ratio\":_vm.provider.ratio},on:{\"check\":_vm.onCheck}},'TemplatePreview',template,false))})],2),_vm._v(\" \"),_c('div',{staticClass:\"templates-picker__buttons\"},[_c('button',{on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"aria-label\":_vm.t('files', 'Create a new file with the selected template')},domProps:{\"value\":_vm.t('files', 'Create')}})])]),_vm._v(\" \"),(_vm.loading)?_c('EmptyContent',{staticClass:\"templates-picker__loading\",attrs:{\"icon\":\"icon-loading\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files', 'Creating file'))+\"\\n\\t\")]):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentDirectory } from './utils/davUtils'\nimport axios from '@nextcloud/axios'\nimport Vue from 'vue'\n\nimport TemplatePickerView from './views/TemplatePicker'\nimport { showError } from '@nextcloud/dialogs'\n\n// Set up logger\nconst logger = getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n\n// Add translates functions\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\n// Create document root\nconst TemplatePickerRoot = document.createElement('div')\nTemplatePickerRoot.id = 'template-picker'\ndocument.body.appendChild(TemplatePickerRoot)\n\n// Retrieve and init templates\nlet templates = loadState('files', 'templates', [])\nlet templatesPath = loadState('files', 'templates_path', false)\nlogger.debug('Templates providers', templates)\nlogger.debug('Templates folder', { templatesPath })\n\n// Init vue app\nconst View = Vue.extend(TemplatePickerView)\nconst TemplatePicker = new View({\n\tname: 'TemplatePicker',\n\tpropsData: {\n\t\tlogger,\n\t},\n})\nTemplatePicker.$mount('#template-picker')\n\n// Init template engine after load to make sure it's the last injected entry\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (!templatesPath) {\n\t\tlogger.debug('Templates folder not initialized')\n\t\tconst initTemplatesPlugin = {\n\t\t\tattach(menu) {\n\t\t\t\t// register the new menu entry\n\t\t\t\tmenu.addMenuEntry({\n\t\t\t\t\tid: 'template-init',\n\t\t\t\t\tdisplayName: t('files', 'Set up templates folder'),\n\t\t\t\t\ttemplateName: t('files', 'Templates'),\n\t\t\t\t\ticonClass: 'icon-template-add',\n\t\t\t\t\tfileType: 'file',\n\t\t\t\t\tactionHandler(name) {\n\t\t\t\t\t\tinitTemplatesFolder(name)\n\t\t\t\t\t\tmenu.removeMenuEntry('template-init')\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t\tOC.Plugins.register('OCA.Files.NewFileMenu', initTemplatesPlugin)\n\t}\n})\n\n// Init template files menu\ntemplates.forEach((provider, index) => {\n\tconst newTemplatePlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: `template-new-${provider.app}-${index}`,\n\t\t\t\tdisplayName: provider.label,\n\t\t\t\ttemplateName: provider.label + provider.extension,\n\t\t\t\ticonClass: provider.iconClass || 'icon-file',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tTemplatePicker.open(name, provider)\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newTemplatePlugin)\n})\n\n/**\n * Init the template directory\n *\n * @param {string} name the templates folder name\n */\nconst initTemplatesFolder = async function(name) {\n\tconst templatePath = (getCurrentDirectory() + `/${name}`).replace('//', '/')\n\ttry {\n\t\tlogger.debug('Initializing the templates directory', { templatePath })\n\t\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/path'), {\n\t\t\ttemplatePath,\n\t\t\tcopySystemTemplates: true,\n\t\t})\n\n\t\t// Go to template directory\n\t\tOCA.Files.App.currentFileList.changeDirectory(templatePath, true, true)\n\n\t\ttemplates = response.data.ocs.data.templates\n\t\ttemplatesPath = response.data.ocs.data.template_path\n\t} catch (error) {\n\t\tlogger.error('Unable to initialize the templates directory')\n\t\tshowError(t('files', 'Unable to initialize the templates directory'))\n\t}\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\n(function() {\n\n\tconst FilesPlugin = {\n\t\tattach(fileList) {\n\t\t\tsubscribe('nextcloud:unified-search.search', ({ query }) => {\n\t\t\t\tfileList.setFilter(query)\n\t\t\t})\n\t\t\tsubscribe('nextcloud:unified-search.reset', () => {\n\t\t\t\tthis.query = null\n\t\t\t\tfileList.setFilter('')\n\t\t\t})\n\n\t\t},\n\t}\n\n\twindow.OC.Plugins.register('OCA.Files.FileList', FilesPlugin)\n\n})()\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:transparent !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/TemplatePreview.vue\"],\"names\":[],\"mappings\":\"AAsJC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,uCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.template-picker {\\n\\t&__item {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: flex;\\n\\t\\t// Align in the middle of the grid\\n\\t\\talign-items: center;\\n\\t\\tflex: 1 1;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&, * {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&::before {\\n\\t\\t\\tdisplay: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\t// Stretch so all entries are the same width\\n\\t\\tflex: 1 1;\\n\\t\\twidth: var(--width);\\n\\t\\tmin-height: var(--height);\\n\\t\\tmax-height: var(--height);\\n\\t\\tpadding: 0;\\n\\t\\tborder: var(--border) solid var(--color-border);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\n\\t\\tinput:checked + label > & {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&--failed {\\n\\t\\t\\t// Make sure to properly center fallback icon\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\t}\\n\\n\\t&__image {\\n\\t\\tmax-width: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n\\n\\t// Failed preview, fallback to mime icon\\n\\t&__preview--failed &__image {\\n\\t\\twidth: calc(var(--margin) * 8);\\n\\t\\t// Center mime icon\\n\\t\\tmargin: auto;\\n\\t\\tbackground-color: transparent !important;\\n\\n\\t\\tobject-fit: initial;\\n\\t}\\n\\n\\t&__title {\\n\\t\\toverflow: hidden;\\n\\t\\t// also count preview border\\n\\t\\tmax-width: calc(var(--width) + 2*2px);\\n\\t\\tpadding: var(--margin);\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\n}\\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, \".templates-picker__form[data-v-278f6b79]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-278f6b79]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-278f6b79]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-278f6b79]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-278f6b79],.templates-picker__buttons input[type=submit][data-v-278f6b79]{height:44px}.templates-picker[data-v-278f6b79] .modal-container{position:relative;height:fit-content}.templates-picker__loading[data-v-278f6b79]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/TemplatePicker.vue\"],\"names\":[],\"mappings\":\"AAuPC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,qDACC,iBAAA,CACA,kBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.templates-picker {\\n\\t&__form {\\n\\t\\tpadding: calc(var(--margin) * 2);\\n\\t\\t// Will be handled by the buttons\\n\\t\\tpadding-bottom: 0;\\n\\n\\t\\th2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: var(--margin) 0 calc(var(--margin) * 2);\\n\\t\\t}\\n\\t}\\n\\n\\t&__list {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-gap: calc(var(--margin) * 2);\\n\\t\\tgrid-auto-columns: 1fr;\\n\\t\\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\\n\\t\\tmax-width: calc(var(--fullwidth) * 6);\\n\\t\\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\\n\\t\\t// Make sure all rows are the same height\\n\\t\\tgrid-auto-rows: 1fr;\\n\\t\\t// Center the columns set\\n\\t\\tjustify-content: center;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: calc(var(--margin) * 2) var(--margin);\\n\\t\\tposition: sticky;\\n\\t\\tbottom: 0;\\n\\t\\tbackground-image: linear-gradient(0, var(--gradient-main-background));\\n\\n\\t\\tbutton, input[type='submit'] {\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Make sure we're relative for the loading emptycontent on top\\n\\t::v-deep .modal-container {\\n\\t\\tposition: relative;\\n\\t\\theight: fit-content;\\n\\t}\\n\\n\\t&__loading {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tmargin: 0;\\n\\t\\tbackground-color: var(--color-main-background-translucent);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 181;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t181: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(23682); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","Settings","this","_settings","console","debug","view","filter","e","name","length","error","push","_h","$createElement","_self","_c","_vm","attrs","_l","setting","key","el","Setting","open","close","_name","_el","_open","_close","Vue","t","window","OCA","Files","Object","assign","addEventListener","TESTING","render","h","SettingsView","appSettingsHeader","document","getElementById","opened","currentTarget","children","classList","contains","settings","forEach","getCurrentDirectory","currentDirInfo","App","currentFileList","dirInfo","path","replace","getTemplates","axios","generateOcsUrl","response","data","ocs","createFromTemplate","filePath","templatePath","templateType","getCurrentUser","value","pathSections","startsWith","split","relativePath","section","encodeURIComponent","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","staticClass","id","domProps","checked","on","onCheck","_v","class","failedPreview","realPreviewUrl","onFailure","_s","nameWithoutExt","style","$event","preventDefault","stopPropagation","onSubmit","apply","arguments","_b","emptyTemplate","fileid","provider","template","ratio","_e","logger","getLoggerBuilder","setApp","detectUser","build","methods","n","TemplatePickerRoot","createElement","body","appendChild","templates","loadState","templatesPath","TemplatePicker","TemplatePickerView","propsData","$mount","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","initTemplatesFolder","removeMenuEntry","OC","Plugins","register","index","newTemplatePlugin","fileList","app","label","extension","FilesPlugin","copySystemTemplates","changeDirectory","template_path","showError","subscribe","query","setFilter","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","amdD","Error","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","keys","every","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/settings-users-351.js b/dist/settings-users-351.js
index cee1a776fce..4a11b484256 100644
--- a/dist/settings-users-351.js
+++ b/dist/settings-users-351.js
@@ -1,3 +1,3 @@
/*! For license information please see settings-users-351.js.LICENSE.txt */
-"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[351],{8353:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,".row--menu-opened[data-v-4c932ffd]{z-index:1 !important}.row[data-v-4c932ffd] .multiselect__single{z-index:auto !important}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList/UserRow.vue"],names:[],mappings:"AAyqBA,mCACC,oBAAA,CAED,2CACC,uBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Force menu to be above other rows\n.row--menu-opened {\n\tz-index: 1 !important;\n}\n.row::v-deep .multiselect__single {\n\tz-index: auto !important;\n}\n"],sourceRoot:""}]),n.Z=r},6857:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,".cellText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-more{background-color:var(--color-main-background);border:0}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList/UserRowSimple.vue"],names:[],mappings:"AA6LC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t.cellText {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n}\n\t.icon-more {\n\t\tbackground-color: var(--color-main-background);\n\t\tborder: 0;\n\t}\n"],sourceRoot:""}]),n.Z=r},36095:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,".app-navigation__list #addgroup[data-v-1babbc68] .app-navigation-entry__utils{display:none}","",{version:3,sources:["webpack://./apps/settings/src/views/Users.vue"],names:[],mappings:"AAieA,8EACC,YAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// force hiding the editing action for the add group entry\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\n\tdisplay: none;\n}\n"],sourceRoot:""}]),n.Z=r},15742:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,'\n.modal-wrapper[data-v-897578ae] {\n\tmargin: 2vh 0;\n\talign-items: flex-start;\n}\n.modal__content[data-v-897578ae] {\n\tdisplay: flex;\n\tpadding: 20px;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n\toverflow: auto;\n}\n.modal__item[data-v-897578ae] {\n\tmargin-bottom: 16px;\n\twidth: 100%;\n}\n.modal__item[data-v-897578ae]:not(:focus):not(:active) {\n\tborder-color: var(--color-border-dark);\n}\n.modal__item[data-v-897578ae] .multiselect {\n\twidth: 100%;\n}\n.user-actions[data-v-897578ae] {\n\tmargin-top: 20px;\n}\n.modal__content[data-v-897578ae] .multiselect__single {\n\ttext-align: left;\n\tbox-sizing: border-box;\n}\n.modal__content[data-v-897578ae] .multiselect__content-wrapper {\n\tbox-sizing: border-box;\n}\n.row[data-v-897578ae] .multiselect__single {\n\tz-index: auto !important;\n}\n\n/* fake input for groups validation */\ninput#newgroups[data-v-897578ae] {\n\tposition: absolute;\n\topacity: 0;\n\t/* The "hidden" input is behind the Multiselect, so in general it does\n\t * not receives clicks. However, with Firefox, after the validation\n\t * fails, it will receive the first click done on it, so its width needs\n\t * to be set to 0 to prevent that ("pointer-events: none" does not\n\t * prevent it). */\n\twidth: 0;\n}\n',"",{version:3,sources:["webpack://./apps/settings/src/components/UserList.vue"],names:[],mappings:";AA8kBA;CACA,aAAA;CACA,uBAAA;AACA;AACA;CACA,aAAA;CACA,aAAA;CACA,sBAAA;CACA,mBAAA;CACA,kBAAA;CACA,cAAA;AACA;AACA;CACA,mBAAA;CACA,WAAA;AACA;AACA;CACA,sCAAA;AACA;AACA;CACA,WAAA;AACA;AACA;CACA,gBAAA;AACA;AACA;CACA,gBAAA;CACA,sBAAA;AACA;AACA;CACA,sBAAA;AACA;AACA;CACA,wBAAA;AACA;;AAEA,qCAAA;AACA;CACA,kBAAA;CACA,UAAA;CACA;;;;kBAIA;CACA,QAAA;AACA",sourcesContent:['\x3c!--\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 --\x3e\n\n<template>\n\t<div id="app-content" class="user-list-grid" @scroll.passive="onScroll">\n\t\t<Modal v-if="showConfig.showNewUserForm" @close="closeModal">\n\t\t\t<form id="new-user"\n\t\t\t\t:disabled="loading.all"\n\t\t\t\tclass="modal__content"\n\t\t\t\t@submit.prevent="createUser">\n\t\t\t\t<h2>{{ t(\'settings\',\'New user\') }}</h2>\n\t\t\t\t<input id="newusername"\n\t\t\t\t\tref="newusername"\n\t\t\t\t\tv-model="newUser.id"\n\t\t\t\t\t:disabled="settings.newUserGenerateUserID"\n\t\t\t\t\t:placeholder="settings.newUserGenerateUserID\n\t\t\t\t\t\t? t(\'settings\', \'Will be autogenerated\')\n\t\t\t\t\t\t: t(\'settings\', \'Username\')"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="username"\n\t\t\t\t\tpattern="[a-zA-Z0-9 _\\.@\\-\']+"\n\t\t\t\t\trequired\n\t\t\t\t\ttype="text">\n\t\t\t\t<input id="newdisplayname"\n\t\t\t\t\tv-model="newUser.displayName"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Display name\')"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="displayname"\n\t\t\t\t\ttype="text">\n\t\t\t\t<input id="newuserpassword"\n\t\t\t\t\tref="newuserpassword"\n\t\t\t\t\tv-model="newUser.password"\n\t\t\t\t\t:minlength="minPasswordLength"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Password\')"\n\t\t\t\t\t:required="newUser.mailAddress===\'\'"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="new-password"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="password"\n\t\t\t\t\ttype="password">\n\t\t\t\t<input id="newemail"\n\t\t\t\t\tv-model="newUser.mailAddress"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Email\')"\n\t\t\t\t\t:required="newUser.password===\'\' || settings.newUserRequireEmail"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="email"\n\t\t\t\t\ttype="email">\n\t\t\t\t<div class="groups modal__item">\n\t\t\t\t\t\x3c!-- hidden input trick for vanilla html5 form validation --\x3e\n\t\t\t\t\t<input v-if="!settings.isAdmin"\n\t\t\t\t\t\tid="newgroups"\n\t\t\t\t\t\t:class="{\'icon-loading-small\': loading.groups}"\n\t\t\t\t\t\t:required="!settings.isAdmin"\n\t\t\t\t\t\t:value="newUser.groups"\n\t\t\t\t\t\ttabindex="-1"\n\t\t\t\t\t\ttype="text">\n\t\t\t\t\t<Multiselect v-model="newUser.groups"\n\t\t\t\t\t\t:close-on-select="false"\n\t\t\t\t\t\t:disabled="loading.groups||loading.all"\n\t\t\t\t\t\t:multiple="true"\n\t\t\t\t\t\t:options="canAddGroups"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Add user to group\')"\n\t\t\t\t\t\t:tag-width="60"\n\t\t\t\t\t\t:taggable="true"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttag-placeholder="create"\n\t\t\t\t\t\ttrack-by="id"\n\t\t\t\t\t\t@tag="createGroup">\n\t\t\t\t\t\t\x3c!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\t\tSubadmins can\'t create users outside their groups\n\t\t\t\t\t\t\tTherefore, empty select is forbidden --\x3e\n\t\t\t\t\t\t<span slot="noResult">{{ t(\'settings\', \'No results\') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div v-if="subAdminsGroups.length>0 && settings.isAdmin"\n\t\t\t\t\tclass="subadmins modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.subAdminsGroups"\n\t\t\t\t\t\t:close-on-select="false"\n\t\t\t\t\t\t:multiple="true"\n\t\t\t\t\t\t:options="subAdminsGroups"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Set user as admin for\')"\n\t\t\t\t\t\t:tag-width="60"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttrack-by="id">\n\t\t\t\t\t\t<span slot="noResult">{{ t(\'settings\', \'No results\') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class="quota modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.quota"\n\t\t\t\t\t\t:allow-empty="false"\n\t\t\t\t\t\t:options="quotaOptions"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Select user quota\')"\n\t\t\t\t\t\t:taggable="true"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="label"\n\t\t\t\t\t\ttrack-by="id"\n\t\t\t\t\t\t@tag="validateQuota" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showLanguages" class="languages modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.language"\n\t\t\t\t\t\t:allow-empty="false"\n\t\t\t\t\t\t:options="languages"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Default language\')"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tgroup-label="label"\n\t\t\t\t\t\tgroup-values="languages"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttrack-by="code" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showStoragePath" class="storageLocation" />\n\t\t\t\t<div v-if="showConfig.showUserBackend" class="userBackend" />\n\t\t\t\t<div v-if="showConfig.showLastLogin" class="lastLogin" />\n\t\t\t\t<div class="user-actions">\n\t\t\t\t\t<button id="newsubmit"\n\t\t\t\t\t\tclass="button primary"\n\t\t\t\t\t\ttype="submit"\n\t\t\t\t\t\tvalue="">\n\t\t\t\t\t\t{{ t(\'settings\', \'Add a new user\') }}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</Modal>\n\t\t<div id="grid-header"\n\t\t\t:class="{\'sticky\': scrolled && !showConfig.showNewUserForm}"\n\t\t\tclass="row">\n\t\t\t<div id="headerAvatar" class="avatar" />\n\t\t\t<div id="headerName" class="name">\n\t\t\t\t{{ t(\'settings\', \'Username\') }}\n\n\t\t\t\t<div class="subtitle">\n\t\t\t\t\t{{ t(\'settings\', \'Display name\') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id="headerPassword" class="password">\n\t\t\t\t{{ t(\'settings\', \'Password\') }}\n\t\t\t</div>\n\t\t\t<div id="headerAddress" class="mailAddress">\n\t\t\t\t{{ t(\'settings\', \'Email\') }}\n\t\t\t</div>\n\t\t\t<div id="headerGroups" class="groups">\n\t\t\t\t{{ t(\'settings\', \'Groups\') }}\n\t\t\t</div>\n\t\t\t<div v-if="subAdminsGroups.length>0 && settings.isAdmin"\n\t\t\t\tid="headerSubAdmins"\n\t\t\t\tclass="subadmins">\n\t\t\t\t{{ t(\'settings\', \'Group admin for\') }}\n\t\t\t</div>\n\t\t\t<div id="headerQuota" class="quota">\n\t\t\t\t{{ t(\'settings\', \'Quota\') }}\n\t\t\t</div>\n\t\t\t<div v-if="showConfig.showLanguages"\n\t\t\t\tid="headerLanguages"\n\t\t\t\tclass="languages">\n\t\t\t\t{{ t(\'settings\', \'Language\') }}\n\t\t\t</div>\n\n\t\t\t<div v-if="showConfig.showUserBackend || showConfig.showStoragePath"\n\t\t\t\tclass="headerUserBackend userBackend">\n\t\t\t\t<div v-if="showConfig.showUserBackend" class="userBackend">\n\t\t\t\t\t{{ t(\'settings\', \'User backend\') }}\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showStoragePath"\n\t\t\t\t\tclass="subtitle storageLocation">\n\t\t\t\t\t{{ t(\'settings\', \'Storage location\') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-if="showConfig.showLastLogin"\n\t\t\t\tclass="headerLastLogin lastLogin">\n\t\t\t\t{{ t(\'settings\', \'Last login\') }}\n\t\t\t</div>\n\n\t\t\t<div class="userActions" />\n\t\t</div>\n\n\t\t<user-row v-for="user in filteredUsers"\n\t\t\t:key="user.id"\n\t\t\t:external-actions="externalActions"\n\t\t\t:groups="groups"\n\t\t\t:languages="languages"\n\t\t\t:quota-options="quotaOptions"\n\t\t\t:settings="settings"\n\t\t\t:show-config="showConfig"\n\t\t\t:sub-admins-groups="subAdminsGroups"\n\t\t\t:user="user" />\n\t\t<InfiniteLoading ref="infiniteLoading" @infinite="infiniteHandler">\n\t\t\t<div slot="spinner">\n\t\t\t\t<div class="users-icon-loading icon-loading" />\n\t\t\t</div>\n\t\t\t<div slot="no-more">\n\t\t\t\t<div class="users-list-end" />\n\t\t\t</div>\n\t\t\t<div slot="no-results">\n\t\t\t\t<div id="emptycontent">\n\t\t\t\t\t<div class="icon-contacts-dark" />\n\t\t\t\t\t<h2>{{ t(\'settings\', \'No users in here\') }}</h2>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</InfiniteLoading>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from \'@nextcloud/event-bus\'\nimport InfiniteLoading from \'vue-infinite-loading\'\nimport Vue from \'vue\'\nimport { Modal } from \'@nextcloud/vue\'\n\nimport Multiselect from \'@nextcloud/vue/dist/Components/Multiselect\'\n\nimport userRow from \'./UserList/UserRow\'\n\nconst unlimitedQuota = {\n\tid: \'none\',\n\tlabel: t(\'settings\', \'Unlimited\'),\n}\nconst defaultQuota = {\n\tid: \'default\',\n\tlabel: t(\'settings\', \'Default quota\'),\n}\nconst newUser = {\n\tid: \'\',\n\tdisplayName: \'\',\n\tpassword: \'\',\n\tmailAddress: \'\',\n\tgroups: [],\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\tcomponents: {\n\t\tModal,\n\t\tuserRow,\n\t\tMultiselect,\n\t\tInfiniteLoading,\n\t},\n\tprops: {\n\t\tusers: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\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\tdata() {\n\t\treturn {\n\t\t\tunlimitedQuota,\n\t\t\tdefaultQuota,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tgroups: false,\n\t\t\t},\n\t\t\tscrolled: false,\n\t\t\tsearchQuery: \'\',\n\t\t\tnewUser: Object.assign({}, newUser),\n\t\t}\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\t\tselectedGroupDecoded() {\n\t\t\treturn decodeURIComponent(this.selectedGroup)\n\t\t},\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\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\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\t\tsubAdminsGroups() {\n\t\t\t// data provided php side\n\t\t\treturn this.$store.getters.getSubadminGroups\n\t\t},\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(this.unlimitedQuota)\n\t\t\t}\n\t\t\tquotaPreset.unshift(this.defaultQuota)\n\t\t\treturn quotaPreset\n\t\t},\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\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\twatch: {\n\t\t// watch url change and group select\n\t\tselectedGroup(val, old) {\n\t\t\t// if selected is the disabled group but it\'s empty\n\t\t\tthis.redirectIfDisabled()\n\t\t\tthis.$store.commit(\'resetUsers\')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\tthis.setNewUserDefaultGroup(val)\n\t\t},\n\n\t\t// make sure the infiniteLoading state is changed if we manually\n\t\t// add/remove data from the store\n\t\tusersCount(val, old) {\n\t\t\t// deleting the last user, reset the list\n\t\t\tif (val === 0 && old === 1) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t\t// adding the first user, warn the infiniteLoader that\n\t\t\t\t// the list is not empty anymore (we don\'t fetch the newly\n\t\t\t\t// added user as we already have all the info we need)\n\t\t\t} else if (val === 1 && old === 0) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.loaded()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\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\tthis.redirectIfDisabled()\n\t},\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\tonScroll(event) {\n\t\t\tthis.scrolled = event.target.scrollTo > 0\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\tinfiniteHandler($state) {\n\t\t\tthis.$store.dispatch(\'getUsers\', {\n\t\t\t\toffset: this.usersOffset,\n\t\t\t\tlimit: this.usersLimit,\n\t\t\t\tgroup: this.selectedGroup !== \'disabled\' ? this.selectedGroup : \'\',\n\t\t\t\tsearch: this.searchQuery,\n\t\t\t})\n\t\t\t\t.then((usersCount) => {\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\t$state.loaded()\n\t\t\t\t\t}\n\t\t\t\t\tif (usersCount < this.usersLimit) {\n\t\t\t\t\t\t$state.complete()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t/* SEARCH */\n\t\tsearch({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t\tthis.$store.commit(\'resetUsers\')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t},\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\t\tcreateUser() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch(\'addUser\', {\n\t\t\t\tuserid: this.newUser.id,\n\t\t\t\tpassword: this.newUser.password,\n\t\t\t\tdisplayName: this.newUser.displayName,\n\t\t\t\temail: this.newUser.mailAddress,\n\t\t\t\tgroups: this.newUser.groups.map(group => group.id),\n\t\t\t\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\n\t\t\t\tquota: this.newUser.quota.id,\n\t\t\t\tlanguage: this.newUser.language.code,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.resetForm()\n\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\tthis.closeModal()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n\t\t\t\t\t\tconst statuscode = error.response.data.ocs.meta.statuscode\n\t\t\t\t\t\tif (statuscode === 102) {\n\t\t\t\t\t\t\t// wrong username\n\t\t\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\t\t} else if (statuscode === 107) {\n\t\t\t\t\t\t\t// wrong password\n\t\t\t\t\t\t\tthis.$refs.newuserpassword.focus()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\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 * Create a new group\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t * @return {Promise}\n\t\t */\n\t\tcreateGroup(gid) {\n\t\t\tthis.loading.groups = true\n\t\t\tthis.$store.dispatch(\'addGroup\', gid)\n\t\t\t\t.then((group) => {\n\t\t\t\t\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\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\tredirectIfDisabled() {\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\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t}\n\t\t},\n\t\tcloseModal() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.showConfig.showNewUserForm = false\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.modal-wrapper {\n\t\tmargin: 2vh 0;\n\t\talign-items: flex-start;\n\t}\n\t.modal__content {\n\t\tdisplay: flex;\n\t\tpadding: 20px;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\ttext-align: center;\n\t\toverflow: auto;\n\t}\n\t.modal__item {\n\t\tmargin-bottom: 16px;\n\t\twidth: 100%;\n\t}\n\t.modal__item:not(:focus):not(:active) {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\t.modal__item::v-deep .multiselect {\n\t\twidth: 100%;\n\t}\n\t.user-actions {\n\t\tmargin-top: 20px;\n\t}\n\t.modal__content::v-deep .multiselect__single {\n\t\ttext-align: left;\n\t\tbox-sizing: border-box;\n\t}\n\t.modal__content::v-deep .multiselect__content-wrapper {\n\t\tbox-sizing: border-box;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\n\n\t/* fake input for groups validation */\n\tinput#newgroups {\n\t\tposition: absolute;\n\t\topacity: 0;\n\t\t/* The "hidden" input is behind the Multiselect, so in general it does\n\t\t * not receives clicks. However, with Firefox, after the validation\n\t\t * fails, it will receive the first click done on it, so its width needs\n\t\t * to be set to 0 to prevent that ("pointer-events: none" does not\n\t\t * prevent it). */\n\t\twidth: 0;\n\t}\n</style>\n'],sourceRoot:""}]),n.Z=r},27843:function(n,e,s){s.r(e),s.d(e,{default:function(){return Ft}});var i=s(23068),a=s.n(i),r=s(58908),o=s.n(r),u=s(49169),l=s.n(u),d=s(50753),c=s.n(d),g=s(7612),p=s.n(g),h=s(17578),m=s.n(h),f=s(32353),v=s.n(f),w=s(4820),b=s(9597),A=s.n(b),C=s(79753),y=s(7811),_=s.n(y),U=s(20144),k=s(87369),x=s.n(k),L=s(88408),G=s.n(L),S=s(56286),M=s.n(S),q=s(43337),N=s.n(q);function $(t,n,e,s,i,a,r){try{var o=t[a](r),u=o.value}catch(t){return void e(t)}o.done?n(u):Promise.resolve(u).then(s,i)}var O={name:"GroupListItem",components:{ActionInput:G(),ActionButton:M(),CounterBubble:N(),AppNavigationItem:p()},props:{id:{type:String,required:!0},title:{type:String,required:!0},count:{type:Number,required:!1}},data:function(){return{loadingRenameGroup:!1,openGroupMenu:!1}},computed:{settings:function(){return this.$store.getters.getServerData}},methods:{handleGroupMenuOpen:function(){this.openGroupMenu=!0},renameGroup:function(t){var n,e=this;return(n=regeneratorRuntime.mark((function n(){var s;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(""!==t.trim()){n.next=2;break}return n.abrupt("return");case 2:if(""!==(s=e.$refs.displayNameInput.$el.querySelector('input[type="text"]').value).trim()){n.next=5;break}return n.abrupt("return");case 5:return n.prev=5,e.openGroupMenu=!1,e.loadingRenameGroup=!0,n.next=10,e.$store.dispatch("renameGroup",{groupid:t.trim(),displayName:s.trim()});case 10:e.loadingRenameGroup=!1,n.next=17;break;case 13:n.prev=13,n.t0=n.catch(5),e.openGroupMenu=!0,e.loadingRenameGroup=!1;case 17:case"end":return n.stop()}}),n,null,[[5,13]])})),function(){var t=this,e=arguments;return new Promise((function(s,i){var a=n.apply(t,e);function r(t){$(a,s,i,r,o,"next",t)}function o(t){$(a,s,i,r,o,"throw",t)}r(void 0)}))})()},removeGroup:function(n){var e=this;OC.dialogs.confirm(t("settings","You are about to remove the group {group}. The users will NOT be deleted.",{group:n}),t("settings","Please confirm the group removal "),(function(t){t&&e.$store.dispatch("removeGroup",n)}))}}},P=O,D=s(51900),R=(0,D.Z)(P,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("AppNavigationItem",{key:t.id,attrs:{exact:!0,title:t.title,to:{name:"group",params:{selectedGroup:encodeURIComponent(t.id)}},icon:"icon-group",loading:t.loadingRenameGroup,"menu-open":t.openGroupMenu},on:{"update:menuOpen":t.handleGroupMenuOpen},scopedSlots:t._u([{key:"counter",fn:function(){return[t.count?e("CounterBubble",[t._v("\n\t\t\t"+t._s(t.count)+"\n\t\t")]):t._e()]},proxy:!0},{key:"actions",fn:function(){return["admin"!==t.id&&"disabled"!==t.id&&t.settings.isAdmin?e("ActionInput",{ref:"displayNameInput",attrs:{icon:"icon-edit",type:"text",value:t.title},on:{submit:function(n){return t.renameGroup(t.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Rename group"))+"\n\t\t")]):t._e(),t._v(" "),"admin"!==t.id&&"disabled"!==t.id&&t.settings.isAdmin?e("ActionButton",{attrs:{icon:"icon-delete"},on:{click:function(n){return t.removeGroup(t.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Remove group"))+"\n\t\t")]):t._e()]},proxy:!0}])})}),[],!1,null,null,null).exports,Q=s(74854),B=s(30306),z=s.n(B),I=s(33476),F=s(2649),T=s.n(F),j=s(34741),E=s(26533),W=s.n(E),Z=s(79440),H=s.n(Z),Y=s(22200);function V(t){return V="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},V(t)}var J={props:{user:{type:Object,required:!0},settings:{type:Object,default:function(){return{}}},groups:{type:Array,default:function(){return[]}},subAdminsGroups:{type:Array,default:function(){return[]}},quotaOptions:{type:Array,default:function(){return[]}},showConfig:{type:Object,default:function(){return{}}},languages:{type:Array,required:!0},externalActions:{type:Array,default:function(){return[]}}},computed:{userGroups:function(){var t=this;return this.groups.filter((function(n){return t.user.groups.includes(n.id)}))},userSubAdminsGroups:function(){var t=this;return this.subAdminsGroups.filter((function(n){return t.user.subadmin.includes(n.id)}))},availableGroups:function(){var t=this;return this.groups.map((function(n){var e=Object.assign({},n);return e.$isDisabled=!1===n.canAdd&&!t.user.groups.includes(n.id)||!1===n.canRemove&&t.user.groups.includes(n.id),e}))},usedSpace:function(){return this.user.quota.used?t("settings","{size} used",{size:OC.Util.humanFileSize(this.user.quota.used)}):t("settings","{size} used",{size:OC.Util.humanFileSize(0)})},usedQuota:function(){var t=this.user.quota.quota;return t=t>0?Math.min(100,Math.round(this.user.quota.used/t*100)):95*(1-1/(this.user.quota.used/(10*Math.pow(2,30))+1)),isNaN(t)?0:t},userQuota:function(){if(this.user.quota.quota>=0){var t=OC.Util.humanFileSize(this.user.quota.quota);return this.quotaOptions.find((function(n){return n.id===t}))||{id:t,label:t}}return"default"===this.user.quota.quota?this.quotaOptions[0]:this.quotaOptions[1]},minPasswordLength:function(){return this.$store.getters.getPasswordPolicyMinLength},userLanguage:function(){var t=this,n=this.languages[0].languages.concat(this.languages[1].languages).find((function(n){return n.code===t.user.language}));return"object"!==V(n)&&""!==this.user.language?{code:this.user.language,name:this.user.language}:""!==this.user.language&&n},userLastLoginTooltip:function(){return this.user.lastLogin>0?OC.Util.formatDate(this.user.lastLogin):""},userLastLogin:function(){return this.user.lastLogin>0?OC.Util.relativeModifiedDate(this.user.lastLogin):t("settings","Never")}},methods:{generateAvatar:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:32;return(0,C.generateUrl)("/avatar/{user}/{size}?v={version}",{user:t,size:n,version:oc_userconfig.avatar.version})}}},K={name:"UserRowSimple",components:{PopoverMenu:W(),ActionButton:M(),Actions:H()},directives:{ClickOutside:T()},mixins:[J],props:{user:{type:Object,required:!0},loading:{type:Object,required:!0},showConfig:{type:Object,required:!0},userActions:{type:Array,required:!0},openedMenu:{type:Boolean,required:!0},feedbackMessage:{type:String,required:!0},subAdminsGroups:{type:Array,required:!0},settings:{type:Object,required:!0}},computed:{userGroupsLabels:function(){return this.userGroups.map((function(t){return t.name})).join(", ")},userSubAdminsGroupsLabels:function(){return this.userSubAdminsGroups.map((function(t){return t.name})).join(", ")},usedSpace:function(){return this.user.quota.used?t("settings","{size} used",{size:OC.Util.humanFileSize(this.user.quota.used)}):t("settings","{size} used",{size:OC.Util.humanFileSize(0)})},canEdit:function(){return(0,Y.getCurrentUser)().uid!==this.user.id||this.settings.isAdmin},userQuota:function(){var n=this.user.quota.quota;return"default"===n&&"none"!==(n=this.settings.defaultQuota)&&(n=OC.Util.computerFileSize(n)),"none"===n||-3===n?t("settings","Unlimited"):n>=0?OC.Util.humanFileSize(n):OC.Util.humanFileSize(0)}},methods:{toggleMenu:function(){this.$emit("update:openedMenu",!this.openedMenu)},hideMenu:function(){this.$emit("update:openedMenu",!1)},toggleEdit:function(){this.$emit("update:editing",!0)}}},X=s(93379),tt=s.n(X),nt=s(7795),et=s.n(nt),st=s(90569),it=s.n(st),at=s(3565),rt=s.n(at),ot=s(19216),ut=s.n(ot),lt=s(44589),dt=s.n(lt),ct=s(6857),gt={};gt.styleTagTransform=dt(),gt.setAttributes=rt(),gt.insert=it().bind(null,"head"),gt.domAPI=et(),gt.insertStyleElement=ut(),tt()(ct.Z,gt),ct.Z&&ct.Z.locals&&ct.Z.locals;var pt=(0,D.Z)(K,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"row",class:{disabled:t.loading.delete||t.loading.disable},attrs:{"data-id":t.user.id}},[e("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():e("img",{attrs:{alt:"",width:"32",height:"32",src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x"}})]),t._v(" "),e("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t\t"),e("div",{staticClass:"displayName subtitle"},[e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.displayname.length>20?t.user.displayname:"",expression:"user.displayname.length > 20 ? user.displayname : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t\t"+t._s(t.user.displayname)+"\n\t\t\t")])])]),t._v(" "),e("div"),t._v(" "),e("div",{staticClass:"mailAddress"},[e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:null!==t.user.email&&t.user.email.length>20?t.user.email:"",expression:"user.email !== null && user.email.length > 20 ? user.email : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t"+t._s(t.user.email)+"\n\t\t")])]),t._v(" "),e("div",{staticClass:"groups"},[t._v("\n\t\t"+t._s(t.userGroupsLabels)+"\n\t")]),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subAdminsGroups"},[t._v("\n\t\t"+t._s(t.userSubAdminsGroupsLabels)+"\n\t")]):t._e(),t._v(" "),e("div",{staticClass:"userQuota"},[e("div",{staticClass:"quota"},[t._v("\n\t\t\t"+t._s(t.userQuota)+" ("+t._s(t.usedSpace)+")\n\t\t\t"),e("progress",{staticClass:"quota-user-progress",class:{warn:t.usedQuota>80},attrs:{max:"100"},domProps:{value:t.usedQuota}})])]),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages"},[t._v("\n\t\t"+t._s(t.userLanguage.name)+"\n\t")]):t._e(),t._v(" "),t.showConfig.showUserBackend||t.showConfig.showStoragePath?e("div",{staticClass:"userBackend"},[t.showConfig.showUserBackend?e("div",{staticClass:"userBackend"},[t._v("\n\t\t\t"+t._s(t.user.backend)+"\n\t\t")]):t._e(),t._v(" "),t.showConfig.showStoragePath?e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.storageLocation,expression:"user.storageLocation"}],staticClass:"storageLocation subtitle"},[t._v("\n\t\t\t"+t._s(t.user.storageLocation)+"\n\t\t")]):t._e()]):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.userLastLoginTooltip,expression:"userLastLoginTooltip",modifiers:{auto:!0}}],staticClass:"lastLogin"},[t._v("\n\t\t"+t._s(t.userLastLogin)+"\n\t")]):t._e(),t._v(" "),e("div",{staticClass:"userActions"},[t.canEdit&&!t.loading.all?e("div",{staticClass:"toggleUserActions"},[e("Actions",[e("ActionButton",{attrs:{icon:"icon-rename"},on:{click:t.toggleEdit}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Edit User"))+"\n\t\t\t\t")])],1),t._v(" "),e("div",{staticClass:"userPopoverMenuWrapper"},[e("button",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideMenu,expression:"hideMenu"}],staticClass:"icon-more",attrs:{"aria-label":t.t("settings","Toggle user actions menu")},on:{click:function(n){return n.preventDefault(),t.toggleMenu.apply(null,arguments)}}}),t._v(" "),e("div",{staticClass:"popovermenu",class:{open:t.openedMenu},attrs:{"aria-expanded":t.openedMenu}},[e("PopoverMenu",{attrs:{menu:t.userActions}})],1)])],1):t._e(),t._v(" "),e("div",{staticClass:"feedback",style:{opacity:""!==t.feedbackMessage?1:0}},[e("div",{staticClass:"icon-checkmark"}),t._v("\n\t\t\t"+t._s(t.feedbackMessage)+"\n\t\t")])])])}),[],!1,null,null,null),ht=pt.exports;function mt(t,n,e,s,i,a,r){try{var o=t[a](r),u=o.value}catch(t){return void e(t)}o.done?n(u):Promise.resolve(u).then(s,i)}function ft(t){return function(){var n=this,e=arguments;return new Promise((function(s,i){var a=t.apply(n,e);function r(t){mt(a,s,i,r,o,"next",t)}function o(t){mt(a,s,i,r,o,"throw",t)}r(void 0)}))}}U.default.use(j.default);var vt={name:"UserRow",components:{UserRowSimple:ht,PopoverMenu:I.PopoverMenu,Actions:I.Actions,ActionButton:I.ActionButton,Multiselect:I.Multiselect},directives:{ClickOutside:T()},mixins:[J],props:{user:{type:Object,required:!0},settings:{type:Object,default:function(){return{}}},groups:{type:Array,default:function(){return[]}},subAdminsGroups:{type:Array,default:function(){return[]}},quotaOptions:{type:Array,default:function(){return[]}},showConfig:{type:Object,default:function(){return{}}},languages:{type:Array,required:!0},externalActions:{type:Array,default:function(){return[]}}},data:function(){return{rand:parseInt(1e3*Math.random()),openedMenu:!1,feedbackMessage:"",editing:!1,loading:{all:!1,displayName:!1,password:!1,mailAddress:!1,groups:!1,subadmins:!1,quota:!1,delete:!1,disable:!1,languages:!1,wipe:!1}}},computed:{userActions:function(){var n=[{icon:"icon-delete",text:t("settings","Delete user"),action:this.deleteUser},{icon:"icon-delete",text:t("settings","Wipe all devices"),action:this.wipeUserDevices},{icon:this.user.enabled?"icon-close":"icon-add",text:this.user.enabled?t("settings","Disable user"):t("settings","Enable user"),action:this.enableDisableUser}];return null!==this.user.email&&""!==this.user.email&&n.push({icon:"icon-mail",text:t("settings","Resend welcome email"),action:this.sendWelcomeMail}),n.concat(this.externalActions)}},methods:{toggleMenu:function(){this.openedMenu=!this.openedMenu},hideMenu:function(){this.openedMenu=!1},wipeUserDevices:function(){var n=this,e=this.user.id;OC.dialogs.confirmDestructive(t("settings","In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.",{userid:e}),t("settings","Remote wipe of devices"),{type:OC.dialogs.YES_NO_BUTTONS,confirm:t("settings","Wipe {userid}'s devices",{userid:e}),confirmClasses:"error",cancel:t("settings","Cancel")},(function(t){t&&(n.loading.wipe=!0,n.loading.all=!0,n.$store.dispatch("wipeUserDevices",e).then((function(){n.loading.wipe=!1,n.loading.all=!1})))}),!0)},deleteUser:function(){var n=this,e=this.user.id;OC.dialogs.confirmDestructive(t("settings","Fully delete {userid}'s account including all their personal files, app data, etc.",{userid:e}),t("settings","Account deletion"),{type:OC.dialogs.YES_NO_BUTTONS,confirm:t("settings","Delete {userid}'s account",{userid:e}),confirmClasses:"error",cancel:t("settings","Cancel")},(function(t){if(t)return n.loading.delete=!0,n.loading.all=!0,n.$store.dispatch("deleteUser",e).then((function(){n.loading.delete=!1,n.loading.all=!1}))}),!0)},enableDisableUser:function(){var t=this;this.loading.delete=!0,this.loading.all=!0;var n=this.user.id,e=!this.user.enabled;return this.$store.dispatch("enableDisableUser",{userid:n,enabled:e}).then((function(){t.loading.delete=!1,t.loading.all=!1}))},updateDisplayName:function(){var t=this,n=this.$refs.displayName.value;this.loading.displayName=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"displayname",value:n}).then((function(){t.loading.displayName=!1,t.$refs.displayName.value=n}))},updatePassword:function(){var t=this,n=this.$refs.password.value;this.loading.password=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"password",value:n}).then((function(){t.loading.password=!1,t.$refs.password.value=""}))},updateEmail:function(){var t=this,n=this.$refs.mailAddress.value;this.loading.mailAddress=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"email",value:n}).then((function(){t.loading.mailAddress=!1,t.$refs.mailAddress.value=n}))},createGroup:function(t){var n=this;return ft(regeneratorRuntime.mark((function e(){var s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading={groups:!0,subadmins:!0},e.prev=1,e.next=4,n.$store.dispatch("addGroup",t);case 4:return s=n.user.id,e.next=7,n.$store.dispatch("addUserGroup",{userid:s,gid:t});case 7:e.next=12;break;case 9:e.prev=9,e.t0=e.catch(1),console.error(e.t0);case 12:return e.prev=12,n.loading={groups:!1,subadmins:!1},e.finish(12);case 15:return e.abrupt("return",n.$store.getters.getGroups[n.groups.length]);case 16:case"end":return e.stop()}}),e,null,[[1,9,12,15]])})))()},addUserGroup:function(t){var n=this;return ft(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!1!==t.canAdd){e.next=2;break}return e.abrupt("return",!1);case 2:return n.loading.groups=!0,s=n.user.id,i=t.id,e.prev=5,e.next=8,n.$store.dispatch("addUserGroup",{userid:s,gid:i});case 8:e.next=13;break;case 10:e.prev=10,e.t0=e.catch(5),console.error(e.t0);case 13:return e.prev=13,n.loading.groups=!1,e.finish(13);case 16:case"end":return e.stop()}}),e,null,[[5,10,13,16]])})))()},removeUserGroup:function(t){var n=this;return ft(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!1!==t.canRemove){e.next=2;break}return e.abrupt("return",!1);case 2:return n.loading.groups=!0,s=n.user.id,i=t.id,e.prev=5,e.next=8,n.$store.dispatch("removeUserGroup",{userid:s,gid:i});case 8:n.loading.groups=!1,n.$route.params.selectedGroup===i&&n.$store.commit("deleteUser",s),e.next=15;break;case 12:e.prev=12,e.t0=e.catch(5),n.loading.groups=!1;case 15:case"end":return e.stop()}}),e,null,[[5,12]])})))()},addUserSubAdmin:function(t){var n=this;return ft(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading.subadmins=!0,s=n.user.id,i=t.id,e.prev=3,e.next=6,n.$store.dispatch("addUserSubAdmin",{userid:s,gid:i});case 6:n.loading.subadmins=!1,e.next=12;break;case 9:e.prev=9,e.t0=e.catch(3),console.error(e.t0);case 12:case"end":return e.stop()}}),e,null,[[3,9]])})))()},removeUserSubAdmin:function(t){var n=this;return ft(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading.subadmins=!0,s=n.user.id,i=t.id,e.prev=3,e.next=6,n.$store.dispatch("removeUserSubAdmin",{userid:s,gid:i});case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(3),console.error(e.t0);case 11:return e.prev=11,n.loading.subadmins=!1,e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[3,8,11,14]])})))()},setUserQuota:function(){var t=arguments,n=this;return ft(regeneratorRuntime.mark((function e(){var s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=t.length>0&&void 0!==t[0]?t[0]:"none",n.loading.quota=!0,s=s.id?s.id:s,e.prev=3,e.next=6,n.$store.dispatch("setUserData",{userid:n.user.id,key:"quota",value:s});case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(3),console.error(e.t0);case 11:return e.prev=11,n.loading.quota=!1,e.finish(11);case 14:return e.abrupt("return",s);case 15:case"end":return e.stop()}}),e,null,[[3,8,11,14]])})))()},validateQuota:function(t){var n=OC.Util.computerFileSize(t);return null!==n&&n>=0&&this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(t)))},setUserLanguage:function(t){var n=this;return ft(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading.languages=!0,e.prev=1,e.next=4,n.$store.dispatch("setUserData",{userid:n.user.id,key:"language",value:t.code});case 4:e.next=9;break;case 6:e.prev=6,e.t0=e.catch(1),console.error(e.t0);case 9:return e.prev=9,n.loading.languages=!1,e.finish(9);case 12:return e.abrupt("return",t);case 13:case"end":return e.stop()}}),e,null,[[1,6,9,12]])})))()},sendWelcomeMail:function(){var n=this;this.loading.all=!0,this.$store.dispatch("sendWelcomeMail",this.user.id).then((function(e){e&&(n.feedbackMessage=t("setting","Welcome mail sent!"),setTimeout((function(){n.feedbackMessage=""}),2e3)),n.loading.all=!1}))}}},wt=vt,bt=s(8353),At={};At.styleTagTransform=dt(),At.setAttributes=rt(),At.insert=it().bind(null,"head"),At.domAPI=et(),At.insertStyleElement=ut(),tt()(bt.Z,At),bt.Z&&bt.Z.locals&&bt.Z.locals;var Ct=(0,D.Z)(wt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return 1===Object.keys(t.user).length?e("div",{staticClass:"row",attrs:{"data-id":t.user.id}},[e("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():e("img",{attrs:{src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x",alt:"",height:"32",width:"32"}})]),t._v(" "),e("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t")]),t._v(" "),e("div",{staticClass:"obfuscated"},[t._v("\n\t\t"+t._s(t.t("settings","You do not have permissions to see the details of this user"))+"\n\t")])]):t.editing?e("div",{staticClass:"row row--editable",class:{disabled:t.loading.delete||t.loading.disable,"row--menu-opened":t.openedMenu},attrs:{"data-id":t.user.id}},[e("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():e("img",{attrs:{src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x",alt:"",height:"32",width:"32"}})]),t._v(" "),t.user.backendCapabilities.setDisplayName?e("div",{staticClass:"displayName"},[e("form",{staticClass:"displayName",class:{"icon-loading-small":t.loading.displayName},on:{submit:function(n){return n.preventDefault(),t.updateDisplayName.apply(null,arguments)}}},[e("input",{ref:"displayName",attrs:{id:"displayName"+t.user.id+t.rand,disabled:t.loading.displayName||t.loading.all,autocapitalize:"off",autocomplete:"off",autocorrect:"off",spellcheck:"false",type:"text"},domProps:{value:t.user.displayname}}),t._v(" "),e("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})])]):e("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t\t"),e("div",{staticClass:"displayName subtitle"},[e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.displayname.length>20?t.user.displayname:"",expression:"user.displayname.length > 20 ? user.displayname : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t\t"+t._s(t.user.displayname)+"\n\t\t\t")])])]),t._v(" "),t.settings.canChangePassword&&t.user.backendCapabilities.setPassword?e("form",{staticClass:"password",class:{"icon-loading-small":t.loading.password},on:{submit:function(n){return n.preventDefault(),t.updatePassword.apply(null,arguments)}}},[e("input",{ref:"password",attrs:{id:"password"+t.user.id+t.rand,disabled:t.loading.password||t.loading.all,minlength:t.minPasswordLength,placeholder:t.t("settings","Add new password"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",required:"",spellcheck:"false",type:"password",value:""}}),t._v(" "),e("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})]):e("div"),t._v(" "),e("form",{staticClass:"mailAddress",class:{"icon-loading-small":t.loading.mailAddress},on:{submit:function(n){return n.preventDefault(),t.updateEmail.apply(null,arguments)}}},[e("input",{ref:"mailAddress",attrs:{id:"mailAddress"+t.user.id+t.rand,disabled:t.loading.mailAddress||t.loading.all,placeholder:t.t("settings","Add new email address"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",spellcheck:"false",type:"email"},domProps:{value:t.user.email}}),t._v(" "),e("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})]),t._v(" "),e("div",{staticClass:"groups",class:{"icon-loading-small":t.loading.groups}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.groups||t.loading.all,limit:2,multiple:!0,options:t.availableGroups,placeholder:t.t("settings","Add user to group"),"tag-width":60,taggable:t.settings.isAdmin,value:t.userGroups,label:"name","tag-placeholder":"create","track-by":"id"},on:{remove:t.removeUserGroup,select:t.addUserGroup,tag:t.createGroup}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subadmins",class:{"icon-loading-small":t.loading.subadmins}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.subadmins||t.loading.all,limit:2,multiple:!0,options:t.subAdminsGroups,placeholder:t.t("settings","Set user as admin for"),"tag-width":60,value:t.userSubAdminsGroups,label:"name","track-by":"id"},on:{remove:t.removeUserSubAdmin,select:t.addUserSubAdmin}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1):t._e(),t._v(" "),e("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.usedSpace,expression:"usedSpace",modifiers:{auto:!0}}],staticClass:"quota",class:{"icon-loading-small":t.loading.quota}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,disabled:t.loading.quota||t.loading.all,options:t.quotaOptions,placeholder:t.t("settings","Select user quota"),taggable:!0,value:t.userQuota,label:"label","tag-placeholder":"create","track-by":"id"},on:{input:t.setUserQuota,tag:t.validateQuota}})],1),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages",class:{"icon-loading-small":t.loading.languages}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,disabled:t.loading.languages||t.loading.all,options:t.languages,placeholder:t.t("settings","No language set"),value:t.userLanguage,"group-label":"label","group-values":"languages",label:"name","track-by":"code"},on:{input:t.setUserLanguage}})],1):t._e(),t._v(" "),t.showConfig.showStoragePath||t.showConfig.showUserBackend?e("div",{staticClass:"storageLocation"}):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div"):t._e(),t._v(" "),e("div",{staticClass:"userActions"},[t.loading.all?t._e():e("div",{staticClass:"toggleUserActions"},[e("Actions",[e("ActionButton",{attrs:{icon:"icon-checkmark"},on:{click:function(n){t.editing=!1}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Done"))+"\n\t\t\t\t")])],1),t._v(" "),e("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideMenu,expression:"hideMenu"}],staticClass:"userPopoverMenuWrapper"},[e("button",{staticClass:"icon-more",on:{click:function(n){return n.preventDefault(),t.toggleMenu.apply(null,arguments)}}}),t._v(" "),e("div",{staticClass:"popovermenu",class:{open:t.openedMenu}},[e("PopoverMenu",{attrs:{menu:t.userActions}})],1)])],1),t._v(" "),e("div",{staticClass:"feedback",style:{opacity:""!==t.feedbackMessage?1:0}},[e("div",{staticClass:"icon-checkmark"}),t._v("\n\t\t\t"+t._s(t.feedbackMessage)+"\n\t\t")])])]):e("UserRowSimple",{class:{"row--menu-opened":t.openedMenu},attrs:{editing:t.editing,"feedback-message":t.feedbackMessage,groups:t.groups,languages:t.languages,loading:t.loading,"opened-menu":t.openedMenu,settings:t.settings,"show-config":t.showConfig,"sub-admins-groups":t.subAdminsGroups,"user-actions":t.userActions,user:t.user},on:{"update:editing":function(n){t.editing=n},"update:openedMenu":function(n){t.openedMenu=n},"update:opened-menu":function(n){t.openedMenu=n}}})}),[],!1,null,"4c932ffd",null),yt=Ct.exports,_t={id:"none",label:t("settings","Unlimited")},Ut={id:"default",label:t("settings","Default quota")},kt={id:"",displayName:"",password:"",mailAddress:"",groups:[],subAdminsGroups:[],quota:Ut,language:{code:"en",name:t("settings","Default language")}},xt={name:"UserList",components:{Modal:I.Modal,userRow:yt,Multiselect:_(),InfiniteLoading:z()},props:{users:{type:Array,default:function(){return[]}},showConfig:{type:Object,required:!0},selectedGroup:{type:String,default:null},externalActions:{type:Array,default:function(){return[]}}},data:function(){return{unlimitedQuota:_t,defaultQuota:Ut,loading:{all:!1,groups:!1},scrolled:!1,searchQuery:"",newUser:Object.assign({},kt)}},computed:{settings:function(){return this.$store.getters.getServerData},selectedGroupDecoded:function(){return decodeURIComponent(this.selectedGroup)},filteredUsers:function(){return"disabled"===this.selectedGroup?this.users.filter((function(t){return!1===t.enabled})):(this.settings.isAdmin,this.users.filter((function(t){return!1!==t.enabled})))},groups:function(){return this.$store.getters.getGroups.filter((function(t){return"disabled"!==t.id})).sort((function(t,n){return t.name.localeCompare(n.name)}))},canAddGroups:function(){return this.groups.map((function(t){return(t=Object.assign({},t)).$isDisabled=!1===t.canAdd,t}))},subAdminsGroups:function(){return this.$store.getters.getSubadminGroups},quotaOptions:function(){var t=this.settings.quotaPreset.reduce((function(t,n){return t.concat({id:n,label:n})}),[]);return this.settings.allowUnlimitedQuota&&t.unshift(this.unlimitedQuota),t.unshift(this.defaultQuota),t},minPasswordLength:function(){return this.$store.getters.getPasswordPolicyMinLength},usersOffset:function(){return this.$store.getters.getUsersOffset},usersLimit:function(){return this.$store.getters.getUsersLimit},usersCount:function(){return this.users.length},languages:function(){return[{label:t("settings","Common languages"),languages:this.settings.languages.commonLanguages},{label:t("settings","Other languages"),languages:this.settings.languages.otherLanguages}]}},watch:{selectedGroup:function(t,n){this.redirectIfDisabled(),this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset(),this.setNewUserDefaultGroup(t)},usersCount:function(t,n){0===t&&1===n?this.$refs.infiniteLoading.stateChanger.reset():1===t&&0===n&&this.$refs.infiniteLoading.stateChanger.loaded()}},mounted:function(){this.settings.canChangePassword||OC.Notification.showTemporary(t("settings","Password change is disabled because the master key is disabled")),this.resetForm(),(0,Q.subscribe)("nextcloud:unified-search.search",this.search),(0,Q.subscribe)("nextcloud:unified-search.reset",this.resetSearch),this.redirectIfDisabled()},beforeDestroy:function(){(0,Q.unsubscribe)("nextcloud:unified-search.search",this.search),(0,Q.unsubscribe)("nextcloud:unified-search.reset",this.resetSearch)},methods:{onScroll:function(t){this.scrolled=t.target.scrollTo>0},validateQuota:function(t){var n=OC.Util.computerFileSize(t);return null!==n&&n>=0?(t=OC.Util.humanFileSize(OC.Util.computerFileSize(t)),this.newUser.quota={id:t,label:t},this.newUser.quota):(this.newUser.quota=this.quotaOptions[0],this.quotaOptions[0])},infiniteHandler:function(t){var n=this;this.$store.dispatch("getUsers",{offset:this.usersOffset,limit:this.usersLimit,group:"disabled"!==this.selectedGroup?this.selectedGroup:"",search:this.searchQuery}).then((function(e){e>0&&t.loaded(),e<n.usersLimit&&t.complete()}))},search:function(t){var n=t.query;this.searchQuery=n,this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset()},resetSearch:function(){this.search({query:""})},resetForm:function(){this.newUser=Object.assign({},kt),this.settings.defaultLanguage&&U.default.set(this.newUser.language,"code",this.settings.defaultLanguage),this.setNewUserDefaultGroup(this.selectedGroup),this.loading.all=!1},createUser:function(){var t=this;this.loading.all=!0,this.$store.dispatch("addUser",{userid:this.newUser.id,password:this.newUser.password,displayName:this.newUser.displayName,email:this.newUser.mailAddress,groups:this.newUser.groups.map((function(t){return t.id})),subadmin:this.newUser.subAdminsGroups.map((function(t){return t.id})),quota:this.newUser.quota.id,language:this.newUser.language.code}).then((function(){t.resetForm(),t.$refs.newusername.focus(),t.closeModal()})).catch((function(n){if(t.loading.all=!1,n.response&&n.response.data&&n.response.data.ocs&&n.response.data.ocs.meta){var e=n.response.data.ocs.meta.statuscode;102===e?t.$refs.newusername.focus():107===e&&t.$refs.newuserpassword.focus()}}))},setNewUserDefaultGroup:function(t){if(t&&t.length>0){var n=this.groups.find((function(n){return n.id===t}));if(n)return void(this.newUser.groups=[n])}this.newUser.groups=[]},createGroup:function(t){var n=this;return this.loading.groups=!0,this.$store.dispatch("addGroup",t).then((function(e){n.newUser.groups.push(n.groups.find((function(n){return n.id===t}))),n.loading.groups=!1})).catch((function(){n.loading.groups=!1})),this.$store.getters.getGroups[this.groups.length]},redirectIfDisabled:function(){var t=this.$store.getters.getGroups;"disabled"===this.selectedGroup&&t.findIndex((function(t){return"disabled"===t.id&&0===t.usercount}))>-1&&(this.$router.push({name:"users"}),this.$refs.infiniteLoading.stateChanger.reset())},closeModal:function(){this.showConfig.showNewUserForm=!1}}},Lt=s(15742),Gt={};Gt.styleTagTransform=dt(),Gt.setAttributes=rt(),Gt.insert=it().bind(null,"head"),Gt.domAPI=et(),Gt.insertStyleElement=ut(),tt()(Lt.Z,Gt),Lt.Z&&Lt.Z.locals&&Lt.Z.locals;var St=(0,D.Z)(xt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"user-list-grid",attrs:{id:"app-content"},on:{"&scroll":function(n){return t.onScroll.apply(null,arguments)}}},[t.showConfig.showNewUserForm?e("Modal",{on:{close:t.closeModal}},[e("form",{staticClass:"modal__content",attrs:{id:"new-user",disabled:t.loading.all},on:{submit:function(n){return n.preventDefault(),t.createUser.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("settings","New user")))]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.id,expression:"newUser.id"}],ref:"newusername",staticClass:"modal__item",attrs:{id:"newusername",disabled:t.settings.newUserGenerateUserID,placeholder:t.settings.newUserGenerateUserID?t.t("settings","Will be autogenerated"):t.t("settings","Username"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"username",pattern:"[a-zA-Z0-9 _\\.@\\-']+",required:"",type:"text"},domProps:{value:t.newUser.id},on:{input:function(n){n.target.composing||t.$set(t.newUser,"id",n.target.value)}}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.displayName,expression:"newUser.displayName"}],staticClass:"modal__item",attrs:{id:"newdisplayname",placeholder:t.t("settings","Display name"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"displayname",type:"text"},domProps:{value:t.newUser.displayName},on:{input:function(n){n.target.composing||t.$set(t.newUser,"displayName",n.target.value)}}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.password,expression:"newUser.password"}],ref:"newuserpassword",staticClass:"modal__item",attrs:{id:"newuserpassword",minlength:t.minPasswordLength,placeholder:t.t("settings","Password"),required:""===t.newUser.mailAddress,autocapitalize:"none",autocomplete:"new-password",autocorrect:"off",name:"password",type:"password"},domProps:{value:t.newUser.password},on:{input:function(n){n.target.composing||t.$set(t.newUser,"password",n.target.value)}}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.mailAddress,expression:"newUser.mailAddress"}],staticClass:"modal__item",attrs:{id:"newemail",placeholder:t.t("settings","Email"),required:""===t.newUser.password||t.settings.newUserRequireEmail,autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"email",type:"email"},domProps:{value:t.newUser.mailAddress},on:{input:function(n){n.target.composing||t.$set(t.newUser,"mailAddress",n.target.value)}}}),t._v(" "),e("div",{staticClass:"groups modal__item"},[t.settings.isAdmin?t._e():e("input",{class:{"icon-loading-small":t.loading.groups},attrs:{id:"newgroups",required:!t.settings.isAdmin,tabindex:"-1",type:"text"},domProps:{value:t.newUser.groups}}),t._v(" "),e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.groups||t.loading.all,multiple:!0,options:t.canAddGroups,placeholder:t.t("settings","Add user to group"),"tag-width":60,taggable:!0,label:"name","tag-placeholder":"create","track-by":"id"},on:{tag:t.createGroup},model:{value:t.newUser.groups,callback:function(n){t.$set(t.newUser,"groups",n)},expression:"newUser.groups"}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subadmins modal__item"},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,multiple:!0,options:t.subAdminsGroups,placeholder:t.t("settings","Set user as admin for"),"tag-width":60,label:"name","track-by":"id"},model:{value:t.newUser.subAdminsGroups,callback:function(n){t.$set(t.newUser,"subAdminsGroups",n)},expression:"newUser.subAdminsGroups"}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1):t._e(),t._v(" "),e("div",{staticClass:"quota modal__item"},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:t.quotaOptions,placeholder:t.t("settings","Select user quota"),taggable:!0,label:"label","track-by":"id"},on:{tag:t.validateQuota},model:{value:t.newUser.quota,callback:function(n){t.$set(t.newUser,"quota",n)},expression:"newUser.quota"}})],1),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages modal__item"},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:t.languages,placeholder:t.t("settings","Default language"),"group-label":"label","group-values":"languages",label:"name","track-by":"code"},model:{value:t.newUser.language,callback:function(n){t.$set(t.newUser,"language",n)},expression:"newUser.language"}})],1):t._e(),t._v(" "),t.showConfig.showStoragePath?e("div",{staticClass:"storageLocation"}):t._e(),t._v(" "),t.showConfig.showUserBackend?e("div",{staticClass:"userBackend"}):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div",{staticClass:"lastLogin"}):t._e(),t._v(" "),e("div",{staticClass:"user-actions"},[e("button",{staticClass:"button primary",attrs:{id:"newsubmit",type:"submit",value:""}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Add a new user"))+"\n\t\t\t\t")])])])]):t._e(),t._v(" "),e("div",{staticClass:"row",class:{sticky:t.scrolled&&!t.showConfig.showNewUserForm},attrs:{id:"grid-header"}},[e("div",{staticClass:"avatar",attrs:{id:"headerAvatar"}}),t._v(" "),e("div",{staticClass:"name",attrs:{id:"headerName"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Username"))+"\n\n\t\t\t"),e("div",{staticClass:"subtitle"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Display name"))+"\n\t\t\t")])]),t._v(" "),e("div",{staticClass:"password",attrs:{id:"headerPassword"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Password"))+"\n\t\t")]),t._v(" "),e("div",{staticClass:"mailAddress",attrs:{id:"headerAddress"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Email"))+"\n\t\t")]),t._v(" "),e("div",{staticClass:"groups",attrs:{id:"headerGroups"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Groups"))+"\n\t\t")]),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subadmins",attrs:{id:"headerSubAdmins"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Group admin for"))+"\n\t\t")]):t._e(),t._v(" "),e("div",{staticClass:"quota",attrs:{id:"headerQuota"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Quota"))+"\n\t\t")]),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages",attrs:{id:"headerLanguages"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Language"))+"\n\t\t")]):t._e(),t._v(" "),t.showConfig.showUserBackend||t.showConfig.showStoragePath?e("div",{staticClass:"headerUserBackend userBackend"},[t.showConfig.showUserBackend?e("div",{staticClass:"userBackend"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","User backend"))+"\n\t\t\t")]):t._e(),t._v(" "),t.showConfig.showStoragePath?e("div",{staticClass:"subtitle storageLocation"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Storage location"))+"\n\t\t\t")]):t._e()]):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div",{staticClass:"headerLastLogin lastLogin"},[t._v("\n\t\t\t"+t._s(t.t("settings","Last login"))+"\n\t\t")]):t._e(),t._v(" "),e("div",{staticClass:"userActions"})]),t._v(" "),t._l(t.filteredUsers,(function(n){return e("user-row",{key:n.id,attrs:{"external-actions":t.externalActions,groups:t.groups,languages:t.languages,"quota-options":t.quotaOptions,settings:t.settings,"show-config":t.showConfig,"sub-admins-groups":t.subAdminsGroups,user:n}})})),t._v(" "),e("InfiniteLoading",{ref:"infiniteLoading",on:{infinite:t.infiniteHandler}},[e("div",{attrs:{slot:"spinner"},slot:"spinner"},[e("div",{staticClass:"users-icon-loading icon-loading"})]),t._v(" "),e("div",{attrs:{slot:"no-more"},slot:"no-more"},[e("div",{staticClass:"users-list-end"})]),t._v(" "),e("div",{attrs:{slot:"no-results"},slot:"no-results"},[e("div",{attrs:{id:"emptycontent"}},[e("div",{staticClass:"icon-contacts-dark"}),t._v(" "),e("h2",[t._v(t._s(t.t("settings","No users in here")))])])])])],2)}),[],!1,null,"897578ae",null),Mt=St.exports;function qt(t){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qt(t)}function Nt(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,s)}return e}function $t(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?Nt(Object(e),!0).forEach((function(n){Ot(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Nt(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function Ot(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function Pt(t,n,e,s,i,a,r){try{var o=t[a](r),u=o.value}catch(t){return void e(t)}o.done?n(u):Promise.resolve(u).then(s,i)}function Dt(t){return function(){var n=this,e=arguments;return new Promise((function(s,i){var a=t.apply(n,e);function r(t){Pt(a,s,i,r,o,"next",t)}function o(t){Pt(a,s,i,r,o,"throw",t)}r(void 0)}))}}U.default.use(x());var Rt={name:"Users",components:{AppContent:a(),AppNavigation:o(),AppNavigationCaption:l(),AppNavigationCounter:c(),AppNavigationItem:p(),AppNavigationNew:m(),AppNavigationSettings:v(),Content:A(),GroupListItem:R,Multiselect:_(),UserList:Mt},props:{selectedGroup:{type:String,default:null}},data:function(){return{unlimitedQuota:{id:"none",label:t("settings","Unlimited")},selectedQuota:!1,externalActions:[],loadingAddGroup:!1,loadingSendMail:!1,showConfig:{showStoragePath:!1,showUserBackend:!1,showLastLogin:!1,showNewUserForm:!1,showLanguages:!1}}},computed:{selectedGroupDecoded:function(){return this.selectedGroup?decodeURIComponent(this.selectedGroup):null},users:function(){return this.$store.getters.getUsers},groups:function(){return this.$store.getters.getGroups},usersOffset:function(){return this.$store.getters.getUsersOffset},usersLimit:function(){return this.$store.getters.getUsersLimit},showLanguages:{get:function(){return this.getLocalstorage("showLanguages")},set:function(t){this.setLocalStorage("showLanguages",t)}},showLastLogin:{get:function(){return this.getLocalstorage("showLastLogin")},set:function(t){this.setLocalStorage("showLastLogin",t)}},showUserBackend:{get:function(){return this.getLocalstorage("showUserBackend")},set:function(t){this.setLocalStorage("showUserBackend",t)}},showStoragePath:{get:function(){return this.getLocalstorage("showStoragePath")},set:function(t){this.setLocalStorage("showStoragePath",t)}},userCount:function(){return this.$store.getters.getUserCount},settings:function(){return this.$store.getters.getServerData},quotaOptions:function(){var t=this.settings.quotaPreset.reduce((function(t,n){return t.concat({id:n,label:n})}),[]);return this.settings.allowUnlimitedQuota&&t.unshift(this.unlimitedQuota),t},defaultQuota:{get:function(){return!1!==this.selectedQuota?this.selectedQuota:this.settings.defaultQuota!==this.unlimitedQuota.id&&OC.Util.computerFileSize(this.settings.defaultQuota)>=0?{id:this.settings.defaultQuota,label:this.settings.defaultQuota}:this.unlimitedQuota},set:function(t){this.selectedQuota=t}},sendWelcomeMail:{get:function(){return this.settings.newUserSendEmail},set:function(t){var n=this;return Dt(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,n.loadingSendMail=!0,n.$store.commit("setServerData",$t($t({},n.settings),{},{newUserSendEmail:t})),e.next=5,w.default.post((0,C.generateUrl)("/settings/users/preferences/newUser.sendEmail"),{value:t?"yes":"no"});case 5:e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),console.error("could not update newUser.sendEmail preference: "+e.t0.message,e.t0);case 10:return e.prev=10,n.loadingSendMail=!1,e.finish(10);case 13:case"end":return e.stop()}}),e,null,[[0,7,10,13]])})))()}},groupList:function(){var t=this;return(Array.isArray(this.groups)?this.groups:[]).filter((function(t){return"disabled"!==t.id&&"admin"!==t.id})).map((function(n){return t.formatGroupMenu(n)}))},adminGroupMenu:function(){return this.formatGroupMenu(this.groups.find((function(t){return"admin"===t.id})))},disabledGroupMenu:function(){return this.formatGroupMenu(this.groups.find((function(t){return"disabled"===t.id})))}},beforeMount:function(){this.$store.commit("initGroups",{groups:this.$store.getters.getServerData.groups,orderBy:this.$store.getters.getServerData.sortGroups,userCount:this.$store.getters.getServerData.userCount}),this.$store.dispatch("getPasswordPolicyMinLength")},created:function(){Object.assign(OCA,{Settings:{UserList:{registerAction:this.registerAction}}})},methods:{showNewUserMenu:function(){this.showConfig.showNewUserForm=!0,this.showConfig.showNewUserForm&&U.default.nextTick((function(){window.newusername.focus()}))},getLocalstorage:function(t){var n=this.$localStorage.get(t);return this.showConfig[t]=null!==n?"true"===n:this.showConfig[t],this.showConfig[t]},setLocalStorage:function(t,n){return this.showConfig[t]=n,this.$localStorage.set(t,n),n},setDefaultQuota:function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";this.$store.dispatch("setAppConfig",{app:"files",key:"default_quota",value:n.id?n.id:n}).then((function(){"object"!==qt(n)&&(n={id:n,label:n}),t.defaultQuota=n}))},validateQuota:function(t){return null===OC.Util.computerFileSize(t)?this.setDefaultQuota("none"):this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(t)))},registerAction:function(t,n,e){return this.externalActions.push({icon:t,text:n,action:e}),this.externalActions},createGroup:function(t){var n=this;return Dt(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(""!==t.trim()){e.next=2;break}return e.abrupt("return");case 2:return e.prev=2,n.loadingAddGroup=!0,e.next=6,n.$store.dispatch("addGroup",t.trim());case 6:return n.hideAddGroupForm(),e.next=9,n.$router.push({name:"group",params:{selectedGroup:encodeURIComponent(t.trim())}});case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(2),n.showAddGroupForm();case 14:return e.prev=14,n.loadingAddGroup=!1,e.finish(14);case 17:case"end":return e.stop()}}),e,null,[[2,11,14,17]])})))()},showAddGroupForm:function(){var t=this;this.$refs.addGroup.editingActive=!0,this.$refs.addGroup.onMenuToggle(!1),this.$nextTick((function(){t.$refs.addGroup.$refs.editingInput.focusInput()}))},hideAddGroupForm:function(){this.$refs.addGroup.editingActive=!1,this.$refs.addGroup.editingValue=""},formatGroupMenu:function(t){var n={};return void 0===t?{}:(n.id=t.id,n.title=t.name,n.usercount=t.usercount,t.usercount-t.disabled>0&&(n.count=t.usercount-t.disabled),n)}}},Qt=Rt,Bt=s(36095),zt={};zt.styleTagTransform=dt(),zt.setAttributes=rt(),zt.insert=it().bind(null,"head"),zt.domAPI=et(),zt.insertStyleElement=ut(),tt()(Bt.Z,zt),Bt.Z&&Bt.Z.locals&&Bt.Z.locals;var It=(0,D.Z)(Qt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("Content",{attrs:{"app-name":"settings","navigation-class":{"icon-loading":t.loadingAddGroup}}},[e("AppNavigation",{scopedSlots:t._u([{key:"list",fn:function(){return[e("AppNavigationItem",{ref:"addGroup",attrs:{id:"addgroup","edit-placeholder":t.t("settings","Enter group name"),editable:!0,loading:t.loadingAddGroup,title:t.t("settings","Add group"),icon:"icon-add"},on:{click:t.showAddGroupForm,"update:title":t.createGroup}}),t._v(" "),e("AppNavigationItem",{attrs:{id:"everyone",exact:!0,title:t.t("settings","Active users"),to:{name:"users"},icon:"icon-contacts-dark"}},[t.userCount>0?e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.userCount)+"\n\t\t\t\t")]):t._e()],1),t._v(" "),t.settings.isAdmin?e("AppNavigationItem",{attrs:{id:"admin",exact:!0,title:t.t("settings","Admins"),to:{name:"group",params:{selectedGroup:"admin"}},icon:"icon-user-admin"}},[t.adminGroupMenu.count?e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.adminGroupMenu.count)+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.disabledGroupMenu.usercount>0||-1===t.disabledGroupMenu.usercount?e("AppNavigationItem",{attrs:{id:"disabled",exact:!0,title:t.t("settings","Disabled users"),to:{name:"group",params:{selectedGroup:"disabled"}},icon:"icon-disabled-users"}},[t.disabledGroupMenu.usercount>0?e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.disabledGroupMenu.usercount)+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.groupList.length>0?e("AppNavigationCaption",{attrs:{title:t.t("settings","Groups")}}):t._e(),t._v(" "),t._l(t.groupList,(function(t){return e("GroupListItem",{key:t.id,attrs:{id:t.id,title:t.title,count:t.count}})}))]},proxy:!0},{key:"footer",fn:function(){return[e("AppNavigationSettings",[e("div",[e("p",[t._v(t._s(t.t("settings","Default quota:")))]),t._v(" "),e("Multiselect",{attrs:{value:t.defaultQuota,options:t.quotaOptions,"tag-placeholder":"create",placeholder:t.t("settings","Select default quota"),label:"label","track-by":"id","allow-empty":!1,taggable:!0},on:{tag:t.validateQuota,input:t.setDefaultQuota}})],1),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showLanguages,expression:"showLanguages"}],staticClass:"checkbox",attrs:{id:"showLanguages",type:"checkbox"},domProps:{checked:Array.isArray(t.showLanguages)?t._i(t.showLanguages,null)>-1:t.showLanguages},on:{change:function(n){var e=t.showLanguages,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showLanguages=e.concat([null])):a>-1&&(t.showLanguages=e.slice(0,a).concat(e.slice(a+1)))}else t.showLanguages=i}}}),t._v(" "),e("label",{attrs:{for:"showLanguages"}},[t._v(t._s(t.t("settings","Show Languages")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showLastLogin,expression:"showLastLogin"}],staticClass:"checkbox",attrs:{id:"showLastLogin",type:"checkbox"},domProps:{checked:Array.isArray(t.showLastLogin)?t._i(t.showLastLogin,null)>-1:t.showLastLogin},on:{change:function(n){var e=t.showLastLogin,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showLastLogin=e.concat([null])):a>-1&&(t.showLastLogin=e.slice(0,a).concat(e.slice(a+1)))}else t.showLastLogin=i}}}),t._v(" "),e("label",{attrs:{for:"showLastLogin"}},[t._v(t._s(t.t("settings","Show last login")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showUserBackend,expression:"showUserBackend"}],staticClass:"checkbox",attrs:{id:"showUserBackend",type:"checkbox"},domProps:{checked:Array.isArray(t.showUserBackend)?t._i(t.showUserBackend,null)>-1:t.showUserBackend},on:{change:function(n){var e=t.showUserBackend,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showUserBackend=e.concat([null])):a>-1&&(t.showUserBackend=e.slice(0,a).concat(e.slice(a+1)))}else t.showUserBackend=i}}}),t._v(" "),e("label",{attrs:{for:"showUserBackend"}},[t._v(t._s(t.t("settings","Show user backend")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showStoragePath,expression:"showStoragePath"}],staticClass:"checkbox",attrs:{id:"showStoragePath",type:"checkbox"},domProps:{checked:Array.isArray(t.showStoragePath)?t._i(t.showStoragePath,null)>-1:t.showStoragePath},on:{change:function(n){var e=t.showStoragePath,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showStoragePath=e.concat([null])):a>-1&&(t.showStoragePath=e.slice(0,a).concat(e.slice(a+1)))}else t.showStoragePath=i}}}),t._v(" "),e("label",{attrs:{for:"showStoragePath"}},[t._v(t._s(t.t("settings","Show storage path")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.sendWelcomeMail,expression:"sendWelcomeMail"}],staticClass:"checkbox",attrs:{id:"sendWelcomeMail",disabled:t.loadingSendMail,type:"checkbox"},domProps:{checked:Array.isArray(t.sendWelcomeMail)?t._i(t.sendWelcomeMail,null)>-1:t.sendWelcomeMail},on:{change:function(n){var e=t.sendWelcomeMail,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.sendWelcomeMail=e.concat([null])):a>-1&&(t.sendWelcomeMail=e.slice(0,a).concat(e.slice(a+1)))}else t.sendWelcomeMail=i}}}),t._v(" "),e("label",{attrs:{for:"sendWelcomeMail"}},[t._v(t._s(t.t("settings","Send email to new user")))])])])]},proxy:!0}])},[e("AppNavigationNew",{attrs:{"button-id":"new-user-button",text:t.t("settings","New user"),"button-class":"icon-add"},on:{click:t.showNewUserMenu,keyup:[function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"enter",13,n.key,"Enter")?null:t.showNewUserMenu.apply(null,arguments)},function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"space",32,n.key,[" ","Spacebar"])?null:t.showNewUserMenu.apply(null,arguments)}]}})],1),t._v(" "),e("AppContent",[e("UserList",{attrs:{users:t.users,"show-config":t.showConfig,"selected-group":t.selectedGroupDecoded,"external-actions":t.externalActions}})],1)],1)}),[],!1,null,"1babbc68",null),Ft=It.exports}}]);
-//# sourceMappingURL=settings-users-351.js.map?v=949df4154c39faa66c05 \ No newline at end of file
+"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[351],{8353:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,".row--menu-opened[data-v-4c932ffd]{z-index:1 !important}.row[data-v-4c932ffd] .multiselect__single{z-index:auto !important}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList/UserRow.vue"],names:[],mappings:"AAyqBA,mCACC,oBAAA,CAED,2CACC,uBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Force menu to be above other rows\n.row--menu-opened {\n\tz-index: 1 !important;\n}\n.row::v-deep .multiselect__single {\n\tz-index: auto !important;\n}\n"],sourceRoot:""}]),n.Z=r},6857:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,".cellText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-more{background-color:var(--color-main-background);border:0}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList/UserRowSimple.vue"],names:[],mappings:"AA6LC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t.cellText {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n}\n\t.icon-more {\n\t\tbackground-color: var(--color-main-background);\n\t\tborder: 0;\n\t}\n"],sourceRoot:""}]),n.Z=r},36095:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,".app-navigation__list #addgroup[data-v-1babbc68] .app-navigation-entry__utils{display:none}","",{version:3,sources:["webpack://./apps/settings/src/views/Users.vue"],names:[],mappings:"AAieA,8EACC,YAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// force hiding the editing action for the add group entry\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\n\tdisplay: none;\n}\n"],sourceRoot:""}]),n.Z=r},14036:function(t,n,e){var s=e(87537),i=e.n(s),a=e(23645),r=e.n(a)()(i());r.push([t.id,'\n.modal-wrapper[data-v-ea695fb0] {\n\tmargin: 2vh 0;\n\talign-items: flex-start;\n}\n.modal__content[data-v-ea695fb0] {\n\tdisplay: flex;\n\tpadding: 20px;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n}\n.modal__item[data-v-ea695fb0] {\n\tmargin-bottom: 16px;\n\twidth: 100%;\n}\n.modal__item[data-v-ea695fb0]:not(:focus):not(:active) {\n\tborder-color: var(--color-border-dark);\n}\n.modal__item[data-v-ea695fb0] .multiselect {\n\twidth: 100%;\n}\n.user-actions[data-v-ea695fb0] {\n\tmargin-top: 20px;\n}\n.modal__content[data-v-ea695fb0] .multiselect__single {\n\ttext-align: left;\n\tbox-sizing: border-box;\n}\n.modal__content[data-v-ea695fb0] .multiselect__content-wrapper {\n\tbox-sizing: border-box;\n}\n.row[data-v-ea695fb0] .multiselect__single {\n\tz-index: auto !important;\n}\n\n/* fake input for groups validation */\ninput#newgroups[data-v-ea695fb0] {\n\tposition: absolute;\n\topacity: 0;\n\t/* The "hidden" input is behind the Multiselect, so in general it does\n\t * not receives clicks. However, with Firefox, after the validation\n\t * fails, it will receive the first click done on it, so its width needs\n\t * to be set to 0 to prevent that ("pointer-events: none" does not\n\t * prevent it). */\n\twidth: 0;\n}\n',"",{version:3,sources:["webpack://./apps/settings/src/components/UserList.vue"],names:[],mappings:";AA8kBA;CACA,aAAA;CACA,uBAAA;AACA;AACA;CACA,aAAA;CACA,aAAA;CACA,sBAAA;CACA,mBAAA;CACA,kBAAA;AACA;AACA;CACA,mBAAA;CACA,WAAA;AACA;AACA;CACA,sCAAA;AACA;AACA;CACA,WAAA;AACA;AACA;CACA,gBAAA;AACA;AACA;CACA,gBAAA;CACA,sBAAA;AACA;AACA;CACA,sBAAA;AACA;AACA;CACA,wBAAA;AACA;;AAEA,qCAAA;AACA;CACA,kBAAA;CACA,UAAA;CACA;;;;kBAIA;CACA,QAAA;AACA",sourcesContent:['\x3c!--\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 --\x3e\n\n<template>\n\t<div id="app-content" class="user-list-grid" @scroll.passive="onScroll">\n\t\t<Modal v-if="showConfig.showNewUserForm" size="small" @close="closeModal">\n\t\t\t<form id="new-user"\n\t\t\t\t:disabled="loading.all"\n\t\t\t\tclass="modal__content"\n\t\t\t\t@submit.prevent="createUser">\n\t\t\t\t<h2>{{ t(\'settings\',\'New user\') }}</h2>\n\t\t\t\t<input id="newusername"\n\t\t\t\t\tref="newusername"\n\t\t\t\t\tv-model="newUser.id"\n\t\t\t\t\t:disabled="settings.newUserGenerateUserID"\n\t\t\t\t\t:placeholder="settings.newUserGenerateUserID\n\t\t\t\t\t\t? t(\'settings\', \'Will be autogenerated\')\n\t\t\t\t\t\t: t(\'settings\', \'Username\')"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="username"\n\t\t\t\t\tpattern="[a-zA-Z0-9 _\\.@\\-\']+"\n\t\t\t\t\trequired\n\t\t\t\t\ttype="text">\n\t\t\t\t<input id="newdisplayname"\n\t\t\t\t\tv-model="newUser.displayName"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Display name\')"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="displayname"\n\t\t\t\t\ttype="text">\n\t\t\t\t<input id="newuserpassword"\n\t\t\t\t\tref="newuserpassword"\n\t\t\t\t\tv-model="newUser.password"\n\t\t\t\t\t:minlength="minPasswordLength"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Password\')"\n\t\t\t\t\t:required="newUser.mailAddress===\'\'"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="new-password"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="password"\n\t\t\t\t\ttype="password">\n\t\t\t\t<input id="newemail"\n\t\t\t\t\tv-model="newUser.mailAddress"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Email\')"\n\t\t\t\t\t:required="newUser.password===\'\' || settings.newUserRequireEmail"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="email"\n\t\t\t\t\ttype="email">\n\t\t\t\t<div class="groups modal__item">\n\t\t\t\t\t\x3c!-- hidden input trick for vanilla html5 form validation --\x3e\n\t\t\t\t\t<input v-if="!settings.isAdmin"\n\t\t\t\t\t\tid="newgroups"\n\t\t\t\t\t\t:class="{\'icon-loading-small\': loading.groups}"\n\t\t\t\t\t\t:required="!settings.isAdmin"\n\t\t\t\t\t\t:value="newUser.groups"\n\t\t\t\t\t\ttabindex="-1"\n\t\t\t\t\t\ttype="text">\n\t\t\t\t\t<Multiselect v-model="newUser.groups"\n\t\t\t\t\t\t:close-on-select="false"\n\t\t\t\t\t\t:disabled="loading.groups||loading.all"\n\t\t\t\t\t\t:multiple="true"\n\t\t\t\t\t\t:options="canAddGroups"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Add user to group\')"\n\t\t\t\t\t\t:tag-width="60"\n\t\t\t\t\t\t:taggable="true"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttag-placeholder="create"\n\t\t\t\t\t\ttrack-by="id"\n\t\t\t\t\t\t@tag="createGroup">\n\t\t\t\t\t\t\x3c!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\t\tSubadmins can\'t create users outside their groups\n\t\t\t\t\t\t\tTherefore, empty select is forbidden --\x3e\n\t\t\t\t\t\t<span slot="noResult">{{ t(\'settings\', \'No results\') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div v-if="subAdminsGroups.length>0 && settings.isAdmin"\n\t\t\t\t\tclass="subadmins modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.subAdminsGroups"\n\t\t\t\t\t\t:close-on-select="false"\n\t\t\t\t\t\t:multiple="true"\n\t\t\t\t\t\t:options="subAdminsGroups"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Set user as admin for\')"\n\t\t\t\t\t\t:tag-width="60"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttrack-by="id">\n\t\t\t\t\t\t<span slot="noResult">{{ t(\'settings\', \'No results\') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class="quota modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.quota"\n\t\t\t\t\t\t:allow-empty="false"\n\t\t\t\t\t\t:options="quotaOptions"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Select user quota\')"\n\t\t\t\t\t\t:taggable="true"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="label"\n\t\t\t\t\t\ttrack-by="id"\n\t\t\t\t\t\t@tag="validateQuota" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showLanguages" class="languages modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.language"\n\t\t\t\t\t\t:allow-empty="false"\n\t\t\t\t\t\t:options="languages"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Default language\')"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tgroup-label="label"\n\t\t\t\t\t\tgroup-values="languages"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttrack-by="code" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showStoragePath" class="storageLocation" />\n\t\t\t\t<div v-if="showConfig.showUserBackend" class="userBackend" />\n\t\t\t\t<div v-if="showConfig.showLastLogin" class="lastLogin" />\n\t\t\t\t<div class="user-actions">\n\t\t\t\t\t<button id="newsubmit"\n\t\t\t\t\t\tclass="button primary"\n\t\t\t\t\t\ttype="submit"\n\t\t\t\t\t\tvalue="">\n\t\t\t\t\t\t{{ t(\'settings\', \'Add a new user\') }}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</Modal>\n\t\t<div id="grid-header"\n\t\t\t:class="{\'sticky\': scrolled && !showConfig.showNewUserForm}"\n\t\t\tclass="row">\n\t\t\t<div id="headerAvatar" class="avatar" />\n\t\t\t<div id="headerName" class="name">\n\t\t\t\t{{ t(\'settings\', \'Username\') }}\n\n\t\t\t\t<div class="subtitle">\n\t\t\t\t\t{{ t(\'settings\', \'Display name\') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id="headerPassword" class="password">\n\t\t\t\t{{ t(\'settings\', \'Password\') }}\n\t\t\t</div>\n\t\t\t<div id="headerAddress" class="mailAddress">\n\t\t\t\t{{ t(\'settings\', \'Email\') }}\n\t\t\t</div>\n\t\t\t<div id="headerGroups" class="groups">\n\t\t\t\t{{ t(\'settings\', \'Groups\') }}\n\t\t\t</div>\n\t\t\t<div v-if="subAdminsGroups.length>0 && settings.isAdmin"\n\t\t\t\tid="headerSubAdmins"\n\t\t\t\tclass="subadmins">\n\t\t\t\t{{ t(\'settings\', \'Group admin for\') }}\n\t\t\t</div>\n\t\t\t<div id="headerQuota" class="quota">\n\t\t\t\t{{ t(\'settings\', \'Quota\') }}\n\t\t\t</div>\n\t\t\t<div v-if="showConfig.showLanguages"\n\t\t\t\tid="headerLanguages"\n\t\t\t\tclass="languages">\n\t\t\t\t{{ t(\'settings\', \'Language\') }}\n\t\t\t</div>\n\n\t\t\t<div v-if="showConfig.showUserBackend || showConfig.showStoragePath"\n\t\t\t\tclass="headerUserBackend userBackend">\n\t\t\t\t<div v-if="showConfig.showUserBackend" class="userBackend">\n\t\t\t\t\t{{ t(\'settings\', \'User backend\') }}\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showStoragePath"\n\t\t\t\t\tclass="subtitle storageLocation">\n\t\t\t\t\t{{ t(\'settings\', \'Storage location\') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-if="showConfig.showLastLogin"\n\t\t\t\tclass="headerLastLogin lastLogin">\n\t\t\t\t{{ t(\'settings\', \'Last login\') }}\n\t\t\t</div>\n\n\t\t\t<div class="userActions" />\n\t\t</div>\n\n\t\t<user-row v-for="user in filteredUsers"\n\t\t\t:key="user.id"\n\t\t\t:external-actions="externalActions"\n\t\t\t:groups="groups"\n\t\t\t:languages="languages"\n\t\t\t:quota-options="quotaOptions"\n\t\t\t:settings="settings"\n\t\t\t:show-config="showConfig"\n\t\t\t:sub-admins-groups="subAdminsGroups"\n\t\t\t:user="user" />\n\t\t<InfiniteLoading ref="infiniteLoading" @infinite="infiniteHandler">\n\t\t\t<div slot="spinner">\n\t\t\t\t<div class="users-icon-loading icon-loading" />\n\t\t\t</div>\n\t\t\t<div slot="no-more">\n\t\t\t\t<div class="users-list-end" />\n\t\t\t</div>\n\t\t\t<div slot="no-results">\n\t\t\t\t<div id="emptycontent">\n\t\t\t\t\t<div class="icon-contacts-dark" />\n\t\t\t\t\t<h2>{{ t(\'settings\', \'No users in here\') }}</h2>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</InfiniteLoading>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from \'@nextcloud/event-bus\'\nimport InfiniteLoading from \'vue-infinite-loading\'\nimport Vue from \'vue\'\nimport { Modal } from \'@nextcloud/vue\'\n\nimport Multiselect from \'@nextcloud/vue/dist/Components/Multiselect\'\n\nimport userRow from \'./UserList/UserRow\'\n\nconst unlimitedQuota = {\n\tid: \'none\',\n\tlabel: t(\'settings\', \'Unlimited\'),\n}\nconst defaultQuota = {\n\tid: \'default\',\n\tlabel: t(\'settings\', \'Default quota\'),\n}\nconst newUser = {\n\tid: \'\',\n\tdisplayName: \'\',\n\tpassword: \'\',\n\tmailAddress: \'\',\n\tgroups: [],\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\tcomponents: {\n\t\tModal,\n\t\tuserRow,\n\t\tMultiselect,\n\t\tInfiniteLoading,\n\t},\n\tprops: {\n\t\tusers: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\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\tdata() {\n\t\treturn {\n\t\t\tunlimitedQuota,\n\t\t\tdefaultQuota,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tgroups: false,\n\t\t\t},\n\t\t\tscrolled: false,\n\t\t\tsearchQuery: \'\',\n\t\t\tnewUser: Object.assign({}, newUser),\n\t\t}\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\t\tselectedGroupDecoded() {\n\t\t\treturn decodeURIComponent(this.selectedGroup)\n\t\t},\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\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\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\t\tsubAdminsGroups() {\n\t\t\t// data provided php side\n\t\t\treturn this.$store.getters.getSubadminGroups\n\t\t},\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(this.unlimitedQuota)\n\t\t\t}\n\t\t\tquotaPreset.unshift(this.defaultQuota)\n\t\t\treturn quotaPreset\n\t\t},\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\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\twatch: {\n\t\t// watch url change and group select\n\t\tselectedGroup(val, old) {\n\t\t\t// if selected is the disabled group but it\'s empty\n\t\t\tthis.redirectIfDisabled()\n\t\t\tthis.$store.commit(\'resetUsers\')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\tthis.setNewUserDefaultGroup(val)\n\t\t},\n\n\t\t// make sure the infiniteLoading state is changed if we manually\n\t\t// add/remove data from the store\n\t\tusersCount(val, old) {\n\t\t\t// deleting the last user, reset the list\n\t\t\tif (val === 0 && old === 1) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t\t// adding the first user, warn the infiniteLoader that\n\t\t\t\t// the list is not empty anymore (we don\'t fetch the newly\n\t\t\t\t// added user as we already have all the info we need)\n\t\t\t} else if (val === 1 && old === 0) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.loaded()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\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\tthis.redirectIfDisabled()\n\t},\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\tonScroll(event) {\n\t\t\tthis.scrolled = event.target.scrollTo > 0\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\tinfiniteHandler($state) {\n\t\t\tthis.$store.dispatch(\'getUsers\', {\n\t\t\t\toffset: this.usersOffset,\n\t\t\t\tlimit: this.usersLimit,\n\t\t\t\tgroup: this.selectedGroup !== \'disabled\' ? this.selectedGroup : \'\',\n\t\t\t\tsearch: this.searchQuery,\n\t\t\t})\n\t\t\t\t.then((usersCount) => {\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\t$state.loaded()\n\t\t\t\t\t}\n\t\t\t\t\tif (usersCount < this.usersLimit) {\n\t\t\t\t\t\t$state.complete()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t/* SEARCH */\n\t\tsearch({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t\tthis.$store.commit(\'resetUsers\')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t},\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\t\tcreateUser() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch(\'addUser\', {\n\t\t\t\tuserid: this.newUser.id,\n\t\t\t\tpassword: this.newUser.password,\n\t\t\t\tdisplayName: this.newUser.displayName,\n\t\t\t\temail: this.newUser.mailAddress,\n\t\t\t\tgroups: this.newUser.groups.map(group => group.id),\n\t\t\t\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\n\t\t\t\tquota: this.newUser.quota.id,\n\t\t\t\tlanguage: this.newUser.language.code,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.resetForm()\n\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\tthis.closeModal()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n\t\t\t\t\t\tconst statuscode = error.response.data.ocs.meta.statuscode\n\t\t\t\t\t\tif (statuscode === 102) {\n\t\t\t\t\t\t\t// wrong username\n\t\t\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\t\t} else if (statuscode === 107) {\n\t\t\t\t\t\t\t// wrong password\n\t\t\t\t\t\t\tthis.$refs.newuserpassword.focus()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\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 * Create a new group\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t * @return {Promise}\n\t\t */\n\t\tcreateGroup(gid) {\n\t\t\tthis.loading.groups = true\n\t\t\tthis.$store.dispatch(\'addGroup\', gid)\n\t\t\t\t.then((group) => {\n\t\t\t\t\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\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\tredirectIfDisabled() {\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\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t}\n\t\t},\n\t\tcloseModal() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.showConfig.showNewUserForm = false\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.modal-wrapper {\n\t\tmargin: 2vh 0;\n\t\talign-items: flex-start;\n\t}\n\t.modal__content {\n\t\tdisplay: flex;\n\t\tpadding: 20px;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\ttext-align: center;\n\t}\n\t.modal__item {\n\t\tmargin-bottom: 16px;\n\t\twidth: 100%;\n\t}\n\t.modal__item:not(:focus):not(:active) {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\t.modal__item::v-deep .multiselect {\n\t\twidth: 100%;\n\t}\n\t.user-actions {\n\t\tmargin-top: 20px;\n\t}\n\t.modal__content::v-deep .multiselect__single {\n\t\ttext-align: left;\n\t\tbox-sizing: border-box;\n\t}\n\t.modal__content::v-deep .multiselect__content-wrapper {\n\t\tbox-sizing: border-box;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\n\n\t/* fake input for groups validation */\n\tinput#newgroups {\n\t\tposition: absolute;\n\t\topacity: 0;\n\t\t/* The "hidden" input is behind the Multiselect, so in general it does\n\t\t * not receives clicks. However, with Firefox, after the validation\n\t\t * fails, it will receive the first click done on it, so its width needs\n\t\t * to be set to 0 to prevent that ("pointer-events: none" does not\n\t\t * prevent it). */\n\t\twidth: 0;\n\t}\n</style>\n'],sourceRoot:""}]),n.Z=r},98902:function(n,e,s){s.r(e),s.d(e,{default:function(){return Ft}});var i=s(23068),a=s.n(i),r=s(58908),o=s.n(r),u=s(49169),l=s.n(u),d=s(50753),c=s.n(d),g=s(7612),p=s.n(g),h=s(17578),m=s.n(h),f=s(32353),v=s.n(f),w=s(4820),b=s(9597),A=s.n(b),y=s(79753),C=s(7811),_=s.n(C),U=s(20144),k=s(87369),x=s.n(k),L=s(88408),G=s.n(L),S=s(56286),M=s.n(S),q=s(43337),N=s.n(q);function $(t,n,e,s,i,a,r){try{var o=t[a](r),u=o.value}catch(t){return void e(t)}o.done?n(u):Promise.resolve(u).then(s,i)}var O={name:"GroupListItem",components:{ActionInput:G(),ActionButton:M(),CounterBubble:N(),AppNavigationItem:p()},props:{id:{type:String,required:!0},title:{type:String,required:!0},count:{type:Number,required:!1}},data:function(){return{loadingRenameGroup:!1,openGroupMenu:!1}},computed:{settings:function(){return this.$store.getters.getServerData}},methods:{handleGroupMenuOpen:function(){this.openGroupMenu=!0},renameGroup:function(t){var n,e=this;return(n=regeneratorRuntime.mark((function n(){var s;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(""!==t.trim()){n.next=2;break}return n.abrupt("return");case 2:if(""!==(s=e.$refs.displayNameInput.$el.querySelector('input[type="text"]').value).trim()){n.next=5;break}return n.abrupt("return");case 5:return n.prev=5,e.openGroupMenu=!1,e.loadingRenameGroup=!0,n.next=10,e.$store.dispatch("renameGroup",{groupid:t.trim(),displayName:s.trim()});case 10:e.loadingRenameGroup=!1,n.next=17;break;case 13:n.prev=13,n.t0=n.catch(5),e.openGroupMenu=!0,e.loadingRenameGroup=!1;case 17:case"end":return n.stop()}}),n,null,[[5,13]])})),function(){var t=this,e=arguments;return new Promise((function(s,i){var a=n.apply(t,e);function r(t){$(a,s,i,r,o,"next",t)}function o(t){$(a,s,i,r,o,"throw",t)}r(void 0)}))})()},removeGroup:function(n){var e=this;OC.dialogs.confirm(t("settings","You are about to remove the group {group}. The users will NOT be deleted.",{group:n}),t("settings","Please confirm the group removal "),(function(t){t&&e.$store.dispatch("removeGroup",n)}))}}},P=O,D=s(51900),R=(0,D.Z)(P,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("AppNavigationItem",{key:t.id,attrs:{exact:!0,title:t.title,to:{name:"group",params:{selectedGroup:encodeURIComponent(t.id)}},icon:"icon-group",loading:t.loadingRenameGroup,"menu-open":t.openGroupMenu},on:{"update:menuOpen":t.handleGroupMenuOpen},scopedSlots:t._u([{key:"counter",fn:function(){return[t.count?e("CounterBubble",[t._v("\n\t\t\t"+t._s(t.count)+"\n\t\t")]):t._e()]},proxy:!0},{key:"actions",fn:function(){return["admin"!==t.id&&"disabled"!==t.id&&t.settings.isAdmin?e("ActionInput",{ref:"displayNameInput",attrs:{icon:"icon-edit",type:"text",value:t.title},on:{submit:function(n){return t.renameGroup(t.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Rename group"))+"\n\t\t")]):t._e(),t._v(" "),"admin"!==t.id&&"disabled"!==t.id&&t.settings.isAdmin?e("ActionButton",{attrs:{icon:"icon-delete"},on:{click:function(n){return t.removeGroup(t.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Remove group"))+"\n\t\t")]):t._e()]},proxy:!0}])})}),[],!1,null,null,null).exports,Q=s(74854),B=s(30306),z=s.n(B),I=s(33476),F=s(2649),T=s.n(F),j=s(34741),E=s(26533),W=s.n(E),Z=s(79440),H=s.n(Z),Y=s(22200);function V(t){return V="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},V(t)}var J={props:{user:{type:Object,required:!0},settings:{type:Object,default:function(){return{}}},groups:{type:Array,default:function(){return[]}},subAdminsGroups:{type:Array,default:function(){return[]}},quotaOptions:{type:Array,default:function(){return[]}},showConfig:{type:Object,default:function(){return{}}},languages:{type:Array,required:!0},externalActions:{type:Array,default:function(){return[]}}},computed:{userGroups:function(){var t=this;return this.groups.filter((function(n){return t.user.groups.includes(n.id)}))},userSubAdminsGroups:function(){var t=this;return this.subAdminsGroups.filter((function(n){return t.user.subadmin.includes(n.id)}))},availableGroups:function(){var t=this;return this.groups.map((function(n){var e=Object.assign({},n);return e.$isDisabled=!1===n.canAdd&&!t.user.groups.includes(n.id)||!1===n.canRemove&&t.user.groups.includes(n.id),e}))},usedSpace:function(){return this.user.quota.used?t("settings","{size} used",{size:OC.Util.humanFileSize(this.user.quota.used)}):t("settings","{size} used",{size:OC.Util.humanFileSize(0)})},usedQuota:function(){var t=this.user.quota.quota;return t=t>0?Math.min(100,Math.round(this.user.quota.used/t*100)):95*(1-1/(this.user.quota.used/(10*Math.pow(2,30))+1)),isNaN(t)?0:t},userQuota:function(){if(this.user.quota.quota>=0){var t=OC.Util.humanFileSize(this.user.quota.quota);return this.quotaOptions.find((function(n){return n.id===t}))||{id:t,label:t}}return"default"===this.user.quota.quota?this.quotaOptions[0]:this.quotaOptions[1]},minPasswordLength:function(){return this.$store.getters.getPasswordPolicyMinLength},userLanguage:function(){var t=this,n=this.languages[0].languages.concat(this.languages[1].languages).find((function(n){return n.code===t.user.language}));return"object"!==V(n)&&""!==this.user.language?{code:this.user.language,name:this.user.language}:""!==this.user.language&&n},userLastLoginTooltip:function(){return this.user.lastLogin>0?OC.Util.formatDate(this.user.lastLogin):""},userLastLogin:function(){return this.user.lastLogin>0?OC.Util.relativeModifiedDate(this.user.lastLogin):t("settings","Never")}},methods:{generateAvatar:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:32;return(0,y.generateUrl)("/avatar/{user}/{size}?v={version}",{user:t,size:n,version:oc_userconfig.avatar.version})}}},K={name:"UserRowSimple",components:{PopoverMenu:W(),ActionButton:M(),Actions:H()},directives:{ClickOutside:T()},mixins:[J],props:{user:{type:Object,required:!0},loading:{type:Object,required:!0},showConfig:{type:Object,required:!0},userActions:{type:Array,required:!0},openedMenu:{type:Boolean,required:!0},feedbackMessage:{type:String,required:!0},subAdminsGroups:{type:Array,required:!0},settings:{type:Object,required:!0}},computed:{userGroupsLabels:function(){return this.userGroups.map((function(t){return t.name})).join(", ")},userSubAdminsGroupsLabels:function(){return this.userSubAdminsGroups.map((function(t){return t.name})).join(", ")},usedSpace:function(){return this.user.quota.used?t("settings","{size} used",{size:OC.Util.humanFileSize(this.user.quota.used)}):t("settings","{size} used",{size:OC.Util.humanFileSize(0)})},canEdit:function(){return(0,Y.getCurrentUser)().uid!==this.user.id||this.settings.isAdmin},userQuota:function(){var n=this.user.quota.quota;return"default"===n&&"none"!==(n=this.settings.defaultQuota)&&(n=OC.Util.computerFileSize(n)),"none"===n||-3===n?t("settings","Unlimited"):n>=0?OC.Util.humanFileSize(n):OC.Util.humanFileSize(0)}},methods:{toggleMenu:function(){this.$emit("update:openedMenu",!this.openedMenu)},hideMenu:function(){this.$emit("update:openedMenu",!1)},toggleEdit:function(){this.$emit("update:editing",!0)}}},X=s(93379),tt=s.n(X),nt=s(7795),et=s.n(nt),st=s(90569),it=s.n(st),at=s(3565),rt=s.n(at),ot=s(19216),ut=s.n(ot),lt=s(44589),dt=s.n(lt),ct=s(6857),gt={};gt.styleTagTransform=dt(),gt.setAttributes=rt(),gt.insert=it().bind(null,"head"),gt.domAPI=et(),gt.insertStyleElement=ut(),tt()(ct.Z,gt),ct.Z&&ct.Z.locals&&ct.Z.locals;var pt=(0,D.Z)(K,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"row",class:{disabled:t.loading.delete||t.loading.disable},attrs:{"data-id":t.user.id}},[e("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():e("img",{attrs:{alt:"",width:"32",height:"32",src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x"}})]),t._v(" "),e("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t\t"),e("div",{staticClass:"displayName subtitle"},[e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.displayname.length>20?t.user.displayname:"",expression:"user.displayname.length > 20 ? user.displayname : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t\t"+t._s(t.user.displayname)+"\n\t\t\t")])])]),t._v(" "),e("div"),t._v(" "),e("div",{staticClass:"mailAddress"},[e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:null!==t.user.email&&t.user.email.length>20?t.user.email:"",expression:"user.email !== null && user.email.length > 20 ? user.email : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t"+t._s(t.user.email)+"\n\t\t")])]),t._v(" "),e("div",{staticClass:"groups"},[t._v("\n\t\t"+t._s(t.userGroupsLabels)+"\n\t")]),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subAdminsGroups"},[t._v("\n\t\t"+t._s(t.userSubAdminsGroupsLabels)+"\n\t")]):t._e(),t._v(" "),e("div",{staticClass:"userQuota"},[e("div",{staticClass:"quota"},[t._v("\n\t\t\t"+t._s(t.userQuota)+" ("+t._s(t.usedSpace)+")\n\t\t\t"),e("progress",{staticClass:"quota-user-progress",class:{warn:t.usedQuota>80},attrs:{max:"100"},domProps:{value:t.usedQuota}})])]),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages"},[t._v("\n\t\t"+t._s(t.userLanguage.name)+"\n\t")]):t._e(),t._v(" "),t.showConfig.showUserBackend||t.showConfig.showStoragePath?e("div",{staticClass:"userBackend"},[t.showConfig.showUserBackend?e("div",{staticClass:"userBackend"},[t._v("\n\t\t\t"+t._s(t.user.backend)+"\n\t\t")]):t._e(),t._v(" "),t.showConfig.showStoragePath?e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.storageLocation,expression:"user.storageLocation"}],staticClass:"storageLocation subtitle"},[t._v("\n\t\t\t"+t._s(t.user.storageLocation)+"\n\t\t")]):t._e()]):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.userLastLoginTooltip,expression:"userLastLoginTooltip",modifiers:{auto:!0}}],staticClass:"lastLogin"},[t._v("\n\t\t"+t._s(t.userLastLogin)+"\n\t")]):t._e(),t._v(" "),e("div",{staticClass:"userActions"},[t.canEdit&&!t.loading.all?e("div",{staticClass:"toggleUserActions"},[e("Actions",[e("ActionButton",{attrs:{icon:"icon-rename"},on:{click:t.toggleEdit}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Edit User"))+"\n\t\t\t\t")])],1),t._v(" "),e("div",{staticClass:"userPopoverMenuWrapper"},[e("button",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideMenu,expression:"hideMenu"}],staticClass:"icon-more",attrs:{"aria-label":t.t("settings","Toggle user actions menu")},on:{click:function(n){return n.preventDefault(),t.toggleMenu.apply(null,arguments)}}}),t._v(" "),e("div",{staticClass:"popovermenu",class:{open:t.openedMenu},attrs:{"aria-expanded":t.openedMenu}},[e("PopoverMenu",{attrs:{menu:t.userActions}})],1)])],1):t._e(),t._v(" "),e("div",{staticClass:"feedback",style:{opacity:""!==t.feedbackMessage?1:0}},[e("div",{staticClass:"icon-checkmark"}),t._v("\n\t\t\t"+t._s(t.feedbackMessage)+"\n\t\t")])])])}),[],!1,null,null,null),ht=pt.exports;function mt(t,n,e,s,i,a,r){try{var o=t[a](r),u=o.value}catch(t){return void e(t)}o.done?n(u):Promise.resolve(u).then(s,i)}function ft(t){return function(){var n=this,e=arguments;return new Promise((function(s,i){var a=t.apply(n,e);function r(t){mt(a,s,i,r,o,"next",t)}function o(t){mt(a,s,i,r,o,"throw",t)}r(void 0)}))}}U.default.use(j.default);var vt={name:"UserRow",components:{UserRowSimple:ht,PopoverMenu:I.PopoverMenu,Actions:I.Actions,ActionButton:I.ActionButton,Multiselect:I.Multiselect},directives:{ClickOutside:T()},mixins:[J],props:{user:{type:Object,required:!0},settings:{type:Object,default:function(){return{}}},groups:{type:Array,default:function(){return[]}},subAdminsGroups:{type:Array,default:function(){return[]}},quotaOptions:{type:Array,default:function(){return[]}},showConfig:{type:Object,default:function(){return{}}},languages:{type:Array,required:!0},externalActions:{type:Array,default:function(){return[]}}},data:function(){return{rand:parseInt(1e3*Math.random()),openedMenu:!1,feedbackMessage:"",editing:!1,loading:{all:!1,displayName:!1,password:!1,mailAddress:!1,groups:!1,subadmins:!1,quota:!1,delete:!1,disable:!1,languages:!1,wipe:!1}}},computed:{userActions:function(){var n=[{icon:"icon-delete",text:t("settings","Delete user"),action:this.deleteUser},{icon:"icon-delete",text:t("settings","Wipe all devices"),action:this.wipeUserDevices},{icon:this.user.enabled?"icon-close":"icon-add",text:this.user.enabled?t("settings","Disable user"):t("settings","Enable user"),action:this.enableDisableUser}];return null!==this.user.email&&""!==this.user.email&&n.push({icon:"icon-mail",text:t("settings","Resend welcome email"),action:this.sendWelcomeMail}),n.concat(this.externalActions)}},methods:{toggleMenu:function(){this.openedMenu=!this.openedMenu},hideMenu:function(){this.openedMenu=!1},wipeUserDevices:function(){var n=this,e=this.user.id;OC.dialogs.confirmDestructive(t("settings","In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.",{userid:e}),t("settings","Remote wipe of devices"),{type:OC.dialogs.YES_NO_BUTTONS,confirm:t("settings","Wipe {userid}'s devices",{userid:e}),confirmClasses:"error",cancel:t("settings","Cancel")},(function(t){t&&(n.loading.wipe=!0,n.loading.all=!0,n.$store.dispatch("wipeUserDevices",e).then((function(){n.loading.wipe=!1,n.loading.all=!1})))}),!0)},deleteUser:function(){var n=this,e=this.user.id;OC.dialogs.confirmDestructive(t("settings","Fully delete {userid}'s account including all their personal files, app data, etc.",{userid:e}),t("settings","Account deletion"),{type:OC.dialogs.YES_NO_BUTTONS,confirm:t("settings","Delete {userid}'s account",{userid:e}),confirmClasses:"error",cancel:t("settings","Cancel")},(function(t){if(t)return n.loading.delete=!0,n.loading.all=!0,n.$store.dispatch("deleteUser",e).then((function(){n.loading.delete=!1,n.loading.all=!1}))}),!0)},enableDisableUser:function(){var t=this;this.loading.delete=!0,this.loading.all=!0;var n=this.user.id,e=!this.user.enabled;return this.$store.dispatch("enableDisableUser",{userid:n,enabled:e}).then((function(){t.loading.delete=!1,t.loading.all=!1}))},updateDisplayName:function(){var t=this,n=this.$refs.displayName.value;this.loading.displayName=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"displayname",value:n}).then((function(){t.loading.displayName=!1,t.$refs.displayName.value=n}))},updatePassword:function(){var t=this,n=this.$refs.password.value;this.loading.password=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"password",value:n}).then((function(){t.loading.password=!1,t.$refs.password.value=""}))},updateEmail:function(){var t=this,n=this.$refs.mailAddress.value;this.loading.mailAddress=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"email",value:n}).then((function(){t.loading.mailAddress=!1,t.$refs.mailAddress.value=n}))},createGroup:function(t){var n=this;return ft(regeneratorRuntime.mark((function e(){var s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading={groups:!0,subadmins:!0},e.prev=1,e.next=4,n.$store.dispatch("addGroup",t);case 4:return s=n.user.id,e.next=7,n.$store.dispatch("addUserGroup",{userid:s,gid:t});case 7:e.next=12;break;case 9:e.prev=9,e.t0=e.catch(1),console.error(e.t0);case 12:return e.prev=12,n.loading={groups:!1,subadmins:!1},e.finish(12);case 15:return e.abrupt("return",n.$store.getters.getGroups[n.groups.length]);case 16:case"end":return e.stop()}}),e,null,[[1,9,12,15]])})))()},addUserGroup:function(t){var n=this;return ft(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!1!==t.canAdd){e.next=2;break}return e.abrupt("return",!1);case 2:return n.loading.groups=!0,s=n.user.id,i=t.id,e.prev=5,e.next=8,n.$store.dispatch("addUserGroup",{userid:s,gid:i});case 8:e.next=13;break;case 10:e.prev=10,e.t0=e.catch(5),console.error(e.t0);case 13:return e.prev=13,n.loading.groups=!1,e.finish(13);case 16:case"end":return e.stop()}}),e,null,[[5,10,13,16]])})))()},removeUserGroup:function(t){var n=this;return ft(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!1!==t.canRemove){e.next=2;break}return e.abrupt("return",!1);case 2:return n.loading.groups=!0,s=n.user.id,i=t.id,e.prev=5,e.next=8,n.$store.dispatch("removeUserGroup",{userid:s,gid:i});case 8:n.loading.groups=!1,n.$route.params.selectedGroup===i&&n.$store.commit("deleteUser",s),e.next=15;break;case 12:e.prev=12,e.t0=e.catch(5),n.loading.groups=!1;case 15:case"end":return e.stop()}}),e,null,[[5,12]])})))()},addUserSubAdmin:function(t){var n=this;return ft(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading.subadmins=!0,s=n.user.id,i=t.id,e.prev=3,e.next=6,n.$store.dispatch("addUserSubAdmin",{userid:s,gid:i});case 6:n.loading.subadmins=!1,e.next=12;break;case 9:e.prev=9,e.t0=e.catch(3),console.error(e.t0);case 12:case"end":return e.stop()}}),e,null,[[3,9]])})))()},removeUserSubAdmin:function(t){var n=this;return ft(regeneratorRuntime.mark((function e(){var s,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading.subadmins=!0,s=n.user.id,i=t.id,e.prev=3,e.next=6,n.$store.dispatch("removeUserSubAdmin",{userid:s,gid:i});case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(3),console.error(e.t0);case 11:return e.prev=11,n.loading.subadmins=!1,e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[3,8,11,14]])})))()},setUserQuota:function(){var t=arguments,n=this;return ft(regeneratorRuntime.mark((function e(){var s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=t.length>0&&void 0!==t[0]?t[0]:"none",n.loading.quota=!0,s=s.id?s.id:s,e.prev=3,e.next=6,n.$store.dispatch("setUserData",{userid:n.user.id,key:"quota",value:s});case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(3),console.error(e.t0);case 11:return e.prev=11,n.loading.quota=!1,e.finish(11);case 14:return e.abrupt("return",s);case 15:case"end":return e.stop()}}),e,null,[[3,8,11,14]])})))()},validateQuota:function(t){var n=OC.Util.computerFileSize(t);return null!==n&&n>=0&&this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(t)))},setUserLanguage:function(t){var n=this;return ft(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.loading.languages=!0,e.prev=1,e.next=4,n.$store.dispatch("setUserData",{userid:n.user.id,key:"language",value:t.code});case 4:e.next=9;break;case 6:e.prev=6,e.t0=e.catch(1),console.error(e.t0);case 9:return e.prev=9,n.loading.languages=!1,e.finish(9);case 12:return e.abrupt("return",t);case 13:case"end":return e.stop()}}),e,null,[[1,6,9,12]])})))()},sendWelcomeMail:function(){var n=this;this.loading.all=!0,this.$store.dispatch("sendWelcomeMail",this.user.id).then((function(e){e&&(n.feedbackMessage=t("setting","Welcome mail sent!"),setTimeout((function(){n.feedbackMessage=""}),2e3)),n.loading.all=!1}))}}},wt=vt,bt=s(8353),At={};At.styleTagTransform=dt(),At.setAttributes=rt(),At.insert=it().bind(null,"head"),At.domAPI=et(),At.insertStyleElement=ut(),tt()(bt.Z,At),bt.Z&&bt.Z.locals&&bt.Z.locals;var yt=(0,D.Z)(wt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return 1===Object.keys(t.user).length?e("div",{staticClass:"row",attrs:{"data-id":t.user.id}},[e("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():e("img",{attrs:{src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x",alt:"",height:"32",width:"32"}})]),t._v(" "),e("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t")]),t._v(" "),e("div",{staticClass:"obfuscated"},[t._v("\n\t\t"+t._s(t.t("settings","You do not have permissions to see the details of this user"))+"\n\t")])]):t.editing?e("div",{staticClass:"row row--editable",class:{disabled:t.loading.delete||t.loading.disable,"row--menu-opened":t.openedMenu},attrs:{"data-id":t.user.id}},[e("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():e("img",{attrs:{src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x",alt:"",height:"32",width:"32"}})]),t._v(" "),t.user.backendCapabilities.setDisplayName?e("div",{staticClass:"displayName"},[e("form",{staticClass:"displayName",class:{"icon-loading-small":t.loading.displayName},on:{submit:function(n){return n.preventDefault(),t.updateDisplayName.apply(null,arguments)}}},[e("input",{ref:"displayName",attrs:{id:"displayName"+t.user.id+t.rand,disabled:t.loading.displayName||t.loading.all,autocapitalize:"off",autocomplete:"off",autocorrect:"off",spellcheck:"false",type:"text"},domProps:{value:t.user.displayname}}),t._v(" "),e("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})])]):e("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t\t"),e("div",{staticClass:"displayName subtitle"},[e("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.displayname.length>20?t.user.displayname:"",expression:"user.displayname.length > 20 ? user.displayname : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t\t"+t._s(t.user.displayname)+"\n\t\t\t")])])]),t._v(" "),t.settings.canChangePassword&&t.user.backendCapabilities.setPassword?e("form",{staticClass:"password",class:{"icon-loading-small":t.loading.password},on:{submit:function(n){return n.preventDefault(),t.updatePassword.apply(null,arguments)}}},[e("input",{ref:"password",attrs:{id:"password"+t.user.id+t.rand,disabled:t.loading.password||t.loading.all,minlength:t.minPasswordLength,placeholder:t.t("settings","Add new password"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",required:"",spellcheck:"false",type:"password",value:""}}),t._v(" "),e("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})]):e("div"),t._v(" "),e("form",{staticClass:"mailAddress",class:{"icon-loading-small":t.loading.mailAddress},on:{submit:function(n){return n.preventDefault(),t.updateEmail.apply(null,arguments)}}},[e("input",{ref:"mailAddress",attrs:{id:"mailAddress"+t.user.id+t.rand,disabled:t.loading.mailAddress||t.loading.all,placeholder:t.t("settings","Add new email address"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",spellcheck:"false",type:"email"},domProps:{value:t.user.email}}),t._v(" "),e("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})]),t._v(" "),e("div",{staticClass:"groups",class:{"icon-loading-small":t.loading.groups}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.groups||t.loading.all,limit:2,multiple:!0,options:t.availableGroups,placeholder:t.t("settings","Add user to group"),"tag-width":60,taggable:t.settings.isAdmin,value:t.userGroups,label:"name","tag-placeholder":"create","track-by":"id"},on:{remove:t.removeUserGroup,select:t.addUserGroup,tag:t.createGroup}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subadmins",class:{"icon-loading-small":t.loading.subadmins}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.subadmins||t.loading.all,limit:2,multiple:!0,options:t.subAdminsGroups,placeholder:t.t("settings","Set user as admin for"),"tag-width":60,value:t.userSubAdminsGroups,label:"name","track-by":"id"},on:{remove:t.removeUserSubAdmin,select:t.addUserSubAdmin}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1):t._e(),t._v(" "),e("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.usedSpace,expression:"usedSpace",modifiers:{auto:!0}}],staticClass:"quota",class:{"icon-loading-small":t.loading.quota}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,disabled:t.loading.quota||t.loading.all,options:t.quotaOptions,placeholder:t.t("settings","Select user quota"),taggable:!0,value:t.userQuota,label:"label","tag-placeholder":"create","track-by":"id"},on:{input:t.setUserQuota,tag:t.validateQuota}})],1),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages",class:{"icon-loading-small":t.loading.languages}},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,disabled:t.loading.languages||t.loading.all,options:t.languages,placeholder:t.t("settings","No language set"),value:t.userLanguage,"group-label":"label","group-values":"languages",label:"name","track-by":"code"},on:{input:t.setUserLanguage}})],1):t._e(),t._v(" "),t.showConfig.showStoragePath||t.showConfig.showUserBackend?e("div",{staticClass:"storageLocation"}):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div"):t._e(),t._v(" "),e("div",{staticClass:"userActions"},[t.loading.all?t._e():e("div",{staticClass:"toggleUserActions"},[e("Actions",[e("ActionButton",{attrs:{icon:"icon-checkmark"},on:{click:function(n){t.editing=!1}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Done"))+"\n\t\t\t\t")])],1),t._v(" "),e("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideMenu,expression:"hideMenu"}],staticClass:"userPopoverMenuWrapper"},[e("button",{staticClass:"icon-more",on:{click:function(n){return n.preventDefault(),t.toggleMenu.apply(null,arguments)}}}),t._v(" "),e("div",{staticClass:"popovermenu",class:{open:t.openedMenu}},[e("PopoverMenu",{attrs:{menu:t.userActions}})],1)])],1),t._v(" "),e("div",{staticClass:"feedback",style:{opacity:""!==t.feedbackMessage?1:0}},[e("div",{staticClass:"icon-checkmark"}),t._v("\n\t\t\t"+t._s(t.feedbackMessage)+"\n\t\t")])])]):e("UserRowSimple",{class:{"row--menu-opened":t.openedMenu},attrs:{editing:t.editing,"feedback-message":t.feedbackMessage,groups:t.groups,languages:t.languages,loading:t.loading,"opened-menu":t.openedMenu,settings:t.settings,"show-config":t.showConfig,"sub-admins-groups":t.subAdminsGroups,"user-actions":t.userActions,user:t.user},on:{"update:editing":function(n){t.editing=n},"update:openedMenu":function(n){t.openedMenu=n},"update:opened-menu":function(n){t.openedMenu=n}}})}),[],!1,null,"4c932ffd",null),Ct=yt.exports,_t={id:"none",label:t("settings","Unlimited")},Ut={id:"default",label:t("settings","Default quota")},kt={id:"",displayName:"",password:"",mailAddress:"",groups:[],subAdminsGroups:[],quota:Ut,language:{code:"en",name:t("settings","Default language")}},xt={name:"UserList",components:{Modal:I.Modal,userRow:Ct,Multiselect:_(),InfiniteLoading:z()},props:{users:{type:Array,default:function(){return[]}},showConfig:{type:Object,required:!0},selectedGroup:{type:String,default:null},externalActions:{type:Array,default:function(){return[]}}},data:function(){return{unlimitedQuota:_t,defaultQuota:Ut,loading:{all:!1,groups:!1},scrolled:!1,searchQuery:"",newUser:Object.assign({},kt)}},computed:{settings:function(){return this.$store.getters.getServerData},selectedGroupDecoded:function(){return decodeURIComponent(this.selectedGroup)},filteredUsers:function(){return"disabled"===this.selectedGroup?this.users.filter((function(t){return!1===t.enabled})):(this.settings.isAdmin,this.users.filter((function(t){return!1!==t.enabled})))},groups:function(){return this.$store.getters.getGroups.filter((function(t){return"disabled"!==t.id})).sort((function(t,n){return t.name.localeCompare(n.name)}))},canAddGroups:function(){return this.groups.map((function(t){return(t=Object.assign({},t)).$isDisabled=!1===t.canAdd,t}))},subAdminsGroups:function(){return this.$store.getters.getSubadminGroups},quotaOptions:function(){var t=this.settings.quotaPreset.reduce((function(t,n){return t.concat({id:n,label:n})}),[]);return this.settings.allowUnlimitedQuota&&t.unshift(this.unlimitedQuota),t.unshift(this.defaultQuota),t},minPasswordLength:function(){return this.$store.getters.getPasswordPolicyMinLength},usersOffset:function(){return this.$store.getters.getUsersOffset},usersLimit:function(){return this.$store.getters.getUsersLimit},usersCount:function(){return this.users.length},languages:function(){return[{label:t("settings","Common languages"),languages:this.settings.languages.commonLanguages},{label:t("settings","Other languages"),languages:this.settings.languages.otherLanguages}]}},watch:{selectedGroup:function(t,n){this.redirectIfDisabled(),this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset(),this.setNewUserDefaultGroup(t)},usersCount:function(t,n){0===t&&1===n?this.$refs.infiniteLoading.stateChanger.reset():1===t&&0===n&&this.$refs.infiniteLoading.stateChanger.loaded()}},mounted:function(){this.settings.canChangePassword||OC.Notification.showTemporary(t("settings","Password change is disabled because the master key is disabled")),this.resetForm(),(0,Q.subscribe)("nextcloud:unified-search.search",this.search),(0,Q.subscribe)("nextcloud:unified-search.reset",this.resetSearch),this.redirectIfDisabled()},beforeDestroy:function(){(0,Q.unsubscribe)("nextcloud:unified-search.search",this.search),(0,Q.unsubscribe)("nextcloud:unified-search.reset",this.resetSearch)},methods:{onScroll:function(t){this.scrolled=t.target.scrollTo>0},validateQuota:function(t){var n=OC.Util.computerFileSize(t);return null!==n&&n>=0?(t=OC.Util.humanFileSize(OC.Util.computerFileSize(t)),this.newUser.quota={id:t,label:t},this.newUser.quota):(this.newUser.quota=this.quotaOptions[0],this.quotaOptions[0])},infiniteHandler:function(t){var n=this;this.$store.dispatch("getUsers",{offset:this.usersOffset,limit:this.usersLimit,group:"disabled"!==this.selectedGroup?this.selectedGroup:"",search:this.searchQuery}).then((function(e){e>0&&t.loaded(),e<n.usersLimit&&t.complete()}))},search:function(t){var n=t.query;this.searchQuery=n,this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset()},resetSearch:function(){this.search({query:""})},resetForm:function(){this.newUser=Object.assign({},kt),this.settings.defaultLanguage&&U.default.set(this.newUser.language,"code",this.settings.defaultLanguage),this.setNewUserDefaultGroup(this.selectedGroup),this.loading.all=!1},createUser:function(){var t=this;this.loading.all=!0,this.$store.dispatch("addUser",{userid:this.newUser.id,password:this.newUser.password,displayName:this.newUser.displayName,email:this.newUser.mailAddress,groups:this.newUser.groups.map((function(t){return t.id})),subadmin:this.newUser.subAdminsGroups.map((function(t){return t.id})),quota:this.newUser.quota.id,language:this.newUser.language.code}).then((function(){t.resetForm(),t.$refs.newusername.focus(),t.closeModal()})).catch((function(n){if(t.loading.all=!1,n.response&&n.response.data&&n.response.data.ocs&&n.response.data.ocs.meta){var e=n.response.data.ocs.meta.statuscode;102===e?t.$refs.newusername.focus():107===e&&t.$refs.newuserpassword.focus()}}))},setNewUserDefaultGroup:function(t){if(t&&t.length>0){var n=this.groups.find((function(n){return n.id===t}));if(n)return void(this.newUser.groups=[n])}this.newUser.groups=[]},createGroup:function(t){var n=this;return this.loading.groups=!0,this.$store.dispatch("addGroup",t).then((function(e){n.newUser.groups.push(n.groups.find((function(n){return n.id===t}))),n.loading.groups=!1})).catch((function(){n.loading.groups=!1})),this.$store.getters.getGroups[this.groups.length]},redirectIfDisabled:function(){var t=this.$store.getters.getGroups;"disabled"===this.selectedGroup&&t.findIndex((function(t){return"disabled"===t.id&&0===t.usercount}))>-1&&(this.$router.push({name:"users"}),this.$refs.infiniteLoading.stateChanger.reset())},closeModal:function(){this.showConfig.showNewUserForm=!1}}},Lt=s(14036),Gt={};Gt.styleTagTransform=dt(),Gt.setAttributes=rt(),Gt.insert=it().bind(null,"head"),Gt.domAPI=et(),Gt.insertStyleElement=ut(),tt()(Lt.Z,Gt),Lt.Z&&Lt.Z.locals&&Lt.Z.locals;var St=(0,D.Z)(xt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"user-list-grid",attrs:{id:"app-content"},on:{"&scroll":function(n){return t.onScroll.apply(null,arguments)}}},[t.showConfig.showNewUserForm?e("Modal",{attrs:{size:"small"},on:{close:t.closeModal}},[e("form",{staticClass:"modal__content",attrs:{id:"new-user",disabled:t.loading.all},on:{submit:function(n){return n.preventDefault(),t.createUser.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("settings","New user")))]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.id,expression:"newUser.id"}],ref:"newusername",staticClass:"modal__item",attrs:{id:"newusername",disabled:t.settings.newUserGenerateUserID,placeholder:t.settings.newUserGenerateUserID?t.t("settings","Will be autogenerated"):t.t("settings","Username"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"username",pattern:"[a-zA-Z0-9 _\\.@\\-']+",required:"",type:"text"},domProps:{value:t.newUser.id},on:{input:function(n){n.target.composing||t.$set(t.newUser,"id",n.target.value)}}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.displayName,expression:"newUser.displayName"}],staticClass:"modal__item",attrs:{id:"newdisplayname",placeholder:t.t("settings","Display name"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"displayname",type:"text"},domProps:{value:t.newUser.displayName},on:{input:function(n){n.target.composing||t.$set(t.newUser,"displayName",n.target.value)}}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.password,expression:"newUser.password"}],ref:"newuserpassword",staticClass:"modal__item",attrs:{id:"newuserpassword",minlength:t.minPasswordLength,placeholder:t.t("settings","Password"),required:""===t.newUser.mailAddress,autocapitalize:"none",autocomplete:"new-password",autocorrect:"off",name:"password",type:"password"},domProps:{value:t.newUser.password},on:{input:function(n){n.target.composing||t.$set(t.newUser,"password",n.target.value)}}}),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.mailAddress,expression:"newUser.mailAddress"}],staticClass:"modal__item",attrs:{id:"newemail",placeholder:t.t("settings","Email"),required:""===t.newUser.password||t.settings.newUserRequireEmail,autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"email",type:"email"},domProps:{value:t.newUser.mailAddress},on:{input:function(n){n.target.composing||t.$set(t.newUser,"mailAddress",n.target.value)}}}),t._v(" "),e("div",{staticClass:"groups modal__item"},[t.settings.isAdmin?t._e():e("input",{class:{"icon-loading-small":t.loading.groups},attrs:{id:"newgroups",required:!t.settings.isAdmin,tabindex:"-1",type:"text"},domProps:{value:t.newUser.groups}}),t._v(" "),e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.groups||t.loading.all,multiple:!0,options:t.canAddGroups,placeholder:t.t("settings","Add user to group"),"tag-width":60,taggable:!0,label:"name","tag-placeholder":"create","track-by":"id"},on:{tag:t.createGroup},model:{value:t.newUser.groups,callback:function(n){t.$set(t.newUser,"groups",n)},expression:"newUser.groups"}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subadmins modal__item"},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,multiple:!0,options:t.subAdminsGroups,placeholder:t.t("settings","Set user as admin for"),"tag-width":60,label:"name","track-by":"id"},model:{value:t.newUser.subAdminsGroups,callback:function(n){t.$set(t.newUser,"subAdminsGroups",n)},expression:"newUser.subAdminsGroups"}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1):t._e(),t._v(" "),e("div",{staticClass:"quota modal__item"},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:t.quotaOptions,placeholder:t.t("settings","Select user quota"),taggable:!0,label:"label","track-by":"id"},on:{tag:t.validateQuota},model:{value:t.newUser.quota,callback:function(n){t.$set(t.newUser,"quota",n)},expression:"newUser.quota"}})],1),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages modal__item"},[e("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:t.languages,placeholder:t.t("settings","Default language"),"group-label":"label","group-values":"languages",label:"name","track-by":"code"},model:{value:t.newUser.language,callback:function(n){t.$set(t.newUser,"language",n)},expression:"newUser.language"}})],1):t._e(),t._v(" "),t.showConfig.showStoragePath?e("div",{staticClass:"storageLocation"}):t._e(),t._v(" "),t.showConfig.showUserBackend?e("div",{staticClass:"userBackend"}):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div",{staticClass:"lastLogin"}):t._e(),t._v(" "),e("div",{staticClass:"user-actions"},[e("button",{staticClass:"button primary",attrs:{id:"newsubmit",type:"submit",value:""}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Add a new user"))+"\n\t\t\t\t")])])])]):t._e(),t._v(" "),e("div",{staticClass:"row",class:{sticky:t.scrolled&&!t.showConfig.showNewUserForm},attrs:{id:"grid-header"}},[e("div",{staticClass:"avatar",attrs:{id:"headerAvatar"}}),t._v(" "),e("div",{staticClass:"name",attrs:{id:"headerName"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Username"))+"\n\n\t\t\t"),e("div",{staticClass:"subtitle"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Display name"))+"\n\t\t\t")])]),t._v(" "),e("div",{staticClass:"password",attrs:{id:"headerPassword"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Password"))+"\n\t\t")]),t._v(" "),e("div",{staticClass:"mailAddress",attrs:{id:"headerAddress"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Email"))+"\n\t\t")]),t._v(" "),e("div",{staticClass:"groups",attrs:{id:"headerGroups"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Groups"))+"\n\t\t")]),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?e("div",{staticClass:"subadmins",attrs:{id:"headerSubAdmins"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Group admin for"))+"\n\t\t")]):t._e(),t._v(" "),e("div",{staticClass:"quota",attrs:{id:"headerQuota"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Quota"))+"\n\t\t")]),t._v(" "),t.showConfig.showLanguages?e("div",{staticClass:"languages",attrs:{id:"headerLanguages"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Language"))+"\n\t\t")]):t._e(),t._v(" "),t.showConfig.showUserBackend||t.showConfig.showStoragePath?e("div",{staticClass:"headerUserBackend userBackend"},[t.showConfig.showUserBackend?e("div",{staticClass:"userBackend"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","User backend"))+"\n\t\t\t")]):t._e(),t._v(" "),t.showConfig.showStoragePath?e("div",{staticClass:"subtitle storageLocation"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Storage location"))+"\n\t\t\t")]):t._e()]):t._e(),t._v(" "),t.showConfig.showLastLogin?e("div",{staticClass:"headerLastLogin lastLogin"},[t._v("\n\t\t\t"+t._s(t.t("settings","Last login"))+"\n\t\t")]):t._e(),t._v(" "),e("div",{staticClass:"userActions"})]),t._v(" "),t._l(t.filteredUsers,(function(n){return e("user-row",{key:n.id,attrs:{"external-actions":t.externalActions,groups:t.groups,languages:t.languages,"quota-options":t.quotaOptions,settings:t.settings,"show-config":t.showConfig,"sub-admins-groups":t.subAdminsGroups,user:n}})})),t._v(" "),e("InfiniteLoading",{ref:"infiniteLoading",on:{infinite:t.infiniteHandler}},[e("div",{attrs:{slot:"spinner"},slot:"spinner"},[e("div",{staticClass:"users-icon-loading icon-loading"})]),t._v(" "),e("div",{attrs:{slot:"no-more"},slot:"no-more"},[e("div",{staticClass:"users-list-end"})]),t._v(" "),e("div",{attrs:{slot:"no-results"},slot:"no-results"},[e("div",{attrs:{id:"emptycontent"}},[e("div",{staticClass:"icon-contacts-dark"}),t._v(" "),e("h2",[t._v(t._s(t.t("settings","No users in here")))])])])])],2)}),[],!1,null,"ea695fb0",null),Mt=St.exports;function qt(t){return qt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qt(t)}function Nt(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);n&&(s=s.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,s)}return e}function $t(t){for(var n=1;n<arguments.length;n++){var e=null!=arguments[n]?arguments[n]:{};n%2?Nt(Object(e),!0).forEach((function(n){Ot(t,n,e[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Nt(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}))}return t}function Ot(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}function Pt(t,n,e,s,i,a,r){try{var o=t[a](r),u=o.value}catch(t){return void e(t)}o.done?n(u):Promise.resolve(u).then(s,i)}function Dt(t){return function(){var n=this,e=arguments;return new Promise((function(s,i){var a=t.apply(n,e);function r(t){Pt(a,s,i,r,o,"next",t)}function o(t){Pt(a,s,i,r,o,"throw",t)}r(void 0)}))}}U.default.use(x());var Rt={name:"Users",components:{AppContent:a(),AppNavigation:o(),AppNavigationCaption:l(),AppNavigationCounter:c(),AppNavigationItem:p(),AppNavigationNew:m(),AppNavigationSettings:v(),Content:A(),GroupListItem:R,Multiselect:_(),UserList:Mt},props:{selectedGroup:{type:String,default:null}},data:function(){return{unlimitedQuota:{id:"none",label:t("settings","Unlimited")},selectedQuota:!1,externalActions:[],loadingAddGroup:!1,loadingSendMail:!1,showConfig:{showStoragePath:!1,showUserBackend:!1,showLastLogin:!1,showNewUserForm:!1,showLanguages:!1}}},computed:{selectedGroupDecoded:function(){return this.selectedGroup?decodeURIComponent(this.selectedGroup):null},users:function(){return this.$store.getters.getUsers},groups:function(){return this.$store.getters.getGroups},usersOffset:function(){return this.$store.getters.getUsersOffset},usersLimit:function(){return this.$store.getters.getUsersLimit},showLanguages:{get:function(){return this.getLocalstorage("showLanguages")},set:function(t){this.setLocalStorage("showLanguages",t)}},showLastLogin:{get:function(){return this.getLocalstorage("showLastLogin")},set:function(t){this.setLocalStorage("showLastLogin",t)}},showUserBackend:{get:function(){return this.getLocalstorage("showUserBackend")},set:function(t){this.setLocalStorage("showUserBackend",t)}},showStoragePath:{get:function(){return this.getLocalstorage("showStoragePath")},set:function(t){this.setLocalStorage("showStoragePath",t)}},userCount:function(){return this.$store.getters.getUserCount},settings:function(){return this.$store.getters.getServerData},quotaOptions:function(){var t=this.settings.quotaPreset.reduce((function(t,n){return t.concat({id:n,label:n})}),[]);return this.settings.allowUnlimitedQuota&&t.unshift(this.unlimitedQuota),t},defaultQuota:{get:function(){return!1!==this.selectedQuota?this.selectedQuota:this.settings.defaultQuota!==this.unlimitedQuota.id&&OC.Util.computerFileSize(this.settings.defaultQuota)>=0?{id:this.settings.defaultQuota,label:this.settings.defaultQuota}:this.unlimitedQuota},set:function(t){this.selectedQuota=t}},sendWelcomeMail:{get:function(){return this.settings.newUserSendEmail},set:function(t){var n=this;return Dt(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,n.loadingSendMail=!0,n.$store.commit("setServerData",$t($t({},n.settings),{},{newUserSendEmail:t})),e.next=5,w.default.post((0,y.generateUrl)("/settings/users/preferences/newUser.sendEmail"),{value:t?"yes":"no"});case 5:e.next=10;break;case 7:e.prev=7,e.t0=e.catch(0),console.error("could not update newUser.sendEmail preference: "+e.t0.message,e.t0);case 10:return e.prev=10,n.loadingSendMail=!1,e.finish(10);case 13:case"end":return e.stop()}}),e,null,[[0,7,10,13]])})))()}},groupList:function(){var t=this;return(Array.isArray(this.groups)?this.groups:[]).filter((function(t){return"disabled"!==t.id&&"admin"!==t.id})).map((function(n){return t.formatGroupMenu(n)}))},adminGroupMenu:function(){return this.formatGroupMenu(this.groups.find((function(t){return"admin"===t.id})))},disabledGroupMenu:function(){return this.formatGroupMenu(this.groups.find((function(t){return"disabled"===t.id})))}},beforeMount:function(){this.$store.commit("initGroups",{groups:this.$store.getters.getServerData.groups,orderBy:this.$store.getters.getServerData.sortGroups,userCount:this.$store.getters.getServerData.userCount}),this.$store.dispatch("getPasswordPolicyMinLength")},created:function(){Object.assign(OCA,{Settings:{UserList:{registerAction:this.registerAction}}})},methods:{showNewUserMenu:function(){this.showConfig.showNewUserForm=!0,this.showConfig.showNewUserForm&&U.default.nextTick((function(){window.newusername.focus()}))},getLocalstorage:function(t){var n=this.$localStorage.get(t);return this.showConfig[t]=null!==n?"true"===n:this.showConfig[t],this.showConfig[t]},setLocalStorage:function(t,n){return this.showConfig[t]=n,this.$localStorage.set(t,n),n},setDefaultQuota:function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";this.$store.dispatch("setAppConfig",{app:"files",key:"default_quota",value:n.id?n.id:n}).then((function(){"object"!==qt(n)&&(n={id:n,label:n}),t.defaultQuota=n}))},validateQuota:function(t){return null===OC.Util.computerFileSize(t)?this.setDefaultQuota("none"):this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(t)))},registerAction:function(t,n,e){return this.externalActions.push({icon:t,text:n,action:e}),this.externalActions},createGroup:function(t){var n=this;return Dt(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(""!==t.trim()){e.next=2;break}return e.abrupt("return");case 2:return e.prev=2,n.loadingAddGroup=!0,e.next=6,n.$store.dispatch("addGroup",t.trim());case 6:return n.hideAddGroupForm(),e.next=9,n.$router.push({name:"group",params:{selectedGroup:encodeURIComponent(t.trim())}});case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(2),n.showAddGroupForm();case 14:return e.prev=14,n.loadingAddGroup=!1,e.finish(14);case 17:case"end":return e.stop()}}),e,null,[[2,11,14,17]])})))()},showAddGroupForm:function(){var t=this;this.$refs.addGroup.editingActive=!0,this.$refs.addGroup.onMenuToggle(!1),this.$nextTick((function(){t.$refs.addGroup.$refs.editingInput.focusInput()}))},hideAddGroupForm:function(){this.$refs.addGroup.editingActive=!1,this.$refs.addGroup.editingValue=""},formatGroupMenu:function(t){var n={};return void 0===t?{}:(n.id=t.id,n.title=t.name,n.usercount=t.usercount,t.usercount-t.disabled>0&&(n.count=t.usercount-t.disabled),n)}}},Qt=Rt,Bt=s(36095),zt={};zt.styleTagTransform=dt(),zt.setAttributes=rt(),zt.insert=it().bind(null,"head"),zt.domAPI=et(),zt.insertStyleElement=ut(),tt()(Bt.Z,zt),Bt.Z&&Bt.Z.locals&&Bt.Z.locals;var It=(0,D.Z)(Qt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("Content",{attrs:{"app-name":"settings","navigation-class":{"icon-loading":t.loadingAddGroup}}},[e("AppNavigation",{scopedSlots:t._u([{key:"list",fn:function(){return[e("AppNavigationItem",{ref:"addGroup",attrs:{id:"addgroup","edit-placeholder":t.t("settings","Enter group name"),editable:!0,loading:t.loadingAddGroup,title:t.t("settings","Add group"),icon:"icon-add"},on:{click:t.showAddGroupForm,"update:title":t.createGroup}}),t._v(" "),e("AppNavigationItem",{attrs:{id:"everyone",exact:!0,title:t.t("settings","Active users"),to:{name:"users"},icon:"icon-contacts-dark"}},[t.userCount>0?e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.userCount)+"\n\t\t\t\t")]):t._e()],1),t._v(" "),t.settings.isAdmin?e("AppNavigationItem",{attrs:{id:"admin",exact:!0,title:t.t("settings","Admins"),to:{name:"group",params:{selectedGroup:"admin"}},icon:"icon-user-admin"}},[t.adminGroupMenu.count?e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.adminGroupMenu.count)+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.disabledGroupMenu.usercount>0||-1===t.disabledGroupMenu.usercount?e("AppNavigationItem",{attrs:{id:"disabled",exact:!0,title:t.t("settings","Disabled users"),to:{name:"group",params:{selectedGroup:"disabled"}},icon:"icon-disabled-users"}},[t.disabledGroupMenu.usercount>0?e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.disabledGroupMenu.usercount)+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.groupList.length>0?e("AppNavigationCaption",{attrs:{title:t.t("settings","Groups")}}):t._e(),t._v(" "),t._l(t.groupList,(function(t){return e("GroupListItem",{key:t.id,attrs:{id:t.id,title:t.title,count:t.count}})}))]},proxy:!0},{key:"footer",fn:function(){return[e("AppNavigationSettings",[e("div",[e("p",[t._v(t._s(t.t("settings","Default quota:")))]),t._v(" "),e("Multiselect",{attrs:{value:t.defaultQuota,options:t.quotaOptions,"tag-placeholder":"create",placeholder:t.t("settings","Select default quota"),label:"label","track-by":"id","allow-empty":!1,taggable:!0},on:{tag:t.validateQuota,input:t.setDefaultQuota}})],1),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showLanguages,expression:"showLanguages"}],staticClass:"checkbox",attrs:{id:"showLanguages",type:"checkbox"},domProps:{checked:Array.isArray(t.showLanguages)?t._i(t.showLanguages,null)>-1:t.showLanguages},on:{change:function(n){var e=t.showLanguages,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showLanguages=e.concat([null])):a>-1&&(t.showLanguages=e.slice(0,a).concat(e.slice(a+1)))}else t.showLanguages=i}}}),t._v(" "),e("label",{attrs:{for:"showLanguages"}},[t._v(t._s(t.t("settings","Show Languages")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showLastLogin,expression:"showLastLogin"}],staticClass:"checkbox",attrs:{id:"showLastLogin",type:"checkbox"},domProps:{checked:Array.isArray(t.showLastLogin)?t._i(t.showLastLogin,null)>-1:t.showLastLogin},on:{change:function(n){var e=t.showLastLogin,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showLastLogin=e.concat([null])):a>-1&&(t.showLastLogin=e.slice(0,a).concat(e.slice(a+1)))}else t.showLastLogin=i}}}),t._v(" "),e("label",{attrs:{for:"showLastLogin"}},[t._v(t._s(t.t("settings","Show last login")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showUserBackend,expression:"showUserBackend"}],staticClass:"checkbox",attrs:{id:"showUserBackend",type:"checkbox"},domProps:{checked:Array.isArray(t.showUserBackend)?t._i(t.showUserBackend,null)>-1:t.showUserBackend},on:{change:function(n){var e=t.showUserBackend,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showUserBackend=e.concat([null])):a>-1&&(t.showUserBackend=e.slice(0,a).concat(e.slice(a+1)))}else t.showUserBackend=i}}}),t._v(" "),e("label",{attrs:{for:"showUserBackend"}},[t._v(t._s(t.t("settings","Show user backend")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.showStoragePath,expression:"showStoragePath"}],staticClass:"checkbox",attrs:{id:"showStoragePath",type:"checkbox"},domProps:{checked:Array.isArray(t.showStoragePath)?t._i(t.showStoragePath,null)>-1:t.showStoragePath},on:{change:function(n){var e=t.showStoragePath,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.showStoragePath=e.concat([null])):a>-1&&(t.showStoragePath=e.slice(0,a).concat(e.slice(a+1)))}else t.showStoragePath=i}}}),t._v(" "),e("label",{attrs:{for:"showStoragePath"}},[t._v(t._s(t.t("settings","Show storage path")))])]),t._v(" "),e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:t.sendWelcomeMail,expression:"sendWelcomeMail"}],staticClass:"checkbox",attrs:{id:"sendWelcomeMail",disabled:t.loadingSendMail,type:"checkbox"},domProps:{checked:Array.isArray(t.sendWelcomeMail)?t._i(t.sendWelcomeMail,null)>-1:t.sendWelcomeMail},on:{change:function(n){var e=t.sendWelcomeMail,s=n.target,i=!!s.checked;if(Array.isArray(e)){var a=t._i(e,null);s.checked?a<0&&(t.sendWelcomeMail=e.concat([null])):a>-1&&(t.sendWelcomeMail=e.slice(0,a).concat(e.slice(a+1)))}else t.sendWelcomeMail=i}}}),t._v(" "),e("label",{attrs:{for:"sendWelcomeMail"}},[t._v(t._s(t.t("settings","Send email to new user")))])])])]},proxy:!0}])},[e("AppNavigationNew",{attrs:{"button-id":"new-user-button",text:t.t("settings","New user"),"button-class":"icon-add"},on:{click:t.showNewUserMenu,keyup:[function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"enter",13,n.key,"Enter")?null:t.showNewUserMenu.apply(null,arguments)},function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"space",32,n.key,[" ","Spacebar"])?null:t.showNewUserMenu.apply(null,arguments)}]}})],1),t._v(" "),e("AppContent",[e("UserList",{attrs:{users:t.users,"show-config":t.showConfig,"selected-group":t.selectedGroupDecoded,"external-actions":t.externalActions}})],1)],1)}),[],!1,null,"1babbc68",null),Ft=It.exports}}]);
+//# sourceMappingURL=settings-users-351.js.map?v=a6c3bd4e9f1198aae27c \ No newline at end of file
diff --git a/dist/settings-users-351.js.map b/dist/settings-users-351.js.map
index c3ad4e80ecb..586a2a8e258 100644
--- a/dist/settings-users-351.js.map
+++ b/dist/settings-users-351.js.map
@@ -1 +1 @@
-{"version":3,"file":"settings-users-351.js?v=949df4154c39faa66c05","mappings":"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AAWpB,EAAIqB,GAAGrB,EAAIuI,iBAAiB,kBACv6H,IDWpB,EACA,KACA,KACA,MAIF,GAAe,GAAiB,wUEuOhC,yBAEA,QACA,eACA,YACA,iBACA,0BACA,kBACA,4BACA,2BAEA,YACA,kBAEA,WACA,OACA,MACA,YACA,aAEA,UACA,YACA,8BAEA,QACA,WACA,8BAEA,iBACA,WACA,8BAEA,cACA,WACA,8BAEA,YACA,YACA,8BAEA,WACA,WACA,aAEA,iBACA,WACA,+BAGA,KA/CA,WAgDA,OACA,iCACA,cACA,mBACA,WACA,SACA,OACA,eACA,YACA,eACA,UACA,aACA,SACA,UACA,WACA,aACA,WAIA,UAEA,YAFA,WAGA,OACA,CACA,mBACA,iCACA,wBAEA,CACA,mBACA,sCACA,6BAEA,CACA,+CACA,gFACA,gCAUA,OAPA,8CACA,QACA,iBACA,0CACA,8BAGA,iCAIA,SAEA,WAFA,WAGA,kCAEA,SALA,WAMA,oBAGA,gBATA,WASA,WACA,eACA,8BACA,6NACA,uCACA,CACA,+BACA,2DACA,uBACA,gCAEA,YACA,IACA,kBACA,iBACA,uCACA,iBACA,kBACA,wBAIA,IAIA,WAnCA,WAmCA,WACA,eACA,8BACA,8GACA,iCACA,CACA,+BACA,6DACA,uBACA,gCAEA,YACA,KAGA,OAFA,oBACA,iBACA,kCACA,iBACA,oBACA,uBAIA,IAIA,kBA7DA,WA6DA,WACA,uBACA,oBACA,mBACA,qBACA,iDACA,SACA,YAEA,iBACA,oBACA,qBASA,kBAjFA,WAiFA,WACA,+BACA,4BACA,oCACA,oBACA,kBACA,UACA,iBACA,yBACA,gCASA,eAnGA,WAmGA,WACA,4BACA,yBACA,oCACA,oBACA,eACA,UACA,iBACA,sBACA,8BASA,YArHA,WAqHA,WACA,+BACA,4BACA,oCACA,oBACA,YACA,UACA,iBACA,yBACA,gCASA,YAvIA,SAuIA,2JACA,mCADA,kBAGA,gCAHA,cAIA,YAJA,SAKA,mDALA,uDAOA,oBAPA,yBASA,mCATA,8CAWA,6CAXA,kEAmBA,aA1JA,SA0JA,0JACA,a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","sources":["webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=4c932ffd&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&lang=scss&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=style&index=0&id=1babbc68&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=897578ae&scoped=true&lang=css&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=template&id=1babbc68&scoped=true&","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?7b19","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=template&id=24cc1e48&","webpack:///nextcloud/apps/settings/src/mixins/UserRowMixin.js","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?6980","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?6d7a","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=0b39a53a&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?7d96","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?81d2","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=4c932ffd&scoped=true&","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?ac90","webpack://nextcloud/./apps/settings/src/components/UserList.vue?02a4","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=template&id=897578ae&scoped=true&","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?ba65","webpack://nextcloud/./apps/settings/src/views/Users.vue?cf86"],"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, \".row--menu-opened[data-v-4c932ffd]{z-index:1 !important}.row[data-v-4c932ffd] .multiselect__single{z-index:auto !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList/UserRow.vue\"],\"names\":[],\"mappings\":\"AAyqBA,mCACC,oBAAA,CAED,2CACC,uBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// Force menu to be above other rows\\n.row--menu-opened {\\n\\tz-index: 1 !important;\\n}\\n.row::v-deep .multiselect__single {\\n\\tz-index: auto !important;\\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, \".cellText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-more{background-color:var(--color-main-background);border:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList/UserRowSimple.vue\"],\"names\":[],\"mappings\":\"AA6LC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\t.cellText {\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\twhite-space: nowrap;\\n}\\n\\t.icon-more {\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tborder: 0;\\n\\t}\\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-navigation__list #addgroup[data-v-1babbc68] .app-navigation-entry__utils{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/Users.vue\"],\"names\":[],\"mappings\":\"AAieA,8EACC,YAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// force hiding the editing action for the add group entry\\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\\n\\tdisplay: none;\\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, \"\\n.modal-wrapper[data-v-897578ae] {\\n\\tmargin: 2vh 0;\\n\\talign-items: flex-start;\\n}\\n.modal__content[data-v-897578ae] {\\n\\tdisplay: flex;\\n\\tpadding: 20px;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n\\ttext-align: center;\\n\\toverflow: auto;\\n}\\n.modal__item[data-v-897578ae] {\\n\\tmargin-bottom: 16px;\\n\\twidth: 100%;\\n}\\n.modal__item[data-v-897578ae]:not(:focus):not(:active) {\\n\\tborder-color: var(--color-border-dark);\\n}\\n.modal__item[data-v-897578ae] .multiselect {\\n\\twidth: 100%;\\n}\\n.user-actions[data-v-897578ae] {\\n\\tmargin-top: 20px;\\n}\\n.modal__content[data-v-897578ae] .multiselect__single {\\n\\ttext-align: left;\\n\\tbox-sizing: border-box;\\n}\\n.modal__content[data-v-897578ae] .multiselect__content-wrapper {\\n\\tbox-sizing: border-box;\\n}\\n.row[data-v-897578ae] .multiselect__single {\\n\\tz-index: auto !important;\\n}\\n\\n/* fake input for groups validation */\\ninput#newgroups[data-v-897578ae] {\\n\\tposition: absolute;\\n\\topacity: 0;\\n\\t/* The \\\"hidden\\\" input is behind the Multiselect, so in general it does\\n\\t * not receives clicks. However, with Firefox, after the validation\\n\\t * fails, it will receive the first click done on it, so its width needs\\n\\t * to be set to 0 to prevent that (\\\"pointer-events: none\\\" does not\\n\\t * prevent it). */\\n\\twidth: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList.vue\"],\"names\":[],\"mappings\":\";AA8kBA;CACA,aAAA;CACA,uBAAA;AACA;AACA;CACA,aAAA;CACA,aAAA;CACA,sBAAA;CACA,mBAAA;CACA,kBAAA;CACA,cAAA;AACA;AACA;CACA,mBAAA;CACA,WAAA;AACA;AACA;CACA,sCAAA;AACA;AACA;CACA,WAAA;AACA;AACA;CACA,gBAAA;AACA;AACA;CACA,gBAAA;CACA,sBAAA;AACA;AACA;CACA,sBAAA;AACA;AACA;CACA,wBAAA;AACA;;AAEA,qCAAA;AACA;CACA,kBAAA;CACA,UAAA;CACA;;;;kBAIA;CACA,QAAA;AACA\",\"sourcesContent\":[\"<!--\\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<div id=\\\"app-content\\\" class=\\\"user-list-grid\\\" @scroll.passive=\\\"onScroll\\\">\\n\\t\\t<Modal v-if=\\\"showConfig.showNewUserForm\\\" @close=\\\"closeModal\\\">\\n\\t\\t\\t<form id=\\\"new-user\\\"\\n\\t\\t\\t\\t:disabled=\\\"loading.all\\\"\\n\\t\\t\\t\\tclass=\\\"modal__content\\\"\\n\\t\\t\\t\\t@submit.prevent=\\\"createUser\\\">\\n\\t\\t\\t\\t<h2>{{ t('settings','New user') }}</h2>\\n\\t\\t\\t\\t<input id=\\\"newusername\\\"\\n\\t\\t\\t\\t\\tref=\\\"newusername\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.id\\\"\\n\\t\\t\\t\\t\\t:disabled=\\\"settings.newUserGenerateUserID\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"settings.newUserGenerateUserID\\n\\t\\t\\t\\t\\t\\t? t('settings', 'Will be autogenerated')\\n\\t\\t\\t\\t\\t\\t: t('settings', 'Username')\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"username\\\"\\n\\t\\t\\t\\t\\tpattern=\\\"[a-zA-Z0-9 _\\\\.@\\\\-']+\\\"\\n\\t\\t\\t\\t\\trequired\\n\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t<input id=\\\"newdisplayname\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.displayName\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Display name')\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"displayname\\\"\\n\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t<input id=\\\"newuserpassword\\\"\\n\\t\\t\\t\\t\\tref=\\\"newuserpassword\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.password\\\"\\n\\t\\t\\t\\t\\t:minlength=\\\"minPasswordLength\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Password')\\\"\\n\\t\\t\\t\\t\\t:required=\\\"newUser.mailAddress===''\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"new-password\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"password\\\"\\n\\t\\t\\t\\t\\ttype=\\\"password\\\">\\n\\t\\t\\t\\t<input id=\\\"newemail\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.mailAddress\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Email')\\\"\\n\\t\\t\\t\\t\\t:required=\\\"newUser.password==='' || settings.newUserRequireEmail\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"email\\\"\\n\\t\\t\\t\\t\\ttype=\\\"email\\\">\\n\\t\\t\\t\\t<div class=\\\"groups modal__item\\\">\\n\\t\\t\\t\\t\\t<!-- hidden input trick for vanilla html5 form validation -->\\n\\t\\t\\t\\t\\t<input v-if=\\\"!settings.isAdmin\\\"\\n\\t\\t\\t\\t\\t\\tid=\\\"newgroups\\\"\\n\\t\\t\\t\\t\\t\\t:class=\\\"{'icon-loading-small': loading.groups}\\\"\\n\\t\\t\\t\\t\\t\\t:required=\\\"!settings.isAdmin\\\"\\n\\t\\t\\t\\t\\t\\t:value=\\\"newUser.groups\\\"\\n\\t\\t\\t\\t\\t\\ttabindex=\\\"-1\\\"\\n\\t\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.groups\\\"\\n\\t\\t\\t\\t\\t\\t:close-on-select=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:disabled=\\\"loading.groups||loading.all\\\"\\n\\t\\t\\t\\t\\t\\t:multiple=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"canAddGroups\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Add user to group')\\\"\\n\\t\\t\\t\\t\\t\\t:tag-width=\\\"60\\\"\\n\\t\\t\\t\\t\\t\\t:taggable=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttag-placeholder=\\\"create\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t\\t\\t\\t@tag=\\\"createGroup\\\">\\n\\t\\t\\t\\t\\t\\t<!-- If user is not admin, he is a subadmin.\\n\\t\\t\\t\\t\\t\\t\\tSubadmins can't create users outside their groups\\n\\t\\t\\t\\t\\t\\t\\tTherefore, empty select is forbidden -->\\n\\t\\t\\t\\t\\t\\t<span slot=\\\"noResult\\\">{{ t('settings', 'No results') }}</span>\\n\\t\\t\\t\\t\\t</Multiselect>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"subAdminsGroups.length>0 && settings.isAdmin\\\"\\n\\t\\t\\t\\t\\tclass=\\\"subadmins modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.subAdminsGroups\\\"\\n\\t\\t\\t\\t\\t\\t:close-on-select=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:multiple=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"subAdminsGroups\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Set user as admin for')\\\"\\n\\t\\t\\t\\t\\t\\t:tag-width=\\\"60\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\">\\n\\t\\t\\t\\t\\t\\t<span slot=\\\"noResult\\\">{{ t('settings', 'No results') }}</span>\\n\\t\\t\\t\\t\\t</Multiselect>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"quota modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.quota\\\"\\n\\t\\t\\t\\t\\t\\t:allow-empty=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"quotaOptions\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Select user quota')\\\"\\n\\t\\t\\t\\t\\t\\t:taggable=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t\\t\\t\\t@tag=\\\"validateQuota\\\" />\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showLanguages\\\" class=\\\"languages modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.language\\\"\\n\\t\\t\\t\\t\\t\\t:allow-empty=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"languages\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Default language')\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tgroup-label=\\\"label\\\"\\n\\t\\t\\t\\t\\t\\tgroup-values=\\\"languages\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"code\\\" />\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showStoragePath\\\" class=\\\"storageLocation\\\" />\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend\\\" class=\\\"userBackend\\\" />\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showLastLogin\\\" class=\\\"lastLogin\\\" />\\n\\t\\t\\t\\t<div class=\\\"user-actions\\\">\\n\\t\\t\\t\\t\\t<button id=\\\"newsubmit\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"button primary\\\"\\n\\t\\t\\t\\t\\t\\ttype=\\\"submit\\\"\\n\\t\\t\\t\\t\\t\\tvalue=\\\"\\\">\\n\\t\\t\\t\\t\\t\\t{{ t('settings', 'Add a new user') }}\\n\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</form>\\n\\t\\t</Modal>\\n\\t\\t<div id=\\\"grid-header\\\"\\n\\t\\t\\t:class=\\\"{'sticky': scrolled && !showConfig.showNewUserForm}\\\"\\n\\t\\t\\tclass=\\\"row\\\">\\n\\t\\t\\t<div id=\\\"headerAvatar\\\" class=\\\"avatar\\\" />\\n\\t\\t\\t<div id=\\\"headerName\\\" class=\\\"name\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Username') }}\\n\\n\\t\\t\\t\\t<div class=\\\"subtitle\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'Display name') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerPassword\\\" class=\\\"password\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Password') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerAddress\\\" class=\\\"mailAddress\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Email') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerGroups\\\" class=\\\"groups\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Groups') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"subAdminsGroups.length>0 && settings.isAdmin\\\"\\n\\t\\t\\t\\tid=\\\"headerSubAdmins\\\"\\n\\t\\t\\t\\tclass=\\\"subadmins\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Group admin for') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerQuota\\\" class=\\\"quota\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Quota') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"showConfig.showLanguages\\\"\\n\\t\\t\\t\\tid=\\\"headerLanguages\\\"\\n\\t\\t\\t\\tclass=\\\"languages\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Language') }}\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend || showConfig.showStoragePath\\\"\\n\\t\\t\\t\\tclass=\\\"headerUserBackend userBackend\\\">\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend\\\" class=\\\"userBackend\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'User backend') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showStoragePath\\\"\\n\\t\\t\\t\\t\\tclass=\\\"subtitle storageLocation\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'Storage location') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"showConfig.showLastLogin\\\"\\n\\t\\t\\t\\tclass=\\\"headerLastLogin lastLogin\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Last login') }}\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<div class=\\\"userActions\\\" />\\n\\t\\t</div>\\n\\n\\t\\t<user-row v-for=\\\"user in filteredUsers\\\"\\n\\t\\t\\t:key=\\\"user.id\\\"\\n\\t\\t\\t:external-actions=\\\"externalActions\\\"\\n\\t\\t\\t:groups=\\\"groups\\\"\\n\\t\\t\\t:languages=\\\"languages\\\"\\n\\t\\t\\t:quota-options=\\\"quotaOptions\\\"\\n\\t\\t\\t:settings=\\\"settings\\\"\\n\\t\\t\\t:show-config=\\\"showConfig\\\"\\n\\t\\t\\t:sub-admins-groups=\\\"subAdminsGroups\\\"\\n\\t\\t\\t:user=\\\"user\\\" />\\n\\t\\t<InfiniteLoading ref=\\\"infiniteLoading\\\" @infinite=\\\"infiniteHandler\\\">\\n\\t\\t\\t<div slot=\\\"spinner\\\">\\n\\t\\t\\t\\t<div class=\\\"users-icon-loading icon-loading\\\" />\\n\\t\\t\\t</div>\\n\\t\\t\\t<div slot=\\\"no-more\\\">\\n\\t\\t\\t\\t<div class=\\\"users-list-end\\\" />\\n\\t\\t\\t</div>\\n\\t\\t\\t<div slot=\\\"no-results\\\">\\n\\t\\t\\t\\t<div id=\\\"emptycontent\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"icon-contacts-dark\\\" />\\n\\t\\t\\t\\t\\t<h2>{{ t('settings', 'No users in here') }}</h2>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</InfiniteLoading>\\n\\t</div>\\n</template>\\n\\n<script>\\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\\nimport InfiniteLoading from 'vue-infinite-loading'\\nimport Vue from 'vue'\\nimport { Modal } from '@nextcloud/vue'\\n\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\n\\nimport userRow from './UserList/UserRow'\\n\\nconst unlimitedQuota = {\\n\\tid: 'none',\\n\\tlabel: t('settings', 'Unlimited'),\\n}\\nconst defaultQuota = {\\n\\tid: 'default',\\n\\tlabel: t('settings', 'Default quota'),\\n}\\nconst newUser = {\\n\\tid: '',\\n\\tdisplayName: '',\\n\\tpassword: '',\\n\\tmailAddress: '',\\n\\tgroups: [],\\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\\tcomponents: {\\n\\t\\tModal,\\n\\t\\tuserRow,\\n\\t\\tMultiselect,\\n\\t\\tInfiniteLoading,\\n\\t},\\n\\tprops: {\\n\\t\\tusers: {\\n\\t\\t\\ttype: Array,\\n\\t\\t\\tdefault: () => [],\\n\\t\\t},\\n\\t\\tshowConfig: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\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\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tunlimitedQuota,\\n\\t\\t\\tdefaultQuota,\\n\\t\\t\\tloading: {\\n\\t\\t\\t\\tall: false,\\n\\t\\t\\t\\tgroups: false,\\n\\t\\t\\t},\\n\\t\\t\\tscrolled: false,\\n\\t\\t\\tsearchQuery: '',\\n\\t\\t\\tnewUser: Object.assign({}, newUser),\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\tsettings() {\\n\\t\\t\\treturn this.$store.getters.getServerData\\n\\t\\t},\\n\\t\\tselectedGroupDecoded() {\\n\\t\\t\\treturn decodeURIComponent(this.selectedGroup)\\n\\t\\t},\\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\\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\\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\\t\\tsubAdminsGroups() {\\n\\t\\t\\t// data provided php side\\n\\t\\t\\treturn this.$store.getters.getSubadminGroups\\n\\t\\t},\\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(this.unlimitedQuota)\\n\\t\\t\\t}\\n\\t\\t\\tquotaPreset.unshift(this.defaultQuota)\\n\\t\\t\\treturn quotaPreset\\n\\t\\t},\\n\\t\\tminPasswordLength() {\\n\\t\\t\\treturn this.$store.getters.getPasswordPolicyMinLength\\n\\t\\t},\\n\\t\\tusersOffset() {\\n\\t\\t\\treturn this.$store.getters.getUsersOffset\\n\\t\\t},\\n\\t\\tusersLimit() {\\n\\t\\t\\treturn this.$store.getters.getUsersLimit\\n\\t\\t},\\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\\twatch: {\\n\\t\\t// watch url change and group select\\n\\t\\tselectedGroup(val, old) {\\n\\t\\t\\t// if selected is the disabled group but it's empty\\n\\t\\t\\tthis.redirectIfDisabled()\\n\\t\\t\\tthis.$store.commit('resetUsers')\\n\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\tthis.setNewUserDefaultGroup(val)\\n\\t\\t},\\n\\n\\t\\t// make sure the infiniteLoading state is changed if we manually\\n\\t\\t// add/remove data from the store\\n\\t\\tusersCount(val, old) {\\n\\t\\t\\t// deleting the last user, reset the list\\n\\t\\t\\tif (val === 0 && old === 1) {\\n\\t\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\t\\t// adding the first user, warn the infiniteLoader that\\n\\t\\t\\t\\t// the list is not empty anymore (we don't fetch the newly\\n\\t\\t\\t\\t// added user as we already have all the info we need)\\n\\t\\t\\t} else if (val === 1 && old === 0) {\\n\\t\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.loaded()\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\n\\tmounted() {\\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\\tthis.redirectIfDisabled()\\n\\t},\\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\\tonScroll(event) {\\n\\t\\t\\tthis.scrolled = event.target.scrollTo > 0\\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\\tinfiniteHandler($state) {\\n\\t\\t\\tthis.$store.dispatch('getUsers', {\\n\\t\\t\\t\\toffset: this.usersOffset,\\n\\t\\t\\t\\tlimit: this.usersLimit,\\n\\t\\t\\t\\tgroup: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\\n\\t\\t\\t\\tsearch: this.searchQuery,\\n\\t\\t\\t})\\n\\t\\t\\t\\t.then((usersCount) => {\\n\\t\\t\\t\\t\\tif (usersCount > 0) {\\n\\t\\t\\t\\t\\t\\t$state.loaded()\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif (usersCount < this.usersLimit) {\\n\\t\\t\\t\\t\\t\\t$state.complete()\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t})\\n\\t\\t},\\n\\n\\t\\t/* SEARCH */\\n\\t\\tsearch({ query }) {\\n\\t\\t\\tthis.searchQuery = query\\n\\t\\t\\tthis.$store.commit('resetUsers')\\n\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t},\\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\\t\\tcreateUser() {\\n\\t\\t\\tthis.loading.all = true\\n\\t\\t\\tthis.$store.dispatch('addUser', {\\n\\t\\t\\t\\tuserid: this.newUser.id,\\n\\t\\t\\t\\tpassword: this.newUser.password,\\n\\t\\t\\t\\tdisplayName: this.newUser.displayName,\\n\\t\\t\\t\\temail: this.newUser.mailAddress,\\n\\t\\t\\t\\tgroups: this.newUser.groups.map(group => group.id),\\n\\t\\t\\t\\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\\n\\t\\t\\t\\tquota: this.newUser.quota.id,\\n\\t\\t\\t\\tlanguage: this.newUser.language.code,\\n\\t\\t\\t})\\n\\t\\t\\t\\t.then(() => {\\n\\t\\t\\t\\t\\tthis.resetForm()\\n\\t\\t\\t\\t\\tthis.$refs.newusername.focus()\\n\\t\\t\\t\\t\\tthis.closeModal()\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch((error) => {\\n\\t\\t\\t\\t\\tthis.loading.all = false\\n\\t\\t\\t\\t\\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\\n\\t\\t\\t\\t\\t\\tconst statuscode = error.response.data.ocs.meta.statuscode\\n\\t\\t\\t\\t\\t\\tif (statuscode === 102) {\\n\\t\\t\\t\\t\\t\\t\\t// wrong username\\n\\t\\t\\t\\t\\t\\t\\tthis.$refs.newusername.focus()\\n\\t\\t\\t\\t\\t\\t} else if (statuscode === 107) {\\n\\t\\t\\t\\t\\t\\t\\t// wrong password\\n\\t\\t\\t\\t\\t\\t\\tthis.$refs.newuserpassword.focus()\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t})\\n\\t\\t},\\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 * Create a new group\\n\\t\\t *\\n\\t\\t * @param {string} gid Group id\\n\\t\\t * @return {Promise}\\n\\t\\t */\\n\\t\\tcreateGroup(gid) {\\n\\t\\t\\tthis.loading.groups = true\\n\\t\\t\\tthis.$store.dispatch('addGroup', gid)\\n\\t\\t\\t\\t.then((group) => {\\n\\t\\t\\t\\t\\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\\n\\t\\t\\t\\t\\tthis.loading.groups = false\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch(() => {\\n\\t\\t\\t\\t\\tthis.loading.groups = false\\n\\t\\t\\t\\t})\\n\\t\\t\\treturn this.$store.getters.getGroups[this.groups.length]\\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\\tredirectIfDisabled() {\\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\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcloseModal() {\\n\\t\\t\\t// eslint-disable-next-line vue/no-mutating-props\\n\\t\\t\\tthis.showConfig.showNewUserForm = false\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.modal-wrapper {\\n\\t\\tmargin: 2vh 0;\\n\\t\\talign-items: flex-start;\\n\\t}\\n\\t.modal__content {\\n\\t\\tdisplay: flex;\\n\\t\\tpadding: 20px;\\n\\t\\tflex-direction: column;\\n\\t\\talign-items: center;\\n\\t\\ttext-align: center;\\n\\t\\toverflow: auto;\\n\\t}\\n\\t.modal__item {\\n\\t\\tmargin-bottom: 16px;\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.modal__item:not(:focus):not(:active) {\\n\\t\\tborder-color: var(--color-border-dark);\\n\\t}\\n\\t.modal__item::v-deep .multiselect {\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.user-actions {\\n\\t\\tmargin-top: 20px;\\n\\t}\\n\\t.modal__content::v-deep .multiselect__single {\\n\\t\\ttext-align: left;\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\t.modal__content::v-deep .multiselect__content-wrapper {\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\t.row::v-deep .multiselect__single {\\n\\t\\tz-index: auto !important;\\n\\t}\\n\\n\\t/* fake input for groups validation */\\n\\tinput#newgroups {\\n\\t\\tposition: absolute;\\n\\t\\topacity: 0;\\n\\t\\t/* The \\\"hidden\\\" input is behind the Multiselect, so in general it does\\n\\t\\t * not receives clicks. However, with Firefox, after the validation\\n\\t\\t * fails, it will receive the first click done on it, so its width needs\\n\\t\\t * to be set to 0 to prevent that (\\\"pointer-events: none\\\" does not\\n\\t\\t * prevent it). */\\n\\t\\twidth: 0;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Content',{attrs:{\"app-name\":\"settings\",\"navigation-class\":{ 'icon-loading': _vm.loadingAddGroup }}},[_c('AppNavigation',{scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c('AppNavigationItem',{ref:\"addGroup\",attrs:{\"id\":\"addgroup\",\"edit-placeholder\":_vm.t('settings', 'Enter group name'),\"editable\":true,\"loading\":_vm.loadingAddGroup,\"title\":_vm.t('settings', 'Add group'),\"icon\":\"icon-add\"},on:{\"click\":_vm.showAddGroupForm,\"update:title\":_vm.createGroup}}),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"everyone\",\"exact\":true,\"title\":_vm.t('settings', 'Active users'),\"to\":{ name: 'users' },\"icon\":\"icon-contacts-dark\"}},[(_vm.userCount > 0)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.userCount)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1),_vm._v(\" \"),(_vm.settings.isAdmin)?_c('AppNavigationItem',{attrs:{\"id\":\"admin\",\"exact\":true,\"title\":_vm.t('settings', 'Admins'),\"to\":{ name: 'group', params: { selectedGroup: 'admin' } },\"icon\":\"icon-user-admin\"}},[(_vm.adminGroupMenu.count)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.adminGroupMenu.count)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.disabledGroupMenu.usercount > 0 || _vm.disabledGroupMenu.usercount === -1)?_c('AppNavigationItem',{attrs:{\"id\":\"disabled\",\"exact\":true,\"title\":_vm.t('settings', 'Disabled users'),\"to\":{ name: 'group', params: { selectedGroup: 'disabled' } },\"icon\":\"icon-disabled-users\"}},[(_vm.disabledGroupMenu.usercount > 0)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.disabledGroupMenu.usercount)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.groupList.length > 0)?_c('AppNavigationCaption',{attrs:{\"title\":_vm.t('settings', 'Groups')}}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.groupList),function(group){return _c('GroupListItem',{key:group.id,attrs:{\"id\":group.id,\"title\":group.title,\"count\":group.count}})})]},proxy:true},{key:\"footer\",fn:function(){return [_c('AppNavigationSettings',[_c('div',[_c('p',[_vm._v(_vm._s(_vm.t('settings', 'Default quota:')))]),_vm._v(\" \"),_c('Multiselect',{attrs:{\"value\":_vm.defaultQuota,\"options\":_vm.quotaOptions,\"tag-placeholder\":\"create\",\"placeholder\":_vm.t('settings', 'Select default quota'),\"label\":\"label\",\"track-by\":\"id\",\"allow-empty\":false,\"taggable\":true},on:{\"tag\":_vm.validateQuota,\"input\":_vm.setDefaultQuota}})],1),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showLanguages),expression:\"showLanguages\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showLanguages\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showLanguages)?_vm._i(_vm.showLanguages,null)>-1:(_vm.showLanguages)},on:{\"change\":function($event){var $$a=_vm.showLanguages,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showLanguages=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showLanguages=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showLanguages=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showLanguages\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show Languages')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showLastLogin),expression:\"showLastLogin\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showLastLogin\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showLastLogin)?_vm._i(_vm.showLastLogin,null)>-1:(_vm.showLastLogin)},on:{\"change\":function($event){var $$a=_vm.showLastLogin,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showLastLogin=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showLastLogin=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showLastLogin=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showLastLogin\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show last login')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showUserBackend),expression:\"showUserBackend\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showUserBackend\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showUserBackend)?_vm._i(_vm.showUserBackend,null)>-1:(_vm.showUserBackend)},on:{\"change\":function($event){var $$a=_vm.showUserBackend,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showUserBackend=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showUserBackend=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showUserBackend=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showUserBackend\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show user backend')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showStoragePath),expression:\"showStoragePath\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showStoragePath\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showStoragePath)?_vm._i(_vm.showStoragePath,null)>-1:(_vm.showStoragePath)},on:{\"change\":function($event){var $$a=_vm.showStoragePath,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showStoragePath=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showStoragePath=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showStoragePath=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showStoragePath\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show storage path')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.sendWelcomeMail),expression:\"sendWelcomeMail\"}],staticClass:\"checkbox\",attrs:{\"id\":\"sendWelcomeMail\",\"disabled\":_vm.loadingSendMail,\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.sendWelcomeMail)?_vm._i(_vm.sendWelcomeMail,null)>-1:(_vm.sendWelcomeMail)},on:{\"change\":function($event){var $$a=_vm.sendWelcomeMail,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.sendWelcomeMail=$$a.concat([$$v]))}else{$$i>-1&&(_vm.sendWelcomeMail=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.sendWelcomeMail=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"sendWelcomeMail\"}},[_vm._v(_vm._s(_vm.t('settings', 'Send email to new user')))])])])]},proxy:true}])},[_c('AppNavigationNew',{attrs:{\"button-id\":\"new-user-button\",\"text\":_vm.t('settings','New user'),\"button-class\":\"icon-add\"},on:{\"click\":_vm.showNewUserMenu,\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.showNewUserMenu.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"])){ return null; }return _vm.showNewUserMenu.apply(null, arguments)}]}})],1),_vm._v(\" \"),_c('AppContent',[_c('UserList',{attrs:{\"users\":_vm.users,\"show-config\":_vm.showConfig,\"selected-group\":_vm.selectedGroupDecoded,\"external-actions\":_vm.externalActions}})],1)],1)}\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<AppNavigationItem :key=\"id\"\n\t\t:exact=\"true\"\n\t\t:title=\"title\"\n\t\t:to=\"{ name: 'group', params: { selectedGroup: encodeURIComponent(id) } }\"\n\t\ticon=\"icon-group\"\n\t\t:loading=\"loadingRenameGroup\"\n\t\t:menu-open=\"openGroupMenu\"\n\t\t@update:menuOpen=\"handleGroupMenuOpen\">\n\t\t<template #counter>\n\t\t\t<CounterBubble v-if=\"count\">\n\t\t\t\t{{ count }}\n\t\t\t</CounterBubble>\n\t\t</template>\n\t\t<template #actions>\n\t\t\t<ActionInput v-if=\"id !== 'admin' && id !== 'disabled' && settings.isAdmin\"\n\t\t\t\tref=\"displayNameInput\"\n\t\t\t\ticon=\"icon-edit\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t:value=\"title\"\n\t\t\t\t@submit=\"renameGroup(id)\">\n\t\t\t\t{{ t('settings', 'Rename group') }}\n\t\t\t</ActionInput>\n\t\t\t<ActionButton v-if=\"id !== 'admin' && id !== 'disabled' && settings.isAdmin\"\n\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t@click=\"removeGroup(id)\">\n\t\t\t\t{{ t('settings', 'Remove group') }}\n\t\t\t</ActionButton>\n\t\t</template>\n\t</AppNavigationItem>\n</template>\n\n<script>\nimport ActionInput from '@nextcloud/vue/dist/Components/ActionInput'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport CounterBubble from '@nextcloud/vue/dist/Components/CounterBubble'\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem'\n\nexport default {\n\tname: 'GroupListItem',\n\tcomponents: {\n\t\tActionInput,\n\t\tActionButton,\n\t\tCounterBubble,\n\t\tAppNavigationItem,\n\t},\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcount: {\n\t\t\ttype: Number,\n\t\t\trequired: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloadingRenameGroup: false,\n\t\t\topenGroupMenu: 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\tremoveGroup(groupid) {\n\t\t\tconst self = this\n\t\t\t// TODO migrate to a vue js confirm dialog component\n\t\t\tOC.dialogs.confirm(\n\t\t\t\tt('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', { group: groupid }),\n\t\t\t\tt('settings', 'Please confirm the group removal '),\n\t\t\t\tfunction(success) {\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\tself.$store.dispatch('removeGroup', groupid)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t},\n\t},\n}\n</script>\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&\"","import { render, staticRenderFns } from \"./GroupListItem.vue?vue&type=template&id=24cc1e48&\"\nimport script from \"./GroupListItem.vue?vue&type=script&lang=js&\"\nexport * from \"./GroupListItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AppNavigationItem',{key:_vm.id,attrs:{\"exact\":true,\"title\":_vm.title,\"to\":{ name: 'group', params: { selectedGroup: encodeURIComponent(_vm.id) } },\"icon\":\"icon-group\",\"loading\":_vm.loadingRenameGroup,\"menu-open\":_vm.openGroupMenu},on:{\"update:menuOpen\":_vm.handleGroupMenuOpen},scopedSlots:_vm._u([{key:\"counter\",fn:function(){return [(_vm.count)?_c('CounterBubble',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.count)+\"\\n\\t\\t\")]):_vm._e()]},proxy:true},{key:\"actions\",fn:function(){return [(_vm.id !== 'admin' && _vm.id !== 'disabled' && _vm.settings.isAdmin)?_c('ActionInput',{ref:\"displayNameInput\",attrs:{\"icon\":\"icon-edit\",\"type\":\"text\",\"value\":_vm.title},on:{\"submit\":function($event){return _vm.renameGroup(_vm.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Rename group'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.id !== 'admin' && _vm.id !== 'disabled' && _vm.settings.isAdmin)?_c('ActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){return _vm.removeGroup(_vm.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Remove group'))+\"\\n\\t\\t\")]):_vm._e()]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Greta Doci <gretadoci@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateUrl } from '@nextcloud/router'\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\tshowConfig: {\n\t\t\ttype: Object,\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\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\tmethods: {\n\t\t/**\n\t\t * Generate avatar url\n\t\t *\n\t\t * @param {string} user The user name\n\t\t * @param {number} size Size integer, default 32\n\t\t * @return {string}\n\t\t */\n\t\tgenerateAvatar(user, size = 32) {\n\t\t\treturn generateUrl(\n\t\t\t\t'/avatar/{user}/{size}?v={version}',\n\t\t\t\t{\n\t\t\t\t\tuser,\n\t\t\t\t\tsize,\n\t\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t\t}\n\t\t\t)\n\t\t},\n\t},\n}\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"","<template>\n\t<div class=\"row\"\n\t\t:class=\"{'disabled': loading.delete || loading.disable}\"\n\t\t:data-id=\"user.id\">\n\t\t<div class=\"avatar\" :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\talt=\"\"\n\t\t\t\twidth=\"32\"\n\t\t\t\theight=\"32\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\">\n\t\t</div>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<div class=\"name\">\n\t\t\t{{ user.id }}\n\t\t\t<div class=\"displayName subtitle\">\n\t\t\t\t<div v-tooltip=\"user.displayname.length > 20 ? user.displayname : ''\" class=\"cellText\">\n\t\t\t\t\t{{ user.displayname }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div />\n\t\t<div class=\"mailAddress\">\n\t\t\t<div v-tooltip=\"user.email !== null && user.email.length > 20 ? user.email : ''\" class=\"cellText\">\n\t\t\t\t{{ user.email }}\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"groups\">\n\t\t\t{{ userGroupsLabels }}\n\t\t</div>\n\t\t<div v-if=\"subAdminsGroups.length > 0 && settings.isAdmin\" class=\"subAdminsGroups\">\n\t\t\t{{ userSubAdminsGroupsLabels }}\n\t\t</div>\n\t\t<div class=\"userQuota\">\n\t\t\t<div class=\"quota\">\n\t\t\t\t{{ userQuota }} ({{ usedSpace }})\n\t\t\t\t<progress class=\"quota-user-progress\"\n\t\t\t\t\t:class=\"{'warn': usedQuota > 80}\"\n\t\t\t\t\t:value=\"usedQuota\"\n\t\t\t\t\tmax=\"100\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLanguages\" class=\"languages\">\n\t\t\t{{ userLanguage.name }}\n\t\t</div>\n\t\t<div v-if=\"showConfig.showUserBackend || showConfig.showStoragePath\" class=\"userBackend\">\n\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\">\n\t\t\t\t{{ user.backend }}\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showStoragePath\" v-tooltip=\"user.storageLocation\" class=\"storageLocation subtitle\">\n\t\t\t\t{{ user.storageLocation }}\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLastLogin\" v-tooltip.auto=\"userLastLoginTooltip\" class=\"lastLogin\">\n\t\t\t{{ userLastLogin }}\n\t\t</div>\n\n\t\t<div class=\"userActions\">\n\t\t\t<div v-if=\"canEdit && !loading.all\" class=\"toggleUserActions\">\n\t\t\t\t<Actions>\n\t\t\t\t\t<ActionButton icon=\"icon-rename\" @click=\"toggleEdit\">\n\t\t\t\t\t\t{{ t('settings', 'Edit User') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</Actions>\n\t\t\t\t<div class=\"userPopoverMenuWrapper\">\n\t\t\t\t\t<button v-click-outside=\"hideMenu\"\n\t\t\t\t\t\tclass=\"icon-more\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Toggle user actions menu')\"\n\t\t\t\t\t\t@click.prevent=\"toggleMenu\" />\n\t\t\t\t\t<div class=\"popovermenu\" :class=\"{ 'open': openedMenu }\" :aria-expanded=\"openedMenu\">\n\t\t\t\t\t\t<PopoverMenu :menu=\"userActions\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"feedback\" :style=\"{opacity: feedbackMessage !== '' ? 1 : 0}\">\n\t\t\t\t<div class=\"icon-checkmark\" />\n\t\t\t\t{{ feedbackMessage }}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport PopoverMenu from '@nextcloud/vue/dist/Components/PopoverMenu'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ClickOutside from 'vue-click-outside'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport UserRowMixin from '../../mixins/UserRowMixin'\nexport default {\n\tname: 'UserRowSimple',\n\tcomponents: {\n\t\tPopoverMenu,\n\t\tActionButton,\n\t\tActions,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tmixins: [UserRowMixin],\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tuserActions: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\topenedMenu: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tfeedbackMessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tsubAdminsGroups: {\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},\n\tcomputed: {\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\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\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\tcanEdit() {\n\t\t\treturn getCurrentUser().uid !== this.user.id || this.settings.isAdmin\n\t\t},\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 = OC.Util.computerFileSize(quota)\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 OC.Util.humanFileSize(quota)\n\t\t\t}\n\t\t\treturn OC.Util.humanFileSize(0)\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleMenu() {\n\t\t\tthis.$emit('update:openedMenu', !this.openedMenu)\n\t\t},\n\t\thideMenu() {\n\t\t\tthis.$emit('update:openedMenu', false)\n\t\t},\n\t\ttoggleEdit() {\n\t\t\tthis.$emit('update:editing', true)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n\t.cellText {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n}\n\t.icon-more {\n\t\tbackground-color: var(--color-main-background);\n\t\tborder: 0;\n\t}\n</style>\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserRowSimple.vue?vue&type=template&id=0b39a53a&\"\nimport script from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\",class:{'disabled': _vm.loading.delete || _vm.loading.disable},attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"alt\":\"\",\"width\":\"32\",\"height\":\"32\",\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x'}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\\t\"),_c('div',{staticClass:\"displayName subtitle\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.displayname.length > 20 ? _vm.user.displayname : ''),expression:\"user.displayname.length > 20 ? user.displayname : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.user.displayname)+\"\\n\\t\\t\\t\")])])]),_vm._v(\" \"),_c('div'),_vm._v(\" \"),_c('div',{staticClass:\"mailAddress\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.email !== null && _vm.user.email.length > 20 ? _vm.user.email : ''),expression:\"user.email !== null && user.email.length > 20 ? user.email : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.email)+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"groups\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userGroupsLabels)+\"\\n\\t\")]),_vm._v(\" \"),(_vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subAdminsGroups\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userSubAdminsGroupsLabels)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userQuota\"},[_c('div',{staticClass:\"quota\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.userQuota)+\" (\"+_vm._s(_vm.usedSpace)+\")\\n\\t\\t\\t\"),_c('progress',{staticClass:\"quota-user-progress\",class:{'warn': _vm.usedQuota > 80},attrs:{\"max\":\"100\"},domProps:{\"value\":_vm.usedQuota}})])]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userLanguage.name)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath)?_c('div',{staticClass:\"userBackend\"},[(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.backend)+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.storageLocation),expression:\"user.storageLocation\"}],staticClass:\"storageLocation subtitle\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.storageLocation)+\"\\n\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.userLastLoginTooltip),expression:\"userLastLoginTooltip\",modifiers:{\"auto\":true}}],staticClass:\"lastLogin\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userLastLogin)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"},[(_vm.canEdit && !_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":_vm.toggleEdit}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Edit User'))+\"\\n\\t\\t\\t\\t\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"userPopoverMenuWrapper\"},[_c('button',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"icon-more\",attrs:{\"aria-label\":_vm.t('settings', 'Toggle user actions menu')},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleMenu.apply(null, arguments)}}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'open': _vm.openedMenu },attrs:{\"aria-expanded\":_vm.openedMenu}},[_c('PopoverMenu',{attrs:{\"menu\":_vm.userActions}})],1)])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"feedback\",style:({opacity: _vm.feedbackMessage !== '' ? 1 : 0})},[_c('div',{staticClass:\"icon-checkmark\"}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.feedbackMessage)+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Gary Kim <gary@garykim.dev>\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<!-- Obfuscated user: Logged in user does not have permissions to see all of the data -->\n\t<div v-if=\"Object.keys(user).length ===1\" :data-id=\"user.id\" class=\"row\">\n\t\t<div :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\"\n\t\t\tclass=\"avatar\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\"\n\t\t\t\talt=\"\"\n\t\t\t\theight=\"32\"\n\t\t\t\twidth=\"32\">\n\t\t</div>\n\t\t<div class=\"name\">\n\t\t\t{{ user.id }}\n\t\t</div>\n\t\t<div class=\"obfuscated\">\n\t\t\t{{ t('settings','You do not have permissions to see the details of this user') }}\n\t\t</div>\n\t</div>\n\n\t<!-- User full data -->\n\t<UserRowSimple v-else-if=\"!editing\"\n\t\t:editing.sync=\"editing\"\n\t\t:feedback-message=\"feedbackMessage\"\n\t\t:groups=\"groups\"\n\t\t:languages=\"languages\"\n\t\t:loading=\"loading\"\n\t\t:opened-menu.sync=\"openedMenu\"\n\t\t:settings=\"settings\"\n\t\t:show-config=\"showConfig\"\n\t\t:sub-admins-groups=\"subAdminsGroups\"\n\t\t:user-actions=\"userActions\"\n\t\t:user=\"user\"\n\t\t:class=\"{'row--menu-opened': openedMenu}\" />\n\t<div v-else\n\t\t:class=\"{\n\t\t\t'disabled': loading.delete || loading.disable,\n\t\t\t'row--menu-opened': openedMenu\n\t\t}\"\n\t\t:data-id=\"user.id\"\n\t\tclass=\"row row--editable\">\n\t\t<div :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\"\n\t\t\tclass=\"avatar\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\"\n\t\t\t\talt=\"\"\n\t\t\t\theight=\"32\"\n\t\t\t\twidth=\"32\">\n\t\t</div>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<div v-if=\"user.backendCapabilities.setDisplayName\" class=\"displayName\">\n\t\t\t<form :class=\"{'icon-loading-small': loading.displayName}\"\n\t\t\t\tclass=\"displayName\"\n\t\t\t\t@submit.prevent=\"updateDisplayName\">\n\t\t\t\t<input :id=\"'displayName'+user.id+rand\"\n\t\t\t\t\tref=\"displayName\"\n\t\t\t\t\t:disabled=\"loading.displayName||loading.all\"\n\t\t\t\t\t:value=\"user.displayname\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input class=\"icon-confirm\"\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tvalue=\"\">\n\t\t\t</form>\n\t\t</div>\n\t\t<div v-else class=\"name\">\n\t\t\t{{ user.id }}\n\t\t\t<div class=\"displayName subtitle\">\n\t\t\t\t<div v-tooltip=\"user.displayname.length > 20 ? user.displayname : ''\" class=\"cellText\">\n\t\t\t\t\t{{ user.displayname }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<form v-if=\"settings.canChangePassword && user.backendCapabilities.setPassword\"\n\t\t\t:class=\"{'icon-loading-small': loading.password}\"\n\t\t\tclass=\"password\"\n\t\t\t@submit.prevent=\"updatePassword\">\n\t\t\t<input :id=\"'password'+user.id+rand\"\n\t\t\t\tref=\"password\"\n\t\t\t\t:disabled=\"loading.password || loading.all\"\n\t\t\t\t:minlength=\"minPasswordLength\"\n\t\t\t\t:placeholder=\"t('settings', 'Add new password')\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\trequired\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\ttype=\"password\"\n\t\t\t\tvalue=\"\">\n\t\t\t<input class=\"icon-confirm\" type=\"submit\" value=\"\">\n\t\t</form>\n\t\t<div v-else />\n\t\t<form :class=\"{'icon-loading-small': loading.mailAddress}\"\n\t\t\tclass=\"mailAddress\"\n\t\t\t@submit.prevent=\"updateEmail\">\n\t\t\t<input :id=\"'mailAddress'+user.id+rand\"\n\t\t\t\tref=\"mailAddress\"\n\t\t\t\t:disabled=\"loading.mailAddress||loading.all\"\n\t\t\t\t:placeholder=\"t('settings', 'Add new email address')\"\n\t\t\t\t:value=\"user.email\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\ttype=\"email\">\n\t\t\t<input class=\"icon-confirm\" type=\"submit\" value=\"\">\n\t\t</form>\n\t\t<div :class=\"{'icon-loading-small': loading.groups}\" class=\"groups\">\n\t\t\t<Multiselect :close-on-select=\"false\"\n\t\t\t\t:disabled=\"loading.groups||loading.all\"\n\t\t\t\t:limit=\"2\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t:options=\"availableGroups\"\n\t\t\t\t:placeholder=\"t('settings', 'Add user to group')\"\n\t\t\t\t:tag-width=\"60\"\n\t\t\t\t:taggable=\"settings.isAdmin\"\n\t\t\t\t:value=\"userGroups\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@remove=\"removeUserGroup\"\n\t\t\t\t@select=\"addUserGroup\"\n\t\t\t\t@tag=\"createGroup\">\n\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t</Multiselect>\n\t\t</div>\n\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t:class=\"{'icon-loading-small': loading.subadmins}\"\n\t\t\tclass=\"subadmins\">\n\t\t\t<Multiselect :close-on-select=\"false\"\n\t\t\t\t:disabled=\"loading.subadmins||loading.all\"\n\t\t\t\t:limit=\"2\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t:options=\"subAdminsGroups\"\n\t\t\t\t:placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t:tag-width=\"60\"\n\t\t\t\t:value=\"userSubAdminsGroups\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@remove=\"removeUserSubAdmin\"\n\t\t\t\t@select=\"addUserSubAdmin\">\n\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t</Multiselect>\n\t\t</div>\n\t\t<div v-tooltip.auto=\"usedSpace\"\n\t\t\t:class=\"{'icon-loading-small': loading.quota}\"\n\t\t\tclass=\"quota\">\n\t\t\t<Multiselect :allow-empty=\"false\"\n\t\t\t\t:disabled=\"loading.quota||loading.all\"\n\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t:placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t:taggable=\"true\"\n\t\t\t\t:value=\"userQuota\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"label\"\n\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@input=\"setUserQuota\"\n\t\t\t\t@tag=\"validateQuota\" />\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLanguages\"\n\t\t\t:class=\"{'icon-loading-small': loading.languages}\"\n\t\t\tclass=\"languages\">\n\t\t\t<Multiselect :allow-empty=\"false\"\n\t\t\t\t:disabled=\"loading.languages||loading.all\"\n\t\t\t\t:options=\"languages\"\n\t\t\t\t:placeholder=\"t('settings', 'No language set')\"\n\t\t\t\t:value=\"userLanguage\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tgroup-label=\"label\"\n\t\t\t\tgroup-values=\"languages\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttrack-by=\"code\"\n\t\t\t\t@input=\"setUserLanguage\" />\n\t\t</div>\n\n\t\t<!-- don't show this on edit mode -->\n\t\t<div v-if=\"showConfig.showStoragePath || showConfig.showUserBackend\"\n\t\t\tclass=\"storageLocation\" />\n\t\t<div v-if=\"showConfig.showLastLogin\" />\n\n\t\t<div class=\"userActions\">\n\t\t\t<div v-if=\"!loading.all\"\n\t\t\t\tclass=\"toggleUserActions\">\n\t\t\t\t<Actions>\n\t\t\t\t\t<ActionButton icon=\"icon-checkmark\"\n\t\t\t\t\t\t@click=\"editing = false\">\n\t\t\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</Actions>\n\t\t\t\t<div v-click-outside=\"hideMenu\" class=\"userPopoverMenuWrapper\">\n\t\t\t\t\t<button class=\"icon-more\"\n\t\t\t\t\t\t@click.prevent=\"toggleMenu\" />\n\t\t\t\t\t<div :class=\"{ 'open': openedMenu }\" class=\"popovermenu\">\n\t\t\t\t\t\t<PopoverMenu :menu=\"userActions\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div :style=\"{opacity: feedbackMessage !== '' ? 1 : 0}\"\n\t\t\t\tclass=\"feedback\">\n\t\t\t\t<div class=\"icon-checkmark\" />\n\t\t\t\t{{ feedbackMessage }}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport ClickOutside from 'vue-click-outside'\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport {\n\tPopoverMenu,\n\tMultiselect,\n\tActions,\n\tActionButton,\n} from '@nextcloud/vue'\nimport UserRowSimple from './UserRowSimple'\nimport UserRowMixin from '../../mixins/UserRowMixin'\n\nVue.use(VTooltip)\n\nexport default {\n\tname: 'UserRow',\n\tcomponents: {\n\t\tUserRowSimple,\n\t\tPopoverMenu,\n\t\tActions,\n\t\tActionButton,\n\t\tMultiselect,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tmixins: [UserRowMixin],\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\tshowConfig: {\n\t\t\ttype: Object,\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\tdata() {\n\t\treturn {\n\t\t\trand: parseInt(Math.random() * 1000),\n\t\t\topenedMenu: false,\n\t\t\tfeedbackMessage: '',\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},\n\t\t}\n\t},\n\tcomputed: {\n\t\t/* USER POPOVERMENU ACTIONS */\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\t},\n\n\tmethods: {\n\t\t/* MENU HANDLING */\n\t\ttoggleMenu() {\n\t\t\tthis.openedMenu = !this.openedMenu\n\t\t},\n\t\thideMenu() {\n\t\t\tthis.openedMenu = false\n\t\t},\n\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(() => {\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\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\tconst displayName = this.$refs.displayName.value\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: displayName,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.displayName = false\n\t\t\t\tthis.$refs.displayName.value = displayName\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 adress\n\t\t */\n\t\tupdatePassword() {\n\t\t\tconst password = this.$refs.password.value\n\t\t\tthis.loading.password = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'password',\n\t\t\t\tvalue: password,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.password = false\n\t\t\t\tthis.$refs.password.value = '' // empty & show placeholder\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 adress\n\t\t */\n\t\tupdateEmail() {\n\t\t\tconst mailAddress = this.$refs.mailAddress.value\n\t\t\tthis.loading.mailAddress = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'email',\n\t\t\t\tvalue: mailAddress,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.mailAddress = false\n\t\t\t\tthis.$refs.mailAddress.value = mailAddress\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(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.canAdd === 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('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\n\t\t\tthis.loading.groups = 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('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\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\tthis.loading.quota = true\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\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: quota,\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} quota Quota in readable format '5 GB'\n\t\t * @return {Promise|boolean}\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\treturn this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)))\n\t\t\t}\n\t\t\t// if no valid do not change\n\t\t\treturn false\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} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.languages = false\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(success => {\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\t// Show feedback to indicate the success\n\t\t\t\t\t\tthis.feedbackMessage = t('setting', 'Welcome mail sent!')\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.feedbackMessage = ''\n\t\t\t\t\t\t}, 2000)\n\t\t\t\t\t}\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t})\n\t\t},\n\n\t},\n}\n</script>\n<style scoped lang=\"scss\">\n\t// Force menu to be above other rows\n\t.row--menu-opened {\n\t\tz-index: 1 !important;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\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=4c932ffd&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=4c932ffd&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=4c932ffd&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=4c932ffd&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4c932ffd\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (Object.keys(_vm.user).length ===1)?_c('div',{staticClass:\"row\",attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x',\"alt\":\"\",\"height\":\"32\",\"width\":\"32\"}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"obfuscated\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings','You do not have permissions to see the details of this user'))+\"\\n\\t\")])]):(!_vm.editing)?_c('UserRowSimple',{class:{'row--menu-opened': _vm.openedMenu},attrs:{\"editing\":_vm.editing,\"feedback-message\":_vm.feedbackMessage,\"groups\":_vm.groups,\"languages\":_vm.languages,\"loading\":_vm.loading,\"opened-menu\":_vm.openedMenu,\"settings\":_vm.settings,\"show-config\":_vm.showConfig,\"sub-admins-groups\":_vm.subAdminsGroups,\"user-actions\":_vm.userActions,\"user\":_vm.user},on:{\"update:editing\":function($event){_vm.editing=$event},\"update:openedMenu\":function($event){_vm.openedMenu=$event},\"update:opened-menu\":function($event){_vm.openedMenu=$event}}}):_c('div',{staticClass:\"row row--editable\",class:{\n\t\t'disabled': _vm.loading.delete || _vm.loading.disable,\n\t\t'row--menu-opened': _vm.openedMenu\n\t},attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x',\"alt\":\"\",\"height\":\"32\",\"width\":\"32\"}}):_vm._e()]),_vm._v(\" \"),(_vm.user.backendCapabilities.setDisplayName)?_c('div',{staticClass:\"displayName\"},[_c('form',{staticClass:\"displayName\",class:{'icon-loading-small': _vm.loading.displayName},on:{\"submit\":function($event){$event.preventDefault();return _vm.updateDisplayName.apply(null, arguments)}}},[_c('input',{ref:\"displayName\",attrs:{\"id\":'displayName'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.displayName||_vm.loading.all,\"autocapitalize\":\"off\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"spellcheck\":\"false\",\"type\":\"text\"},domProps:{\"value\":_vm.user.displayname}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})])]):_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\\t\"),_c('div',{staticClass:\"displayName subtitle\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.displayname.length > 20 ? _vm.user.displayname : ''),expression:\"user.displayname.length > 20 ? user.displayname : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.user.displayname)+\"\\n\\t\\t\\t\")])])]),_vm._v(\" \"),(_vm.settings.canChangePassword && _vm.user.backendCapabilities.setPassword)?_c('form',{staticClass:\"password\",class:{'icon-loading-small': _vm.loading.password},on:{\"submit\":function($event){$event.preventDefault();return _vm.updatePassword.apply(null, arguments)}}},[_c('input',{ref:\"password\",attrs:{\"id\":'password'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.password || _vm.loading.all,\"minlength\":_vm.minPasswordLength,\"placeholder\":_vm.t('settings', 'Add new password'),\"autocapitalize\":\"off\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"required\":\"\",\"spellcheck\":\"false\",\"type\":\"password\",\"value\":\"\"}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})]):_c('div'),_vm._v(\" \"),_c('form',{staticClass:\"mailAddress\",class:{'icon-loading-small': _vm.loading.mailAddress},on:{\"submit\":function($event){$event.preventDefault();return _vm.updateEmail.apply(null, arguments)}}},[_c('input',{ref:\"mailAddress\",attrs:{\"id\":'mailAddress'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.mailAddress||_vm.loading.all,\"placeholder\":_vm.t('settings', 'Add new email address'),\"autocapitalize\":\"off\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"spellcheck\":\"false\",\"type\":\"email\"},domProps:{\"value\":_vm.user.email}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})]),_vm._v(\" \"),_c('div',{staticClass:\"groups\",class:{'icon-loading-small': _vm.loading.groups}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.groups||_vm.loading.all,\"limit\":2,\"multiple\":true,\"options\":_vm.availableGroups,\"placeholder\":_vm.t('settings', 'Add user to group'),\"tag-width\":60,\"taggable\":_vm.settings.isAdmin,\"value\":_vm.userGroups,\"label\":\"name\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"remove\":_vm.removeUserGroup,\"select\":_vm.addUserGroup,\"tag\":_vm.createGroup}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins\",class:{'icon-loading-small': _vm.loading.subadmins}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.subadmins||_vm.loading.all,\"limit\":2,\"multiple\":true,\"options\":_vm.subAdminsGroups,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"tag-width\":60,\"value\":_vm.userSubAdminsGroups,\"label\":\"name\",\"track-by\":\"id\"},on:{\"remove\":_vm.removeUserSubAdmin,\"select\":_vm.addUserSubAdmin}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1):_vm._e(),_vm._v(\" \"),_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.usedSpace),expression:\"usedSpace\",modifiers:{\"auto\":true}}],staticClass:\"quota\",class:{'icon-loading-small': _vm.loading.quota}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"disabled\":_vm.loading.quota||_vm.loading.all,\"options\":_vm.quotaOptions,\"placeholder\":_vm.t('settings', 'Select user quota'),\"taggable\":true,\"value\":_vm.userQuota,\"label\":\"label\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"input\":_vm.setUserQuota,\"tag\":_vm.validateQuota}})],1),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",class:{'icon-loading-small': _vm.loading.languages}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"disabled\":_vm.loading.languages||_vm.loading.all,\"options\":_vm.languages,\"placeholder\":_vm.t('settings', 'No language set'),\"value\":_vm.userLanguage,\"group-label\":\"label\",\"group-values\":\"languages\",\"label\":\"name\",\"track-by\":\"code\"},on:{\"input\":_vm.setUserLanguage}})],1):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath || _vm.showConfig.showUserBackend)?_c('div',{staticClass:\"storageLocation\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div'):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"},[(!_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-checkmark\"},on:{\"click\":function($event){_vm.editing = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\\t\\t\")])],1),_vm._v(\" \"),_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"userPopoverMenuWrapper\"},[_c('button',{staticClass:\"icon-more\",on:{\"click\":function($event){$event.preventDefault();return _vm.toggleMenu.apply(null, arguments)}}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'open': _vm.openedMenu }},[_c('PopoverMenu',{attrs:{\"menu\":_vm.userActions}})],1)])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"feedback\",style:({opacity: _vm.feedbackMessage !== '' ? 1 : 0})},[_c('div',{staticClass:\"icon-checkmark\"}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.feedbackMessage)+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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<div id=\"app-content\" class=\"user-list-grid\" @scroll.passive=\"onScroll\">\n\t\t<Modal v-if=\"showConfig.showNewUserForm\" @close=\"closeModal\">\n\t\t\t<form id=\"new-user\"\n\t\t\t\t:disabled=\"loading.all\"\n\t\t\t\tclass=\"modal__content\"\n\t\t\t\t@submit.prevent=\"createUser\">\n\t\t\t\t<h2>{{ t('settings','New user') }}</h2>\n\t\t\t\t<input id=\"newusername\"\n\t\t\t\t\tref=\"newusername\"\n\t\t\t\t\tv-model=\"newUser.id\"\n\t\t\t\t\t:disabled=\"settings.newUserGenerateUserID\"\n\t\t\t\t\t:placeholder=\"settings.newUserGenerateUserID\n\t\t\t\t\t\t? t('settings', 'Will be autogenerated')\n\t\t\t\t\t\t: t('settings', 'Username')\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"username\"\n\t\t\t\t\tpattern=\"[a-zA-Z0-9 _\\.@\\-']+\"\n\t\t\t\t\trequired\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input id=\"newdisplayname\"\n\t\t\t\t\tv-model=\"newUser.displayName\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Display name')\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"displayname\"\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input id=\"newuserpassword\"\n\t\t\t\t\tref=\"newuserpassword\"\n\t\t\t\t\tv-model=\"newUser.password\"\n\t\t\t\t\t:minlength=\"minPasswordLength\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Password')\"\n\t\t\t\t\t:required=\"newUser.mailAddress===''\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\ttype=\"password\">\n\t\t\t\t<input id=\"newemail\"\n\t\t\t\t\tv-model=\"newUser.mailAddress\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Email')\"\n\t\t\t\t\t:required=\"newUser.password==='' || settings.newUserRequireEmail\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"email\"\n\t\t\t\t\ttype=\"email\">\n\t\t\t\t<div class=\"groups modal__item\">\n\t\t\t\t\t<!-- hidden input trick for vanilla html5 form validation -->\n\t\t\t\t\t<input v-if=\"!settings.isAdmin\"\n\t\t\t\t\t\tid=\"newgroups\"\n\t\t\t\t\t\t:class=\"{'icon-loading-small': loading.groups}\"\n\t\t\t\t\t\t:required=\"!settings.isAdmin\"\n\t\t\t\t\t\t:value=\"newUser.groups\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\ttype=\"text\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.groups\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t:disabled=\"loading.groups||loading.all\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:options=\"canAddGroups\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Add user to group')\"\n\t\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t@tag=\"createGroup\">\n\t\t\t\t\t\t<!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\t\tSubadmins can't create users outside their groups\n\t\t\t\t\t\t\tTherefore, empty select is forbidden -->\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t\t\tclass=\"subadmins modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.subAdminsGroups\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:options=\"subAdminsGroups\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttrack-by=\"id\">\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"quota modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.quota\"\n\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t@tag=\"validateQuota\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showLanguages\" class=\"languages modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.language\"\n\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t:options=\"languages\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Default language')\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tgroup-label=\"label\"\n\t\t\t\t\t\tgroup-values=\"languages\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttrack-by=\"code\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showStoragePath\" class=\"storageLocation\" />\n\t\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\" />\n\t\t\t\t<div v-if=\"showConfig.showLastLogin\" class=\"lastLogin\" />\n\t\t\t\t<div class=\"user-actions\">\n\t\t\t\t\t<button id=\"newsubmit\"\n\t\t\t\t\t\tclass=\"button primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tvalue=\"\">\n\t\t\t\t\t\t{{ t('settings', 'Add a new user') }}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</Modal>\n\t\t<div id=\"grid-header\"\n\t\t\t:class=\"{'sticky': scrolled && !showConfig.showNewUserForm}\"\n\t\t\tclass=\"row\">\n\t\t\t<div id=\"headerAvatar\" class=\"avatar\" />\n\t\t\t<div id=\"headerName\" class=\"name\">\n\t\t\t\t{{ t('settings', 'Username') }}\n\n\t\t\t\t<div class=\"subtitle\">\n\t\t\t\t\t{{ t('settings', 'Display name') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id=\"headerPassword\" class=\"password\">\n\t\t\t\t{{ t('settings', 'Password') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerAddress\" class=\"mailAddress\">\n\t\t\t\t{{ t('settings', 'Email') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerGroups\" class=\"groups\">\n\t\t\t\t{{ t('settings', 'Groups') }}\n\t\t\t</div>\n\t\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t\tid=\"headerSubAdmins\"\n\t\t\t\tclass=\"subadmins\">\n\t\t\t\t{{ t('settings', 'Group admin for') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerQuota\" class=\"quota\">\n\t\t\t\t{{ t('settings', 'Quota') }}\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showLanguages\"\n\t\t\t\tid=\"headerLanguages\"\n\t\t\t\tclass=\"languages\">\n\t\t\t\t{{ t('settings', 'Language') }}\n\t\t\t</div>\n\n\t\t\t<div v-if=\"showConfig.showUserBackend || showConfig.showStoragePath\"\n\t\t\t\tclass=\"headerUserBackend userBackend\">\n\t\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\">\n\t\t\t\t\t{{ t('settings', 'User backend') }}\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showStoragePath\"\n\t\t\t\t\tclass=\"subtitle storageLocation\">\n\t\t\t\t\t{{ t('settings', 'Storage location') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showLastLogin\"\n\t\t\t\tclass=\"headerLastLogin lastLogin\">\n\t\t\t\t{{ t('settings', 'Last login') }}\n\t\t\t</div>\n\n\t\t\t<div class=\"userActions\" />\n\t\t</div>\n\n\t\t<user-row v-for=\"user in filteredUsers\"\n\t\t\t:key=\"user.id\"\n\t\t\t:external-actions=\"externalActions\"\n\t\t\t:groups=\"groups\"\n\t\t\t:languages=\"languages\"\n\t\t\t:quota-options=\"quotaOptions\"\n\t\t\t:settings=\"settings\"\n\t\t\t:show-config=\"showConfig\"\n\t\t\t:sub-admins-groups=\"subAdminsGroups\"\n\t\t\t:user=\"user\" />\n\t\t<InfiniteLoading ref=\"infiniteLoading\" @infinite=\"infiniteHandler\">\n\t\t\t<div slot=\"spinner\">\n\t\t\t\t<div class=\"users-icon-loading icon-loading\" />\n\t\t\t</div>\n\t\t\t<div slot=\"no-more\">\n\t\t\t\t<div class=\"users-list-end\" />\n\t\t\t</div>\n\t\t\t<div slot=\"no-results\">\n\t\t\t\t<div id=\"emptycontent\">\n\t\t\t\t\t<div class=\"icon-contacts-dark\" />\n\t\t\t\t\t<h2>{{ t('settings', 'No users in here') }}</h2>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</InfiniteLoading>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport InfiniteLoading from 'vue-infinite-loading'\nimport Vue from 'vue'\nimport { Modal } from '@nextcloud/vue'\n\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\n\nimport userRow from './UserList/UserRow'\n\nconst unlimitedQuota = {\n\tid: 'none',\n\tlabel: t('settings', 'Unlimited'),\n}\nconst defaultQuota = {\n\tid: 'default',\n\tlabel: t('settings', 'Default quota'),\n}\nconst newUser = {\n\tid: '',\n\tdisplayName: '',\n\tpassword: '',\n\tmailAddress: '',\n\tgroups: [],\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\tcomponents: {\n\t\tModal,\n\t\tuserRow,\n\t\tMultiselect,\n\t\tInfiniteLoading,\n\t},\n\tprops: {\n\t\tusers: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\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\tdata() {\n\t\treturn {\n\t\t\tunlimitedQuota,\n\t\t\tdefaultQuota,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tgroups: false,\n\t\t\t},\n\t\t\tscrolled: false,\n\t\t\tsearchQuery: '',\n\t\t\tnewUser: Object.assign({}, newUser),\n\t\t}\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\t\tselectedGroupDecoded() {\n\t\t\treturn decodeURIComponent(this.selectedGroup)\n\t\t},\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\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\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\t\tsubAdminsGroups() {\n\t\t\t// data provided php side\n\t\t\treturn this.$store.getters.getSubadminGroups\n\t\t},\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(this.unlimitedQuota)\n\t\t\t}\n\t\t\tquotaPreset.unshift(this.defaultQuota)\n\t\t\treturn quotaPreset\n\t\t},\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\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\twatch: {\n\t\t// watch url change and group select\n\t\tselectedGroup(val, old) {\n\t\t\t// if selected is the disabled group but it's empty\n\t\t\tthis.redirectIfDisabled()\n\t\t\tthis.$store.commit('resetUsers')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\tthis.setNewUserDefaultGroup(val)\n\t\t},\n\n\t\t// make sure the infiniteLoading state is changed if we manually\n\t\t// add/remove data from the store\n\t\tusersCount(val, old) {\n\t\t\t// deleting the last user, reset the list\n\t\t\tif (val === 0 && old === 1) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t\t// adding the first user, warn the infiniteLoader that\n\t\t\t\t// the list is not empty anymore (we don't fetch the newly\n\t\t\t\t// added user as we already have all the info we need)\n\t\t\t} else if (val === 1 && old === 0) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.loaded()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\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\tthis.redirectIfDisabled()\n\t},\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\tonScroll(event) {\n\t\t\tthis.scrolled = event.target.scrollTo > 0\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\tinfiniteHandler($state) {\n\t\t\tthis.$store.dispatch('getUsers', {\n\t\t\t\toffset: this.usersOffset,\n\t\t\t\tlimit: this.usersLimit,\n\t\t\t\tgroup: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\n\t\t\t\tsearch: this.searchQuery,\n\t\t\t})\n\t\t\t\t.then((usersCount) => {\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\t$state.loaded()\n\t\t\t\t\t}\n\t\t\t\t\tif (usersCount < this.usersLimit) {\n\t\t\t\t\t\t$state.complete()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t/* SEARCH */\n\t\tsearch({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t\tthis.$store.commit('resetUsers')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t},\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\t\tcreateUser() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch('addUser', {\n\t\t\t\tuserid: this.newUser.id,\n\t\t\t\tpassword: this.newUser.password,\n\t\t\t\tdisplayName: this.newUser.displayName,\n\t\t\t\temail: this.newUser.mailAddress,\n\t\t\t\tgroups: this.newUser.groups.map(group => group.id),\n\t\t\t\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\n\t\t\t\tquota: this.newUser.quota.id,\n\t\t\t\tlanguage: this.newUser.language.code,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.resetForm()\n\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\tthis.closeModal()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n\t\t\t\t\t\tconst statuscode = error.response.data.ocs.meta.statuscode\n\t\t\t\t\t\tif (statuscode === 102) {\n\t\t\t\t\t\t\t// wrong username\n\t\t\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\t\t} else if (statuscode === 107) {\n\t\t\t\t\t\t\t// wrong password\n\t\t\t\t\t\t\tthis.$refs.newuserpassword.focus()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\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 * Create a new group\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t * @return {Promise}\n\t\t */\n\t\tcreateGroup(gid) {\n\t\t\tthis.loading.groups = true\n\t\t\tthis.$store.dispatch('addGroup', gid)\n\t\t\t\t.then((group) => {\n\t\t\t\t\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\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\tredirectIfDisabled() {\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\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t}\n\t\t},\n\t\tcloseModal() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.showConfig.showNewUserForm = false\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.modal-wrapper {\n\t\tmargin: 2vh 0;\n\t\talign-items: flex-start;\n\t}\n\t.modal__content {\n\t\tdisplay: flex;\n\t\tpadding: 20px;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\ttext-align: center;\n\t\toverflow: auto;\n\t}\n\t.modal__item {\n\t\tmargin-bottom: 16px;\n\t\twidth: 100%;\n\t}\n\t.modal__item:not(:focus):not(:active) {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\t.modal__item::v-deep .multiselect {\n\t\twidth: 100%;\n\t}\n\t.user-actions {\n\t\tmargin-top: 20px;\n\t}\n\t.modal__content::v-deep .multiselect__single {\n\t\ttext-align: left;\n\t\tbox-sizing: border-box;\n\t}\n\t.modal__content::v-deep .multiselect__content-wrapper {\n\t\tbox-sizing: border-box;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\n\n\t/* fake input for groups validation */\n\tinput#newgroups {\n\t\tposition: absolute;\n\t\topacity: 0;\n\t\t/* The \"hidden\" input is behind the Multiselect, so in general it does\n\t\t * not receives clicks. However, with Firefox, after the validation\n\t\t * fails, it will receive the first click done on it, so its width needs\n\t\t * to be set to 0 to prevent that (\"pointer-events: none\" does not\n\t\t * prevent it). */\n\t\twidth: 0;\n\t}\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/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=897578ae&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=897578ae&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=897578ae&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=897578ae&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"897578ae\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-list-grid\",attrs:{\"id\":\"app-content\"},on:{\"&scroll\":function($event){return _vm.onScroll.apply(null, arguments)}}},[(_vm.showConfig.showNewUserForm)?_c('Modal',{on:{\"close\":_vm.closeModal}},[_c('form',{staticClass:\"modal__content\",attrs:{\"id\":\"new-user\",\"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('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.id),expression:\"newUser.id\"}],ref:\"newusername\",staticClass:\"modal__item\",attrs:{\"id\":\"newusername\",\"disabled\":_vm.settings.newUserGenerateUserID,\"placeholder\":_vm.settings.newUserGenerateUserID\n\t\t\t\t\t? _vm.t('settings', 'Will be autogenerated')\n\t\t\t\t\t: _vm.t('settings', 'Username'),\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"username\",\"pattern\":\"[a-zA-Z0-9 _\\\\.@\\\\-']+\",\"required\":\"\",\"type\":\"text\"},domProps:{\"value\":(_vm.newUser.id)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"id\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.displayName),expression:\"newUser.displayName\"}],staticClass:\"modal__item\",attrs:{\"id\":\"newdisplayname\",\"placeholder\":_vm.t('settings', 'Display name'),\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"displayname\",\"type\":\"text\"},domProps:{\"value\":(_vm.newUser.displayName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"displayName\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.password),expression:\"newUser.password\"}],ref:\"newuserpassword\",staticClass:\"modal__item\",attrs:{\"id\":\"newuserpassword\",\"minlength\":_vm.minPasswordLength,\"placeholder\":_vm.t('settings', 'Password'),\"required\":_vm.newUser.mailAddress==='',\"autocapitalize\":\"none\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"name\":\"password\",\"type\":\"password\"},domProps:{\"value\":(_vm.newUser.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"password\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.mailAddress),expression:\"newUser.mailAddress\"}],staticClass:\"modal__item\",attrs:{\"id\":\"newemail\",\"placeholder\":_vm.t('settings', 'Email'),\"required\":_vm.newUser.password==='' || _vm.settings.newUserRequireEmail,\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"email\",\"type\":\"email\"},domProps:{\"value\":(_vm.newUser.mailAddress)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"mailAddress\", $event.target.value)}}}),_vm._v(\" \"),_c('div',{staticClass:\"groups modal__item\"},[(!_vm.settings.isAdmin)?_c('input',{class:{'icon-loading-small': _vm.loading.groups},attrs:{\"id\":\"newgroups\",\"required\":!_vm.settings.isAdmin,\"tabindex\":\"-1\",\"type\":\"text\"},domProps:{\"value\":_vm.newUser.groups}}):_vm._e(),_vm._v(\" \"),_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.groups||_vm.loading.all,\"multiple\":true,\"options\":_vm.canAddGroups,\"placeholder\":_vm.t('settings', 'Add user to group'),\"tag-width\":60,\"taggable\":true,\"label\":\"name\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"tag\":_vm.createGroup},model:{value:(_vm.newUser.groups),callback:function ($$v) {_vm.$set(_vm.newUser, \"groups\", $$v)},expression:\"newUser.groups\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"multiple\":true,\"options\":_vm.subAdminsGroups,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"tag-width\":60,\"label\":\"name\",\"track-by\":\"id\"},model:{value:(_vm.newUser.subAdminsGroups),callback:function ($$v) {_vm.$set(_vm.newUser, \"subAdminsGroups\", $$v)},expression:\"newUser.subAdminsGroups\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"quota modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"options\":_vm.quotaOptions,\"placeholder\":_vm.t('settings', 'Select user quota'),\"taggable\":true,\"label\":\"label\",\"track-by\":\"id\"},on:{\"tag\":_vm.validateQuota},model:{value:(_vm.newUser.quota),callback:function ($$v) {_vm.$set(_vm.newUser, \"quota\", $$v)},expression:\"newUser.quota\"}})],1),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"options\":_vm.languages,\"placeholder\":_vm.t('settings', 'Default language'),\"group-label\":\"label\",\"group-values\":\"languages\",\"label\":\"name\",\"track-by\":\"code\"},model:{value:(_vm.newUser.language),callback:function ($$v) {_vm.$set(_vm.newUser, \"language\", $$v)},expression:\"newUser.language\"}})],1):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"storageLocation\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{staticClass:\"lastLogin\"}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"user-actions\"},[_c('button',{staticClass:\"button primary\",attrs:{\"id\":\"newsubmit\",\"type\":\"submit\",\"value\":\"\"}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Add a new user'))+\"\\n\\t\\t\\t\\t\")])])])]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"row\",class:{'sticky': _vm.scrolled && !_vm.showConfig.showNewUserForm},attrs:{\"id\":\"grid-header\"}},[_c('div',{staticClass:\"avatar\",attrs:{\"id\":\"headerAvatar\"}}),_vm._v(\" \"),_c('div',{staticClass:\"name\",attrs:{\"id\":\"headerName\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Username'))+\"\\n\\n\\t\\t\\t\"),_c('div',{staticClass:\"subtitle\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Display name'))+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"password\",attrs:{\"id\":\"headerPassword\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Password'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"mailAddress\",attrs:{\"id\":\"headerAddress\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Email'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"groups\",attrs:{\"id\":\"headerGroups\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Groups'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins\",attrs:{\"id\":\"headerSubAdmins\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Group admin for'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"quota\",attrs:{\"id\":\"headerQuota\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Quota'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",attrs:{\"id\":\"headerLanguages\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Language'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath)?_c('div',{staticClass:\"headerUserBackend userBackend\"},[(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'User backend'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"subtitle storageLocation\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Storage location'))+\"\\n\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{staticClass:\"headerLastLogin lastLogin\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Last login'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"})]),_vm._v(\" \"),_vm._l((_vm.filteredUsers),function(user){return _c('user-row',{key:user.id,attrs:{\"external-actions\":_vm.externalActions,\"groups\":_vm.groups,\"languages\":_vm.languages,\"quota-options\":_vm.quotaOptions,\"settings\":_vm.settings,\"show-config\":_vm.showConfig,\"sub-admins-groups\":_vm.subAdminsGroups,\"user\":user}})}),_vm._v(\" \"),_c('InfiniteLoading',{ref:\"infiniteLoading\",on:{\"infinite\":_vm.infiniteHandler}},[_c('div',{attrs:{\"slot\":\"spinner\"},slot:\"spinner\"},[_c('div',{staticClass:\"users-icon-loading icon-loading\"})]),_vm._v(\" \"),_c('div',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_c('div',{staticClass:\"users-list-end\"})]),_vm._v(\" \"),_c('div',{attrs:{\"slot\":\"no-results\"},slot:\"no-results\"},[_c('div',{attrs:{\"id\":\"emptycontent\"}},[_c('div',{staticClass:\"icon-contacts-dark\"}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'No users in here')))])])])])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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<Content app-name=\"settings\" :navigation-class=\"{ 'icon-loading': loadingAddGroup }\">\n\t\t<AppNavigation>\n\t\t\t<AppNavigationNew button-id=\"new-user-button\"\n\t\t\t\t:text=\"t('settings','New user')\"\n\t\t\t\tbutton-class=\"icon-add\"\n\t\t\t\t@click=\"showNewUserMenu\"\n\t\t\t\t@keyup.enter=\"showNewUserMenu\"\n\t\t\t\t@keyup.space=\"showNewUserMenu\" />\n\t\t\t<template #list>\n\t\t\t\t<AppNavigationItem id=\"addgroup\"\n\t\t\t\t\tref=\"addGroup\"\n\t\t\t\t\t:edit-placeholder=\"t('settings', 'Enter group name')\"\n\t\t\t\t\t:editable=\"true\"\n\t\t\t\t\t:loading=\"loadingAddGroup\"\n\t\t\t\t\t:title=\"t('settings', 'Add group')\"\n\t\t\t\t\ticon=\"icon-add\"\n\t\t\t\t\t@click=\"showAddGroupForm\"\n\t\t\t\t\t@update:title=\"createGroup\" />\n\t\t\t\t<AppNavigationItem id=\"everyone\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Active users')\"\n\t\t\t\t\t:to=\"{ name: 'users' }\"\n\t\t\t\t\ticon=\"icon-contacts-dark\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"userCount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ userCount }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\t\t\t\t<AppNavigationItem v-if=\"settings.isAdmin\"\n\t\t\t\t\tid=\"admin\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Admins')\"\n\t\t\t\t\t:to=\"{ name: 'group', params: { selectedGroup: 'admin' } }\"\n\t\t\t\t\ticon=\"icon-user-admin\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"adminGroupMenu.count\" slot=\"counter\">\n\t\t\t\t\t\t{{ adminGroupMenu.count }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\n\t\t\t\t<!-- Hide the disabled if none, if we don't have the data (-1) show it -->\n\t\t\t\t<AppNavigationItem v-if=\"disabledGroupMenu.usercount > 0 || disabledGroupMenu.usercount === -1\"\n\t\t\t\t\tid=\"disabled\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Disabled users')\"\n\t\t\t\t\t:to=\"{ name: 'group', params: { selectedGroup: 'disabled' } }\"\n\t\t\t\t\ticon=\"icon-disabled-users\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"disabledGroupMenu.usercount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ disabledGroupMenu.usercount }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\n\t\t\t\t<AppNavigationCaption v-if=\"groupList.length > 0\" :title=\"t('settings', 'Groups')\" />\n\t\t\t\t<GroupListItem v-for=\"group in groupList\"\n\t\t\t\t\t:id=\"group.id\"\n\t\t\t\t\t:key=\"group.id\"\n\t\t\t\t\t:title=\"group.title\"\n\t\t\t\t\t:count=\"group.count\" />\n\t\t\t</template>\n\t\t\t<template #footer>\n\t\t\t\t<AppNavigationSettings>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>{{ t('settings', 'Default quota:') }}</p>\n\t\t\t\t\t\t<Multiselect :value=\"defaultQuota\"\n\t\t\t\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\t\t\t\t:placeholder=\"t('settings', 'Select default quota')\"\n\t\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\t\t@tag=\"validateQuota\"\n\t\t\t\t\t\t\t@input=\"setDefaultQuota\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showLanguages\"\n\t\t\t\t\t\t\tv-model=\"showLanguages\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showLanguages\">{{ t('settings', 'Show Languages') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showLastLogin\"\n\t\t\t\t\t\t\tv-model=\"showLastLogin\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showLastLogin\">{{ t('settings', 'Show last login') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showUserBackend\"\n\t\t\t\t\t\t\tv-model=\"showUserBackend\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showUserBackend\">{{ t('settings', 'Show user backend') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showStoragePath\"\n\t\t\t\t\t\t\tv-model=\"showStoragePath\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showStoragePath\">{{ t('settings', 'Show storage path') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"sendWelcomeMail\"\n\t\t\t\t\t\t\tv-model=\"sendWelcomeMail\"\n\t\t\t\t\t\t\t:disabled=\"loadingSendMail\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"sendWelcomeMail\">{{ t('settings', 'Send email to new user') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t</AppNavigationSettings>\n\t\t\t</template>\n\t\t</AppNavigation>\n\t\t<AppContent>\n\t\t\t<UserList :users=\"users\"\n\t\t\t\t:show-config=\"showConfig\"\n\t\t\t\t:selected-group=\"selectedGroupDecoded\"\n\t\t\t\t:external-actions=\"externalActions\" />\n\t\t</AppContent>\n\t</Content>\n</template>\n\n<script>\nimport AppContent from '@nextcloud/vue/dist/Components/AppContent'\nimport AppNavigation from '@nextcloud/vue/dist/Components/AppNavigation'\nimport AppNavigationCaption from '@nextcloud/vue/dist/Components/AppNavigationCaption'\nimport AppNavigationCounter from '@nextcloud/vue/dist/Components/AppNavigationCounter'\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem'\nimport AppNavigationNew from '@nextcloud/vue/dist/Components/AppNavigationNew'\nimport AppNavigationSettings from '@nextcloud/vue/dist/Components/AppNavigationSettings'\nimport axios from '@nextcloud/axios'\nimport Content from '@nextcloud/vue/dist/Components/Content'\nimport { generateUrl } from '@nextcloud/router'\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport Vue from 'vue'\nimport VueLocalStorage from 'vue-localstorage'\n\nimport GroupListItem from '../components/GroupListItem'\nimport UserList from '../components/UserList'\n\nVue.use(VueLocalStorage)\n\nexport default {\n\tname: 'Users',\n\tcomponents: {\n\t\tAppContent,\n\t\tAppNavigation,\n\t\tAppNavigationCaption,\n\t\tAppNavigationCounter,\n\t\tAppNavigationItem,\n\t\tAppNavigationNew,\n\t\tAppNavigationSettings,\n\t\tContent,\n\t\tGroupListItem,\n\t\tMultiselect,\n\t\tUserList,\n\t},\n\tprops: {\n\t\tselectedGroup: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t// default quota is set to unlimited\n\t\t\tunlimitedQuota: { id: 'none', label: t('settings', 'Unlimited') },\n\t\t\t// temporary value used for multiselect change\n\t\t\tselectedQuota: false,\n\t\t\texternalActions: [],\n\t\t\tloadingAddGroup: false,\n\t\t\tloadingSendMail: false,\n\t\t\tshowConfig: {\n\t\t\t\tshowStoragePath: false,\n\t\t\t\tshowUserBackend: false,\n\t\t\t\tshowLastLogin: false,\n\t\t\t\tshowNewUserForm: false,\n\t\t\t\tshowLanguages: false,\n\t\t\t},\n\t\t}\n\t},\n\tcomputed: {\n\t\tselectedGroupDecoded() {\n\t\t\treturn this.selectedGroup ? decodeURIComponent(this.selectedGroup) : null\n\t\t},\n\t\tusers() {\n\t\t\treturn this.$store.getters.getUsers\n\t\t},\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\n\n\t\t// Local settings\n\t\tshowLanguages: {\n\t\t\tget() { return this.getLocalstorage('showLanguages') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showLanguages', status)\n\t\t\t},\n\t\t},\n\t\tshowLastLogin: {\n\t\t\tget() { return this.getLocalstorage('showLastLogin') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showLastLogin', status)\n\t\t\t},\n\t\t},\n\t\tshowUserBackend: {\n\t\t\tget() { return this.getLocalstorage('showUserBackend') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showUserBackend', status)\n\t\t\t},\n\t\t},\n\t\tshowStoragePath: {\n\t\t\tget() { return this.getLocalstorage('showStoragePath') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showStoragePath', status)\n\t\t\t},\n\t\t},\n\n\t\tuserCount() {\n\t\t\treturn this.$store.getters.getUserCount\n\t\t},\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\n\t\t// default quota\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(this.unlimitedQuota)\n\t\t\t}\n\t\t\treturn quotaPreset\n\t\t},\n\t\t// mapping saved values to objects\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 !== this.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 this.unlimitedQuota // unlimited\n\t\t\t},\n\t\t\tset(quota) {\n\t\t\t\tthis.selectedQuota = quota\n\t\t\t},\n\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\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\t\tdisabledGroupMenu() {\n\t\t\treturn this.formatGroupMenu(this.groups.find(group => group.id === 'disabled'))\n\t\t},\n\t},\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\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\tmethods: {\n\t\tshowNewUserMenu() {\n\t\t\tthis.showConfig.showNewUserForm = true\n\t\t\tif (this.showConfig.showNewUserForm) {\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\twindow.newusername.focus()\n\t\t\t\t})\n\t\t\t}\n\t\t},\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.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key]\n\t\t\treturn this.showConfig[key]\n\t\t},\n\t\tsetLocalStorage(key, status) {\n\t\t\tthis.showConfig[key] = status\n\t\t\tthis.$localStorage.set(key, status)\n\t\t\treturn status\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\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\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 {Promise|boolean}\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) {\n\t\t\t\treturn this.setDefaultQuota('none')\n\t\t\t} else {\n\t\t\t\t// unify format output\n\t\t\t\treturn this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)))\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\t * @param {string} gid The group id\n\t\t */\n\t\tasync createGroup(gid) {\n\t\t\t// group is not valid\n\t\t\tif (gid.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.loadingAddGroup = true\n\t\t\t\tawait this.$store.dispatch('addGroup', gid.trim())\n\n\t\t\t\tthis.hideAddGroupForm()\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(gid.trim()),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch {\n\t\t\t\tthis.showAddGroupForm()\n\t\t\t} finally {\n\t\t\t\tthis.loadingAddGroup = false\n\t\t\t}\n\t\t},\n\n\t\tshowAddGroupForm() {\n\t\t\tthis.$refs.addGroup.editingActive = true\n\t\t\tthis.$refs.addGroup.onMenuToggle(false)\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.addGroup.$refs.editingInput.focusInput()\n\t\t\t})\n\t\t},\n\n\t\thideAddGroupForm() {\n\t\t\tthis.$refs.addGroup.editingActive = false\n\t\t\tthis.$refs.addGroup.editingValue = ''\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// force hiding the editing action for the add group entry\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\n\tdisplay: none;\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=1babbc68&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=1babbc68&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=1babbc68&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=1babbc68&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 \"1babbc68\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","_vm","this","_h","$createElement","_c","_self","key","attrs","title","name","params","selectedGroup","encodeURIComponent","loadingRenameGroup","openGroupMenu","on","handleGroupMenuOpen","scopedSlots","_u","fn","_v","_s","count","_e","proxy","settings","isAdmin","ref","$event","renameGroup","t","removeGroup","props","user","type","Object","required","default","groups","Array","subAdminsGroups","quotaOptions","showConfig","languages","externalActions","computed","userGroups","filter","group","includes","userSubAdminsGroups","subadmin","availableGroups","map","groupClone","assign","$isDisabled","canAdd","canRemove","usedSpace","quota","used","size","OC","Util","humanFileSize","usedQuota","Math","min","round","pow","isNaN","userQuota","humanQuota","find","label","minPasswordLength","$store","getters","getPasswordPolicyMinLength","userLanguage","userLang","concat","lang","code","language","userLastLoginTooltip","lastLogin","formatDate","userLastLogin","relativeModifiedDate","methods","generateAvatar","generateUrl","version","oc_userconfig","avatar","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","staticClass","class","loading","delete","disable","wipe","directives","rawName","value","displayname","length","expression","email","userGroupsLabels","userSubAdminsGroupsLabels","domProps","showUserBackend","showStoragePath","backend","storageLocation","modifiers","canEdit","all","toggleEdit","preventDefault","toggleMenu","apply","arguments","openedMenu","userActions","style","opacity","feedbackMessage","keys","editing","backendCapabilities","displayName","updateDisplayName","rand","canChangePassword","setPassword","password","updatePassword","mailAddress","updateEmail","removeUserGroup","addUserGroup","createGroup","slot","subadmins","removeUserSubAdmin","addUserSubAdmin","setUserQuota","validateQuota","setUserLanguage","onScroll","closeModal","createUser","newUser","newUserGenerateUserID","target","composing","$set","newUserRequireEmail","canAddGroups","model","callback","$$v","scrolled","showNewUserForm","_l","infiniteHandler","loadingAddGroup","showAddGroupForm","userCount","adminGroupMenu","disabledGroupMenu","usercount","groupList","defaultQuota","setDefaultQuota","isArray","showLanguages","_i","$$a","$$el","$$c","checked","$$i","slice","showLastLogin","loadingSendMail","sendWelcomeMail","showNewUserMenu","indexOf","_k","keyCode","users","selectedGroupDecoded"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"settings-users-351.js?v=a6c3bd4e9f1198aae27c","mappings":"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AAWpB,EAAIqB,GAAGrB,EAAIuI,iBAAiB,kBACv6H,IDWpB,EACA,KACA,KACA,MAIF,GAAe,GAAiB,wUEuOhC,yBAEA,QACA,eACA,YACA,iBACA,0BACA,kBACA,4BACA,2BAEA,YACA,kBAEA,WACA,OACA,MACA,YACA,aAEA,UACA,YACA,8BAEA,QACA,WACA,8BAEA,iBACA,WACA,8BAEA,cACA,WACA,8BAEA,YACA,YACA,8BAEA,WACA,WACA,aAEA,iBACA,WACA,+BAGA,KA/CA,WAgDA,OACA,iCACA,cACA,mBACA,WACA,SACA,OACA,eACA,YACA,eACA,UACA,aACA,SACA,UACA,WACA,aACA,WAIA,UAEA,YAFA,WAGA,OACA,CACA,mBACA,iCACA,wBAEA,CACA,mBACA,sCACA,6BAEA,CACA,+CACA,gFACA,gCAUA,OAPA,8CACA,QACA,iBACA,0CACA,8BAGA,iCAIA,SAEA,WAFA,WAGA,kCAEA,SALA,WAMA,oBAGA,gBATA,WASA,WACA,eACA,8BACA,6NACA,uCACA,CACA,+BACA,2DACA,uBACA,gCAEA,YACA,IACA,kBACA,iBACA,uCACA,iBACA,kBACA,wBAIA,IAIA,WAnCA,WAmCA,WACA,eACA,8BACA,8GACA,iCACA,CACA,+BACA,6DACA,uBACA,gCAEA,YACA,KAGA,OAFA,oBACA,iBACA,kCACA,iBACA,oBACA,uBAIA,IAIA,kBA7DA,WA6DA,WACA,uBACA,oBACA,mBACA,qBACA,iDACA,SACA,YAEA,iBACA,oBACA,qBASA,kBAjFA,WAiFA,WACA,+BACA,4BACA,oCACA,oBACA,kBACA,UACA,iBACA,yBACA,gCASA,eAnGA,WAmGA,WACA,4BACA,yBACA,oCACA,oBACA,eACA,UACA,iBACA,sBACA,8BASA,YArHA,WAqHA,WACA,+BACA,4BACA,oCACA,oBACA,YACA,UACA,iBACA,yBACA,gCASA,YAvIA,SAuIA,2JACA,mCADA,kBAGA,gCAHA,cAIA,YAJA,SAKA,mDALA,uDAOA,oBAPA,yBASA,mCATA,8CAWA,6CAXA,kEAmBA,aA1JA,SA0JA,0JACA,aADA,0CAEA,GAFA,cAIA,oBACA,YACA,OANA,kBAQA,mDARA,yDAUA,oBAVA,yBAYA,oBAZA,gFAqBA,gBA/KA,SA+KA,0JACA,gBADA,0CAEA,GAFA,cAKA,oBACA,YACA,OAPA,kBAUA,qCACA,SACA,QAZA,OAcA,oBAEA,mCACA,gCAjBA,kDAoBA,oBApBA,6DA6BA,gBA5MA,SA4MA,6JACA,uBACA,YACA,OAHA,kBAMA,qCACA,SACA,QARA,OAUA,uBAVA,gDAYA,oBAZA,4DAqBA,mBAjOA,SAiOA,6JACA,uBACA,YACA,OAHA,kBAMA,wCACA,SACA,QARA,uDAWA,oBAXA,yBAaA,uBAbA,+EAuBA,aAxPA,WAwPA,4MACA,mBAEA,cAHA,kBAMA,iCACA,iBACA,YACA,UATA,uDAYA,oBAZA,yBAcA,mBAdA,8CAgBA,GAhBA,kEAyBA,cAjRA,SAiRA,GAEA,kCACA,uBAEA,uEAYA,gBAlSA,SAkSA,qJACA,uBADA,kBAIA,iCACA,iBACA,eACA,eAPA,sDAUA,oBAVA,uBAYA,uBAZA,6CAcA,GAdA,iEAoBA,gBAtTA,WAsTA,WACA,oBACA,qDACA,kBACA,IAEA,oDACA,uBACA,uBACA,MAEA,uBChqB0L,iBCWtL,GAAU,GAEd,GAAQrC,kBAAoB,KAC5B,GAAQC,cAAgB,KAElB,GAAQC,OAAS,UAAc,KAAM,QAE3C,GAAQC,OAAS,KACjB,GAAQC,mBAAqB,KAEhB,KAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICbI,IAAY,OACd,ICTW,WAAa,IAAItG,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAwC,IAAhCiC,OAAOqG,KAAKxI,EAAIiC,MAAMgF,OAAa7G,EAAG,MAAM,CAACmG,YAAY,MAAMhG,MAAM,CAAC,UAAUP,EAAIiC,KAAKlC,KAAK,CAACK,EAAG,MAAM,CAACmG,YAAY,SAASC,MAAM,CAAC,qBAAsBxG,EAAIyG,QAAQC,QAAU1G,EAAIyG,QAAQE,SAAW3G,EAAIyG,QAAQG,OAAO,CAAG5G,EAAIyG,QAAQC,QAAW1G,EAAIyG,QAAQE,SAAY3G,EAAIyG,QAAQG,KAAwM5G,EAAIuB,KAAtMnB,EAAG,MAAM,CAACG,MAAM,CAAC,IAAMP,EAAI4F,eAAe5F,EAAIiC,KAAKlC,GAAI,IAAI,OAASC,EAAI4F,eAAe5F,EAAIiC,KAAKlC,GAAI,IAAI,QAAQC,EAAI4F,eAAe5F,EAAIiC,KAAKlC,GAAI,KAAK,MAAM,IAAM,GAAG,OAAS,KAAK,MAAQ,UAAmBC,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,QAAQ,CAACvG,EAAIoB,GAAG,SAASpB,EAAIqB,GAAGrB,EAAIiC,KAAKlC,IAAI,UAAUC,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,cAAc,CAACvG,EAAIoB,GAAG,SAASpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAW,gEAAgE,YAAc9B,EAAIyI,QAAgjBrI,EAAG,MAAM,CAACmG,YAAY,oBAAoBC,MAAM,CAC/6C,SAAYxG,EAAIyG,QAAQC,QAAU1G,EAAIyG,QAAQE,QAC9C,mBAAoB3G,EAAImI,YACvB5H,MAAM,CAAC,UAAUP,EAAIiC,KAAKlC,KAAK,CAACK,EAAG,MAAM,CAACmG,YAAY,SAASC,MAAM,CAAC,qBAAsBxG,EAAIyG,QAAQC,QAAU1G,EAAIyG,QAAQE,SAAW3G,EAAIyG,QAAQG,OAAO,CAAG5G,EAAIyG,QAAQC,QAAW1G,EAAIyG,QAAQE,SAAY3G,EAAIyG,QAAQG,KAAwM5G,EAAIuB,KAAtMnB,EAAG,MAAM,CAACG,MAAM,CAAC,IAAMP,EAAI4F,eAAe5F,EAAIiC,KAAKlC,GAAI,IAAI,OAASC,EAAI4F,eAAe5F,EAAIiC,KAAKlC,GAAI,IAAI,QAAQC,EAAI4F,eAAe5F,EAAIiC,KAAKlC,GAAI,KAAK,MAAM,IAAM,GAAG,OAAS,KAAK,MAAQ,UAAmBC,EAAIoB,GAAG,KAAMpB,EAAIiC,KAAKyG,oBAAkC,eAAEtI,EAAG,MAAM,CAACmG,YAAY,eAAe,CAACnG,EAAG,OAAO,CAACmG,YAAY,cAAcC,MAAM,CAAC,qBAAsBxG,EAAIyG,QAAQkC,aAAa5H,GAAG,CAAC,OAAS,SAASa,GAAgC,OAAxBA,EAAOmG,iBAAwB/H,EAAI4I,kBAAkBX,MAAM,KAAMC,cAAc,CAAC9H,EAAG,QAAQ,CAACuB,IAAI,cAAcpB,MAAM,CAAC,GAAK,cAAcP,EAAIiC,KAAKlC,GAAGC,EAAI6I,KAAK,SAAW7I,EAAIyG,QAAQkC,aAAa3I,EAAIyG,QAAQoB,IAAI,eAAiB,MAAM,aAAe,MAAM,YAAc,MAAM,WAAa,QAAQ,KAAO,QAAQP,SAAS,CAAC,MAAQtH,EAAIiC,KAAK+E,eAAehH,EAAIoB,GAAG,KAAKhB,EAAG,QAAQ,CAACmG,YAAY,eAAehG,MAAM,CAAC,KAAO,SAAS,MAAQ,UAAUH,EAAG,MAAM,CAACmG,YAAY,QAAQ,CAACvG,EAAIoB,GAAG,SAASpB,EAAIqB,GAAGrB,EAAIiC,KAAKlC,IAAI,UAAUK,EAAG,MAAM,CAACmG,YAAY,wBAAwB,CAACnG,EAAG,MAAM,CAACyG,WAAW,CAAC,CAACpG,KAAK,UAAUqG,QAAQ,YAAYC,MAAO/G,EAAIiC,KAAK+E,YAAYC,OAAS,GAAKjH,EAAIiC,KAAK+E,YAAc,GAAIE,WAAW,yDAAyDX,YAAY,YAAY,CAACvG,EAAIoB,GAAG,aAAapB,EAAIqB,GAAGrB,EAAIiC,KAAK+E,aAAa,kBAAkBhH,EAAIoB,GAAG,KAAMpB,EAAIyB,SAASqH,mBAAqB9I,EAAIiC,KAAKyG,oBAAoBK,YAAa3I,EAAG,OAAO,CAACmG,YAAY,WAAWC,MAAM,CAAC,qBAAsBxG,EAAIyG,QAAQuC,UAAUjI,GAAG,CAAC,OAAS,SAASa,GAAgC,OAAxBA,EAAOmG,iBAAwB/H,EAAIiJ,eAAehB,MAAM,KAAMC,cAAc,CAAC9H,EAAG,QAAQ,CAACuB,IAAI,WAAWpB,MAAM,CAAC,GAAK,WAAWP,EAAIiC,KAAKlC,GAAGC,EAAI6I,KAAK,SAAW7I,EAAIyG,QAAQuC,UAAYhJ,EAAIyG,QAAQoB,IAAI,UAAY7H,EAAI4E,kBAAkB,YAAc5E,EAAI8B,EAAE,WAAY,oBAAoB,eAAiB,MAAM,aAAe,eAAe,YAAc,MAAM,SAAW,GAAG,WAAa,QAAQ,KAAO,WAAW,MAAQ,MAAM9B,EAAIoB,GAAG,KAAKhB,EAAG,QAAQ,CAACmG,YAAY,eAAehG,MAAM,CAAC,KAAO,SAAS,MAAQ,QAAQH,EAAG,OAAOJ,EAAIoB,GAAG,KAAKhB,EAAG,OAAO,CAACmG,YAAY,cAAcC,MAAM,CAAC,qBAAsBxG,EAAIyG,QAAQyC,aAAanI,GAAG,CAAC,OAAS,SAASa,GAAgC,OAAxBA,EAAOmG,iBAAwB/H,EAAImJ,YAAYlB,MAAM,KAAMC,cAAc,CAAC9H,EAAG,QAAQ,CAACuB,IAAI,cAAcpB,MAAM,CAAC,GAAK,cAAcP,EAAIiC,KAAKlC,GAAGC,EAAI6I,KAAK,SAAW7I,EAAIyG,QAAQyC,aAAalJ,EAAIyG,QAAQoB,IAAI,YAAc7H,EAAI8B,EAAE,WAAY,yBAAyB,eAAiB,MAAM,aAAe,eAAe,YAAc,MAAM,WAAa,QAAQ,KAAO,SAASwF,SAAS,CAAC,MAAQtH,EAAIiC,KAAKkF,SAASnH,EAAIoB,GAAG,KAAKhB,EAAG,QAAQ,CAACmG,YAAY,eAAehG,MAAM,CAAC,KAAO,SAAS,MAAQ,QAAQP,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,SAASC,MAAM,CAAC,qBAAsBxG,EAAIyG,QAAQnE,SAAS,CAAClC,EAAG,cAAc,CAACmG,YAAY,kBAAkBhG,MAAM,CAAC,mBAAkB,EAAM,SAAWP,EAAIyG,QAAQnE,QAAQtC,EAAIyG,QAAQoB,IAAI,MAAQ,EAAE,UAAW,EAAK,QAAU7H,EAAIoD,gBAAgB,YAAcpD,EAAI8B,EAAE,WAAY,qBAAqB,YAAY,GAAG,SAAW9B,EAAIyB,SAASC,QAAQ,MAAQ1B,EAAI8C,WAAW,MAAQ,OAAO,kBAAkB,SAAS,WAAW,MAAM/B,GAAG,CAAC,OAASf,EAAIoJ,gBAAgB,OAASpJ,EAAIqJ,aAAa,IAAMrJ,EAAIsJ,cAAc,CAAClJ,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,YAAYgJ,KAAK,YAAY,CAACvJ,EAAIoB,GAAGpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,qBAAqB,GAAG9B,EAAIoB,GAAG,KAAMpB,EAAIwC,gBAAgByE,OAAO,GAAKjH,EAAIyB,SAASC,QAAStB,EAAG,MAAM,CAACmG,YAAY,YAAYC,MAAM,CAAC,qBAAsBxG,EAAIyG,QAAQ+C,YAAY,CAACpJ,EAAG,cAAc,CAACmG,YAAY,kBAAkBhG,MAAM,CAAC,mBAAkB,EAAM,SAAWP,EAAIyG,QAAQ+C,WAAWxJ,EAAIyG,QAAQoB,IAAI,MAAQ,EAAE,UAAW,EAAK,QAAU7H,EAAIwC,gBAAgB,YAAcxC,EAAI8B,EAAE,WAAY,yBAAyB,YAAY,GAAG,MAAQ9B,EAAIkD,oBAAoB,MAAQ,OAAO,WAAW,MAAMnC,GAAG,CAAC,OAASf,EAAIyJ,mBAAmB,OAASzJ,EAAI0J,kBAAkB,CAACtJ,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,YAAYgJ,KAAK,YAAY,CAACvJ,EAAIoB,GAAGpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,qBAAqB,GAAG9B,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACyG,WAAW,CAAC,CAACpG,KAAK,UAAUqG,QAAQ,iBAAiBC,MAAO/G,EAAa,UAAEkH,WAAW,YAAYS,UAAU,CAAC,MAAO,KAAQpB,YAAY,QAAQC,MAAM,CAAC,qBAAsBxG,EAAIyG,QAAQ7C,QAAQ,CAACxD,EAAG,cAAc,CAACmG,YAAY,kBAAkBhG,MAAM,CAAC,eAAc,EAAM,SAAWP,EAAIyG,QAAQ7C,OAAO5D,EAAIyG,QAAQoB,IAAI,QAAU7H,EAAIyC,aAAa,YAAczC,EAAI8B,EAAE,WAAY,qBAAqB,UAAW,EAAK,MAAQ9B,EAAIwE,UAAU,MAAQ,QAAQ,kBAAkB,SAAS,WAAW,MAAMzD,GAAG,CAAC,MAAQf,EAAI2J,aAAa,IAAM3J,EAAI4J,kBAAkB,GAAG5J,EAAIoB,GAAG,KAAMpB,EAAI0C,WAAwB,cAAEtC,EAAG,MAAM,CAACmG,YAAY,YAAYC,MAAM,CAAC,qBAAsBxG,EAAIyG,QAAQ9D,YAAY,CAACvC,EAAG,cAAc,CAACmG,YAAY,kBAAkBhG,MAAM,CAAC,eAAc,EAAM,SAAWP,EAAIyG,QAAQ9D,WAAW3C,EAAIyG,QAAQoB,IAAI,QAAU7H,EAAI2C,UAAU,YAAc3C,EAAI8B,EAAE,WAAY,mBAAmB,MAAQ9B,EAAIgF,aAAa,cAAc,QAAQ,eAAe,YAAY,MAAQ,OAAO,WAAW,QAAQjE,GAAG,CAAC,MAAQf,EAAI6J,oBAAoB,GAAG7J,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAMpB,EAAI0C,WAAW8E,iBAAmBxH,EAAI0C,WAAW6E,gBAAiBnH,EAAG,MAAM,CAACmG,YAAY,oBAAoBvG,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAMpB,EAAI0C,WAAwB,cAAEtC,EAAG,OAAOJ,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,eAAe,CAAGvG,EAAIyG,QAAQoB,IAAorB7H,EAAIuB,KAAnrBnB,EAAG,MAAM,CAACmG,YAAY,qBAAqB,CAACnG,EAAG,UAAU,CAACA,EAAG,eAAe,CAACG,MAAM,CAAC,KAAO,kBAAkBQ,GAAG,CAAC,MAAQ,SAASa,GAAQ5B,EAAIyI,SAAU,KAAS,CAACzI,EAAIoB,GAAG,eAAepB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,SAAS,iBAAiB,GAAG9B,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACyG,WAAW,CAAC,CAACpG,KAAK,gBAAgBqG,QAAQ,kBAAkBC,MAAO/G,EAAY,SAAEkH,WAAW,aAAaX,YAAY,0BAA0B,CAACnG,EAAG,SAAS,CAACmG,YAAY,YAAYxF,GAAG,CAAC,MAAQ,SAASa,GAAgC,OAAxBA,EAAOmG,iBAAwB/H,EAAIgI,WAAWC,MAAM,KAAMC,eAAelI,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,cAAcC,MAAM,CAAE,KAAQxG,EAAImI,aAAc,CAAC/H,EAAG,cAAc,CAACG,MAAM,CAAC,KAAOP,EAAIoI,gBAAgB,MAAM,GAAYpI,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,WAAW8B,MAAM,CAAEC,QAAiC,KAAxBtI,EAAIuI,gBAAyB,EAAI,IAAK,CAACnI,EAAG,MAAM,CAACmG,YAAY,mBAAmBvG,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAIuI,iBAAiB,gBAHv5KnI,EAAG,gBAAgB,CAACoG,MAAM,CAAC,mBAAoBxG,EAAImI,YAAY5H,MAAM,CAAC,QAAUP,EAAIyI,QAAQ,mBAAmBzI,EAAIuI,gBAAgB,OAASvI,EAAIsC,OAAO,UAAYtC,EAAI2C,UAAU,QAAU3C,EAAIyG,QAAQ,cAAczG,EAAImI,WAAW,SAAWnI,EAAIyB,SAAS,cAAczB,EAAI0C,WAAW,oBAAoB1C,EAAIwC,gBAAgB,eAAexC,EAAIoI,YAAY,KAAOpI,EAAIiC,MAAMlB,GAAG,CAAC,iBAAiB,SAASa,GAAQ5B,EAAIyI,QAAQ7G,GAAQ,oBAAoB,SAASA,GAAQ5B,EAAImI,WAAWvG,GAAQ,qBAAqB,SAASA,GAAQ5B,EAAImI,WAAWvG,QAIh2C,IDQpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB,QE+NhC,IACA,UACA,iCAEA,IACA,aACA,qCAEA,IACA,MACA,eACA,YACA,eACA,UACA,mBACA,SACA,UACA,UACA,wCCpQqL,GDwQrL,CACA,gBACA,YACA,cACA,WACA,gBACA,qBAEA,OACA,OACA,WACA,8BAEA,YACA,YACA,aAEA,eACA,YACA,cAEA,iBACA,WACA,+BAGA,KA1BA,WA2BA,OACA,kBACA,gBACA,SACA,OACA,WAEA,YACA,eACA,+BAGA,UACA,SADA,WAEA,0CAEA,qBAJA,WAKA,+CAEA,cAPA,WAQA,sCACA,wDAEA,sBAIA,yDAEA,OAjBA,WAmBA,qCACA,+CACA,4DAEA,aAvBA,WAyBA,oCAKA,OAFA,uBACA,0BACA,MAGA,gBAjCA,WAmCA,8CAEA,aArCA,WAuCA,uEACA,KACA,YACA,IAMA,OAJA,mCACA,+BAEA,6BACA,GAEA,kBAlDA,WAmDA,uDAEA,YArDA,WAsDA,2CAEA,WAxDA,WAyDA,0CAEA,WA3DA,WA4DA,0BAIA,UAhEA,WAiEA,OACA,CACA,uCACA,mDAEA,CACA,sCACA,qDAKA,OAEA,cAFA,SAEA,KAEA,0BACA,iCACA,gDACA,gCAKA,WAZA,SAYA,KAEA,aACA,gDAIA,cACA,mDAKA,QA7IA,WA8IA,iCACA,8GAMA,kBAKA,+DACA,kEAKA,2BAEA,cAlKA,YAmKA,iEACA,qEAGA,SACA,SADA,SACA,GACA,mCASA,cAXA,SAWA,GAEA,kCACA,uBAEA,qDACA,kCACA,qBAGA,wCACA,uBAGA,gBAzBA,SAyBA,cACA,iCACA,wBACA,sBACA,4DACA,0BAEA,kBACA,KACA,WAEA,gBACA,iBAMA,OA3CA,YA2CA,cACA,mBACA,iCACA,iDAEA,YAhDA,WAiDA,yBAGA,UApDA,WAsDA,kCAOA,+BACA,0EAOA,gDAEA,qBAEA,WAzEA,WAyEA,WACA,oBACA,gCACA,uBACA,+BACA,qCACA,+BACA,2DACA,sEACA,4BACA,sCAEA,iBACA,cACA,4BACA,kBAEA,mBAEA,GADA,iBACA,4EACA,0CACA,QAEA,4BACA,SAEA,qCAKA,uBAxGA,SAwGA,GACA,kBAEA,uDACA,KAEA,YADA,yBAKA,wBASA,YA3HA,SA2HA,cAUA,OATA,uBACA,mCACA,kBACA,qEACA,uBAEA,kBACA,uBAEA,mDASA,mBA9IA,WA+IA,oCACA,iCACA,0EAEA,kCACA,kDAGA,WAvJA,WAyJA,kDE7jBI,GAAU,GAEd,GAAQsE,kBAAoB,KAC5B,GAAQC,cAAgB,KAElB,GAAQC,OAAS,UAAc,KAAM,QAE3C,GAAQC,OAAS,KACjB,GAAQC,mBAAqB,KAEhB,KAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICbI,IAAY,OACd,ICTW,WAAa,IAAItG,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACmG,YAAY,iBAAiBhG,MAAM,CAAC,GAAK,eAAeQ,GAAG,CAAC,UAAU,SAASa,GAAQ,OAAO5B,EAAI8J,SAAS7B,MAAM,KAAMC,cAAc,CAAElI,EAAI0C,WAA0B,gBAAEtC,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,SAASQ,GAAG,CAAC,MAAQf,EAAI+J,aAAa,CAAC3J,EAAG,OAAO,CAACmG,YAAY,iBAAiBhG,MAAM,CAAC,GAAK,WAAW,SAAWP,EAAIyG,QAAQoB,KAAK9G,GAAG,CAAC,OAAS,SAASa,GAAgC,OAAxBA,EAAOmG,iBAAwB/H,EAAIgK,WAAW/B,MAAM,KAAMC,cAAc,CAAC9H,EAAG,KAAK,CAACJ,EAAIoB,GAAGpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAW,gBAAgB9B,EAAIoB,GAAG,KAAKhB,EAAG,QAAQ,CAACyG,WAAW,CAAC,CAACpG,KAAK,QAAQqG,QAAQ,UAAUC,MAAO/G,EAAIiK,QAAU,GAAE/C,WAAW,eAAevF,IAAI,cAAc4E,YAAY,cAAchG,MAAM,CAAC,GAAK,cAAc,SAAWP,EAAIyB,SAASyI,sBAAsB,YAAclK,EAAIyB,SAASyI,sBACz0BlK,EAAI8B,EAAE,WAAY,yBAClB9B,EAAI8B,EAAE,WAAY,YAAY,eAAiB,OAAO,aAAe,MAAM,YAAc,MAAM,KAAO,WAAW,QAAU,yBAAyB,SAAW,GAAG,KAAO,QAAQwF,SAAS,CAAC,MAAStH,EAAIiK,QAAU,IAAGlJ,GAAG,CAAC,MAAQ,SAASa,GAAWA,EAAOuI,OAAOC,WAAqBpK,EAAIqK,KAAKrK,EAAIiK,QAAS,KAAMrI,EAAOuI,OAAOpD,WAAW/G,EAAIoB,GAAG,KAAKhB,EAAG,QAAQ,CAACyG,WAAW,CAAC,CAACpG,KAAK,QAAQqG,QAAQ,UAAUC,MAAO/G,EAAIiK,QAAmB,YAAE/C,WAAW,wBAAwBX,YAAY,cAAchG,MAAM,CAAC,GAAK,iBAAiB,YAAcP,EAAI8B,EAAE,WAAY,gBAAgB,eAAiB,OAAO,aAAe,MAAM,YAAc,MAAM,KAAO,cAAc,KAAO,QAAQwF,SAAS,CAAC,MAAStH,EAAIiK,QAAmB,aAAGlJ,GAAG,CAAC,MAAQ,SAASa,GAAWA,EAAOuI,OAAOC,WAAqBpK,EAAIqK,KAAKrK,EAAIiK,QAAS,cAAerI,EAAOuI,OAAOpD,WAAW/G,EAAIoB,GAAG,KAAKhB,EAAG,QAAQ,CAACyG,WAAW,CAAC,CAACpG,KAAK,QAAQqG,QAAQ,UAAUC,MAAO/G,EAAIiK,QAAgB,SAAE/C,WAAW,qBAAqBvF,IAAI,kBAAkB4E,YAAY,cAAchG,MAAM,CAAC,GAAK,kBAAkB,UAAYP,EAAI4E,kBAAkB,YAAc5E,EAAI8B,EAAE,WAAY,YAAY,SAAqC,KAA1B9B,EAAIiK,QAAQf,YAAiB,eAAiB,OAAO,aAAe,eAAe,YAAc,MAAM,KAAO,WAAW,KAAO,YAAY5B,SAAS,CAAC,MAAStH,EAAIiK,QAAgB,UAAGlJ,GAAG,CAAC,MAAQ,SAASa,GAAWA,EAAOuI,OAAOC,WAAqBpK,EAAIqK,KAAKrK,EAAIiK,QAAS,WAAYrI,EAAOuI,OAAOpD,WAAW/G,EAAIoB,GAAG,KAAKhB,EAAG,QAAQ,CAACyG,WAAW,CAAC,CAACpG,KAAK,QAAQqG,QAAQ,UAAUC,MAAO/G,EAAIiK,QAAmB,YAAE/C,WAAW,wBAAwBX,YAAY,cAAchG,MAAM,CAAC,GAAK,WAAW,YAAcP,EAAI8B,EAAE,WAAY,SAAS,SAAkC,KAAvB9B,EAAIiK,QAAQjB,UAAiBhJ,EAAIyB,SAAS6I,oBAAoB,eAAiB,OAAO,aAAe,MAAM,YAAc,MAAM,KAAO,QAAQ,KAAO,SAAShD,SAAS,CAAC,MAAStH,EAAIiK,QAAmB,aAAGlJ,GAAG,CAAC,MAAQ,SAASa,GAAWA,EAAOuI,OAAOC,WAAqBpK,EAAIqK,KAAKrK,EAAIiK,QAAS,cAAerI,EAAOuI,OAAOpD,WAAW/G,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,sBAAsB,CAAGvG,EAAIyB,SAASC,QAAsM1B,EAAIuB,KAAjMnB,EAAG,QAAQ,CAACoG,MAAM,CAAC,qBAAsBxG,EAAIyG,QAAQnE,QAAQ/B,MAAM,CAAC,GAAK,YAAY,UAAYP,EAAIyB,SAASC,QAAQ,SAAW,KAAK,KAAO,QAAQ4F,SAAS,CAAC,MAAQtH,EAAIiK,QAAQ3H,UAAmBtC,EAAIoB,GAAG,KAAKhB,EAAG,cAAc,CAACmG,YAAY,kBAAkBhG,MAAM,CAAC,mBAAkB,EAAM,SAAWP,EAAIyG,QAAQnE,QAAQtC,EAAIyG,QAAQoB,IAAI,UAAW,EAAK,QAAU7H,EAAIuK,aAAa,YAAcvK,EAAI8B,EAAE,WAAY,qBAAqB,YAAY,GAAG,UAAW,EAAK,MAAQ,OAAO,kBAAkB,SAAS,WAAW,MAAMf,GAAG,CAAC,IAAMf,EAAIsJ,aAAakB,MAAM,CAACzD,MAAO/G,EAAIiK,QAAc,OAAEQ,SAAS,SAAUC,GAAM1K,EAAIqK,KAAKrK,EAAIiK,QAAS,SAAUS,IAAMxD,WAAW,mBAAmB,CAAC9G,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,YAAYgJ,KAAK,YAAY,CAACvJ,EAAIoB,GAAGpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,qBAAqB,GAAG9B,EAAIoB,GAAG,KAAMpB,EAAIwC,gBAAgByE,OAAO,GAAKjH,EAAIyB,SAASC,QAAStB,EAAG,MAAM,CAACmG,YAAY,yBAAyB,CAACnG,EAAG,cAAc,CAACmG,YAAY,kBAAkBhG,MAAM,CAAC,mBAAkB,EAAM,UAAW,EAAK,QAAUP,EAAIwC,gBAAgB,YAAcxC,EAAI8B,EAAE,WAAY,yBAAyB,YAAY,GAAG,MAAQ,OAAO,WAAW,MAAM0I,MAAM,CAACzD,MAAO/G,EAAIiK,QAAuB,gBAAEQ,SAAS,SAAUC,GAAM1K,EAAIqK,KAAKrK,EAAIiK,QAAS,kBAAmBS,IAAMxD,WAAW,4BAA4B,CAAC9G,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,YAAYgJ,KAAK,YAAY,CAACvJ,EAAIoB,GAAGpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,qBAAqB,GAAG9B,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,qBAAqB,CAACnG,EAAG,cAAc,CAACmG,YAAY,kBAAkBhG,MAAM,CAAC,eAAc,EAAM,QAAUP,EAAIyC,aAAa,YAAczC,EAAI8B,EAAE,WAAY,qBAAqB,UAAW,EAAK,MAAQ,QAAQ,WAAW,MAAMf,GAAG,CAAC,IAAMf,EAAI4J,eAAeY,MAAM,CAACzD,MAAO/G,EAAIiK,QAAa,MAAEQ,SAAS,SAAUC,GAAM1K,EAAIqK,KAAKrK,EAAIiK,QAAS,QAASS,IAAMxD,WAAW,oBAAoB,GAAGlH,EAAIoB,GAAG,KAAMpB,EAAI0C,WAAwB,cAAEtC,EAAG,MAAM,CAACmG,YAAY,yBAAyB,CAACnG,EAAG,cAAc,CAACmG,YAAY,kBAAkBhG,MAAM,CAAC,eAAc,EAAM,QAAUP,EAAI2C,UAAU,YAAc3C,EAAI8B,EAAE,WAAY,oBAAoB,cAAc,QAAQ,eAAe,YAAY,MAAQ,OAAO,WAAW,QAAQ0I,MAAM,CAACzD,MAAO/G,EAAIiK,QAAgB,SAAEQ,SAAS,SAAUC,GAAM1K,EAAIqK,KAAKrK,EAAIiK,QAAS,WAAYS,IAAMxD,WAAW,uBAAuB,GAAGlH,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAMpB,EAAI0C,WAA0B,gBAAEtC,EAAG,MAAM,CAACmG,YAAY,oBAAoBvG,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAMpB,EAAI0C,WAA0B,gBAAEtC,EAAG,MAAM,CAACmG,YAAY,gBAAgBvG,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAMpB,EAAI0C,WAAwB,cAAEtC,EAAG,MAAM,CAACmG,YAAY,cAAcvG,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,gBAAgB,CAACnG,EAAG,SAAS,CAACmG,YAAY,iBAAiBhG,MAAM,CAAC,GAAK,YAAY,KAAO,SAAS,MAAQ,KAAK,CAACP,EAAIoB,GAAG,eAAepB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,mBAAmB,sBAAsB9B,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,MAAMC,MAAM,CAAC,OAAUxG,EAAI2K,WAAa3K,EAAI0C,WAAWkI,iBAAiBrK,MAAM,CAAC,GAAK,gBAAgB,CAACH,EAAG,MAAM,CAACmG,YAAY,SAAShG,MAAM,CAAC,GAAK,kBAAkBP,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,OAAOhG,MAAM,CAAC,GAAK,eAAe,CAACP,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,aAAa,cAAc1B,EAAG,MAAM,CAACmG,YAAY,YAAY,CAACvG,EAAIoB,GAAG,aAAapB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,iBAAiB,gBAAgB9B,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,WAAWhG,MAAM,CAAC,GAAK,mBAAmB,CAACP,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,aAAa,YAAY9B,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,cAAchG,MAAM,CAAC,GAAK,kBAAkB,CAACP,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,UAAU,YAAY9B,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,SAAShG,MAAM,CAAC,GAAK,iBAAiB,CAACP,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,WAAW,YAAY9B,EAAIoB,GAAG,KAAMpB,EAAIwC,gBAAgByE,OAAO,GAAKjH,EAAIyB,SAASC,QAAStB,EAAG,MAAM,CAACmG,YAAY,YAAYhG,MAAM,CAAC,GAAK,oBAAoB,CAACP,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,oBAAoB,YAAY9B,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,QAAQhG,MAAM,CAAC,GAAK,gBAAgB,CAACP,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,UAAU,YAAY9B,EAAIoB,GAAG,KAAMpB,EAAI0C,WAAwB,cAAEtC,EAAG,MAAM,CAACmG,YAAY,YAAYhG,MAAM,CAAC,GAAK,oBAAoB,CAACP,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,aAAa,YAAY9B,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAMpB,EAAI0C,WAAW6E,iBAAmBvH,EAAI0C,WAAW8E,gBAAiBpH,EAAG,MAAM,CAACmG,YAAY,iCAAiC,CAAEvG,EAAI0C,WAA0B,gBAAEtC,EAAG,MAAM,CAACmG,YAAY,eAAe,CAACvG,EAAIoB,GAAG,aAAapB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,iBAAiB,cAAc9B,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAMpB,EAAI0C,WAA0B,gBAAEtC,EAAG,MAAM,CAACmG,YAAY,4BAA4B,CAACvG,EAAIoB,GAAG,aAAapB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,qBAAqB,cAAc9B,EAAIuB,OAAOvB,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAMpB,EAAI0C,WAAwB,cAAEtC,EAAG,MAAM,CAACmG,YAAY,6BAA6B,CAACvG,EAAIoB,GAAG,WAAWpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,eAAe,YAAY9B,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACmG,YAAY,kBAAkBvG,EAAIoB,GAAG,KAAKpB,EAAI6K,GAAI7K,EAAiB,eAAE,SAASiC,GAAM,OAAO7B,EAAG,WAAW,CAACE,IAAI2B,EAAKlC,GAAGQ,MAAM,CAAC,mBAAmBP,EAAI4C,gBAAgB,OAAS5C,EAAIsC,OAAO,UAAYtC,EAAI2C,UAAU,gBAAgB3C,EAAIyC,aAAa,SAAWzC,EAAIyB,SAAS,cAAczB,EAAI0C,WAAW,oBAAoB1C,EAAIwC,gBAAgB,KAAOP,QAAUjC,EAAIoB,GAAG,KAAKhB,EAAG,kBAAkB,CAACuB,IAAI,kBAAkBZ,GAAG,CAAC,SAAWf,EAAI8K,kBAAkB,CAAC1K,EAAG,MAAM,CAACG,MAAM,CAAC,KAAO,WAAWgJ,KAAK,WAAW,CAACnJ,EAAG,MAAM,CAACmG,YAAY,sCAAsCvG,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACG,MAAM,CAAC,KAAO,WAAWgJ,KAAK,WAAW,CAACnJ,EAAG,MAAM,CAACmG,YAAY,qBAAqBvG,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACG,MAAM,CAAC,KAAO,cAAcgJ,KAAK,cAAc,CAACnJ,EAAG,MAAM,CAACG,MAAM,CAAC,GAAK,iBAAiB,CAACH,EAAG,MAAM,CAACmG,YAAY,uBAAuBvG,EAAIoB,GAAG,KAAKhB,EAAG,KAAK,CAACJ,EAAIoB,GAAGpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,+BAA+B,KACluP,IDSpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB,8uCE8IhC,mBAEA,QACA,aACA,YACA,eACA,kBACA,yBACA,yBACA,sBACA,qBACA,0BACA,YACA,gBACA,gBACA,aAEA,OACA,eACA,YACA,eAGA,KArBA,WAsBA,OAEA,2DAEA,iBACA,mBACA,mBACA,mBACA,YACA,mBACA,mBACA,iBACA,mBACA,oBAIA,UACA,qBADA,WAEA,uEAEA,MAJA,WAKA,qCAEA,OAPA,WAQA,sCAEA,YAVA,WAWA,2CAEA,WAbA,WAcA,0CAIA,eACA,IADA,WACA,8CACA,IAFA,SAEA,GACA,0CAGA,eACA,IADA,WACA,8CACA,IAFA,SAEA,GACA,0CAGA,iBACA,IADA,WACA,gDACA,IAFA,SAEA,GACA,4CAGA,iBACA,IADA,WACA,gDACA,IAFA,SAEA,GACA,4CAIA,UA3CA,WA4CA,yCAEA,SA9CA,WA+CA,0CAIA,aAnDA,WAqDA,4FAKA,OAHA,mCACA,+BAEA,GAGA,cACA,IADA,WAEA,8BACA,mBAEA,6GAEA,iEAEA,qBAEA,IAXA,SAWA,GACA,uBAKA,iBACA,IADA,WAEA,uCAEA,IAJA,SAIA,8JAEA,qBACA,yCACA,YADA,IAEA,sBALA,SAOA,wGAPA,uDASA,mFATA,yBAWA,qBAXA,gFAgBA,UAlGA,WAkGA,WAGA,OAFA,2CAIA,+DACA,iDAGA,eA3GA,WA4GA,oFAEA,kBA9GA,WA+GA,wFAGA,YAzJA,WA0JA,iCACA,gDACA,qDACA,wDAEA,oDAEA,QAjKA,WAoKA,mBACA,UACA,UACA,wCAKA,SACA,gBADA,WAEA,mCACA,iCACA,+BACA,+BAIA,gBATA,SASA,GAEA,gCAGA,OADA,0DACA,oBAEA,gBAhBA,SAgBA,KAGA,OAFA,qBACA,4BACA,GAQA,gBA3BA,WA2BA,2EACA,qCACA,YACA,oBAEA,oBACA,iBACA,mBACA,kBAEA,qBAUA,cA/CA,SA+CA,GAGA,cADA,4BAEA,6BAGA,0EAYA,eAlEA,SAkEA,OAMA,OALA,2BACA,OACA,OACA,WAEA,sBAQA,YAhFA,SAgFA,iJAEA,cAFA,iEAOA,qBAPA,SAQA,uCARA,cAUA,qBAVA,SAWA,gBACA,aACA,QACA,8CAdA,yDAkBA,qBAlBA,yBAoBA,qBApBA,gFAwBA,iBAxGA,WAwGA,WACA,qCACA,qCACA,2BACA,qDAIA,iBAhHA,WAiHA,qCACA,qCASA,gBA3HA,SA2HA,GACA,SACA,kBACA,IAGA,UACA,eACA,wBAGA,2BACA,gCAGA,MCzdkL,kBCW9K,GAAU,GAEd,GAAQoE,kBAAoB,KAC5B,GAAQC,cAAgB,KAElB,GAAQC,OAAS,UAAc,KAAM,QAE3C,GAAQC,OAAS,KACjB,GAAQC,mBAAqB,KAEhB,KAAI,KAAS,IAKJ,MAAW,aAAiB,YALlD,ICbI,IAAY,OACd,IxBTW,WAAa,IAAItG,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACG,MAAM,CAAC,WAAW,WAAW,mBAAmB,CAAE,eAAgBP,EAAI+K,mBAAoB,CAAC3K,EAAG,gBAAgB,CAACa,YAAYjB,EAAIkB,GAAG,CAAC,CAACZ,IAAI,OAAOa,GAAG,WAAW,MAAO,CAACf,EAAG,oBAAoB,CAACuB,IAAI,WAAWpB,MAAM,CAAC,GAAK,WAAW,mBAAmBP,EAAI8B,EAAE,WAAY,oBAAoB,UAAW,EAAK,QAAU9B,EAAI+K,gBAAgB,MAAQ/K,EAAI8B,EAAE,WAAY,aAAa,KAAO,YAAYf,GAAG,CAAC,MAAQf,EAAIgL,iBAAiB,eAAehL,EAAIsJ,eAAetJ,EAAIoB,GAAG,KAAKhB,EAAG,oBAAoB,CAACG,MAAM,CAAC,GAAK,WAAW,OAAQ,EAAK,MAAQP,EAAI8B,EAAE,WAAY,gBAAgB,GAAK,CAAErB,KAAM,SAAU,KAAO,uBAAuB,CAAET,EAAIiL,UAAY,EAAG7K,EAAG,uBAAuB,CAACG,MAAM,CAAC,KAAO,WAAWgJ,KAAK,WAAW,CAACvJ,EAAIoB,GAAG,eAAepB,EAAIqB,GAAGrB,EAAIiL,WAAW,gBAAgBjL,EAAIuB,MAAM,GAAGvB,EAAIoB,GAAG,KAAMpB,EAAIyB,SAAgB,QAAErB,EAAG,oBAAoB,CAACG,MAAM,CAAC,GAAK,QAAQ,OAAQ,EAAK,MAAQP,EAAI8B,EAAE,WAAY,UAAU,GAAK,CAAErB,KAAM,QAASC,OAAQ,CAAEC,cAAe,UAAY,KAAO,oBAAoB,CAAEX,EAAIkL,eAAoB,MAAE9K,EAAG,uBAAuB,CAACG,MAAM,CAAC,KAAO,WAAWgJ,KAAK,WAAW,CAACvJ,EAAIoB,GAAG,eAAepB,EAAIqB,GAAGrB,EAAIkL,eAAe5J,OAAO,gBAAgBtB,EAAIuB,MAAM,GAAGvB,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAMpB,EAAImL,kBAAkBC,UAAY,IAA0C,IAArCpL,EAAImL,kBAAkBC,UAAkBhL,EAAG,oBAAoB,CAACG,MAAM,CAAC,GAAK,WAAW,OAAQ,EAAK,MAAQP,EAAI8B,EAAE,WAAY,kBAAkB,GAAK,CAAErB,KAAM,QAASC,OAAQ,CAAEC,cAAe,aAAe,KAAO,wBAAwB,CAAEX,EAAImL,kBAAkBC,UAAY,EAAGhL,EAAG,uBAAuB,CAACG,MAAM,CAAC,KAAO,WAAWgJ,KAAK,WAAW,CAACvJ,EAAIoB,GAAG,eAAepB,EAAIqB,GAAGrB,EAAImL,kBAAkBC,WAAW,gBAAgBpL,EAAIuB,MAAM,GAAGvB,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAMpB,EAAIqL,UAAUpE,OAAS,EAAG7G,EAAG,uBAAuB,CAACG,MAAM,CAAC,MAAQP,EAAI8B,EAAE,WAAY,aAAa9B,EAAIuB,KAAKvB,EAAIoB,GAAG,KAAKpB,EAAI6K,GAAI7K,EAAa,WAAE,SAASgD,GAAO,OAAO5C,EAAG,gBAAgB,CAACE,IAAI0C,EAAMjD,GAAGQ,MAAM,CAAC,GAAKyC,EAAMjD,GAAG,MAAQiD,EAAMxC,MAAM,MAAQwC,EAAM1B,cAAaE,OAAM,GAAM,CAAClB,IAAI,SAASa,GAAG,WAAW,MAAO,CAACf,EAAG,wBAAwB,CAACA,EAAG,MAAM,CAACA,EAAG,IAAI,CAACJ,EAAIoB,GAAGpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,sBAAsB9B,EAAIoB,GAAG,KAAKhB,EAAG,cAAc,CAACG,MAAM,CAAC,MAAQP,EAAIsL,aAAa,QAAUtL,EAAIyC,aAAa,kBAAkB,SAAS,YAAczC,EAAI8B,EAAE,WAAY,wBAAwB,MAAQ,QAAQ,WAAW,KAAK,eAAc,EAAM,UAAW,GAAMf,GAAG,CAAC,IAAMf,EAAI4J,cAAc,MAAQ5J,EAAIuL,oBAAoB,GAAGvL,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACyG,WAAW,CAAC,CAACpG,KAAK,QAAQqG,QAAQ,UAAUC,MAAO/G,EAAiB,cAAEkH,WAAW,kBAAkBX,YAAY,WAAWhG,MAAM,CAAC,GAAK,gBAAgB,KAAO,YAAY+G,SAAS,CAAC,QAAU/E,MAAMiJ,QAAQxL,EAAIyL,eAAezL,EAAI0L,GAAG1L,EAAIyL,cAAc,OAAO,EAAGzL,EAAiB,eAAGe,GAAG,CAAC,OAAS,SAASa,GAAQ,IAAI+J,EAAI3L,EAAIyL,cAAcG,EAAKhK,EAAOuI,OAAO0B,IAAID,EAAKE,QAAuB,GAAGvJ,MAAMiJ,QAAQG,GAAK,CAAC,IAAaI,EAAI/L,EAAI0L,GAAGC,EAAhB,MAA4BC,EAAKE,QAASC,EAAI,IAAI/L,EAAIyL,cAAcE,EAAIzG,OAAO,CAA/E,QAA4F6G,GAAK,IAAI/L,EAAIyL,cAAcE,EAAIK,MAAM,EAAED,GAAK7G,OAAOyG,EAAIK,MAAMD,EAAI,UAAW/L,EAAIyL,cAAcI,MAAS7L,EAAIoB,GAAG,KAAKhB,EAAG,QAAQ,CAACG,MAAM,CAAC,IAAM,kBAAkB,CAACP,EAAIoB,GAAGpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,wBAAwB9B,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACyG,WAAW,CAAC,CAACpG,KAAK,QAAQqG,QAAQ,UAAUC,MAAO/G,EAAiB,cAAEkH,WAAW,kBAAkBX,YAAY,WAAWhG,MAAM,CAAC,GAAK,gBAAgB,KAAO,YAAY+G,SAAS,CAAC,QAAU/E,MAAMiJ,QAAQxL,EAAIiM,eAAejM,EAAI0L,GAAG1L,EAAIiM,cAAc,OAAO,EAAGjM,EAAiB,eAAGe,GAAG,CAAC,OAAS,SAASa,GAAQ,IAAI+J,EAAI3L,EAAIiM,cAAcL,EAAKhK,EAAOuI,OAAO0B,IAAID,EAAKE,QAAuB,GAAGvJ,MAAMiJ,QAAQG,GAAK,CAAC,IAAaI,EAAI/L,EAAI0L,GAAGC,EAAhB,MAA4BC,EAAKE,QAASC,EAAI,IAAI/L,EAAIiM,cAAcN,EAAIzG,OAAO,CAA/E,QAA4F6G,GAAK,IAAI/L,EAAIiM,cAAcN,EAAIK,MAAM,EAAED,GAAK7G,OAAOyG,EAAIK,MAAMD,EAAI,UAAW/L,EAAIiM,cAAcJ,MAAS7L,EAAIoB,GAAG,KAAKhB,EAAG,QAAQ,CAACG,MAAM,CAAC,IAAM,kBAAkB,CAACP,EAAIoB,GAAGpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,yBAAyB9B,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACyG,WAAW,CAAC,CAACpG,KAAK,QAAQqG,QAAQ,UAAUC,MAAO/G,EAAmB,gBAAEkH,WAAW,oBAAoBX,YAAY,WAAWhG,MAAM,CAAC,GAAK,kBAAkB,KAAO,YAAY+G,SAAS,CAAC,QAAU/E,MAAMiJ,QAAQxL,EAAIuH,iBAAiBvH,EAAI0L,GAAG1L,EAAIuH,gBAAgB,OAAO,EAAGvH,EAAmB,iBAAGe,GAAG,CAAC,OAAS,SAASa,GAAQ,IAAI+J,EAAI3L,EAAIuH,gBAAgBqE,EAAKhK,EAAOuI,OAAO0B,IAAID,EAAKE,QAAuB,GAAGvJ,MAAMiJ,QAAQG,GAAK,CAAC,IAAaI,EAAI/L,EAAI0L,GAAGC,EAAhB,MAA4BC,EAAKE,QAASC,EAAI,IAAI/L,EAAIuH,gBAAgBoE,EAAIzG,OAAO,CAAjF,QAA8F6G,GAAK,IAAI/L,EAAIuH,gBAAgBoE,EAAIK,MAAM,EAAED,GAAK7G,OAAOyG,EAAIK,MAAMD,EAAI,UAAW/L,EAAIuH,gBAAgBsE,MAAS7L,EAAIoB,GAAG,KAAKhB,EAAG,QAAQ,CAACG,MAAM,CAAC,IAAM,oBAAoB,CAACP,EAAIoB,GAAGpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,2BAA2B9B,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACyG,WAAW,CAAC,CAACpG,KAAK,QAAQqG,QAAQ,UAAUC,MAAO/G,EAAmB,gBAAEkH,WAAW,oBAAoBX,YAAY,WAAWhG,MAAM,CAAC,GAAK,kBAAkB,KAAO,YAAY+G,SAAS,CAAC,QAAU/E,MAAMiJ,QAAQxL,EAAIwH,iBAAiBxH,EAAI0L,GAAG1L,EAAIwH,gBAAgB,OAAO,EAAGxH,EAAmB,iBAAGe,GAAG,CAAC,OAAS,SAASa,GAAQ,IAAI+J,EAAI3L,EAAIwH,gBAAgBoE,EAAKhK,EAAOuI,OAAO0B,IAAID,EAAKE,QAAuB,GAAGvJ,MAAMiJ,QAAQG,GAAK,CAAC,IAAaI,EAAI/L,EAAI0L,GAAGC,EAAhB,MAA4BC,EAAKE,QAASC,EAAI,IAAI/L,EAAIwH,gBAAgBmE,EAAIzG,OAAO,CAAjF,QAA8F6G,GAAK,IAAI/L,EAAIwH,gBAAgBmE,EAAIK,MAAM,EAAED,GAAK7G,OAAOyG,EAAIK,MAAMD,EAAI,UAAW/L,EAAIwH,gBAAgBqE,MAAS7L,EAAIoB,GAAG,KAAKhB,EAAG,QAAQ,CAACG,MAAM,CAAC,IAAM,oBAAoB,CAACP,EAAIoB,GAAGpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,2BAA2B9B,EAAIoB,GAAG,KAAKhB,EAAG,MAAM,CAACA,EAAG,QAAQ,CAACyG,WAAW,CAAC,CAACpG,KAAK,QAAQqG,QAAQ,UAAUC,MAAO/G,EAAmB,gBAAEkH,WAAW,oBAAoBX,YAAY,WAAWhG,MAAM,CAAC,GAAK,kBAAkB,SAAWP,EAAIkM,gBAAgB,KAAO,YAAY5E,SAAS,CAAC,QAAU/E,MAAMiJ,QAAQxL,EAAImM,iBAAiBnM,EAAI0L,GAAG1L,EAAImM,gBAAgB,OAAO,EAAGnM,EAAmB,iBAAGe,GAAG,CAAC,OAAS,SAASa,GAAQ,IAAI+J,EAAI3L,EAAImM,gBAAgBP,EAAKhK,EAAOuI,OAAO0B,IAAID,EAAKE,QAAuB,GAAGvJ,MAAMiJ,QAAQG,GAAK,CAAC,IAAaI,EAAI/L,EAAI0L,GAAGC,EAAhB,MAA4BC,EAAKE,QAASC,EAAI,IAAI/L,EAAImM,gBAAgBR,EAAIzG,OAAO,CAAjF,QAA8F6G,GAAK,IAAI/L,EAAImM,gBAAgBR,EAAIK,MAAM,EAAED,GAAK7G,OAAOyG,EAAIK,MAAMD,EAAI,UAAW/L,EAAImM,gBAAgBN,MAAS7L,EAAIoB,GAAG,KAAKhB,EAAG,QAAQ,CAACG,MAAM,CAAC,IAAM,oBAAoB,CAACP,EAAIoB,GAAGpB,EAAIqB,GAAGrB,EAAI8B,EAAE,WAAY,oCAAoCN,OAAM,MAAS,CAACpB,EAAG,mBAAmB,CAACG,MAAM,CAAC,YAAY,kBAAkB,KAAOP,EAAI8B,EAAE,WAAW,YAAY,eAAe,YAAYf,GAAG,CAAC,MAAQf,EAAIoM,gBAAgB,MAAQ,CAAC,SAASxK,GAAQ,OAAIA,EAAOM,KAAKmK,QAAQ,QAAQrM,EAAIsM,GAAG1K,EAAO2K,QAAQ,QAAQ,GAAG3K,EAAOtB,IAAI,SAAkB,KAAcN,EAAIoM,gBAAgBnE,MAAM,KAAMC,YAAY,SAAStG,GAAQ,OAAIA,EAAOM,KAAKmK,QAAQ,QAAQrM,EAAIsM,GAAG1K,EAAO2K,QAAQ,QAAQ,GAAG3K,EAAOtB,IAAI,CAAC,IAAI,aAAsB,KAAcN,EAAIoM,gBAAgBnE,MAAM,KAAMC,iBAAiB,GAAGlI,EAAIoB,GAAG,KAAKhB,EAAG,aAAa,CAACA,EAAG,WAAW,CAACG,MAAM,CAAC,MAAQP,EAAIwM,MAAM,cAAcxM,EAAI0C,WAAW,iBAAiB1C,EAAIyM,qBAAqB,mBAAmBzM,EAAI4C,oBAAoB,IAAI,KACp9N,IwBWpB,EACA,KACA,WACA,MAIF,GAAe,GAAiB","sources":["webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=style&index=0&id=4c932ffd&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=style&index=0&lang=scss&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=style&index=0&id=1babbc68&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=ea695fb0&scoped=true&lang=css&","webpack:///nextcloud/apps/settings/src/views/Users.vue?vue&type=template&id=1babbc68&scoped=true&","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?7b19","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=template&id=24cc1e48&","webpack:///nextcloud/apps/settings/src/mixins/UserRowMixin.js","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?6980","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?6d7a","webpack:///nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue?vue&type=template&id=0b39a53a&","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?7d96","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?81d2","webpack:///nextcloud/apps/settings/src/components/UserList/UserRow.vue?vue&type=template&id=4c932ffd&scoped=true&","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?16dc","webpack://nextcloud/./apps/settings/src/components/UserList.vue?02a4","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=template&id=ea695fb0&scoped=true&","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?ba65","webpack://nextcloud/./apps/settings/src/views/Users.vue?cf86"],"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, \".row--menu-opened[data-v-4c932ffd]{z-index:1 !important}.row[data-v-4c932ffd] .multiselect__single{z-index:auto !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList/UserRow.vue\"],\"names\":[],\"mappings\":\"AAyqBA,mCACC,oBAAA,CAED,2CACC,uBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// Force menu to be above other rows\\n.row--menu-opened {\\n\\tz-index: 1 !important;\\n}\\n.row::v-deep .multiselect__single {\\n\\tz-index: auto !important;\\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, \".cellText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-more{background-color:var(--color-main-background);border:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList/UserRowSimple.vue\"],\"names\":[],\"mappings\":\"AA6LC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\t.cellText {\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\twhite-space: nowrap;\\n}\\n\\t.icon-more {\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tborder: 0;\\n\\t}\\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-navigation__list #addgroup[data-v-1babbc68] .app-navigation-entry__utils{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/Users.vue\"],\"names\":[],\"mappings\":\"AAieA,8EACC,YAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// force hiding the editing action for the add group entry\\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\\n\\tdisplay: none;\\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, \"\\n.modal-wrapper[data-v-ea695fb0] {\\n\\tmargin: 2vh 0;\\n\\talign-items: flex-start;\\n}\\n.modal__content[data-v-ea695fb0] {\\n\\tdisplay: flex;\\n\\tpadding: 20px;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n\\ttext-align: center;\\n}\\n.modal__item[data-v-ea695fb0] {\\n\\tmargin-bottom: 16px;\\n\\twidth: 100%;\\n}\\n.modal__item[data-v-ea695fb0]:not(:focus):not(:active) {\\n\\tborder-color: var(--color-border-dark);\\n}\\n.modal__item[data-v-ea695fb0] .multiselect {\\n\\twidth: 100%;\\n}\\n.user-actions[data-v-ea695fb0] {\\n\\tmargin-top: 20px;\\n}\\n.modal__content[data-v-ea695fb0] .multiselect__single {\\n\\ttext-align: left;\\n\\tbox-sizing: border-box;\\n}\\n.modal__content[data-v-ea695fb0] .multiselect__content-wrapper {\\n\\tbox-sizing: border-box;\\n}\\n.row[data-v-ea695fb0] .multiselect__single {\\n\\tz-index: auto !important;\\n}\\n\\n/* fake input for groups validation */\\ninput#newgroups[data-v-ea695fb0] {\\n\\tposition: absolute;\\n\\topacity: 0;\\n\\t/* The \\\"hidden\\\" input is behind the Multiselect, so in general it does\\n\\t * not receives clicks. However, with Firefox, after the validation\\n\\t * fails, it will receive the first click done on it, so its width needs\\n\\t * to be set to 0 to prevent that (\\\"pointer-events: none\\\" does not\\n\\t * prevent it). */\\n\\twidth: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList.vue\"],\"names\":[],\"mappings\":\";AA8kBA;CACA,aAAA;CACA,uBAAA;AACA;AACA;CACA,aAAA;CACA,aAAA;CACA,sBAAA;CACA,mBAAA;CACA,kBAAA;AACA;AACA;CACA,mBAAA;CACA,WAAA;AACA;AACA;CACA,sCAAA;AACA;AACA;CACA,WAAA;AACA;AACA;CACA,gBAAA;AACA;AACA;CACA,gBAAA;CACA,sBAAA;AACA;AACA;CACA,sBAAA;AACA;AACA;CACA,wBAAA;AACA;;AAEA,qCAAA;AACA;CACA,kBAAA;CACA,UAAA;CACA;;;;kBAIA;CACA,QAAA;AACA\",\"sourcesContent\":[\"<!--\\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<div id=\\\"app-content\\\" class=\\\"user-list-grid\\\" @scroll.passive=\\\"onScroll\\\">\\n\\t\\t<Modal v-if=\\\"showConfig.showNewUserForm\\\" size=\\\"small\\\" @close=\\\"closeModal\\\">\\n\\t\\t\\t<form id=\\\"new-user\\\"\\n\\t\\t\\t\\t:disabled=\\\"loading.all\\\"\\n\\t\\t\\t\\tclass=\\\"modal__content\\\"\\n\\t\\t\\t\\t@submit.prevent=\\\"createUser\\\">\\n\\t\\t\\t\\t<h2>{{ t('settings','New user') }}</h2>\\n\\t\\t\\t\\t<input id=\\\"newusername\\\"\\n\\t\\t\\t\\t\\tref=\\\"newusername\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.id\\\"\\n\\t\\t\\t\\t\\t:disabled=\\\"settings.newUserGenerateUserID\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"settings.newUserGenerateUserID\\n\\t\\t\\t\\t\\t\\t? t('settings', 'Will be autogenerated')\\n\\t\\t\\t\\t\\t\\t: t('settings', 'Username')\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"username\\\"\\n\\t\\t\\t\\t\\tpattern=\\\"[a-zA-Z0-9 _\\\\.@\\\\-']+\\\"\\n\\t\\t\\t\\t\\trequired\\n\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t<input id=\\\"newdisplayname\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.displayName\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Display name')\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"displayname\\\"\\n\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t<input id=\\\"newuserpassword\\\"\\n\\t\\t\\t\\t\\tref=\\\"newuserpassword\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.password\\\"\\n\\t\\t\\t\\t\\t:minlength=\\\"minPasswordLength\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Password')\\\"\\n\\t\\t\\t\\t\\t:required=\\\"newUser.mailAddress===''\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"new-password\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"password\\\"\\n\\t\\t\\t\\t\\ttype=\\\"password\\\">\\n\\t\\t\\t\\t<input id=\\\"newemail\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.mailAddress\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Email')\\\"\\n\\t\\t\\t\\t\\t:required=\\\"newUser.password==='' || settings.newUserRequireEmail\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"email\\\"\\n\\t\\t\\t\\t\\ttype=\\\"email\\\">\\n\\t\\t\\t\\t<div class=\\\"groups modal__item\\\">\\n\\t\\t\\t\\t\\t<!-- hidden input trick for vanilla html5 form validation -->\\n\\t\\t\\t\\t\\t<input v-if=\\\"!settings.isAdmin\\\"\\n\\t\\t\\t\\t\\t\\tid=\\\"newgroups\\\"\\n\\t\\t\\t\\t\\t\\t:class=\\\"{'icon-loading-small': loading.groups}\\\"\\n\\t\\t\\t\\t\\t\\t:required=\\\"!settings.isAdmin\\\"\\n\\t\\t\\t\\t\\t\\t:value=\\\"newUser.groups\\\"\\n\\t\\t\\t\\t\\t\\ttabindex=\\\"-1\\\"\\n\\t\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.groups\\\"\\n\\t\\t\\t\\t\\t\\t:close-on-select=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:disabled=\\\"loading.groups||loading.all\\\"\\n\\t\\t\\t\\t\\t\\t:multiple=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"canAddGroups\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Add user to group')\\\"\\n\\t\\t\\t\\t\\t\\t:tag-width=\\\"60\\\"\\n\\t\\t\\t\\t\\t\\t:taggable=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttag-placeholder=\\\"create\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t\\t\\t\\t@tag=\\\"createGroup\\\">\\n\\t\\t\\t\\t\\t\\t<!-- If user is not admin, he is a subadmin.\\n\\t\\t\\t\\t\\t\\t\\tSubadmins can't create users outside their groups\\n\\t\\t\\t\\t\\t\\t\\tTherefore, empty select is forbidden -->\\n\\t\\t\\t\\t\\t\\t<span slot=\\\"noResult\\\">{{ t('settings', 'No results') }}</span>\\n\\t\\t\\t\\t\\t</Multiselect>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"subAdminsGroups.length>0 && settings.isAdmin\\\"\\n\\t\\t\\t\\t\\tclass=\\\"subadmins modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.subAdminsGroups\\\"\\n\\t\\t\\t\\t\\t\\t:close-on-select=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:multiple=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"subAdminsGroups\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Set user as admin for')\\\"\\n\\t\\t\\t\\t\\t\\t:tag-width=\\\"60\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\">\\n\\t\\t\\t\\t\\t\\t<span slot=\\\"noResult\\\">{{ t('settings', 'No results') }}</span>\\n\\t\\t\\t\\t\\t</Multiselect>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"quota modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.quota\\\"\\n\\t\\t\\t\\t\\t\\t:allow-empty=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"quotaOptions\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Select user quota')\\\"\\n\\t\\t\\t\\t\\t\\t:taggable=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t\\t\\t\\t@tag=\\\"validateQuota\\\" />\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showLanguages\\\" class=\\\"languages modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.language\\\"\\n\\t\\t\\t\\t\\t\\t:allow-empty=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"languages\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Default language')\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tgroup-label=\\\"label\\\"\\n\\t\\t\\t\\t\\t\\tgroup-values=\\\"languages\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"code\\\" />\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showStoragePath\\\" class=\\\"storageLocation\\\" />\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend\\\" class=\\\"userBackend\\\" />\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showLastLogin\\\" class=\\\"lastLogin\\\" />\\n\\t\\t\\t\\t<div class=\\\"user-actions\\\">\\n\\t\\t\\t\\t\\t<button id=\\\"newsubmit\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"button primary\\\"\\n\\t\\t\\t\\t\\t\\ttype=\\\"submit\\\"\\n\\t\\t\\t\\t\\t\\tvalue=\\\"\\\">\\n\\t\\t\\t\\t\\t\\t{{ t('settings', 'Add a new user') }}\\n\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</form>\\n\\t\\t</Modal>\\n\\t\\t<div id=\\\"grid-header\\\"\\n\\t\\t\\t:class=\\\"{'sticky': scrolled && !showConfig.showNewUserForm}\\\"\\n\\t\\t\\tclass=\\\"row\\\">\\n\\t\\t\\t<div id=\\\"headerAvatar\\\" class=\\\"avatar\\\" />\\n\\t\\t\\t<div id=\\\"headerName\\\" class=\\\"name\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Username') }}\\n\\n\\t\\t\\t\\t<div class=\\\"subtitle\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'Display name') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerPassword\\\" class=\\\"password\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Password') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerAddress\\\" class=\\\"mailAddress\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Email') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerGroups\\\" class=\\\"groups\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Groups') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"subAdminsGroups.length>0 && settings.isAdmin\\\"\\n\\t\\t\\t\\tid=\\\"headerSubAdmins\\\"\\n\\t\\t\\t\\tclass=\\\"subadmins\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Group admin for') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerQuota\\\" class=\\\"quota\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Quota') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"showConfig.showLanguages\\\"\\n\\t\\t\\t\\tid=\\\"headerLanguages\\\"\\n\\t\\t\\t\\tclass=\\\"languages\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Language') }}\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend || showConfig.showStoragePath\\\"\\n\\t\\t\\t\\tclass=\\\"headerUserBackend userBackend\\\">\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend\\\" class=\\\"userBackend\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'User backend') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showStoragePath\\\"\\n\\t\\t\\t\\t\\tclass=\\\"subtitle storageLocation\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'Storage location') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"showConfig.showLastLogin\\\"\\n\\t\\t\\t\\tclass=\\\"headerLastLogin lastLogin\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Last login') }}\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<div class=\\\"userActions\\\" />\\n\\t\\t</div>\\n\\n\\t\\t<user-row v-for=\\\"user in filteredUsers\\\"\\n\\t\\t\\t:key=\\\"user.id\\\"\\n\\t\\t\\t:external-actions=\\\"externalActions\\\"\\n\\t\\t\\t:groups=\\\"groups\\\"\\n\\t\\t\\t:languages=\\\"languages\\\"\\n\\t\\t\\t:quota-options=\\\"quotaOptions\\\"\\n\\t\\t\\t:settings=\\\"settings\\\"\\n\\t\\t\\t:show-config=\\\"showConfig\\\"\\n\\t\\t\\t:sub-admins-groups=\\\"subAdminsGroups\\\"\\n\\t\\t\\t:user=\\\"user\\\" />\\n\\t\\t<InfiniteLoading ref=\\\"infiniteLoading\\\" @infinite=\\\"infiniteHandler\\\">\\n\\t\\t\\t<div slot=\\\"spinner\\\">\\n\\t\\t\\t\\t<div class=\\\"users-icon-loading icon-loading\\\" />\\n\\t\\t\\t</div>\\n\\t\\t\\t<div slot=\\\"no-more\\\">\\n\\t\\t\\t\\t<div class=\\\"users-list-end\\\" />\\n\\t\\t\\t</div>\\n\\t\\t\\t<div slot=\\\"no-results\\\">\\n\\t\\t\\t\\t<div id=\\\"emptycontent\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"icon-contacts-dark\\\" />\\n\\t\\t\\t\\t\\t<h2>{{ t('settings', 'No users in here') }}</h2>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</InfiniteLoading>\\n\\t</div>\\n</template>\\n\\n<script>\\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\\nimport InfiniteLoading from 'vue-infinite-loading'\\nimport Vue from 'vue'\\nimport { Modal } from '@nextcloud/vue'\\n\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\n\\nimport userRow from './UserList/UserRow'\\n\\nconst unlimitedQuota = {\\n\\tid: 'none',\\n\\tlabel: t('settings', 'Unlimited'),\\n}\\nconst defaultQuota = {\\n\\tid: 'default',\\n\\tlabel: t('settings', 'Default quota'),\\n}\\nconst newUser = {\\n\\tid: '',\\n\\tdisplayName: '',\\n\\tpassword: '',\\n\\tmailAddress: '',\\n\\tgroups: [],\\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\\tcomponents: {\\n\\t\\tModal,\\n\\t\\tuserRow,\\n\\t\\tMultiselect,\\n\\t\\tInfiniteLoading,\\n\\t},\\n\\tprops: {\\n\\t\\tusers: {\\n\\t\\t\\ttype: Array,\\n\\t\\t\\tdefault: () => [],\\n\\t\\t},\\n\\t\\tshowConfig: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\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\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tunlimitedQuota,\\n\\t\\t\\tdefaultQuota,\\n\\t\\t\\tloading: {\\n\\t\\t\\t\\tall: false,\\n\\t\\t\\t\\tgroups: false,\\n\\t\\t\\t},\\n\\t\\t\\tscrolled: false,\\n\\t\\t\\tsearchQuery: '',\\n\\t\\t\\tnewUser: Object.assign({}, newUser),\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\tsettings() {\\n\\t\\t\\treturn this.$store.getters.getServerData\\n\\t\\t},\\n\\t\\tselectedGroupDecoded() {\\n\\t\\t\\treturn decodeURIComponent(this.selectedGroup)\\n\\t\\t},\\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\\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\\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\\t\\tsubAdminsGroups() {\\n\\t\\t\\t// data provided php side\\n\\t\\t\\treturn this.$store.getters.getSubadminGroups\\n\\t\\t},\\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(this.unlimitedQuota)\\n\\t\\t\\t}\\n\\t\\t\\tquotaPreset.unshift(this.defaultQuota)\\n\\t\\t\\treturn quotaPreset\\n\\t\\t},\\n\\t\\tminPasswordLength() {\\n\\t\\t\\treturn this.$store.getters.getPasswordPolicyMinLength\\n\\t\\t},\\n\\t\\tusersOffset() {\\n\\t\\t\\treturn this.$store.getters.getUsersOffset\\n\\t\\t},\\n\\t\\tusersLimit() {\\n\\t\\t\\treturn this.$store.getters.getUsersLimit\\n\\t\\t},\\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\\twatch: {\\n\\t\\t// watch url change and group select\\n\\t\\tselectedGroup(val, old) {\\n\\t\\t\\t// if selected is the disabled group but it's empty\\n\\t\\t\\tthis.redirectIfDisabled()\\n\\t\\t\\tthis.$store.commit('resetUsers')\\n\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\tthis.setNewUserDefaultGroup(val)\\n\\t\\t},\\n\\n\\t\\t// make sure the infiniteLoading state is changed if we manually\\n\\t\\t// add/remove data from the store\\n\\t\\tusersCount(val, old) {\\n\\t\\t\\t// deleting the last user, reset the list\\n\\t\\t\\tif (val === 0 && old === 1) {\\n\\t\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\t\\t// adding the first user, warn the infiniteLoader that\\n\\t\\t\\t\\t// the list is not empty anymore (we don't fetch the newly\\n\\t\\t\\t\\t// added user as we already have all the info we need)\\n\\t\\t\\t} else if (val === 1 && old === 0) {\\n\\t\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.loaded()\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\n\\tmounted() {\\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\\tthis.redirectIfDisabled()\\n\\t},\\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\\tonScroll(event) {\\n\\t\\t\\tthis.scrolled = event.target.scrollTo > 0\\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\\tinfiniteHandler($state) {\\n\\t\\t\\tthis.$store.dispatch('getUsers', {\\n\\t\\t\\t\\toffset: this.usersOffset,\\n\\t\\t\\t\\tlimit: this.usersLimit,\\n\\t\\t\\t\\tgroup: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\\n\\t\\t\\t\\tsearch: this.searchQuery,\\n\\t\\t\\t})\\n\\t\\t\\t\\t.then((usersCount) => {\\n\\t\\t\\t\\t\\tif (usersCount > 0) {\\n\\t\\t\\t\\t\\t\\t$state.loaded()\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif (usersCount < this.usersLimit) {\\n\\t\\t\\t\\t\\t\\t$state.complete()\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t})\\n\\t\\t},\\n\\n\\t\\t/* SEARCH */\\n\\t\\tsearch({ query }) {\\n\\t\\t\\tthis.searchQuery = query\\n\\t\\t\\tthis.$store.commit('resetUsers')\\n\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t},\\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\\t\\tcreateUser() {\\n\\t\\t\\tthis.loading.all = true\\n\\t\\t\\tthis.$store.dispatch('addUser', {\\n\\t\\t\\t\\tuserid: this.newUser.id,\\n\\t\\t\\t\\tpassword: this.newUser.password,\\n\\t\\t\\t\\tdisplayName: this.newUser.displayName,\\n\\t\\t\\t\\temail: this.newUser.mailAddress,\\n\\t\\t\\t\\tgroups: this.newUser.groups.map(group => group.id),\\n\\t\\t\\t\\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\\n\\t\\t\\t\\tquota: this.newUser.quota.id,\\n\\t\\t\\t\\tlanguage: this.newUser.language.code,\\n\\t\\t\\t})\\n\\t\\t\\t\\t.then(() => {\\n\\t\\t\\t\\t\\tthis.resetForm()\\n\\t\\t\\t\\t\\tthis.$refs.newusername.focus()\\n\\t\\t\\t\\t\\tthis.closeModal()\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch((error) => {\\n\\t\\t\\t\\t\\tthis.loading.all = false\\n\\t\\t\\t\\t\\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\\n\\t\\t\\t\\t\\t\\tconst statuscode = error.response.data.ocs.meta.statuscode\\n\\t\\t\\t\\t\\t\\tif (statuscode === 102) {\\n\\t\\t\\t\\t\\t\\t\\t// wrong username\\n\\t\\t\\t\\t\\t\\t\\tthis.$refs.newusername.focus()\\n\\t\\t\\t\\t\\t\\t} else if (statuscode === 107) {\\n\\t\\t\\t\\t\\t\\t\\t// wrong password\\n\\t\\t\\t\\t\\t\\t\\tthis.$refs.newuserpassword.focus()\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t})\\n\\t\\t},\\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 * Create a new group\\n\\t\\t *\\n\\t\\t * @param {string} gid Group id\\n\\t\\t * @return {Promise}\\n\\t\\t */\\n\\t\\tcreateGroup(gid) {\\n\\t\\t\\tthis.loading.groups = true\\n\\t\\t\\tthis.$store.dispatch('addGroup', gid)\\n\\t\\t\\t\\t.then((group) => {\\n\\t\\t\\t\\t\\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\\n\\t\\t\\t\\t\\tthis.loading.groups = false\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch(() => {\\n\\t\\t\\t\\t\\tthis.loading.groups = false\\n\\t\\t\\t\\t})\\n\\t\\t\\treturn this.$store.getters.getGroups[this.groups.length]\\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\\tredirectIfDisabled() {\\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\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcloseModal() {\\n\\t\\t\\t// eslint-disable-next-line vue/no-mutating-props\\n\\t\\t\\tthis.showConfig.showNewUserForm = false\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.modal-wrapper {\\n\\t\\tmargin: 2vh 0;\\n\\t\\talign-items: flex-start;\\n\\t}\\n\\t.modal__content {\\n\\t\\tdisplay: flex;\\n\\t\\tpadding: 20px;\\n\\t\\tflex-direction: column;\\n\\t\\talign-items: center;\\n\\t\\ttext-align: center;\\n\\t}\\n\\t.modal__item {\\n\\t\\tmargin-bottom: 16px;\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.modal__item:not(:focus):not(:active) {\\n\\t\\tborder-color: var(--color-border-dark);\\n\\t}\\n\\t.modal__item::v-deep .multiselect {\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.user-actions {\\n\\t\\tmargin-top: 20px;\\n\\t}\\n\\t.modal__content::v-deep .multiselect__single {\\n\\t\\ttext-align: left;\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\t.modal__content::v-deep .multiselect__content-wrapper {\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\t.row::v-deep .multiselect__single {\\n\\t\\tz-index: auto !important;\\n\\t}\\n\\n\\t/* fake input for groups validation */\\n\\tinput#newgroups {\\n\\t\\tposition: absolute;\\n\\t\\topacity: 0;\\n\\t\\t/* The \\\"hidden\\\" input is behind the Multiselect, so in general it does\\n\\t\\t * not receives clicks. However, with Firefox, after the validation\\n\\t\\t * fails, it will receive the first click done on it, so its width needs\\n\\t\\t * to be set to 0 to prevent that (\\\"pointer-events: none\\\" does not\\n\\t\\t * prevent it). */\\n\\t\\twidth: 0;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Content',{attrs:{\"app-name\":\"settings\",\"navigation-class\":{ 'icon-loading': _vm.loadingAddGroup }}},[_c('AppNavigation',{scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c('AppNavigationItem',{ref:\"addGroup\",attrs:{\"id\":\"addgroup\",\"edit-placeholder\":_vm.t('settings', 'Enter group name'),\"editable\":true,\"loading\":_vm.loadingAddGroup,\"title\":_vm.t('settings', 'Add group'),\"icon\":\"icon-add\"},on:{\"click\":_vm.showAddGroupForm,\"update:title\":_vm.createGroup}}),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"everyone\",\"exact\":true,\"title\":_vm.t('settings', 'Active users'),\"to\":{ name: 'users' },\"icon\":\"icon-contacts-dark\"}},[(_vm.userCount > 0)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.userCount)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1),_vm._v(\" \"),(_vm.settings.isAdmin)?_c('AppNavigationItem',{attrs:{\"id\":\"admin\",\"exact\":true,\"title\":_vm.t('settings', 'Admins'),\"to\":{ name: 'group', params: { selectedGroup: 'admin' } },\"icon\":\"icon-user-admin\"}},[(_vm.adminGroupMenu.count)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.adminGroupMenu.count)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.disabledGroupMenu.usercount > 0 || _vm.disabledGroupMenu.usercount === -1)?_c('AppNavigationItem',{attrs:{\"id\":\"disabled\",\"exact\":true,\"title\":_vm.t('settings', 'Disabled users'),\"to\":{ name: 'group', params: { selectedGroup: 'disabled' } },\"icon\":\"icon-disabled-users\"}},[(_vm.disabledGroupMenu.usercount > 0)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.disabledGroupMenu.usercount)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.groupList.length > 0)?_c('AppNavigationCaption',{attrs:{\"title\":_vm.t('settings', 'Groups')}}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.groupList),function(group){return _c('GroupListItem',{key:group.id,attrs:{\"id\":group.id,\"title\":group.title,\"count\":group.count}})})]},proxy:true},{key:\"footer\",fn:function(){return [_c('AppNavigationSettings',[_c('div',[_c('p',[_vm._v(_vm._s(_vm.t('settings', 'Default quota:')))]),_vm._v(\" \"),_c('Multiselect',{attrs:{\"value\":_vm.defaultQuota,\"options\":_vm.quotaOptions,\"tag-placeholder\":\"create\",\"placeholder\":_vm.t('settings', 'Select default quota'),\"label\":\"label\",\"track-by\":\"id\",\"allow-empty\":false,\"taggable\":true},on:{\"tag\":_vm.validateQuota,\"input\":_vm.setDefaultQuota}})],1),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showLanguages),expression:\"showLanguages\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showLanguages\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showLanguages)?_vm._i(_vm.showLanguages,null)>-1:(_vm.showLanguages)},on:{\"change\":function($event){var $$a=_vm.showLanguages,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showLanguages=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showLanguages=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showLanguages=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showLanguages\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show Languages')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showLastLogin),expression:\"showLastLogin\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showLastLogin\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showLastLogin)?_vm._i(_vm.showLastLogin,null)>-1:(_vm.showLastLogin)},on:{\"change\":function($event){var $$a=_vm.showLastLogin,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showLastLogin=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showLastLogin=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showLastLogin=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showLastLogin\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show last login')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showUserBackend),expression:\"showUserBackend\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showUserBackend\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showUserBackend)?_vm._i(_vm.showUserBackend,null)>-1:(_vm.showUserBackend)},on:{\"change\":function($event){var $$a=_vm.showUserBackend,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showUserBackend=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showUserBackend=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showUserBackend=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showUserBackend\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show user backend')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showStoragePath),expression:\"showStoragePath\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showStoragePath\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showStoragePath)?_vm._i(_vm.showStoragePath,null)>-1:(_vm.showStoragePath)},on:{\"change\":function($event){var $$a=_vm.showStoragePath,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showStoragePath=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showStoragePath=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showStoragePath=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showStoragePath\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show storage path')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.sendWelcomeMail),expression:\"sendWelcomeMail\"}],staticClass:\"checkbox\",attrs:{\"id\":\"sendWelcomeMail\",\"disabled\":_vm.loadingSendMail,\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.sendWelcomeMail)?_vm._i(_vm.sendWelcomeMail,null)>-1:(_vm.sendWelcomeMail)},on:{\"change\":function($event){var $$a=_vm.sendWelcomeMail,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.sendWelcomeMail=$$a.concat([$$v]))}else{$$i>-1&&(_vm.sendWelcomeMail=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.sendWelcomeMail=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"sendWelcomeMail\"}},[_vm._v(_vm._s(_vm.t('settings', 'Send email to new user')))])])])]},proxy:true}])},[_c('AppNavigationNew',{attrs:{\"button-id\":\"new-user-button\",\"text\":_vm.t('settings','New user'),\"button-class\":\"icon-add\"},on:{\"click\":_vm.showNewUserMenu,\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.showNewUserMenu.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"])){ return null; }return _vm.showNewUserMenu.apply(null, arguments)}]}})],1),_vm._v(\" \"),_c('AppContent',[_c('UserList',{attrs:{\"users\":_vm.users,\"show-config\":_vm.showConfig,\"selected-group\":_vm.selectedGroupDecoded,\"external-actions\":_vm.externalActions}})],1)],1)}\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<AppNavigationItem :key=\"id\"\n\t\t:exact=\"true\"\n\t\t:title=\"title\"\n\t\t:to=\"{ name: 'group', params: { selectedGroup: encodeURIComponent(id) } }\"\n\t\ticon=\"icon-group\"\n\t\t:loading=\"loadingRenameGroup\"\n\t\t:menu-open=\"openGroupMenu\"\n\t\t@update:menuOpen=\"handleGroupMenuOpen\">\n\t\t<template #counter>\n\t\t\t<CounterBubble v-if=\"count\">\n\t\t\t\t{{ count }}\n\t\t\t</CounterBubble>\n\t\t</template>\n\t\t<template #actions>\n\t\t\t<ActionInput v-if=\"id !== 'admin' && id !== 'disabled' && settings.isAdmin\"\n\t\t\t\tref=\"displayNameInput\"\n\t\t\t\ticon=\"icon-edit\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t:value=\"title\"\n\t\t\t\t@submit=\"renameGroup(id)\">\n\t\t\t\t{{ t('settings', 'Rename group') }}\n\t\t\t</ActionInput>\n\t\t\t<ActionButton v-if=\"id !== 'admin' && id !== 'disabled' && settings.isAdmin\"\n\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t@click=\"removeGroup(id)\">\n\t\t\t\t{{ t('settings', 'Remove group') }}\n\t\t\t</ActionButton>\n\t\t</template>\n\t</AppNavigationItem>\n</template>\n\n<script>\nimport ActionInput from '@nextcloud/vue/dist/Components/ActionInput'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport CounterBubble from '@nextcloud/vue/dist/Components/CounterBubble'\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem'\n\nexport default {\n\tname: 'GroupListItem',\n\tcomponents: {\n\t\tActionInput,\n\t\tActionButton,\n\t\tCounterBubble,\n\t\tAppNavigationItem,\n\t},\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcount: {\n\t\t\ttype: Number,\n\t\t\trequired: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloadingRenameGroup: false,\n\t\t\topenGroupMenu: 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\tremoveGroup(groupid) {\n\t\t\tconst self = this\n\t\t\t// TODO migrate to a vue js confirm dialog component\n\t\t\tOC.dialogs.confirm(\n\t\t\t\tt('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', { group: groupid }),\n\t\t\t\tt('settings', 'Please confirm the group removal '),\n\t\t\t\tfunction(success) {\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\tself.$store.dispatch('removeGroup', groupid)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t},\n\t},\n}\n</script>\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&\"","import { render, staticRenderFns } from \"./GroupListItem.vue?vue&type=template&id=24cc1e48&\"\nimport script from \"./GroupListItem.vue?vue&type=script&lang=js&\"\nexport * from \"./GroupListItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AppNavigationItem',{key:_vm.id,attrs:{\"exact\":true,\"title\":_vm.title,\"to\":{ name: 'group', params: { selectedGroup: encodeURIComponent(_vm.id) } },\"icon\":\"icon-group\",\"loading\":_vm.loadingRenameGroup,\"menu-open\":_vm.openGroupMenu},on:{\"update:menuOpen\":_vm.handleGroupMenuOpen},scopedSlots:_vm._u([{key:\"counter\",fn:function(){return [(_vm.count)?_c('CounterBubble',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.count)+\"\\n\\t\\t\")]):_vm._e()]},proxy:true},{key:\"actions\",fn:function(){return [(_vm.id !== 'admin' && _vm.id !== 'disabled' && _vm.settings.isAdmin)?_c('ActionInput',{ref:\"displayNameInput\",attrs:{\"icon\":\"icon-edit\",\"type\":\"text\",\"value\":_vm.title},on:{\"submit\":function($event){return _vm.renameGroup(_vm.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Rename group'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.id !== 'admin' && _vm.id !== 'disabled' && _vm.settings.isAdmin)?_c('ActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){return _vm.removeGroup(_vm.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Remove group'))+\"\\n\\t\\t\")]):_vm._e()]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Greta Doci <gretadoci@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateUrl } from '@nextcloud/router'\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\tshowConfig: {\n\t\t\ttype: Object,\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\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\tmethods: {\n\t\t/**\n\t\t * Generate avatar url\n\t\t *\n\t\t * @param {string} user The user name\n\t\t * @param {number} size Size integer, default 32\n\t\t * @return {string}\n\t\t */\n\t\tgenerateAvatar(user, size = 32) {\n\t\t\treturn generateUrl(\n\t\t\t\t'/avatar/{user}/{size}?v={version}',\n\t\t\t\t{\n\t\t\t\t\tuser,\n\t\t\t\t\tsize,\n\t\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t\t}\n\t\t\t)\n\t\t},\n\t},\n}\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=script&lang=js&\"","<template>\n\t<div class=\"row\"\n\t\t:class=\"{'disabled': loading.delete || loading.disable}\"\n\t\t:data-id=\"user.id\">\n\t\t<div class=\"avatar\" :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\talt=\"\"\n\t\t\t\twidth=\"32\"\n\t\t\t\theight=\"32\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\">\n\t\t</div>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<div class=\"name\">\n\t\t\t{{ user.id }}\n\t\t\t<div class=\"displayName subtitle\">\n\t\t\t\t<div v-tooltip=\"user.displayname.length > 20 ? user.displayname : ''\" class=\"cellText\">\n\t\t\t\t\t{{ user.displayname }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div />\n\t\t<div class=\"mailAddress\">\n\t\t\t<div v-tooltip=\"user.email !== null && user.email.length > 20 ? user.email : ''\" class=\"cellText\">\n\t\t\t\t{{ user.email }}\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"groups\">\n\t\t\t{{ userGroupsLabels }}\n\t\t</div>\n\t\t<div v-if=\"subAdminsGroups.length > 0 && settings.isAdmin\" class=\"subAdminsGroups\">\n\t\t\t{{ userSubAdminsGroupsLabels }}\n\t\t</div>\n\t\t<div class=\"userQuota\">\n\t\t\t<div class=\"quota\">\n\t\t\t\t{{ userQuota }} ({{ usedSpace }})\n\t\t\t\t<progress class=\"quota-user-progress\"\n\t\t\t\t\t:class=\"{'warn': usedQuota > 80}\"\n\t\t\t\t\t:value=\"usedQuota\"\n\t\t\t\t\tmax=\"100\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLanguages\" class=\"languages\">\n\t\t\t{{ userLanguage.name }}\n\t\t</div>\n\t\t<div v-if=\"showConfig.showUserBackend || showConfig.showStoragePath\" class=\"userBackend\">\n\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\">\n\t\t\t\t{{ user.backend }}\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showStoragePath\" v-tooltip=\"user.storageLocation\" class=\"storageLocation subtitle\">\n\t\t\t\t{{ user.storageLocation }}\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLastLogin\" v-tooltip.auto=\"userLastLoginTooltip\" class=\"lastLogin\">\n\t\t\t{{ userLastLogin }}\n\t\t</div>\n\n\t\t<div class=\"userActions\">\n\t\t\t<div v-if=\"canEdit && !loading.all\" class=\"toggleUserActions\">\n\t\t\t\t<Actions>\n\t\t\t\t\t<ActionButton icon=\"icon-rename\" @click=\"toggleEdit\">\n\t\t\t\t\t\t{{ t('settings', 'Edit User') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</Actions>\n\t\t\t\t<div class=\"userPopoverMenuWrapper\">\n\t\t\t\t\t<button v-click-outside=\"hideMenu\"\n\t\t\t\t\t\tclass=\"icon-more\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Toggle user actions menu')\"\n\t\t\t\t\t\t@click.prevent=\"toggleMenu\" />\n\t\t\t\t\t<div class=\"popovermenu\" :class=\"{ 'open': openedMenu }\" :aria-expanded=\"openedMenu\">\n\t\t\t\t\t\t<PopoverMenu :menu=\"userActions\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"feedback\" :style=\"{opacity: feedbackMessage !== '' ? 1 : 0}\">\n\t\t\t\t<div class=\"icon-checkmark\" />\n\t\t\t\t{{ feedbackMessage }}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport PopoverMenu from '@nextcloud/vue/dist/Components/PopoverMenu'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ClickOutside from 'vue-click-outside'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport UserRowMixin from '../../mixins/UserRowMixin'\nexport default {\n\tname: 'UserRowSimple',\n\tcomponents: {\n\t\tPopoverMenu,\n\t\tActionButton,\n\t\tActions,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tmixins: [UserRowMixin],\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tuserActions: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\topenedMenu: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tfeedbackMessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tsubAdminsGroups: {\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},\n\tcomputed: {\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\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\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\tcanEdit() {\n\t\t\treturn getCurrentUser().uid !== this.user.id || this.settings.isAdmin\n\t\t},\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 = OC.Util.computerFileSize(quota)\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 OC.Util.humanFileSize(quota)\n\t\t\t}\n\t\t\treturn OC.Util.humanFileSize(0)\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleMenu() {\n\t\t\tthis.$emit('update:openedMenu', !this.openedMenu)\n\t\t},\n\t\thideMenu() {\n\t\t\tthis.$emit('update:openedMenu', false)\n\t\t},\n\t\ttoggleEdit() {\n\t\t\tthis.$emit('update:editing', true)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n\t.cellText {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n}\n\t.icon-more {\n\t\tbackground-color: var(--color-main-background);\n\t\tborder: 0;\n\t}\n</style>\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserRowSimple.vue?vue&type=template&id=0b39a53a&\"\nimport script from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\",class:{'disabled': _vm.loading.delete || _vm.loading.disable},attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"alt\":\"\",\"width\":\"32\",\"height\":\"32\",\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x'}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\\t\"),_c('div',{staticClass:\"displayName subtitle\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.displayname.length > 20 ? _vm.user.displayname : ''),expression:\"user.displayname.length > 20 ? user.displayname : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.user.displayname)+\"\\n\\t\\t\\t\")])])]),_vm._v(\" \"),_c('div'),_vm._v(\" \"),_c('div',{staticClass:\"mailAddress\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.email !== null && _vm.user.email.length > 20 ? _vm.user.email : ''),expression:\"user.email !== null && user.email.length > 20 ? user.email : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.email)+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"groups\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userGroupsLabels)+\"\\n\\t\")]),_vm._v(\" \"),(_vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subAdminsGroups\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userSubAdminsGroupsLabels)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userQuota\"},[_c('div',{staticClass:\"quota\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.userQuota)+\" (\"+_vm._s(_vm.usedSpace)+\")\\n\\t\\t\\t\"),_c('progress',{staticClass:\"quota-user-progress\",class:{'warn': _vm.usedQuota > 80},attrs:{\"max\":\"100\"},domProps:{\"value\":_vm.usedQuota}})])]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userLanguage.name)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath)?_c('div',{staticClass:\"userBackend\"},[(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.backend)+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.storageLocation),expression:\"user.storageLocation\"}],staticClass:\"storageLocation subtitle\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.storageLocation)+\"\\n\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.userLastLoginTooltip),expression:\"userLastLoginTooltip\",modifiers:{\"auto\":true}}],staticClass:\"lastLogin\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userLastLogin)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"},[(_vm.canEdit && !_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":_vm.toggleEdit}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Edit User'))+\"\\n\\t\\t\\t\\t\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"userPopoverMenuWrapper\"},[_c('button',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"icon-more\",attrs:{\"aria-label\":_vm.t('settings', 'Toggle user actions menu')},on:{\"click\":function($event){$event.preventDefault();return _vm.toggleMenu.apply(null, arguments)}}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'open': _vm.openedMenu },attrs:{\"aria-expanded\":_vm.openedMenu}},[_c('PopoverMenu',{attrs:{\"menu\":_vm.userActions}})],1)])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"feedback\",style:({opacity: _vm.feedbackMessage !== '' ? 1 : 0})},[_c('div',{staticClass:\"icon-checkmark\"}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.feedbackMessage)+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Gary Kim <gary@garykim.dev>\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<!-- Obfuscated user: Logged in user does not have permissions to see all of the data -->\n\t<div v-if=\"Object.keys(user).length ===1\" :data-id=\"user.id\" class=\"row\">\n\t\t<div :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\"\n\t\t\tclass=\"avatar\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\"\n\t\t\t\talt=\"\"\n\t\t\t\theight=\"32\"\n\t\t\t\twidth=\"32\">\n\t\t</div>\n\t\t<div class=\"name\">\n\t\t\t{{ user.id }}\n\t\t</div>\n\t\t<div class=\"obfuscated\">\n\t\t\t{{ t('settings','You do not have permissions to see the details of this user') }}\n\t\t</div>\n\t</div>\n\n\t<!-- User full data -->\n\t<UserRowSimple v-else-if=\"!editing\"\n\t\t:editing.sync=\"editing\"\n\t\t:feedback-message=\"feedbackMessage\"\n\t\t:groups=\"groups\"\n\t\t:languages=\"languages\"\n\t\t:loading=\"loading\"\n\t\t:opened-menu.sync=\"openedMenu\"\n\t\t:settings=\"settings\"\n\t\t:show-config=\"showConfig\"\n\t\t:sub-admins-groups=\"subAdminsGroups\"\n\t\t:user-actions=\"userActions\"\n\t\t:user=\"user\"\n\t\t:class=\"{'row--menu-opened': openedMenu}\" />\n\t<div v-else\n\t\t:class=\"{\n\t\t\t'disabled': loading.delete || loading.disable,\n\t\t\t'row--menu-opened': openedMenu\n\t\t}\"\n\t\t:data-id=\"user.id\"\n\t\tclass=\"row row--editable\">\n\t\t<div :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\"\n\t\t\tclass=\"avatar\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\"\n\t\t\t\talt=\"\"\n\t\t\t\theight=\"32\"\n\t\t\t\twidth=\"32\">\n\t\t</div>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<div v-if=\"user.backendCapabilities.setDisplayName\" class=\"displayName\">\n\t\t\t<form :class=\"{'icon-loading-small': loading.displayName}\"\n\t\t\t\tclass=\"displayName\"\n\t\t\t\t@submit.prevent=\"updateDisplayName\">\n\t\t\t\t<input :id=\"'displayName'+user.id+rand\"\n\t\t\t\t\tref=\"displayName\"\n\t\t\t\t\t:disabled=\"loading.displayName||loading.all\"\n\t\t\t\t\t:value=\"user.displayname\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input class=\"icon-confirm\"\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tvalue=\"\">\n\t\t\t</form>\n\t\t</div>\n\t\t<div v-else class=\"name\">\n\t\t\t{{ user.id }}\n\t\t\t<div class=\"displayName subtitle\">\n\t\t\t\t<div v-tooltip=\"user.displayname.length > 20 ? user.displayname : ''\" class=\"cellText\">\n\t\t\t\t\t{{ user.displayname }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<form v-if=\"settings.canChangePassword && user.backendCapabilities.setPassword\"\n\t\t\t:class=\"{'icon-loading-small': loading.password}\"\n\t\t\tclass=\"password\"\n\t\t\t@submit.prevent=\"updatePassword\">\n\t\t\t<input :id=\"'password'+user.id+rand\"\n\t\t\t\tref=\"password\"\n\t\t\t\t:disabled=\"loading.password || loading.all\"\n\t\t\t\t:minlength=\"minPasswordLength\"\n\t\t\t\t:placeholder=\"t('settings', 'Add new password')\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\trequired\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\ttype=\"password\"\n\t\t\t\tvalue=\"\">\n\t\t\t<input class=\"icon-confirm\" type=\"submit\" value=\"\">\n\t\t</form>\n\t\t<div v-else />\n\t\t<form :class=\"{'icon-loading-small': loading.mailAddress}\"\n\t\t\tclass=\"mailAddress\"\n\t\t\t@submit.prevent=\"updateEmail\">\n\t\t\t<input :id=\"'mailAddress'+user.id+rand\"\n\t\t\t\tref=\"mailAddress\"\n\t\t\t\t:disabled=\"loading.mailAddress||loading.all\"\n\t\t\t\t:placeholder=\"t('settings', 'Add new email address')\"\n\t\t\t\t:value=\"user.email\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\ttype=\"email\">\n\t\t\t<input class=\"icon-confirm\" type=\"submit\" value=\"\">\n\t\t</form>\n\t\t<div :class=\"{'icon-loading-small': loading.groups}\" class=\"groups\">\n\t\t\t<Multiselect :close-on-select=\"false\"\n\t\t\t\t:disabled=\"loading.groups||loading.all\"\n\t\t\t\t:limit=\"2\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t:options=\"availableGroups\"\n\t\t\t\t:placeholder=\"t('settings', 'Add user to group')\"\n\t\t\t\t:tag-width=\"60\"\n\t\t\t\t:taggable=\"settings.isAdmin\"\n\t\t\t\t:value=\"userGroups\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@remove=\"removeUserGroup\"\n\t\t\t\t@select=\"addUserGroup\"\n\t\t\t\t@tag=\"createGroup\">\n\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t</Multiselect>\n\t\t</div>\n\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t:class=\"{'icon-loading-small': loading.subadmins}\"\n\t\t\tclass=\"subadmins\">\n\t\t\t<Multiselect :close-on-select=\"false\"\n\t\t\t\t:disabled=\"loading.subadmins||loading.all\"\n\t\t\t\t:limit=\"2\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t:options=\"subAdminsGroups\"\n\t\t\t\t:placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t:tag-width=\"60\"\n\t\t\t\t:value=\"userSubAdminsGroups\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@remove=\"removeUserSubAdmin\"\n\t\t\t\t@select=\"addUserSubAdmin\">\n\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t</Multiselect>\n\t\t</div>\n\t\t<div v-tooltip.auto=\"usedSpace\"\n\t\t\t:class=\"{'icon-loading-small': loading.quota}\"\n\t\t\tclass=\"quota\">\n\t\t\t<Multiselect :allow-empty=\"false\"\n\t\t\t\t:disabled=\"loading.quota||loading.all\"\n\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t:placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t:taggable=\"true\"\n\t\t\t\t:value=\"userQuota\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"label\"\n\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@input=\"setUserQuota\"\n\t\t\t\t@tag=\"validateQuota\" />\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLanguages\"\n\t\t\t:class=\"{'icon-loading-small': loading.languages}\"\n\t\t\tclass=\"languages\">\n\t\t\t<Multiselect :allow-empty=\"false\"\n\t\t\t\t:disabled=\"loading.languages||loading.all\"\n\t\t\t\t:options=\"languages\"\n\t\t\t\t:placeholder=\"t('settings', 'No language set')\"\n\t\t\t\t:value=\"userLanguage\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tgroup-label=\"label\"\n\t\t\t\tgroup-values=\"languages\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttrack-by=\"code\"\n\t\t\t\t@input=\"setUserLanguage\" />\n\t\t</div>\n\n\t\t<!-- don't show this on edit mode -->\n\t\t<div v-if=\"showConfig.showStoragePath || showConfig.showUserBackend\"\n\t\t\tclass=\"storageLocation\" />\n\t\t<div v-if=\"showConfig.showLastLogin\" />\n\n\t\t<div class=\"userActions\">\n\t\t\t<div v-if=\"!loading.all\"\n\t\t\t\tclass=\"toggleUserActions\">\n\t\t\t\t<Actions>\n\t\t\t\t\t<ActionButton icon=\"icon-checkmark\"\n\t\t\t\t\t\t@click=\"editing = false\">\n\t\t\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</Actions>\n\t\t\t\t<div v-click-outside=\"hideMenu\" class=\"userPopoverMenuWrapper\">\n\t\t\t\t\t<button class=\"icon-more\"\n\t\t\t\t\t\t@click.prevent=\"toggleMenu\" />\n\t\t\t\t\t<div :class=\"{ 'open': openedMenu }\" class=\"popovermenu\">\n\t\t\t\t\t\t<PopoverMenu :menu=\"userActions\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div :style=\"{opacity: feedbackMessage !== '' ? 1 : 0}\"\n\t\t\t\tclass=\"feedback\">\n\t\t\t\t<div class=\"icon-checkmark\" />\n\t\t\t\t{{ feedbackMessage }}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport ClickOutside from 'vue-click-outside'\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport {\n\tPopoverMenu,\n\tMultiselect,\n\tActions,\n\tActionButton,\n} from '@nextcloud/vue'\nimport UserRowSimple from './UserRowSimple'\nimport UserRowMixin from '../../mixins/UserRowMixin'\n\nVue.use(VTooltip)\n\nexport default {\n\tname: 'UserRow',\n\tcomponents: {\n\t\tUserRowSimple,\n\t\tPopoverMenu,\n\t\tActions,\n\t\tActionButton,\n\t\tMultiselect,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tmixins: [UserRowMixin],\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\tshowConfig: {\n\t\t\ttype: Object,\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\tdata() {\n\t\treturn {\n\t\t\trand: parseInt(Math.random() * 1000),\n\t\t\topenedMenu: false,\n\t\t\tfeedbackMessage: '',\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},\n\t\t}\n\t},\n\tcomputed: {\n\t\t/* USER POPOVERMENU ACTIONS */\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\t},\n\n\tmethods: {\n\t\t/* MENU HANDLING */\n\t\ttoggleMenu() {\n\t\t\tthis.openedMenu = !this.openedMenu\n\t\t},\n\t\thideMenu() {\n\t\t\tthis.openedMenu = false\n\t\t},\n\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(() => {\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\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\tconst displayName = this.$refs.displayName.value\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: displayName,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.displayName = false\n\t\t\t\tthis.$refs.displayName.value = displayName\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 adress\n\t\t */\n\t\tupdatePassword() {\n\t\t\tconst password = this.$refs.password.value\n\t\t\tthis.loading.password = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'password',\n\t\t\t\tvalue: password,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.password = false\n\t\t\t\tthis.$refs.password.value = '' // empty & show placeholder\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 adress\n\t\t */\n\t\tupdateEmail() {\n\t\t\tconst mailAddress = this.$refs.mailAddress.value\n\t\t\tthis.loading.mailAddress = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'email',\n\t\t\t\tvalue: mailAddress,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.mailAddress = false\n\t\t\t\tthis.$refs.mailAddress.value = mailAddress\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(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.canAdd === 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('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\n\t\t\tthis.loading.groups = 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('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\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\tthis.loading.quota = true\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\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: quota,\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} quota Quota in readable format '5 GB'\n\t\t * @return {Promise|boolean}\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\treturn this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)))\n\t\t\t}\n\t\t\t// if no valid do not change\n\t\t\treturn false\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} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.languages = false\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(success => {\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\t// Show feedback to indicate the success\n\t\t\t\t\t\tthis.feedbackMessage = t('setting', 'Welcome mail sent!')\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.feedbackMessage = ''\n\t\t\t\t\t\t}, 2000)\n\t\t\t\t\t}\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t})\n\t\t},\n\n\t},\n}\n</script>\n<style scoped lang=\"scss\">\n\t// Force menu to be above other rows\n\t.row--menu-opened {\n\t\tz-index: 1 !important;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\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=4c932ffd&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=4c932ffd&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=4c932ffd&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=4c932ffd&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4c932ffd\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (Object.keys(_vm.user).length ===1)?_c('div',{staticClass:\"row\",attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x',\"alt\":\"\",\"height\":\"32\",\"width\":\"32\"}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"obfuscated\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings','You do not have permissions to see the details of this user'))+\"\\n\\t\")])]):(!_vm.editing)?_c('UserRowSimple',{class:{'row--menu-opened': _vm.openedMenu},attrs:{\"editing\":_vm.editing,\"feedback-message\":_vm.feedbackMessage,\"groups\":_vm.groups,\"languages\":_vm.languages,\"loading\":_vm.loading,\"opened-menu\":_vm.openedMenu,\"settings\":_vm.settings,\"show-config\":_vm.showConfig,\"sub-admins-groups\":_vm.subAdminsGroups,\"user-actions\":_vm.userActions,\"user\":_vm.user},on:{\"update:editing\":function($event){_vm.editing=$event},\"update:openedMenu\":function($event){_vm.openedMenu=$event},\"update:opened-menu\":function($event){_vm.openedMenu=$event}}}):_c('div',{staticClass:\"row row--editable\",class:{\n\t\t'disabled': _vm.loading.delete || _vm.loading.disable,\n\t\t'row--menu-opened': _vm.openedMenu\n\t},attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x',\"alt\":\"\",\"height\":\"32\",\"width\":\"32\"}}):_vm._e()]),_vm._v(\" \"),(_vm.user.backendCapabilities.setDisplayName)?_c('div',{staticClass:\"displayName\"},[_c('form',{staticClass:\"displayName\",class:{'icon-loading-small': _vm.loading.displayName},on:{\"submit\":function($event){$event.preventDefault();return _vm.updateDisplayName.apply(null, arguments)}}},[_c('input',{ref:\"displayName\",attrs:{\"id\":'displayName'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.displayName||_vm.loading.all,\"autocapitalize\":\"off\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"spellcheck\":\"false\",\"type\":\"text\"},domProps:{\"value\":_vm.user.displayname}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})])]):_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\\t\"),_c('div',{staticClass:\"displayName subtitle\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.displayname.length > 20 ? _vm.user.displayname : ''),expression:\"user.displayname.length > 20 ? user.displayname : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.user.displayname)+\"\\n\\t\\t\\t\")])])]),_vm._v(\" \"),(_vm.settings.canChangePassword && _vm.user.backendCapabilities.setPassword)?_c('form',{staticClass:\"password\",class:{'icon-loading-small': _vm.loading.password},on:{\"submit\":function($event){$event.preventDefault();return _vm.updatePassword.apply(null, arguments)}}},[_c('input',{ref:\"password\",attrs:{\"id\":'password'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.password || _vm.loading.all,\"minlength\":_vm.minPasswordLength,\"placeholder\":_vm.t('settings', 'Add new password'),\"autocapitalize\":\"off\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"required\":\"\",\"spellcheck\":\"false\",\"type\":\"password\",\"value\":\"\"}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})]):_c('div'),_vm._v(\" \"),_c('form',{staticClass:\"mailAddress\",class:{'icon-loading-small': _vm.loading.mailAddress},on:{\"submit\":function($event){$event.preventDefault();return _vm.updateEmail.apply(null, arguments)}}},[_c('input',{ref:\"mailAddress\",attrs:{\"id\":'mailAddress'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.mailAddress||_vm.loading.all,\"placeholder\":_vm.t('settings', 'Add new email address'),\"autocapitalize\":\"off\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"spellcheck\":\"false\",\"type\":\"email\"},domProps:{\"value\":_vm.user.email}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})]),_vm._v(\" \"),_c('div',{staticClass:\"groups\",class:{'icon-loading-small': _vm.loading.groups}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.groups||_vm.loading.all,\"limit\":2,\"multiple\":true,\"options\":_vm.availableGroups,\"placeholder\":_vm.t('settings', 'Add user to group'),\"tag-width\":60,\"taggable\":_vm.settings.isAdmin,\"value\":_vm.userGroups,\"label\":\"name\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"remove\":_vm.removeUserGroup,\"select\":_vm.addUserGroup,\"tag\":_vm.createGroup}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins\",class:{'icon-loading-small': _vm.loading.subadmins}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.subadmins||_vm.loading.all,\"limit\":2,\"multiple\":true,\"options\":_vm.subAdminsGroups,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"tag-width\":60,\"value\":_vm.userSubAdminsGroups,\"label\":\"name\",\"track-by\":\"id\"},on:{\"remove\":_vm.removeUserSubAdmin,\"select\":_vm.addUserSubAdmin}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1):_vm._e(),_vm._v(\" \"),_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.usedSpace),expression:\"usedSpace\",modifiers:{\"auto\":true}}],staticClass:\"quota\",class:{'icon-loading-small': _vm.loading.quota}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"disabled\":_vm.loading.quota||_vm.loading.all,\"options\":_vm.quotaOptions,\"placeholder\":_vm.t('settings', 'Select user quota'),\"taggable\":true,\"value\":_vm.userQuota,\"label\":\"label\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"input\":_vm.setUserQuota,\"tag\":_vm.validateQuota}})],1),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",class:{'icon-loading-small': _vm.loading.languages}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"disabled\":_vm.loading.languages||_vm.loading.all,\"options\":_vm.languages,\"placeholder\":_vm.t('settings', 'No language set'),\"value\":_vm.userLanguage,\"group-label\":\"label\",\"group-values\":\"languages\",\"label\":\"name\",\"track-by\":\"code\"},on:{\"input\":_vm.setUserLanguage}})],1):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath || _vm.showConfig.showUserBackend)?_c('div',{staticClass:\"storageLocation\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div'):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"},[(!_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-checkmark\"},on:{\"click\":function($event){_vm.editing = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\\t\\t\")])],1),_vm._v(\" \"),_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"userPopoverMenuWrapper\"},[_c('button',{staticClass:\"icon-more\",on:{\"click\":function($event){$event.preventDefault();return _vm.toggleMenu.apply(null, arguments)}}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'open': _vm.openedMenu }},[_c('PopoverMenu',{attrs:{\"menu\":_vm.userActions}})],1)])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"feedback\",style:({opacity: _vm.feedbackMessage !== '' ? 1 : 0})},[_c('div',{staticClass:\"icon-checkmark\"}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.feedbackMessage)+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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<div id=\"app-content\" class=\"user-list-grid\" @scroll.passive=\"onScroll\">\n\t\t<Modal v-if=\"showConfig.showNewUserForm\" size=\"small\" @close=\"closeModal\">\n\t\t\t<form id=\"new-user\"\n\t\t\t\t:disabled=\"loading.all\"\n\t\t\t\tclass=\"modal__content\"\n\t\t\t\t@submit.prevent=\"createUser\">\n\t\t\t\t<h2>{{ t('settings','New user') }}</h2>\n\t\t\t\t<input id=\"newusername\"\n\t\t\t\t\tref=\"newusername\"\n\t\t\t\t\tv-model=\"newUser.id\"\n\t\t\t\t\t:disabled=\"settings.newUserGenerateUserID\"\n\t\t\t\t\t:placeholder=\"settings.newUserGenerateUserID\n\t\t\t\t\t\t? t('settings', 'Will be autogenerated')\n\t\t\t\t\t\t: t('settings', 'Username')\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"username\"\n\t\t\t\t\tpattern=\"[a-zA-Z0-9 _\\.@\\-']+\"\n\t\t\t\t\trequired\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input id=\"newdisplayname\"\n\t\t\t\t\tv-model=\"newUser.displayName\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Display name')\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"displayname\"\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input id=\"newuserpassword\"\n\t\t\t\t\tref=\"newuserpassword\"\n\t\t\t\t\tv-model=\"newUser.password\"\n\t\t\t\t\t:minlength=\"minPasswordLength\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Password')\"\n\t\t\t\t\t:required=\"newUser.mailAddress===''\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\ttype=\"password\">\n\t\t\t\t<input id=\"newemail\"\n\t\t\t\t\tv-model=\"newUser.mailAddress\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Email')\"\n\t\t\t\t\t:required=\"newUser.password==='' || settings.newUserRequireEmail\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"email\"\n\t\t\t\t\ttype=\"email\">\n\t\t\t\t<div class=\"groups modal__item\">\n\t\t\t\t\t<!-- hidden input trick for vanilla html5 form validation -->\n\t\t\t\t\t<input v-if=\"!settings.isAdmin\"\n\t\t\t\t\t\tid=\"newgroups\"\n\t\t\t\t\t\t:class=\"{'icon-loading-small': loading.groups}\"\n\t\t\t\t\t\t:required=\"!settings.isAdmin\"\n\t\t\t\t\t\t:value=\"newUser.groups\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\ttype=\"text\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.groups\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t:disabled=\"loading.groups||loading.all\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:options=\"canAddGroups\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Add user to group')\"\n\t\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t@tag=\"createGroup\">\n\t\t\t\t\t\t<!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\t\tSubadmins can't create users outside their groups\n\t\t\t\t\t\t\tTherefore, empty select is forbidden -->\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t\t\tclass=\"subadmins modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.subAdminsGroups\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:options=\"subAdminsGroups\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttrack-by=\"id\">\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"quota modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.quota\"\n\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t@tag=\"validateQuota\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showLanguages\" class=\"languages modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.language\"\n\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t:options=\"languages\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Default language')\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tgroup-label=\"label\"\n\t\t\t\t\t\tgroup-values=\"languages\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttrack-by=\"code\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showStoragePath\" class=\"storageLocation\" />\n\t\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\" />\n\t\t\t\t<div v-if=\"showConfig.showLastLogin\" class=\"lastLogin\" />\n\t\t\t\t<div class=\"user-actions\">\n\t\t\t\t\t<button id=\"newsubmit\"\n\t\t\t\t\t\tclass=\"button primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tvalue=\"\">\n\t\t\t\t\t\t{{ t('settings', 'Add a new user') }}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</Modal>\n\t\t<div id=\"grid-header\"\n\t\t\t:class=\"{'sticky': scrolled && !showConfig.showNewUserForm}\"\n\t\t\tclass=\"row\">\n\t\t\t<div id=\"headerAvatar\" class=\"avatar\" />\n\t\t\t<div id=\"headerName\" class=\"name\">\n\t\t\t\t{{ t('settings', 'Username') }}\n\n\t\t\t\t<div class=\"subtitle\">\n\t\t\t\t\t{{ t('settings', 'Display name') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id=\"headerPassword\" class=\"password\">\n\t\t\t\t{{ t('settings', 'Password') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerAddress\" class=\"mailAddress\">\n\t\t\t\t{{ t('settings', 'Email') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerGroups\" class=\"groups\">\n\t\t\t\t{{ t('settings', 'Groups') }}\n\t\t\t</div>\n\t\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t\tid=\"headerSubAdmins\"\n\t\t\t\tclass=\"subadmins\">\n\t\t\t\t{{ t('settings', 'Group admin for') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerQuota\" class=\"quota\">\n\t\t\t\t{{ t('settings', 'Quota') }}\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showLanguages\"\n\t\t\t\tid=\"headerLanguages\"\n\t\t\t\tclass=\"languages\">\n\t\t\t\t{{ t('settings', 'Language') }}\n\t\t\t</div>\n\n\t\t\t<div v-if=\"showConfig.showUserBackend || showConfig.showStoragePath\"\n\t\t\t\tclass=\"headerUserBackend userBackend\">\n\t\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\">\n\t\t\t\t\t{{ t('settings', 'User backend') }}\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showStoragePath\"\n\t\t\t\t\tclass=\"subtitle storageLocation\">\n\t\t\t\t\t{{ t('settings', 'Storage location') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showLastLogin\"\n\t\t\t\tclass=\"headerLastLogin lastLogin\">\n\t\t\t\t{{ t('settings', 'Last login') }}\n\t\t\t</div>\n\n\t\t\t<div class=\"userActions\" />\n\t\t</div>\n\n\t\t<user-row v-for=\"user in filteredUsers\"\n\t\t\t:key=\"user.id\"\n\t\t\t:external-actions=\"externalActions\"\n\t\t\t:groups=\"groups\"\n\t\t\t:languages=\"languages\"\n\t\t\t:quota-options=\"quotaOptions\"\n\t\t\t:settings=\"settings\"\n\t\t\t:show-config=\"showConfig\"\n\t\t\t:sub-admins-groups=\"subAdminsGroups\"\n\t\t\t:user=\"user\" />\n\t\t<InfiniteLoading ref=\"infiniteLoading\" @infinite=\"infiniteHandler\">\n\t\t\t<div slot=\"spinner\">\n\t\t\t\t<div class=\"users-icon-loading icon-loading\" />\n\t\t\t</div>\n\t\t\t<div slot=\"no-more\">\n\t\t\t\t<div class=\"users-list-end\" />\n\t\t\t</div>\n\t\t\t<div slot=\"no-results\">\n\t\t\t\t<div id=\"emptycontent\">\n\t\t\t\t\t<div class=\"icon-contacts-dark\" />\n\t\t\t\t\t<h2>{{ t('settings', 'No users in here') }}</h2>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</InfiniteLoading>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport InfiniteLoading from 'vue-infinite-loading'\nimport Vue from 'vue'\nimport { Modal } from '@nextcloud/vue'\n\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\n\nimport userRow from './UserList/UserRow'\n\nconst unlimitedQuota = {\n\tid: 'none',\n\tlabel: t('settings', 'Unlimited'),\n}\nconst defaultQuota = {\n\tid: 'default',\n\tlabel: t('settings', 'Default quota'),\n}\nconst newUser = {\n\tid: '',\n\tdisplayName: '',\n\tpassword: '',\n\tmailAddress: '',\n\tgroups: [],\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\tcomponents: {\n\t\tModal,\n\t\tuserRow,\n\t\tMultiselect,\n\t\tInfiniteLoading,\n\t},\n\tprops: {\n\t\tusers: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\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\tdata() {\n\t\treturn {\n\t\t\tunlimitedQuota,\n\t\t\tdefaultQuota,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tgroups: false,\n\t\t\t},\n\t\t\tscrolled: false,\n\t\t\tsearchQuery: '',\n\t\t\tnewUser: Object.assign({}, newUser),\n\t\t}\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\t\tselectedGroupDecoded() {\n\t\t\treturn decodeURIComponent(this.selectedGroup)\n\t\t},\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\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\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\t\tsubAdminsGroups() {\n\t\t\t// data provided php side\n\t\t\treturn this.$store.getters.getSubadminGroups\n\t\t},\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(this.unlimitedQuota)\n\t\t\t}\n\t\t\tquotaPreset.unshift(this.defaultQuota)\n\t\t\treturn quotaPreset\n\t\t},\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\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\twatch: {\n\t\t// watch url change and group select\n\t\tselectedGroup(val, old) {\n\t\t\t// if selected is the disabled group but it's empty\n\t\t\tthis.redirectIfDisabled()\n\t\t\tthis.$store.commit('resetUsers')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\tthis.setNewUserDefaultGroup(val)\n\t\t},\n\n\t\t// make sure the infiniteLoading state is changed if we manually\n\t\t// add/remove data from the store\n\t\tusersCount(val, old) {\n\t\t\t// deleting the last user, reset the list\n\t\t\tif (val === 0 && old === 1) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t\t// adding the first user, warn the infiniteLoader that\n\t\t\t\t// the list is not empty anymore (we don't fetch the newly\n\t\t\t\t// added user as we already have all the info we need)\n\t\t\t} else if (val === 1 && old === 0) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.loaded()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\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\tthis.redirectIfDisabled()\n\t},\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\tonScroll(event) {\n\t\t\tthis.scrolled = event.target.scrollTo > 0\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\tinfiniteHandler($state) {\n\t\t\tthis.$store.dispatch('getUsers', {\n\t\t\t\toffset: this.usersOffset,\n\t\t\t\tlimit: this.usersLimit,\n\t\t\t\tgroup: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\n\t\t\t\tsearch: this.searchQuery,\n\t\t\t})\n\t\t\t\t.then((usersCount) => {\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\t$state.loaded()\n\t\t\t\t\t}\n\t\t\t\t\tif (usersCount < this.usersLimit) {\n\t\t\t\t\t\t$state.complete()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t/* SEARCH */\n\t\tsearch({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t\tthis.$store.commit('resetUsers')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t},\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\t\tcreateUser() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch('addUser', {\n\t\t\t\tuserid: this.newUser.id,\n\t\t\t\tpassword: this.newUser.password,\n\t\t\t\tdisplayName: this.newUser.displayName,\n\t\t\t\temail: this.newUser.mailAddress,\n\t\t\t\tgroups: this.newUser.groups.map(group => group.id),\n\t\t\t\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\n\t\t\t\tquota: this.newUser.quota.id,\n\t\t\t\tlanguage: this.newUser.language.code,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.resetForm()\n\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\tthis.closeModal()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n\t\t\t\t\t\tconst statuscode = error.response.data.ocs.meta.statuscode\n\t\t\t\t\t\tif (statuscode === 102) {\n\t\t\t\t\t\t\t// wrong username\n\t\t\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\t\t} else if (statuscode === 107) {\n\t\t\t\t\t\t\t// wrong password\n\t\t\t\t\t\t\tthis.$refs.newuserpassword.focus()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\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 * Create a new group\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t * @return {Promise}\n\t\t */\n\t\tcreateGroup(gid) {\n\t\t\tthis.loading.groups = true\n\t\t\tthis.$store.dispatch('addGroup', gid)\n\t\t\t\t.then((group) => {\n\t\t\t\t\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\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\tredirectIfDisabled() {\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\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t}\n\t\t},\n\t\tcloseModal() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.showConfig.showNewUserForm = false\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.modal-wrapper {\n\t\tmargin: 2vh 0;\n\t\talign-items: flex-start;\n\t}\n\t.modal__content {\n\t\tdisplay: flex;\n\t\tpadding: 20px;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\ttext-align: center;\n\t}\n\t.modal__item {\n\t\tmargin-bottom: 16px;\n\t\twidth: 100%;\n\t}\n\t.modal__item:not(:focus):not(:active) {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\t.modal__item::v-deep .multiselect {\n\t\twidth: 100%;\n\t}\n\t.user-actions {\n\t\tmargin-top: 20px;\n\t}\n\t.modal__content::v-deep .multiselect__single {\n\t\ttext-align: left;\n\t\tbox-sizing: border-box;\n\t}\n\t.modal__content::v-deep .multiselect__content-wrapper {\n\t\tbox-sizing: border-box;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\n\n\t/* fake input for groups validation */\n\tinput#newgroups {\n\t\tposition: absolute;\n\t\topacity: 0;\n\t\t/* The \"hidden\" input is behind the Multiselect, so in general it does\n\t\t * not receives clicks. However, with Firefox, after the validation\n\t\t * fails, it will receive the first click done on it, so its width needs\n\t\t * to be set to 0 to prevent that (\"pointer-events: none\" does not\n\t\t * prevent it). */\n\t\twidth: 0;\n\t}\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/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=ea695fb0&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=ea695fb0&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=ea695fb0&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=ea695fb0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ea695fb0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-list-grid\",attrs:{\"id\":\"app-content\"},on:{\"&scroll\":function($event){return _vm.onScroll.apply(null, arguments)}}},[(_vm.showConfig.showNewUserForm)?_c('Modal',{attrs:{\"size\":\"small\"},on:{\"close\":_vm.closeModal}},[_c('form',{staticClass:\"modal__content\",attrs:{\"id\":\"new-user\",\"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('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.id),expression:\"newUser.id\"}],ref:\"newusername\",staticClass:\"modal__item\",attrs:{\"id\":\"newusername\",\"disabled\":_vm.settings.newUserGenerateUserID,\"placeholder\":_vm.settings.newUserGenerateUserID\n\t\t\t\t\t? _vm.t('settings', 'Will be autogenerated')\n\t\t\t\t\t: _vm.t('settings', 'Username'),\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"username\",\"pattern\":\"[a-zA-Z0-9 _\\\\.@\\\\-']+\",\"required\":\"\",\"type\":\"text\"},domProps:{\"value\":(_vm.newUser.id)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"id\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.displayName),expression:\"newUser.displayName\"}],staticClass:\"modal__item\",attrs:{\"id\":\"newdisplayname\",\"placeholder\":_vm.t('settings', 'Display name'),\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"displayname\",\"type\":\"text\"},domProps:{\"value\":(_vm.newUser.displayName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"displayName\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.password),expression:\"newUser.password\"}],ref:\"newuserpassword\",staticClass:\"modal__item\",attrs:{\"id\":\"newuserpassword\",\"minlength\":_vm.minPasswordLength,\"placeholder\":_vm.t('settings', 'Password'),\"required\":_vm.newUser.mailAddress==='',\"autocapitalize\":\"none\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"name\":\"password\",\"type\":\"password\"},domProps:{\"value\":(_vm.newUser.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"password\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.mailAddress),expression:\"newUser.mailAddress\"}],staticClass:\"modal__item\",attrs:{\"id\":\"newemail\",\"placeholder\":_vm.t('settings', 'Email'),\"required\":_vm.newUser.password==='' || _vm.settings.newUserRequireEmail,\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"email\",\"type\":\"email\"},domProps:{\"value\":(_vm.newUser.mailAddress)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"mailAddress\", $event.target.value)}}}),_vm._v(\" \"),_c('div',{staticClass:\"groups modal__item\"},[(!_vm.settings.isAdmin)?_c('input',{class:{'icon-loading-small': _vm.loading.groups},attrs:{\"id\":\"newgroups\",\"required\":!_vm.settings.isAdmin,\"tabindex\":\"-1\",\"type\":\"text\"},domProps:{\"value\":_vm.newUser.groups}}):_vm._e(),_vm._v(\" \"),_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.groups||_vm.loading.all,\"multiple\":true,\"options\":_vm.canAddGroups,\"placeholder\":_vm.t('settings', 'Add user to group'),\"tag-width\":60,\"taggable\":true,\"label\":\"name\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"tag\":_vm.createGroup},model:{value:(_vm.newUser.groups),callback:function ($$v) {_vm.$set(_vm.newUser, \"groups\", $$v)},expression:\"newUser.groups\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"multiple\":true,\"options\":_vm.subAdminsGroups,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"tag-width\":60,\"label\":\"name\",\"track-by\":\"id\"},model:{value:(_vm.newUser.subAdminsGroups),callback:function ($$v) {_vm.$set(_vm.newUser, \"subAdminsGroups\", $$v)},expression:\"newUser.subAdminsGroups\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"quota modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"options\":_vm.quotaOptions,\"placeholder\":_vm.t('settings', 'Select user quota'),\"taggable\":true,\"label\":\"label\",\"track-by\":\"id\"},on:{\"tag\":_vm.validateQuota},model:{value:(_vm.newUser.quota),callback:function ($$v) {_vm.$set(_vm.newUser, \"quota\", $$v)},expression:\"newUser.quota\"}})],1),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"options\":_vm.languages,\"placeholder\":_vm.t('settings', 'Default language'),\"group-label\":\"label\",\"group-values\":\"languages\",\"label\":\"name\",\"track-by\":\"code\"},model:{value:(_vm.newUser.language),callback:function ($$v) {_vm.$set(_vm.newUser, \"language\", $$v)},expression:\"newUser.language\"}})],1):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"storageLocation\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{staticClass:\"lastLogin\"}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"user-actions\"},[_c('button',{staticClass:\"button primary\",attrs:{\"id\":\"newsubmit\",\"type\":\"submit\",\"value\":\"\"}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Add a new user'))+\"\\n\\t\\t\\t\\t\")])])])]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"row\",class:{'sticky': _vm.scrolled && !_vm.showConfig.showNewUserForm},attrs:{\"id\":\"grid-header\"}},[_c('div',{staticClass:\"avatar\",attrs:{\"id\":\"headerAvatar\"}}),_vm._v(\" \"),_c('div',{staticClass:\"name\",attrs:{\"id\":\"headerName\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Username'))+\"\\n\\n\\t\\t\\t\"),_c('div',{staticClass:\"subtitle\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Display name'))+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"password\",attrs:{\"id\":\"headerPassword\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Password'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"mailAddress\",attrs:{\"id\":\"headerAddress\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Email'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"groups\",attrs:{\"id\":\"headerGroups\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Groups'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins\",attrs:{\"id\":\"headerSubAdmins\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Group admin for'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"quota\",attrs:{\"id\":\"headerQuota\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Quota'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",attrs:{\"id\":\"headerLanguages\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Language'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath)?_c('div',{staticClass:\"headerUserBackend userBackend\"},[(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'User backend'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"subtitle storageLocation\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Storage location'))+\"\\n\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{staticClass:\"headerLastLogin lastLogin\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Last login'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"})]),_vm._v(\" \"),_vm._l((_vm.filteredUsers),function(user){return _c('user-row',{key:user.id,attrs:{\"external-actions\":_vm.externalActions,\"groups\":_vm.groups,\"languages\":_vm.languages,\"quota-options\":_vm.quotaOptions,\"settings\":_vm.settings,\"show-config\":_vm.showConfig,\"sub-admins-groups\":_vm.subAdminsGroups,\"user\":user}})}),_vm._v(\" \"),_c('InfiniteLoading',{ref:\"infiniteLoading\",on:{\"infinite\":_vm.infiniteHandler}},[_c('div',{attrs:{\"slot\":\"spinner\"},slot:\"spinner\"},[_c('div',{staticClass:\"users-icon-loading icon-loading\"})]),_vm._v(\" \"),_c('div',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_c('div',{staticClass:\"users-list-end\"})]),_vm._v(\" \"),_c('div',{attrs:{\"slot\":\"no-results\"},slot:\"no-results\"},[_c('div',{attrs:{\"id\":\"emptycontent\"}},[_c('div',{staticClass:\"icon-contacts-dark\"}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'No users in here')))])])])])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\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<Content app-name=\"settings\" :navigation-class=\"{ 'icon-loading': loadingAddGroup }\">\n\t\t<AppNavigation>\n\t\t\t<AppNavigationNew button-id=\"new-user-button\"\n\t\t\t\t:text=\"t('settings','New user')\"\n\t\t\t\tbutton-class=\"icon-add\"\n\t\t\t\t@click=\"showNewUserMenu\"\n\t\t\t\t@keyup.enter=\"showNewUserMenu\"\n\t\t\t\t@keyup.space=\"showNewUserMenu\" />\n\t\t\t<template #list>\n\t\t\t\t<AppNavigationItem id=\"addgroup\"\n\t\t\t\t\tref=\"addGroup\"\n\t\t\t\t\t:edit-placeholder=\"t('settings', 'Enter group name')\"\n\t\t\t\t\t:editable=\"true\"\n\t\t\t\t\t:loading=\"loadingAddGroup\"\n\t\t\t\t\t:title=\"t('settings', 'Add group')\"\n\t\t\t\t\ticon=\"icon-add\"\n\t\t\t\t\t@click=\"showAddGroupForm\"\n\t\t\t\t\t@update:title=\"createGroup\" />\n\t\t\t\t<AppNavigationItem id=\"everyone\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Active users')\"\n\t\t\t\t\t:to=\"{ name: 'users' }\"\n\t\t\t\t\ticon=\"icon-contacts-dark\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"userCount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ userCount }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\t\t\t\t<AppNavigationItem v-if=\"settings.isAdmin\"\n\t\t\t\t\tid=\"admin\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Admins')\"\n\t\t\t\t\t:to=\"{ name: 'group', params: { selectedGroup: 'admin' } }\"\n\t\t\t\t\ticon=\"icon-user-admin\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"adminGroupMenu.count\" slot=\"counter\">\n\t\t\t\t\t\t{{ adminGroupMenu.count }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\n\t\t\t\t<!-- Hide the disabled if none, if we don't have the data (-1) show it -->\n\t\t\t\t<AppNavigationItem v-if=\"disabledGroupMenu.usercount > 0 || disabledGroupMenu.usercount === -1\"\n\t\t\t\t\tid=\"disabled\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Disabled users')\"\n\t\t\t\t\t:to=\"{ name: 'group', params: { selectedGroup: 'disabled' } }\"\n\t\t\t\t\ticon=\"icon-disabled-users\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"disabledGroupMenu.usercount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ disabledGroupMenu.usercount }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\n\t\t\t\t<AppNavigationCaption v-if=\"groupList.length > 0\" :title=\"t('settings', 'Groups')\" />\n\t\t\t\t<GroupListItem v-for=\"group in groupList\"\n\t\t\t\t\t:id=\"group.id\"\n\t\t\t\t\t:key=\"group.id\"\n\t\t\t\t\t:title=\"group.title\"\n\t\t\t\t\t:count=\"group.count\" />\n\t\t\t</template>\n\t\t\t<template #footer>\n\t\t\t\t<AppNavigationSettings>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>{{ t('settings', 'Default quota:') }}</p>\n\t\t\t\t\t\t<Multiselect :value=\"defaultQuota\"\n\t\t\t\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\t\t\t\t:placeholder=\"t('settings', 'Select default quota')\"\n\t\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\t\t@tag=\"validateQuota\"\n\t\t\t\t\t\t\t@input=\"setDefaultQuota\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showLanguages\"\n\t\t\t\t\t\t\tv-model=\"showLanguages\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showLanguages\">{{ t('settings', 'Show Languages') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showLastLogin\"\n\t\t\t\t\t\t\tv-model=\"showLastLogin\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showLastLogin\">{{ t('settings', 'Show last login') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showUserBackend\"\n\t\t\t\t\t\t\tv-model=\"showUserBackend\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showUserBackend\">{{ t('settings', 'Show user backend') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showStoragePath\"\n\t\t\t\t\t\t\tv-model=\"showStoragePath\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showStoragePath\">{{ t('settings', 'Show storage path') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"sendWelcomeMail\"\n\t\t\t\t\t\t\tv-model=\"sendWelcomeMail\"\n\t\t\t\t\t\t\t:disabled=\"loadingSendMail\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"sendWelcomeMail\">{{ t('settings', 'Send email to new user') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t</AppNavigationSettings>\n\t\t\t</template>\n\t\t</AppNavigation>\n\t\t<AppContent>\n\t\t\t<UserList :users=\"users\"\n\t\t\t\t:show-config=\"showConfig\"\n\t\t\t\t:selected-group=\"selectedGroupDecoded\"\n\t\t\t\t:external-actions=\"externalActions\" />\n\t\t</AppContent>\n\t</Content>\n</template>\n\n<script>\nimport AppContent from '@nextcloud/vue/dist/Components/AppContent'\nimport AppNavigation from '@nextcloud/vue/dist/Components/AppNavigation'\nimport AppNavigationCaption from '@nextcloud/vue/dist/Components/AppNavigationCaption'\nimport AppNavigationCounter from '@nextcloud/vue/dist/Components/AppNavigationCounter'\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem'\nimport AppNavigationNew from '@nextcloud/vue/dist/Components/AppNavigationNew'\nimport AppNavigationSettings from '@nextcloud/vue/dist/Components/AppNavigationSettings'\nimport axios from '@nextcloud/axios'\nimport Content from '@nextcloud/vue/dist/Components/Content'\nimport { generateUrl } from '@nextcloud/router'\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport Vue from 'vue'\nimport VueLocalStorage from 'vue-localstorage'\n\nimport GroupListItem from '../components/GroupListItem'\nimport UserList from '../components/UserList'\n\nVue.use(VueLocalStorage)\n\nexport default {\n\tname: 'Users',\n\tcomponents: {\n\t\tAppContent,\n\t\tAppNavigation,\n\t\tAppNavigationCaption,\n\t\tAppNavigationCounter,\n\t\tAppNavigationItem,\n\t\tAppNavigationNew,\n\t\tAppNavigationSettings,\n\t\tContent,\n\t\tGroupListItem,\n\t\tMultiselect,\n\t\tUserList,\n\t},\n\tprops: {\n\t\tselectedGroup: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t// default quota is set to unlimited\n\t\t\tunlimitedQuota: { id: 'none', label: t('settings', 'Unlimited') },\n\t\t\t// temporary value used for multiselect change\n\t\t\tselectedQuota: false,\n\t\t\texternalActions: [],\n\t\t\tloadingAddGroup: false,\n\t\t\tloadingSendMail: false,\n\t\t\tshowConfig: {\n\t\t\t\tshowStoragePath: false,\n\t\t\t\tshowUserBackend: false,\n\t\t\t\tshowLastLogin: false,\n\t\t\t\tshowNewUserForm: false,\n\t\t\t\tshowLanguages: false,\n\t\t\t},\n\t\t}\n\t},\n\tcomputed: {\n\t\tselectedGroupDecoded() {\n\t\t\treturn this.selectedGroup ? decodeURIComponent(this.selectedGroup) : null\n\t\t},\n\t\tusers() {\n\t\t\treturn this.$store.getters.getUsers\n\t\t},\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\n\n\t\t// Local settings\n\t\tshowLanguages: {\n\t\t\tget() { return this.getLocalstorage('showLanguages') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showLanguages', status)\n\t\t\t},\n\t\t},\n\t\tshowLastLogin: {\n\t\t\tget() { return this.getLocalstorage('showLastLogin') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showLastLogin', status)\n\t\t\t},\n\t\t},\n\t\tshowUserBackend: {\n\t\t\tget() { return this.getLocalstorage('showUserBackend') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showUserBackend', status)\n\t\t\t},\n\t\t},\n\t\tshowStoragePath: {\n\t\t\tget() { return this.getLocalstorage('showStoragePath') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showStoragePath', status)\n\t\t\t},\n\t\t},\n\n\t\tuserCount() {\n\t\t\treturn this.$store.getters.getUserCount\n\t\t},\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\n\t\t// default quota\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(this.unlimitedQuota)\n\t\t\t}\n\t\t\treturn quotaPreset\n\t\t},\n\t\t// mapping saved values to objects\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 !== this.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 this.unlimitedQuota // unlimited\n\t\t\t},\n\t\t\tset(quota) {\n\t\t\t\tthis.selectedQuota = quota\n\t\t\t},\n\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\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\t\tdisabledGroupMenu() {\n\t\t\treturn this.formatGroupMenu(this.groups.find(group => group.id === 'disabled'))\n\t\t},\n\t},\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\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\tmethods: {\n\t\tshowNewUserMenu() {\n\t\t\tthis.showConfig.showNewUserForm = true\n\t\t\tif (this.showConfig.showNewUserForm) {\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\twindow.newusername.focus()\n\t\t\t\t})\n\t\t\t}\n\t\t},\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.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key]\n\t\t\treturn this.showConfig[key]\n\t\t},\n\t\tsetLocalStorage(key, status) {\n\t\t\tthis.showConfig[key] = status\n\t\t\tthis.$localStorage.set(key, status)\n\t\t\treturn status\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\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\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 {Promise|boolean}\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) {\n\t\t\t\treturn this.setDefaultQuota('none')\n\t\t\t} else {\n\t\t\t\t// unify format output\n\t\t\t\treturn this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)))\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\t * @param {string} gid The group id\n\t\t */\n\t\tasync createGroup(gid) {\n\t\t\t// group is not valid\n\t\t\tif (gid.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.loadingAddGroup = true\n\t\t\t\tawait this.$store.dispatch('addGroup', gid.trim())\n\n\t\t\t\tthis.hideAddGroupForm()\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(gid.trim()),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch {\n\t\t\t\tthis.showAddGroupForm()\n\t\t\t} finally {\n\t\t\t\tthis.loadingAddGroup = false\n\t\t\t}\n\t\t},\n\n\t\tshowAddGroupForm() {\n\t\t\tthis.$refs.addGroup.editingActive = true\n\t\t\tthis.$refs.addGroup.onMenuToggle(false)\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.addGroup.$refs.editingInput.focusInput()\n\t\t\t})\n\t\t},\n\n\t\thideAddGroupForm() {\n\t\t\tthis.$refs.addGroup.editingActive = false\n\t\t\tthis.$refs.addGroup.editingValue = ''\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// force hiding the editing action for the add group entry\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\n\tdisplay: none;\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=1babbc68&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=1babbc68&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=1babbc68&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=1babbc68&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 \"1babbc68\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","_vm","this","_h","$createElement","_c","_self","key","attrs","title","name","params","selectedGroup","encodeURIComponent","loadingRenameGroup","openGroupMenu","on","handleGroupMenuOpen","scopedSlots","_u","fn","_v","_s","count","_e","proxy","settings","isAdmin","ref","$event","renameGroup","t","removeGroup","props","user","type","Object","required","default","groups","Array","subAdminsGroups","quotaOptions","showConfig","languages","externalActions","computed","userGroups","filter","group","includes","userSubAdminsGroups","subadmin","availableGroups","map","groupClone","assign","$isDisabled","canAdd","canRemove","usedSpace","quota","used","size","OC","Util","humanFileSize","usedQuota","Math","min","round","pow","isNaN","userQuota","humanQuota","find","label","minPasswordLength","$store","getters","getPasswordPolicyMinLength","userLanguage","userLang","concat","lang","code","language","userLastLoginTooltip","lastLogin","formatDate","userLastLogin","relativeModifiedDate","methods","generateAvatar","generateUrl","version","oc_userconfig","avatar","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","staticClass","class","loading","delete","disable","wipe","directives","rawName","value","displayname","length","expression","email","userGroupsLabels","userSubAdminsGroupsLabels","domProps","showUserBackend","showStoragePath","backend","storageLocation","modifiers","canEdit","all","toggleEdit","preventDefault","toggleMenu","apply","arguments","openedMenu","userActions","style","opacity","feedbackMessage","keys","editing","backendCapabilities","displayName","updateDisplayName","rand","canChangePassword","setPassword","password","updatePassword","mailAddress","updateEmail","removeUserGroup","addUserGroup","createGroup","slot","subadmins","removeUserSubAdmin","addUserSubAdmin","setUserQuota","validateQuota","setUserLanguage","onScroll","closeModal","createUser","newUser","newUserGenerateUserID","target","composing","$set","newUserRequireEmail","canAddGroups","model","callback","$$v","scrolled","showNewUserForm","_l","infiniteHandler","loadingAddGroup","showAddGroupForm","userCount","adminGroupMenu","disabledGroupMenu","usercount","groupList","defaultQuota","setDefaultQuota","isArray","showLanguages","_i","$$a","$$el","$$c","checked","$$i","slice","showLastLogin","loadingSendMail","sendWelcomeMail","showNewUserMenu","indexOf","_k","keyCode","users","selectedGroupDecoded"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/settings-vue-settings-apps-users-management.js b/dist/settings-vue-settings-apps-users-management.js
index ea61ac76df9..9a5e6a4cef8 100644
--- a/dist/settings-vue-settings-apps-users-management.js
+++ b/dist/settings-vue-settings-apps-users-management.js
@@ -1,3 +1,3 @@
/*! For license information please see settings-vue-settings-apps-users-management.js.LICENSE.txt */
-!function(){"use strict";var e,r,o,i={31579:function(e,r,o){var i=o(20144),u=o(34741),a=o(83678),s={name:"App",beforeMount:function(){null!==document.getElementById("serverData")&&this.$store.commit("setServerData",JSON.parse(document.getElementById("serverData").dataset.server))}},c=(0,o(51900).Z)(s,(function(){var t=this.$createElement;return(this._self._c||t)("router-view")}),[],!1,null,null,null).exports,d=o(78345),p=o(79753),f=function(){return Promise.all([o.e(874),o.e(351)]).then(o.bind(o,27843))},l=function(){return Promise.all([o.e(874),o.e(418)]).then(o.bind(o,8553))};i.default.use(d.Z);var m=new d.Z({mode:"history",base:(0,p.generateUrl)(""),linkActiveClass:"active",routes:[{path:"/:index(index.php/)?settings/users",component:f,props:!0,name:"users",children:[{path:":selectedGroup",name:"group",component:f}]},{path:"/:index(index.php/)?settings/apps",component:l,props:!0,name:"apps",children:[{path:":category",name:"apps-category",component:l,children:[{path:":id",name:"apps-details",component:l}]}]}]}),g=o(20629),h=o(4820),A=o(10128),v=o.n(A),U=function(t){return t.replace(/\/$/,"")},I=function(){return v()()},b=function(t,e){return h.default.get(U(t),e)},y=function(t,e){return h.default.post(U(t),e)},L=function(t,e){return h.default.put(U(t),e)},P=function(t,e){return h.default.delete(U(t),{params:e})},O=function(t,e){return 1===e?t.sort((function(t,e){return t.usercount-t.disabled<e.usercount-e.disabled})):t.sort((function(t,e){return t.name.localeCompare(e.name)}))},w={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},E={appendUsers:function(t,e){var r=t.users.concat(Object.keys(e).map((function(t){return e[t]})));t.usersOffset+=t.usersLimit,t.users=r},setPasswordPolicyMinLength:function(t,e){t.minPasswordLength=""!==e?e:0},initGroups:function(t,e){var r=e.groups,n=e.orderBy,o=e.userCount;t.groups=r.map((function(t){return Object.assign({},w,t)})),t.orderBy=n,t.userCount=o,t.groups=O(t.groups,t.orderBy)},addGroup:function(t,e){var r=e.gid,n=e.displayName;try{if(void 0!==t.groups.find((function(t){return t.id===r})))return;var o=Object.assign({},w,{id:r,name:n});t.groups.push(o),t.groups=O(t.groups,t.orderBy)}catch(t){console.error("Can't create group",t)}},renameGroup:function(t,e){var r=e.gid,n=e.displayName,o=t.groups.findIndex((function(t){return t.id===r}));if(o>=0){var i=t.groups[o];i.name=n,t.groups.splice(o,1,i),t.groups=O(t.groups,t.orderBy)}},removeGroup:function(t,e){var r=t.groups.findIndex((function(t){return t.id===e}));r>=0&&t.groups.splice(r,1)},addUserGroup:function(t,e){var r=e.userid,n=e.gid,o=t.groups.find((function(t){return t.id===n})),i=t.users.find((function(t){return t.id===r}));o&&i.enabled&&t.userCount>0&&o.usercount++,i.groups.push(n),t.groups=O(t.groups,t.orderBy)},removeUserGroup:function(t,e){var r=e.userid,n=e.gid,o=t.groups.find((function(t){return t.id===n})),i=t.users.find((function(t){return t.id===r}));o&&i.enabled&&t.userCount>0&&o.usercount--;var u=i.groups;u.splice(u.indexOf(n),1),t.groups=O(t.groups,t.orderBy)},addUserSubAdmin:function(t,e){var r=e.userid,n=e.gid;t.users.find((function(t){return t.id===r})).subadmin.push(n)},removeUserSubAdmin:function(t,e){var r=e.userid,n=e.gid,o=t.users.find((function(t){return t.id===r})).subadmin;o.splice(o.indexOf(n),1)},deleteUser:function(t,e){var r=t.users.findIndex((function(t){return t.id===e}));t.users.splice(r,1)},addUserData:function(t,e){t.users.push(e.data.ocs.data)},enableDisableUser:function(t,e){var r=e.userid,n=e.enabled,o=t.users.find((function(t){return t.id===r}));o.enabled=n,t.userCount>0&&(t.groups.find((function(t){return"disabled"===t.id})).usercount+=n?-1:1,t.userCount+=n?1:-1,o.groups.forEach((function(e){t.groups.find((function(t){return t.id===e})).disabled+=n?-1:1})))},setUserData:function(t,e){var r=e.userid,n=e.key,o=e.value;if("quota"===n){var i=OC.Util.computerFileSize(o);t.users.find((function(t){return t.id===r}))[n][n]=null!==i?i:o}else t.users.find((function(t){return t.id===r}))[n]=o},resetUsers:function(t){t.users=[],t.usersOffset=0}},C=h.default.CancelToken,_=null,R={state:{users:[],groups:[],orderBy:1,minPasswordLength:0,usersOffset:0,usersLimit:25,userCount:0},mutations:E,getters:{getUsers:function(t){return t.users},getGroups:function(t){return t.groups},getSubadminGroups:function(t){return t.groups.filter((function(t){return"admin"!==t.id&&"disabled"!==t.id}))},getPasswordPolicyMinLength:function(t){return t.minPasswordLength},getUsersOffset:function(t){return t.usersOffset},getUsersLimit:function(t){return t.usersLimit},getUserCount:function(t){return t.userCount}},actions:{getUsers:function(t,e){var r=e.offset,n=e.limit,o=e.search,i=e.group;return _&&_.cancel("Operation canceled by another search request."),_=C.source(),o="string"==typeof o?o:"",""!==(i="string"==typeof i?i:"")?b((0,p.generateOcsUrl)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(i),offset:r,limit:n,search:o}),{cancelToken:_.token}).then((function(e){var r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((function(e){h.default.isCancel(e)||t.commit("API_FAILURE",e)})):b((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o}),{cancelToken:_.token}).then((function(e){var r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((function(e){h.default.isCancel(e)||t.commit("API_FAILURE",e)}))},getGroups:function(t,e){var r=e.offset,n=e.limit,o=e.search;o="string"==typeof o?o:"";var i=-1===n?"":"&limit=".concat(n);return b((0,p.generateOcsUrl)("cloud/groups?offset={offset}&search={search}",{offset:r,search:o})+i).then((function(e){return Object.keys(e.data.ocs.data.groups).length>0&&(e.data.ocs.data.groups.forEach((function(e){t.commit("addGroup",{gid:e,displayName:e})})),!0)})).catch((function(e){return t.commit("API_FAILURE",e)}))},getUsersFromList:function(t,e){var r=e.offset,n=e.limit,o=e.search;return o="string"==typeof o?o:"",b((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).then((function(e){return Object.keys(e.data.ocs.data.users).length>0&&(t.commit("appendUsers",e.data.ocs.data.users),!0)})).catch((function(e){return t.commit("API_FAILURE",e)}))},getUsersFromGroup:function(t,e){var r=e.groupid,n=e.offset,o=e.limit;return b((0,p.generateOcsUrl)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:n,limit:o})).then((function(e){return t.commit("getUsersFromList",e.data.ocs.data.users)})).catch((function(e){return t.commit("API_FAILURE",e)}))},getPasswordPolicyMinLength:function(t){return!(!OC.getCapabilities().password_policy||!OC.getCapabilities().password_policy.minLength)&&(t.commit("setPasswordPolicyMinLength",OC.getCapabilities().password_policy.minLength),OC.getCapabilities().password_policy.minLength)},addGroup:function(t,e){return I().then((function(r){return y((0,p.generateOcsUrl)("cloud/groups"),{groupid:e}).then((function(r){return t.commit("addGroup",{gid:e,displayName:e}),{gid:e,displayName:e}})).catch((function(t){throw t}))})).catch((function(r){throw t.commit("API_FAILURE",{gid:e,error:r}),r}))},renameGroup:function(t,e){var r=e.groupid,n=e.displayName;return I().then((function(e){return L((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:n}).then((function(e){return t.commit("renameGroup",{gid:r,displayName:n}),{groupid:r,displayName:n}})).catch((function(t){throw t}))})).catch((function(e){throw t.commit("API_FAILURE",{groupid:r,error:e}),e}))},removeGroup:function(t,e){return I().then((function(r){return P((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(e)})).then((function(r){return t.commit("removeGroup",e)})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{gid:e,error:r})}))},addUserGroup:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return y((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((function(e){return t.commit("addUserGroup",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},removeUserGroup:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return P((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((function(e){return t.commit("removeUserGroup",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){throw t.commit("API_FAILURE",{userid:r,error:e}),e}))},addUserSubAdmin:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return y((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((function(e){return t.commit("addUserSubAdmin",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},removeUserSubAdmin:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return P((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((function(e){return t.commit("removeUserSubAdmin",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},wipeUserDevices:function(t,e){return I().then((function(t){return y((0,p.generateOcsUrl)("cloud/users/{userid}/wipe",{userid:e})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))},deleteUser:function(t,e){return I().then((function(r){return P((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:e})).then((function(r){return t.commit("deleteUser",e)})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))},addUser:function(t,e){var r=t.commit,n=t.dispatch,o=e.userid,i=e.password,u=e.displayName,a=e.email,s=e.groups,c=e.subadmin,d=e.quota,f=e.language;return I().then((function(t){return y((0,p.generateOcsUrl)("cloud/users"),{userid:o,password:i,displayName:u,email:a,groups:s,subadmin:c,quota:d,language:f}).then((function(t){return n("addUserData",o||t.data.ocs.data.id)})).catch((function(t){throw t}))})).catch((function(t){throw r("API_FAILURE",{userid:o,error:t}),t}))},addUserData:function(t,e){return I().then((function(r){return b((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:e})).then((function(e){return t.commit("addUserData",e)})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))},enableDisableUser:function(t,e){var r=e.userid,n=e.enabled,o=void 0===n||n,i=o?"enable":"disable";return I().then((function(e){return L((0,p.generateOcsUrl)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:i})).then((function(e){return t.commit("enableDisableUser",{userid:r,enabled:o})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},setUserData:function(t,e){var r=e.userid,n=e.key,o=e.value,i=["email","displayname"];return-1!==["email","language","quota","displayname","password"].indexOf(n)&&"string"==typeof o&&(-1===i.indexOf(n)&&o.length>0||-1!==i.indexOf(n))?I().then((function(e){return L((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:r}),{key:n,value:o}).then((function(e){return t.commit("setUserData",{userid:r,key:n,value:o})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})})):Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:function(t,e){return I().then((function(t){return y((0,p.generateOcsUrl)("cloud/users/{userid}/welcome",{userid:e})).then((function(t){return!0})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))}}},F=o(26932),k=(o(73317),{APPS_API_FAILURE:function(e,r){(0,F.x2)(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{timeout:7,isHTML:!0}),console.error(e,r)},initCategories:function(t,e){var r=e.categories,n=e.updateCount;t.categories=r,t.updateCount=n},setUpdateCount:function(t,e){t.updateCount=e},addCategory:function(t,e){t.categories.push(e)},appendCategories:function(t,e){t.categories=e},setAllApps:function(t,e){t.apps=e},setError:function(t,e){var r=e.appId,n=e.error;Array.isArray(r)||(r=[r]),r.forEach((function(e){t.apps.find((function(t){return t.id===e})).error=n}))},clearError:function(t,e){var r=e.appId;e.error,t.apps.find((function(t){return t.id===r})).error=null},enableApp:function(t,e){var r=e.appId,n=e.groups,o=t.apps.find((function(t){return t.id===r}));o.active=!0,o.groups=n},disableApp:function(t,e){var r=t.apps.find((function(t){return t.id===e}));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0)},uninstallApp:function(t,e){t.apps.find((function(t){return t.id===e})).active=!1,t.apps.find((function(t){return t.id===e})).groups=[],t.apps.find((function(t){return t.id===e})).needsDownload=!0,t.apps.find((function(t){return t.id===e})).installed=!1,t.apps.find((function(t){return t.id===e})).canUnInstall=!1,t.apps.find((function(t){return t.id===e})).canInstall=!0},updateApp:function(t,e){var r=t.apps.find((function(t){return t.id===e})),n=r.update;r.update=null,r.version=n,t.updateCount--},resetApps:function(t){t.apps=[]},reset:function(t){t.apps=[],t.categories=[],t.updateCount=0},startLoading:function(t,e){Array.isArray(e)?e.forEach((function(e){i.default.set(t.loading,e,!0)})):i.default.set(t.loading,e,!0)},stopLoading:function(t,e){Array.isArray(e)?e.forEach((function(e){i.default.set(t.loading,e,!1)})):i.default.set(t.loading,e,!1)}}),S={enableApp:function(e,r){var n,o=r.appId,i=r.groups;return n=Array.isArray(o)?o:[o],I().then((function(r){return e.commit("startLoading",n),e.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/enable"),{appIds:n,groups:i}).then((function(r){return e.commit("stopLoading",n),e.commit("stopLoading","install"),n.forEach((function(t){e.commit("enableApp",{appId:t,groups:i})})),b((0,p.generateUrl)("apps/files")).then((function(){r.data.update_required&&((0,F.JQ)(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),{onClick:function(){return window.location.reload()},close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((function(){Array.isArray(o)||e.commit("setError",{appId:n,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")})}))})).catch((function(t){e.commit("stopLoading",n),e.commit("stopLoading","install"),e.commit("setError",{appId:n,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:o,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:o,error:t})}))},forceEnableApp:function(t,e){var r,n=e.appId;return e.groups,r=Array.isArray(n)?n:[n],I().then((function(){return t.commit("startLoading",r),t.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/force"),{appId:n}).then((function(t){location.reload()})).catch((function(e){t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("setError",{appId:r,error:e.response.data.data.message}),t.commit("APPS_API_FAILURE",{appId:n,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:n,error:e})}))},disableApp:function(t,e){var r,n=e.appId;return r=Array.isArray(n)?n:[n],I().then((function(e){return t.commit("startLoading",r),y((0,p.generateUrl)("settings/apps/disable"),{appIds:r}).then((function(e){return t.commit("stopLoading",r),r.forEach((function(e){t.commit("disableApp",e)})),!0})).catch((function(e){t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:n,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:n,error:e})}))},uninstallApp:function(t,e){var r=e.appId;return I().then((function(e){return t.commit("startLoading",r),b((0,p.generateUrl)("settings/apps/uninstall/".concat(r))).then((function(e){return t.commit("stopLoading",r),t.commit("uninstallApp",r),!0})).catch((function(e){t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:r,error:e})}))},updateApp:function(t,e){var r=e.appId;return I().then((function(e){return t.commit("startLoading",r),t.commit("startLoading","install"),b((0,p.generateUrl)("settings/apps/update/".concat(r))).then((function(e){return t.commit("stopLoading","install"),t.commit("stopLoading",r),t.commit("updateApp",r),!0})).catch((function(e){t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:r,error:e})}))},getAllApps:function(t){return t.commit("startLoading","list"),b((0,p.generateUrl)("settings/apps/list")).then((function(e){return t.commit("setAllApps",e.data.apps),t.commit("stopLoading","list"),!0})).catch((function(e){return t.commit("API_FAILURE",e)}))},getCategories:function(t){return t.commit("startLoading","categories"),b((0,p.generateUrl)("settings/apps/categories")).then((function(e){return e.data.length>0&&(t.commit("appendCategories",e.data),t.commit("stopLoading","categories"),!0)})).catch((function(e){return t.commit("API_FAILURE",e)}))}},x={state:{apps:[],categories:[],updateCount:0,loading:{},loadingList:!1},mutations:k,getters:{loading:function(t){return function(e){return t.loading[e]}},getCategories:function(t){return t.categories},getAllApps:function(t){return t.apps},getUpdateCount:function(t){return t.updateCount}},actions:S},G={state:{},mutations:{},getters:{},actions:{setAppConfig:function(t,e){var r=e.app,n=e.key,o=e.value;return I().then((function(t){return y((0,p.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:n}),{value:o}).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{app:r,key:n,value:o,error:e})}))}}};i.default.use(g.ZP);var D={API_FAILURE:function(e,r){try{var n=r.error.response.data.ocs.meta.message;OC.Notification.showHtml(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+n,{timeout:7})}catch(e){OC.Notification.showTemporary(t("settings","An error occured during the request. Unable to proceed."))}console.error(e,r)}},j=new g.yh({modules:{users:R,apps:x,settings:{state:{serverData:{}},mutations:{setServerData:function(t,e){t.serverData=e}},getters:{getServerData:function(t){return t.serverData}},actions:{}},oc:G},strict:!1,mutations:D});i.default.use(u.default,{defaultHtml:!1}),(0,a.Z)(j,m),o.nc=btoa(OC.requestToken),i.default.prototype.t=t,i.default.prototype.n=n,i.default.prototype.OC=OC,i.default.prototype.OCA=OCA,i.default.prototype.oc_userconfig=oc_userconfig,new i.default({router:m,store:j,render:function(t){return t(c)}}).$mount("#content")}},u={};function a(t){var e=u[t];if(void 0!==e)return e.exports;var r=u[t]={id:t,loaded:!1,exports:{}};return i[t].call(r.exports,r,r.exports,a),r.loaded=!0,r.exports}a.m=i,a.amdD=function(){throw new Error("define cannot be used indirect")},a.amdO={},e=[],a.O=function(t,r,n,o){if(!r){var i=1/0;for(d=0;d<e.length;d++){r=e[d][0],n=e[d][1],o=e[d][2];for(var u=!0,s=0;s<r.length;s++)(!1&o||i>=o)&&Object.keys(a.O).every((function(t){return a.O[t](r[s])}))?r.splice(s--,1):(u=!1,o<i&&(i=o));if(u){e.splice(d--,1);var c=n();void 0!==c&&(t=c)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1][2]>o;d--)e[d]=e[d-1];e[d]=[r,n,o]},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,{a:e}),e},a.d=function(t,e){for(var r in e)a.o(e,r)&&!a.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},a.f={},a.e=function(t){return Promise.all(Object.keys(a.f).reduce((function(e,r){return a.f[r](t,e),e}),[]))},a.u=function(t){return{351:"settings-users",418:"settings-apps-view"}[t]+"-"+t+".js?v="+{351:"949df4154c39faa66c05",418:"c045c97a7059591a7ca7"}[t]},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r={},o="nextcloud:",a.l=function(t,e,n,i){if(r[t])r[t].push(e);else{var u,s;if(void 0!==n)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var p=c[d];if(p.getAttribute("src")==t||p.getAttribute("data-webpack")==o+n){u=p;break}}u||(s=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,a.nc&&u.setAttribute("nonce",a.nc),u.setAttribute("data-webpack",o+n),u.src=t),r[t]=[e];var f=function(e,n){u.onerror=u.onload=null,clearTimeout(l);var o=r[t];if(delete r[t],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach((function(t){return t(n)})),e)return e(n)},l=setTimeout(f.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=f.bind(null,u.onerror),u.onload=f.bind(null,u.onload),s&&document.head.appendChild(u)}},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},a.j=562,function(){var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");r.length&&(t=r[r.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t}(),function(){a.b=document.baseURI||self.location.href;var t={562:0};a.f.j=function(e,r){var n=a.o(t,e)?t[e]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise((function(r,o){n=t[e]=[r,o]}));r.push(n[2]=o);var i=a.p+a.u(e),u=new Error;a.l(i,(function(r){if(a.o(t,e)&&(0!==(n=t[e])&&(t[e]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;u.message="Loading chunk "+e+" failed.\n("+o+": "+i+")",u.name="ChunkLoadError",u.type=o,u.request=i,n[1](u)}}),"chunk-"+e,e)}},a.O.j=function(e){return 0===t[e]};var e=function(e,r){var n,o,i=r[0],u=r[1],s=r[2],c=0;if(i.some((function(e){return 0!==t[e]}))){for(n in u)a.o(u,n)&&(a.m[n]=u[n]);if(s)var d=s(a)}for(e&&e(r);c<i.length;c++)o=i[c],a.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return a.O(d)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(e.bind(null,0)),r.push=e.bind(null,r.push.bind(r))}();var s=a.O(void 0,[874],(function(){return a(31579)}));s=a.O(s)}();
-//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=002abc03c5fa44f1f9f1 \ No newline at end of file
+!function(){"use strict";var e,r,o,i={31579:function(e,r,o){var i=o(20144),u=o(34741),a=o(83678),s={name:"App",beforeMount:function(){null!==document.getElementById("serverData")&&this.$store.commit("setServerData",JSON.parse(document.getElementById("serverData").dataset.server))}},c=(0,o(51900).Z)(s,(function(){var t=this.$createElement;return(this._self._c||t)("router-view")}),[],!1,null,null,null).exports,d=o(78345),p=o(79753),f=function(){return Promise.all([o.e(874),o.e(351)]).then(o.bind(o,98902))},l=function(){return Promise.all([o.e(874),o.e(418)]).then(o.bind(o,8553))};i.default.use(d.Z);var m=new d.Z({mode:"history",base:(0,p.generateUrl)(""),linkActiveClass:"active",routes:[{path:"/:index(index.php/)?settings/users",component:f,props:!0,name:"users",children:[{path:":selectedGroup",name:"group",component:f}]},{path:"/:index(index.php/)?settings/apps",component:l,props:!0,name:"apps",children:[{path:":category",name:"apps-category",component:l,children:[{path:":id",name:"apps-details",component:l}]}]}]}),g=o(20629),h=o(4820),A=o(10128),v=o.n(A),U=function(t){return t.replace(/\/$/,"")},I=function(){return v()()},b=function(t,e){return h.default.get(U(t),e)},y=function(t,e){return h.default.post(U(t),e)},L=function(t,e){return h.default.put(U(t),e)},P=function(t,e){return h.default.delete(U(t),{params:e})},O=function(t,e){return 1===e?t.sort((function(t,e){return t.usercount-t.disabled<e.usercount-e.disabled})):t.sort((function(t,e){return t.name.localeCompare(e.name)}))},w={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},E={appendUsers:function(t,e){var r=t.users.concat(Object.keys(e).map((function(t){return e[t]})));t.usersOffset+=t.usersLimit,t.users=r},setPasswordPolicyMinLength:function(t,e){t.minPasswordLength=""!==e?e:0},initGroups:function(t,e){var r=e.groups,n=e.orderBy,o=e.userCount;t.groups=r.map((function(t){return Object.assign({},w,t)})),t.orderBy=n,t.userCount=o,t.groups=O(t.groups,t.orderBy)},addGroup:function(t,e){var r=e.gid,n=e.displayName;try{if(void 0!==t.groups.find((function(t){return t.id===r})))return;var o=Object.assign({},w,{id:r,name:n});t.groups.push(o),t.groups=O(t.groups,t.orderBy)}catch(t){console.error("Can't create group",t)}},renameGroup:function(t,e){var r=e.gid,n=e.displayName,o=t.groups.findIndex((function(t){return t.id===r}));if(o>=0){var i=t.groups[o];i.name=n,t.groups.splice(o,1,i),t.groups=O(t.groups,t.orderBy)}},removeGroup:function(t,e){var r=t.groups.findIndex((function(t){return t.id===e}));r>=0&&t.groups.splice(r,1)},addUserGroup:function(t,e){var r=e.userid,n=e.gid,o=t.groups.find((function(t){return t.id===n})),i=t.users.find((function(t){return t.id===r}));o&&i.enabled&&t.userCount>0&&o.usercount++,i.groups.push(n),t.groups=O(t.groups,t.orderBy)},removeUserGroup:function(t,e){var r=e.userid,n=e.gid,o=t.groups.find((function(t){return t.id===n})),i=t.users.find((function(t){return t.id===r}));o&&i.enabled&&t.userCount>0&&o.usercount--;var u=i.groups;u.splice(u.indexOf(n),1),t.groups=O(t.groups,t.orderBy)},addUserSubAdmin:function(t,e){var r=e.userid,n=e.gid;t.users.find((function(t){return t.id===r})).subadmin.push(n)},removeUserSubAdmin:function(t,e){var r=e.userid,n=e.gid,o=t.users.find((function(t){return t.id===r})).subadmin;o.splice(o.indexOf(n),1)},deleteUser:function(t,e){var r=t.users.findIndex((function(t){return t.id===e}));t.users.splice(r,1)},addUserData:function(t,e){t.users.push(e.data.ocs.data)},enableDisableUser:function(t,e){var r=e.userid,n=e.enabled,o=t.users.find((function(t){return t.id===r}));o.enabled=n,t.userCount>0&&(t.groups.find((function(t){return"disabled"===t.id})).usercount+=n?-1:1,t.userCount+=n?1:-1,o.groups.forEach((function(e){t.groups.find((function(t){return t.id===e})).disabled+=n?-1:1})))},setUserData:function(t,e){var r=e.userid,n=e.key,o=e.value;if("quota"===n){var i=OC.Util.computerFileSize(o);t.users.find((function(t){return t.id===r}))[n][n]=null!==i?i:o}else t.users.find((function(t){return t.id===r}))[n]=o},resetUsers:function(t){t.users=[],t.usersOffset=0}},C=h.default.CancelToken,_=null,R={state:{users:[],groups:[],orderBy:1,minPasswordLength:0,usersOffset:0,usersLimit:25,userCount:0},mutations:E,getters:{getUsers:function(t){return t.users},getGroups:function(t){return t.groups},getSubadminGroups:function(t){return t.groups.filter((function(t){return"admin"!==t.id&&"disabled"!==t.id}))},getPasswordPolicyMinLength:function(t){return t.minPasswordLength},getUsersOffset:function(t){return t.usersOffset},getUsersLimit:function(t){return t.usersLimit},getUserCount:function(t){return t.userCount}},actions:{getUsers:function(t,e){var r=e.offset,n=e.limit,o=e.search,i=e.group;return _&&_.cancel("Operation canceled by another search request."),_=C.source(),o="string"==typeof o?o:"",""!==(i="string"==typeof i?i:"")?b((0,p.generateOcsUrl)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(i),offset:r,limit:n,search:o}),{cancelToken:_.token}).then((function(e){var r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((function(e){h.default.isCancel(e)||t.commit("API_FAILURE",e)})):b((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o}),{cancelToken:_.token}).then((function(e){var r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((function(e){h.default.isCancel(e)||t.commit("API_FAILURE",e)}))},getGroups:function(t,e){var r=e.offset,n=e.limit,o=e.search;o="string"==typeof o?o:"";var i=-1===n?"":"&limit=".concat(n);return b((0,p.generateOcsUrl)("cloud/groups?offset={offset}&search={search}",{offset:r,search:o})+i).then((function(e){return Object.keys(e.data.ocs.data.groups).length>0&&(e.data.ocs.data.groups.forEach((function(e){t.commit("addGroup",{gid:e,displayName:e})})),!0)})).catch((function(e){return t.commit("API_FAILURE",e)}))},getUsersFromList:function(t,e){var r=e.offset,n=e.limit,o=e.search;return o="string"==typeof o?o:"",b((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).then((function(e){return Object.keys(e.data.ocs.data.users).length>0&&(t.commit("appendUsers",e.data.ocs.data.users),!0)})).catch((function(e){return t.commit("API_FAILURE",e)}))},getUsersFromGroup:function(t,e){var r=e.groupid,n=e.offset,o=e.limit;return b((0,p.generateOcsUrl)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:n,limit:o})).then((function(e){return t.commit("getUsersFromList",e.data.ocs.data.users)})).catch((function(e){return t.commit("API_FAILURE",e)}))},getPasswordPolicyMinLength:function(t){return!(!OC.getCapabilities().password_policy||!OC.getCapabilities().password_policy.minLength)&&(t.commit("setPasswordPolicyMinLength",OC.getCapabilities().password_policy.minLength),OC.getCapabilities().password_policy.minLength)},addGroup:function(t,e){return I().then((function(r){return y((0,p.generateOcsUrl)("cloud/groups"),{groupid:e}).then((function(r){return t.commit("addGroup",{gid:e,displayName:e}),{gid:e,displayName:e}})).catch((function(t){throw t}))})).catch((function(r){throw t.commit("API_FAILURE",{gid:e,error:r}),r}))},renameGroup:function(t,e){var r=e.groupid,n=e.displayName;return I().then((function(e){return L((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:n}).then((function(e){return t.commit("renameGroup",{gid:r,displayName:n}),{groupid:r,displayName:n}})).catch((function(t){throw t}))})).catch((function(e){throw t.commit("API_FAILURE",{groupid:r,error:e}),e}))},removeGroup:function(t,e){return I().then((function(r){return P((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(e)})).then((function(r){return t.commit("removeGroup",e)})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{gid:e,error:r})}))},addUserGroup:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return y((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((function(e){return t.commit("addUserGroup",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},removeUserGroup:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return P((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((function(e){return t.commit("removeUserGroup",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){throw t.commit("API_FAILURE",{userid:r,error:e}),e}))},addUserSubAdmin:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return y((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((function(e){return t.commit("addUserSubAdmin",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},removeUserSubAdmin:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return P((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((function(e){return t.commit("removeUserSubAdmin",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},wipeUserDevices:function(t,e){return I().then((function(t){return y((0,p.generateOcsUrl)("cloud/users/{userid}/wipe",{userid:e})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))},deleteUser:function(t,e){return I().then((function(r){return P((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:e})).then((function(r){return t.commit("deleteUser",e)})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))},addUser:function(t,e){var r=t.commit,n=t.dispatch,o=e.userid,i=e.password,u=e.displayName,a=e.email,s=e.groups,c=e.subadmin,d=e.quota,f=e.language;return I().then((function(t){return y((0,p.generateOcsUrl)("cloud/users"),{userid:o,password:i,displayName:u,email:a,groups:s,subadmin:c,quota:d,language:f}).then((function(t){return n("addUserData",o||t.data.ocs.data.id)})).catch((function(t){throw t}))})).catch((function(t){throw r("API_FAILURE",{userid:o,error:t}),t}))},addUserData:function(t,e){return I().then((function(r){return b((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:e})).then((function(e){return t.commit("addUserData",e)})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))},enableDisableUser:function(t,e){var r=e.userid,n=e.enabled,o=void 0===n||n,i=o?"enable":"disable";return I().then((function(e){return L((0,p.generateOcsUrl)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:i})).then((function(e){return t.commit("enableDisableUser",{userid:r,enabled:o})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},setUserData:function(t,e){var r=e.userid,n=e.key,o=e.value,i=["email","displayname"];return-1!==["email","language","quota","displayname","password"].indexOf(n)&&"string"==typeof o&&(-1===i.indexOf(n)&&o.length>0||-1!==i.indexOf(n))?I().then((function(e){return L((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:r}),{key:n,value:o}).then((function(e){return t.commit("setUserData",{userid:r,key:n,value:o})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})})):Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:function(t,e){return I().then((function(t){return y((0,p.generateOcsUrl)("cloud/users/{userid}/welcome",{userid:e})).then((function(t){return!0})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))}}},F=o(26932),k=(o(73317),{APPS_API_FAILURE:function(e,r){(0,F.x2)(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{timeout:7,isHTML:!0}),console.error(e,r)},initCategories:function(t,e){var r=e.categories,n=e.updateCount;t.categories=r,t.updateCount=n},setUpdateCount:function(t,e){t.updateCount=e},addCategory:function(t,e){t.categories.push(e)},appendCategories:function(t,e){t.categories=e},setAllApps:function(t,e){t.apps=e},setError:function(t,e){var r=e.appId,n=e.error;Array.isArray(r)||(r=[r]),r.forEach((function(e){t.apps.find((function(t){return t.id===e})).error=n}))},clearError:function(t,e){var r=e.appId;e.error,t.apps.find((function(t){return t.id===r})).error=null},enableApp:function(t,e){var r=e.appId,n=e.groups,o=t.apps.find((function(t){return t.id===r}));o.active=!0,o.groups=n},disableApp:function(t,e){var r=t.apps.find((function(t){return t.id===e}));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0)},uninstallApp:function(t,e){t.apps.find((function(t){return t.id===e})).active=!1,t.apps.find((function(t){return t.id===e})).groups=[],t.apps.find((function(t){return t.id===e})).needsDownload=!0,t.apps.find((function(t){return t.id===e})).installed=!1,t.apps.find((function(t){return t.id===e})).canUnInstall=!1,t.apps.find((function(t){return t.id===e})).canInstall=!0},updateApp:function(t,e){var r=t.apps.find((function(t){return t.id===e})),n=r.update;r.update=null,r.version=n,t.updateCount--},resetApps:function(t){t.apps=[]},reset:function(t){t.apps=[],t.categories=[],t.updateCount=0},startLoading:function(t,e){Array.isArray(e)?e.forEach((function(e){i.default.set(t.loading,e,!0)})):i.default.set(t.loading,e,!0)},stopLoading:function(t,e){Array.isArray(e)?e.forEach((function(e){i.default.set(t.loading,e,!1)})):i.default.set(t.loading,e,!1)}}),S={enableApp:function(e,r){var n,o=r.appId,i=r.groups;return n=Array.isArray(o)?o:[o],I().then((function(r){return e.commit("startLoading",n),e.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/enable"),{appIds:n,groups:i}).then((function(r){return e.commit("stopLoading",n),e.commit("stopLoading","install"),n.forEach((function(t){e.commit("enableApp",{appId:t,groups:i})})),b((0,p.generateUrl)("apps/files")).then((function(){r.data.update_required&&((0,F.JQ)(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),{onClick:function(){return window.location.reload()},close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((function(){Array.isArray(o)||e.commit("setError",{appId:n,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")})}))})).catch((function(t){e.commit("stopLoading",n),e.commit("stopLoading","install"),e.commit("setError",{appId:n,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:o,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:o,error:t})}))},forceEnableApp:function(t,e){var r,n=e.appId;return e.groups,r=Array.isArray(n)?n:[n],I().then((function(){return t.commit("startLoading",r),t.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/force"),{appId:n}).then((function(t){location.reload()})).catch((function(e){t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("setError",{appId:r,error:e.response.data.data.message}),t.commit("APPS_API_FAILURE",{appId:n,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:n,error:e})}))},disableApp:function(t,e){var r,n=e.appId;return r=Array.isArray(n)?n:[n],I().then((function(e){return t.commit("startLoading",r),y((0,p.generateUrl)("settings/apps/disable"),{appIds:r}).then((function(e){return t.commit("stopLoading",r),r.forEach((function(e){t.commit("disableApp",e)})),!0})).catch((function(e){t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:n,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:n,error:e})}))},uninstallApp:function(t,e){var r=e.appId;return I().then((function(e){return t.commit("startLoading",r),b((0,p.generateUrl)("settings/apps/uninstall/".concat(r))).then((function(e){return t.commit("stopLoading",r),t.commit("uninstallApp",r),!0})).catch((function(e){t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:r,error:e})}))},updateApp:function(t,e){var r=e.appId;return I().then((function(e){return t.commit("startLoading",r),t.commit("startLoading","install"),b((0,p.generateUrl)("settings/apps/update/".concat(r))).then((function(e){return t.commit("stopLoading","install"),t.commit("stopLoading",r),t.commit("updateApp",r),!0})).catch((function(e){t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:r,error:e})}))},getAllApps:function(t){return t.commit("startLoading","list"),b((0,p.generateUrl)("settings/apps/list")).then((function(e){return t.commit("setAllApps",e.data.apps),t.commit("stopLoading","list"),!0})).catch((function(e){return t.commit("API_FAILURE",e)}))},getCategories:function(t){return t.commit("startLoading","categories"),b((0,p.generateUrl)("settings/apps/categories")).then((function(e){return e.data.length>0&&(t.commit("appendCategories",e.data),t.commit("stopLoading","categories"),!0)})).catch((function(e){return t.commit("API_FAILURE",e)}))}},x={state:{apps:[],categories:[],updateCount:0,loading:{},loadingList:!1},mutations:k,getters:{loading:function(t){return function(e){return t.loading[e]}},getCategories:function(t){return t.categories},getAllApps:function(t){return t.apps},getUpdateCount:function(t){return t.updateCount}},actions:S},G={state:{},mutations:{},getters:{},actions:{setAppConfig:function(t,e){var r=e.app,n=e.key,o=e.value;return I().then((function(t){return y((0,p.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:n}),{value:o}).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{app:r,key:n,value:o,error:e})}))}}};i.default.use(g.ZP);var D={API_FAILURE:function(e,r){try{var n=r.error.response.data.ocs.meta.message;OC.Notification.showHtml(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+n,{timeout:7})}catch(e){OC.Notification.showTemporary(t("settings","An error occured during the request. Unable to proceed."))}console.error(e,r)}},j=new g.yh({modules:{users:R,apps:x,settings:{state:{serverData:{}},mutations:{setServerData:function(t,e){t.serverData=e}},getters:{getServerData:function(t){return t.serverData}},actions:{}},oc:G},strict:!1,mutations:D});i.default.use(u.default,{defaultHtml:!1}),(0,a.Z)(j,m),o.nc=btoa(OC.requestToken),i.default.prototype.t=t,i.default.prototype.n=n,i.default.prototype.OC=OC,i.default.prototype.OCA=OCA,i.default.prototype.oc_userconfig=oc_userconfig,new i.default({router:m,store:j,render:function(t){return t(c)}}).$mount("#content")}},u={};function a(t){var e=u[t];if(void 0!==e)return e.exports;var r=u[t]={id:t,loaded:!1,exports:{}};return i[t].call(r.exports,r,r.exports,a),r.loaded=!0,r.exports}a.m=i,a.amdD=function(){throw new Error("define cannot be used indirect")},a.amdO={},e=[],a.O=function(t,r,n,o){if(!r){var i=1/0;for(d=0;d<e.length;d++){r=e[d][0],n=e[d][1],o=e[d][2];for(var u=!0,s=0;s<r.length;s++)(!1&o||i>=o)&&Object.keys(a.O).every((function(t){return a.O[t](r[s])}))?r.splice(s--,1):(u=!1,o<i&&(i=o));if(u){e.splice(d--,1);var c=n();void 0!==c&&(t=c)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1][2]>o;d--)e[d]=e[d-1];e[d]=[r,n,o]},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,{a:e}),e},a.d=function(t,e){for(var r in e)a.o(e,r)&&!a.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},a.f={},a.e=function(t){return Promise.all(Object.keys(a.f).reduce((function(e,r){return a.f[r](t,e),e}),[]))},a.u=function(t){return{351:"settings-users",418:"settings-apps-view"}[t]+"-"+t+".js?v="+{351:"a6c3bd4e9f1198aae27c",418:"c045c97a7059591a7ca7"}[t]},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r={},o="nextcloud:",a.l=function(t,e,n,i){if(r[t])r[t].push(e);else{var u,s;if(void 0!==n)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var p=c[d];if(p.getAttribute("src")==t||p.getAttribute("data-webpack")==o+n){u=p;break}}u||(s=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,a.nc&&u.setAttribute("nonce",a.nc),u.setAttribute("data-webpack",o+n),u.src=t),r[t]=[e];var f=function(e,n){u.onerror=u.onload=null,clearTimeout(l);var o=r[t];if(delete r[t],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach((function(t){return t(n)})),e)return e(n)},l=setTimeout(f.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=f.bind(null,u.onerror),u.onload=f.bind(null,u.onload),s&&document.head.appendChild(u)}},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},a.j=562,function(){var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");r.length&&(t=r[r.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t}(),function(){a.b=document.baseURI||self.location.href;var t={562:0};a.f.j=function(e,r){var n=a.o(t,e)?t[e]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise((function(r,o){n=t[e]=[r,o]}));r.push(n[2]=o);var i=a.p+a.u(e),u=new Error;a.l(i,(function(r){if(a.o(t,e)&&(0!==(n=t[e])&&(t[e]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;u.message="Loading chunk "+e+" failed.\n("+o+": "+i+")",u.name="ChunkLoadError",u.type=o,u.request=i,n[1](u)}}),"chunk-"+e,e)}},a.O.j=function(e){return 0===t[e]};var e=function(e,r){var n,o,i=r[0],u=r[1],s=r[2],c=0;if(i.some((function(e){return 0!==t[e]}))){for(n in u)a.o(u,n)&&(a.m[n]=u[n]);if(s)var d=s(a)}for(e&&e(r);c<i.length;c++)o=i[c],a.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return a.O(d)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(e.bind(null,0)),r.push=e.bind(null,r.push.bind(r))}();var s=a.O(void 0,[874],(function(){return a(31579)}));s=a.O(s)}();
+//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=bb952a03be9423904261 \ No newline at end of file
diff --git a/dist/settings-vue-settings-apps-users-management.js.map b/dist/settings-vue-settings-apps-users-management.js.map
index 9751df323af..88a74bef281 100644
--- a/dist/settings-vue-settings-apps-users-management.js.map
+++ b/dist/settings-vue-settings-apps-users-management.js.map
@@ -1 +1 @@
-{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=002abc03c5fa44f1f9f1","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/App.vue","webpack://nextcloud/./apps/settings/src/App.vue?536c","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=template&id=50420604&","webpack:///nextcloud/apps/settings/src/router.js","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/store/settings.js","webpack:///nextcloud/apps/settings/src/main-apps-users-management.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.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!./App.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<router-view />\n</template>\n\n<script>\nexport default {\n\tname: 'App',\n\tbeforeMount() {\n\t\t// importing server data into the store\n\t\tconst serverDataElmt = document.getElementById('serverData')\n\t\tif (serverDataElmt !== null) {\n\t\t\tthis.$store.commit('setServerData', JSON.parse(document.getElementById('serverData').dataset.server))\n\t\t}\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=50420604&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('router-view')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\n\n// Dynamic loading\nconst Users = () => import(/* webpackChunkName: 'settings-users' */'./views/Users')\nconst Apps = () => import(/* webpackChunkName: 'settings-apps-view' */'./views/Apps')\n\nVue.use(Router)\n\n/*\n * This is the list of routes where the vuejs app will\n * take over php to provide data\n * You need to forward the php routing (routes.php) to\n * the settings-vue template, where the vue-router will\n * ensure the proper route.\n * ⚠️ Routes needs to match the php routes.\n */\n\nexport default new Router({\n\tmode: 'history',\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl(''),\n\tlinkActiveClass: 'active',\n\troutes: [\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/users',\n\t\t\tcomponent: Users,\n\t\t\tprops: true,\n\t\t\tname: 'users',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':selectedGroup',\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tcomponent: Users,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/apps',\n\t\t\tcomponent: Apps,\n\t\t\tprops: true,\n\t\t\tname: 'apps',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':category',\n\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: ':id',\n\t\t\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <sujith.h@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\nimport axios from '@nextcloud/axios'\nimport confirmPassword from '@nextcloud/password-confirmation'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst orderGroups = function(groups, orderBy) {\n\t/* const SORT_USERCOUNT = 1;\n\t * const SORT_GROUPNAME = 2;\n\t * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n\t */\n\tif (orderBy === 1) {\n\t\treturn groups.sort((a, b) => a.usercount - a.disabled < b.usercount - b.disabled)\n\t} else {\n\t\treturn groups.sort((a, b) => a.name.localeCompare(b.name))\n\t}\n}\n\nconst defaults = {\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [],\n\torderBy: 1,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tuserCount: 0,\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\t// convert obj to array\n\t\tconst users = state.users.concat(Object.keys(usersObj).map(userid => usersObj[userid]))\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\tinitGroups(state, { groups, orderBy, userCount }) {\n\t\tstate.groups = groups.map(group => Object.assign({}, defaults.group, group))\n\t\tstate.orderBy = orderBy\n\t\tstate.userCount = userCount\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\n\t},\n\taddGroup(state, { gid, displayName }) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === gid) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, {\n\t\t\t\tid: gid,\n\t\t\t\tname: displayName,\n\t\t\t})\n\t\t\tstate.groups.push(group)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tstate.users.push(response.data.ocs.data)\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\t// increment or not\n\t\tif (state.userCount > 0) {\n\t\t\tstate.groups.find(group => group.id === 'disabled').usercount += enabled ? -1 : 1\n\t\t\tstate.userCount += enabled ? 1 : -1\n\t\t\tuser.groups.forEach(group => {\n\t\t\t\t// Increment disabled count\n\t\t\t\tstate.groups.find(groupSearch => groupSearch.id === group).disabled += enabled ? -1 : 1\n\t\t\t})\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = OC.Util.computerFileSize(value)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSubadminGroups(state) {\n\t\t// Can't be subadmin of admin or disabled\n\t\treturn state.groups.filter(group => group.id !== 'admin' && group.id !== 'disabled')\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { gid: group, displayName: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (OC.getCapabilities().password_policy && OC.getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', OC.getCapabilities().password_policy.minLength)\n\t\t\treturn OC.getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { gid, displayName: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {Object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\twipeUserDevices(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tsetUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn api.requireAdmin().then((response) => {\n\t\t\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\t\t.then((response) => context.commit('setUserData', { userid, key, value }))\n\t\t\t\t\t\t.catch((error) => { throw error })\n\t\t\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport '@nextcloud/dialogs/styles/toast.scss'\n\nconst state = {\n\tapps: [],\n\tcategories: [],\n\tupdateCount: 0,\n\tloading: {},\n\tloadingList: false,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { timeout: 7, isHTML: true })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn api.get(generateUrl('apps/files'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tshowInfo(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonClick: () => window.location.reload(),\n\t\t\t\t\t\t\t\t\t\tclose: false,\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\t// TODO: find a cleaner solution\n\t\t\t\t\tlocation.reload()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetCategories(context) {\n\t\tcontext.commit('startLoading', 'categories')\n\t\treturn api.get(generateUrl('settings/apps/categories'))\n\t\t\t.then((response) => {\n\t\t\t\tif (response.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', response.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport users from './users'\nimport apps from './apps'\nimport settings from './settings'\nimport oc from './oc'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tOC.Notification.showHtml(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + message, { timeout: 7 })\n\t\t} catch (e) {\n\t\t\tOC.Notification.showTemporary(t('settings', 'An error occured during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nexport default new Store({\n\tmodules: {\n\t\tusers,\n\t\tapps,\n\t\tsettings,\n\t\toc,\n\t},\n\tstrict: debug,\n\n\tmutations,\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst state = {\n\tserverData: {},\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport { sync } from 'vuex-router-sync'\n\nimport App from './App.vue'\nimport router from './router'\nimport store from './store'\n\nVue.use(VTooltip, { defaultHtml: false })\n\nsync(store, router)\n\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\n// bind to window\nVue.prototype.t = t\nVue.prototype.n = n\nVue.prototype.OC = OC\nVue.prototype.OCA = OCA\n// eslint-disable-next-line camelcase\nVue.prototype.oc_userconfig = oc_userconfig\n\nconst app = new Vue({\n\trouter,\n\tstore,\n\trender: h => h(App),\n}).$mount('#content')\n\nexport { app, router, store }\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + {\"351\":\"settings-users\",\"418\":\"settings-apps-view\"}[chunkId] + \"-\" + chunkId + \".js?v=\" + {\"351\":\"949df4154c39faa66c05\",\"418\":\"c045c97a7059591a7ca7\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 562;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t562: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(31579); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","_h","this","$createElement","_self","_c","Users","Apps","Vue","Router","mode","base","generateUrl","linkActiveClass","routes","path","component","props","name","children","sanitize","url","replace","confirmPassword","options","axios","data","params","orderGroups","groups","orderBy","sort","a","b","usercount","disabled","localeCompare","defaults","id","canAdd","canRemove","mutations","appendUsers","state","usersObj","users","concat","Object","keys","map","userid","usersOffset","usersLimit","setPasswordPolicyMinLength","length","minPasswordLength","initGroups","userCount","group","assign","addGroup","gid","displayName","find","push","e","console","error","renameGroup","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","user","enabled","removeUserGroup","indexOf","addUserSubAdmin","subadmin","removeUserSubAdmin","deleteUser","userIndex","addUserData","response","ocs","enableDisableUser","forEach","setUserData","key","value","humanValue","OC","Util","computerFileSize","resetUsers","CancelToken","searchRequestCancelSource","getters","getUsers","getGroups","getSubadminGroups","filter","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getUserCount","actions","context","offset","limit","search","cancel","source","api","generateOcsUrl","encodeURIComponent","cancelToken","token","then","usersCount","commit","catch","limitParam","getUsersFromList","getUsersFromGroup","groupid","groupId","getCapabilities","password_policy","minLength","wipeUserDevices","addUser","dispatch","password","email","quota","language","userStatus","allowedEmpty","Promise","reject","Error","sendWelcomeMail","APPS_API_FAILURE","showError","t","message","timeout","isHTML","initCategories","categories","updateCount","setUpdateCount","addCategory","category","appendCategories","categoriesArray","setAllApps","apps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","canInstall","updateApp","version","update","resetApps","reset","startLoading","loading","stopLoading","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","getAllApps","getCategories","loadingList","getUpdateCount","setAppConfig","Vuex","API_FAILURE","meta","Notification","showHtml","showTemporary","Store","modules","settings","serverData","setServerData","getServerData","oc","strict","process","VTooltip","defaultHtml","sync","store","router","__webpack_nonce__","btoa","requestToken","n","OCA","oc_userconfig","render","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","loaded","__webpack_modules__","call","m","amdD","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","r","getter","__esModule","d","definition","o","defineProperty","enumerable","get","f","chunkId","all","reduce","promises","u","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","p","baseURI","self","href","installedChunks","installedChunkData","promise","resolve","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=bb952a03be9423904261","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/App.vue","webpack://nextcloud/./apps/settings/src/App.vue?536c","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=template&id=50420604&","webpack:///nextcloud/apps/settings/src/router.js","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/store/settings.js","webpack:///nextcloud/apps/settings/src/main-apps-users-management.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.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!./App.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<router-view />\n</template>\n\n<script>\nexport default {\n\tname: 'App',\n\tbeforeMount() {\n\t\t// importing server data into the store\n\t\tconst serverDataElmt = document.getElementById('serverData')\n\t\tif (serverDataElmt !== null) {\n\t\t\tthis.$store.commit('setServerData', JSON.parse(document.getElementById('serverData').dataset.server))\n\t\t}\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=50420604&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('router-view')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\n\n// Dynamic loading\nconst Users = () => import(/* webpackChunkName: 'settings-users' */'./views/Users')\nconst Apps = () => import(/* webpackChunkName: 'settings-apps-view' */'./views/Apps')\n\nVue.use(Router)\n\n/*\n * This is the list of routes where the vuejs app will\n * take over php to provide data\n * You need to forward the php routing (routes.php) to\n * the settings-vue template, where the vue-router will\n * ensure the proper route.\n * ⚠️ Routes needs to match the php routes.\n */\n\nexport default new Router({\n\tmode: 'history',\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl(''),\n\tlinkActiveClass: 'active',\n\troutes: [\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/users',\n\t\t\tcomponent: Users,\n\t\t\tprops: true,\n\t\t\tname: 'users',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':selectedGroup',\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tcomponent: Users,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/apps',\n\t\t\tcomponent: Apps,\n\t\t\tprops: true,\n\t\t\tname: 'apps',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':category',\n\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: ':id',\n\t\t\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <sujith.h@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\nimport axios from '@nextcloud/axios'\nimport confirmPassword from '@nextcloud/password-confirmation'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst orderGroups = function(groups, orderBy) {\n\t/* const SORT_USERCOUNT = 1;\n\t * const SORT_GROUPNAME = 2;\n\t * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n\t */\n\tif (orderBy === 1) {\n\t\treturn groups.sort((a, b) => a.usercount - a.disabled < b.usercount - b.disabled)\n\t} else {\n\t\treturn groups.sort((a, b) => a.name.localeCompare(b.name))\n\t}\n}\n\nconst defaults = {\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [],\n\torderBy: 1,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tuserCount: 0,\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\t// convert obj to array\n\t\tconst users = state.users.concat(Object.keys(usersObj).map(userid => usersObj[userid]))\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\tinitGroups(state, { groups, orderBy, userCount }) {\n\t\tstate.groups = groups.map(group => Object.assign({}, defaults.group, group))\n\t\tstate.orderBy = orderBy\n\t\tstate.userCount = userCount\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\n\t},\n\taddGroup(state, { gid, displayName }) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === gid) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, {\n\t\t\t\tid: gid,\n\t\t\t\tname: displayName,\n\t\t\t})\n\t\t\tstate.groups.push(group)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tstate.users.push(response.data.ocs.data)\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\t// increment or not\n\t\tif (state.userCount > 0) {\n\t\t\tstate.groups.find(group => group.id === 'disabled').usercount += enabled ? -1 : 1\n\t\t\tstate.userCount += enabled ? 1 : -1\n\t\t\tuser.groups.forEach(group => {\n\t\t\t\t// Increment disabled count\n\t\t\t\tstate.groups.find(groupSearch => groupSearch.id === group).disabled += enabled ? -1 : 1\n\t\t\t})\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = OC.Util.computerFileSize(value)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSubadminGroups(state) {\n\t\t// Can't be subadmin of admin or disabled\n\t\treturn state.groups.filter(group => group.id !== 'admin' && group.id !== 'disabled')\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { gid: group, displayName: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (OC.getCapabilities().password_policy && OC.getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', OC.getCapabilities().password_policy.minLength)\n\t\t\treturn OC.getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { gid, displayName: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {Object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\twipeUserDevices(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tsetUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn api.requireAdmin().then((response) => {\n\t\t\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\t\t.then((response) => context.commit('setUserData', { userid, key, value }))\n\t\t\t\t\t\t.catch((error) => { throw error })\n\t\t\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport '@nextcloud/dialogs/styles/toast.scss'\n\nconst state = {\n\tapps: [],\n\tcategories: [],\n\tupdateCount: 0,\n\tloading: {},\n\tloadingList: false,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { timeout: 7, isHTML: true })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn api.get(generateUrl('apps/files'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tshowInfo(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonClick: () => window.location.reload(),\n\t\t\t\t\t\t\t\t\t\tclose: false,\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\t// TODO: find a cleaner solution\n\t\t\t\t\tlocation.reload()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetCategories(context) {\n\t\tcontext.commit('startLoading', 'categories')\n\t\treturn api.get(generateUrl('settings/apps/categories'))\n\t\t\t.then((response) => {\n\t\t\t\tif (response.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', response.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport users from './users'\nimport apps from './apps'\nimport settings from './settings'\nimport oc from './oc'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tOC.Notification.showHtml(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + message, { timeout: 7 })\n\t\t} catch (e) {\n\t\t\tOC.Notification.showTemporary(t('settings', 'An error occured during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nexport default new Store({\n\tmodules: {\n\t\tusers,\n\t\tapps,\n\t\tsettings,\n\t\toc,\n\t},\n\tstrict: debug,\n\n\tmutations,\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst state = {\n\tserverData: {},\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport { sync } from 'vuex-router-sync'\n\nimport App from './App.vue'\nimport router from './router'\nimport store from './store'\n\nVue.use(VTooltip, { defaultHtml: false })\n\nsync(store, router)\n\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\n// bind to window\nVue.prototype.t = t\nVue.prototype.n = n\nVue.prototype.OC = OC\nVue.prototype.OCA = OCA\n// eslint-disable-next-line camelcase\nVue.prototype.oc_userconfig = oc_userconfig\n\nconst app = new Vue({\n\trouter,\n\tstore,\n\trender: h => h(App),\n}).$mount('#content')\n\nexport { app, router, store }\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + {\"351\":\"settings-users\",\"418\":\"settings-apps-view\"}[chunkId] + \"-\" + chunkId + \".js?v=\" + {\"351\":\"a6c3bd4e9f1198aae27c\",\"418\":\"c045c97a7059591a7ca7\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 562;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t562: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(31579); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","_h","this","$createElement","_self","_c","Users","Apps","Vue","Router","mode","base","generateUrl","linkActiveClass","routes","path","component","props","name","children","sanitize","url","replace","confirmPassword","options","axios","data","params","orderGroups","groups","orderBy","sort","a","b","usercount","disabled","localeCompare","defaults","id","canAdd","canRemove","mutations","appendUsers","state","usersObj","users","concat","Object","keys","map","userid","usersOffset","usersLimit","setPasswordPolicyMinLength","length","minPasswordLength","initGroups","userCount","group","assign","addGroup","gid","displayName","find","push","e","console","error","renameGroup","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","user","enabled","removeUserGroup","indexOf","addUserSubAdmin","subadmin","removeUserSubAdmin","deleteUser","userIndex","addUserData","response","ocs","enableDisableUser","forEach","setUserData","key","value","humanValue","OC","Util","computerFileSize","resetUsers","CancelToken","searchRequestCancelSource","getters","getUsers","getGroups","getSubadminGroups","filter","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getUserCount","actions","context","offset","limit","search","cancel","source","api","generateOcsUrl","encodeURIComponent","cancelToken","token","then","usersCount","commit","catch","limitParam","getUsersFromList","getUsersFromGroup","groupid","groupId","getCapabilities","password_policy","minLength","wipeUserDevices","addUser","dispatch","password","email","quota","language","userStatus","allowedEmpty","Promise","reject","Error","sendWelcomeMail","APPS_API_FAILURE","showError","t","message","timeout","isHTML","initCategories","categories","updateCount","setUpdateCount","addCategory","category","appendCategories","categoriesArray","setAllApps","apps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","canInstall","updateApp","version","update","resetApps","reset","startLoading","loading","stopLoading","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","getAllApps","getCategories","loadingList","getUpdateCount","setAppConfig","Vuex","API_FAILURE","meta","Notification","showHtml","showTemporary","Store","modules","settings","serverData","setServerData","getServerData","oc","strict","process","VTooltip","defaultHtml","sync","store","router","__webpack_nonce__","btoa","requestToken","n","OCA","oc_userconfig","render","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","loaded","__webpack_modules__","call","m","amdD","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","r","getter","__esModule","d","definition","o","defineProperty","enumerable","get","f","chunkId","all","reduce","promises","u","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","p","baseURI","self","href","installedChunks","installedChunkData","promise","resolve","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/user-status-modal-299.js b/dist/user-status-modal-299.js
index 531314c3a24..712f86412af 100644
--- a/dist/user-status-modal-299.js
+++ b/dist/user-status-modal-299.js
@@ -1,2 +1,2 @@
-"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[299],{90094:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".clear-at-select[data-v-6dde9a43]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-6dde9a43]{margin-right:10px}.clear-at-select .multiselect[data-v-6dde9a43]{flex-grow:1;min-width:130px}","",{version:3,sources:["webpack://./apps/user_status/src/components/ClearAtSelect.vue"],names:[],mappings:"AAsFA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},91899:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".custom-input__form[data-v-df270a88]{flex-grow:1}.custom-input__form input[data-v-df270a88]{width:100%;border-radius:0 var(--border-radius) var(--border-radius) 0}","",{version:3,sources:["webpack://./apps/user_status/src/components/CustomMessageInput.vue"],names:[],mappings:"AAwEA,qCACC,WAAA,CAEA,2CACC,UAAA,CACA,2DAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.custom-input__form {\n\tflex-grow: 1;\n\n\tinput {\n\t\twidth: 100%;\n\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},10045:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".user-status-online-select__input[data-v-d5c541dc]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-d5c541dc]{display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]{cursor:pointer}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]:hover{border-color:var(--color-primary)}.user-status-online-select__subline[data-v-d5c541dc]{display:block;color:var(--color-text-lighter)}","",{version:3,sources:["webpack://./apps/user_status/src/components/OnlineStatusSelect.vue"],names:[],mappings:"AAmFC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,aAAA,CACA,UAfc,CAgBd,WAhBc,CAiBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAvBU,CAyBV,2GAEC,cAAA,CAIF,iPAGC,iCAAA,CAGD,qDACC,aAAA,CACA,+BAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\n"],sourceRoot:""}]),t.Z=i},28935:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,'.predefined-status[data-v-5e390d16]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-5e390d16]:hover,.predefined-status[data-v-5e390d16]:focus{background-color:var(--color-background-hover)}.predefined-status__icon[data-v-5e390d16]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-5e390d16]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-5e390d16]{opacity:.7}.predefined-status__clear-at[data-v-5e390d16]::before{content:" - "}',"",{version:3,sources:["webpack://./apps/user_status/src/components/PredefinedStatus.vue"],names:[],mappings:"AA6EA,oCACC,YAAA,CACA,gBAAA,CACA,0BAAA,CACA,eAAA,CACA,kCAAA,CACA,kBAAA,CACA,eAAA,CAEA,oFAEC,8CAAA,CAGD,0CACC,eAAA,CACA,iBAAA,CAGD,6CACC,gBAAA,CACA,aAAA,CAGD,8CACC,UAAA,CAEA,sDACC,aAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' - ';\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},21279:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".predefined-statuses-list[data-v-fddcc16e]{display:flex;flex-direction:column;margin-bottom:10px}","",{version:3,sources:["webpack://./apps/user_status/src/components/PredefinedStatusesList.vue"],names:[],mappings:"AAiFA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n"],sourceRoot:""}]),t.Z=i},25846:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,"[data-v-2369ed26] .modal-wrapper .prev,[data-v-2369ed26] .modal-wrapper .next{display:none !important}[data-v-2369ed26] .modal-wrapper .modal-container{max-height:100% !important}[data-v-2369ed26] .modal-header .modal-title{display:none}.set-status-modal[data-v-2369ed26]{min-height:200px;padding:8px 20px 20px 20px;max-height:95vh;overflow:auto}.set-status-modal__header[data-v-2369ed26]{text-align:center;font-weight:bold}.set-status-modal__online-status[data-v-2369ed26]{display:grid;margin-bottom:40px;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-2369ed26]{display:flex;width:100%;margin-bottom:10px}.set-status-modal__custom-input .custom-input__emoji-button[data-v-2369ed26]{flex-basis:40px;flex-grow:0;width:40px;height:34px;margin-right:0;border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.set-status-modal .status-buttons[data-v-2369ed26]{display:flex}.set-status-modal .status-buttons button[data-v-2369ed26]{flex-basis:50%}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-2369ed26]{grid-template-columns:none !important}}","",{version:3,sources:["webpack://./apps/user_status/src/components/SetStatusModal.vue"],names:[],mappings:"AA8OE,8EACC,uBAAA,CAGD,kDACC,0BAAA,CAIF,6CACC,YAAA,CAIF,mCACC,gBAAA,CACA,0BAAA,CAEA,eAAA,CACA,aAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CAGD,kDACC,YAAA,CAEA,kBAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAEA,6EACC,eAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CACA,2DAAA,CAIF,mDACC,YAAA,CAEA,0DACC,cAAA,CAKH,0CACC,kDACC,qCAAA,CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// TODO: can be removed once migrated to @nextcloud-vue >= 5.0\n::v-deep {\n\t.modal-wrapper {\n\t\t.prev, .next {\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t.modal-container {\n\t\t\tmax-height: 100% !important;\n\t\t}\n\t}\n\n\t.modal-header .modal-title {\n\t\tdisplay: none;\n\t}\n}\n\n.set-status-modal {\n\tmin-height: 200px;\n\tpadding: 8px 20px 20px 20px;\n\t// Enable scrollbar for too long content, same way as in Dashboard customize\n\tmax-height: 95vh;\n\toverflow: auto;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\t// Space between the two sections\n\t\tmargin-bottom: 40px;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\n\t\t.custom-input__emoji-button {\n\t\t\tflex-basis: 40px;\n\t\t\tflex-grow: 0;\n\t\t\twidth: 40px;\n\t\t\theight: 34px;\n\t\t\tmargin-right: 0;\n\t\t\tborder-right: none;\n\t\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t\t}\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\n\t\tbutton {\n\t\t\tflex-basis: 50%;\n\t\t}\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n"],sourceRoot:""}]),t.Z=i},72209:function(n,t,e){e.r(t),e.d(t,{default:function(){return sn}});var s=e(26932),a=e(64056),r=e.n(a),i=e(47450),o=e.n(i),l=e(9944),u=e(84387),c=e(80351),d=e.n(c),A=e(64039),p=function(n){if(null===n)return(0,l.translate)("user_status","Don't clear");if("end-of"===n.type)switch(n.time){case"day":return(0,l.translate)("user_status","Today");case"week":return(0,l.translate)("user_status","This week");default:return null}if("period"===n.type)return d().duration(1e3*n.time).humanize();if("_time"===n.type){var t=d()((0,A.n)()),e=d()(n.time,"X");return d().duration(t.diff(e)).humanize()}return null},m={name:"PredefinedStatus",filters:{clearAtFilter:p},props:{messageId:{type:String,required:!0},icon:{type:String,required:!0},message:{type:String,required:!0},clearAt:{type:Object,required:!1,default:null}},methods:{select:function(){this.$emit("select")}}},C=e(93379),f=e.n(C),g=e(7795),b=e.n(g),_=e(90569),v=e.n(_),h=e(3565),x=e.n(h),y=e(19216),S=e.n(y),k=e(44589),w=e.n(k),$=e(28935),Z={};Z.styleTagTransform=w(),Z.setAttributes=x(),Z.insert=v().bind(null,"head"),Z.domAPI=b(),Z.insertStyleElement=S(),f()($.Z,Z),$.Z&&$.Z.locals&&$.Z.locals;var E=e(51900),P=(0,E.Z)(m,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"predefined-status",attrs:{tabindex:"0"},on:{keyup:[function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.select.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])?null:n.select.apply(null,arguments)}],click:n.select}},[e("span",{staticClass:"predefined-status__icon"},[n._v("\n\t\t"+n._s(n.icon)+"\n\t")]),n._v(" "),e("span",{staticClass:"predefined-status__message"},[n._v("\n\t\t"+n._s(n.message)+"\n\t")]),n._v(" "),e("span",{staticClass:"predefined-status__clear-at"},[n._v("\n\t\t"+n._s(n._f("clearAtFilter")(n.clearAt))+"\n\t")])])}),[],!1,null,"5e390d16",null);function I(n,t){var e=Object.keys(n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(n);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),e.push.apply(e,s)}return e}function O(n){for(var t=1;t<arguments.length;t++){var e=null!=arguments[t]?arguments[t]:{};t%2?I(Object(e),!0).forEach((function(t){B(n,t,e[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(e)):I(Object(e)).forEach((function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(e,t))}))}return n}function B(n,t,e){return t in n?Object.defineProperty(n,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[t]=e,n}var D={name:"PredefinedStatusesList",components:{PredefinedStatus:P.exports},computed:O(O({},(0,e(20629).rn)({predefinedStatuses:function(n){return n.predefinedStatuses.predefinedStatuses}})),{},{hasLoaded:function(){return this.predefinedStatuses.length>0}}),mounted:function(){this.$store.dispatch("loadAllPredefinedStatuses")},methods:{selectStatus:function(n){this.$emit("select-status",n)}}},M=e(21279),j={};j.styleTagTransform=w(),j.setAttributes=x(),j.insert=v().bind(null,"head"),j.domAPI=b(),j.insertStyleElement=S(),f()(M.Z,j),M.Z&&M.Z.locals&&M.Z.locals;var T=(0,E.Z)(D,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return n.hasLoaded?e("div",{staticClass:"predefined-statuses-list"},n._l(n.predefinedStatuses,(function(t){return e("PredefinedStatus",{key:t.id,attrs:{"message-id":t.id,icon:t.icon,message:t.message,"clear-at":t.clearAt},on:{select:function(e){return n.selectStatus(t)}}})})),1):e("div",{staticClass:"predefined-statuses-list"},[e("div",{staticClass:"icon icon-loading-small"})])}),[],!1,null,"fddcc16e",null).exports,q={name:"CustomMessageInput",props:{message:{type:String,required:!0,default:function(){return""}},disabled:{type:Boolean,default:!1}},methods:{focus:function(){this.$refs.input.focus()},change:function(n){this.$emit("change",n.target.value)},submit:function(n){this.$emit("submit",n.target.value)}}},G=e(91899),F={};F.styleTagTransform=w(),F.setAttributes=x(),F.insert=v().bind(null,"head"),F.domAPI=b(),F.insertStyleElement=S(),f()(G.Z,F),G.Z&&G.Z.locals&&G.Z.locals;var R=(0,E.Z)(q,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("form",{staticClass:"custom-input__form",on:{submit:function(n){n.preventDefault()}}},[e("input",{ref:"input",attrs:{maxlength:"80",disabled:n.disabled,placeholder:n.$t("user_status","What is your status?"),type:"text"},domProps:{value:n.message},on:{change:n.change,keyup:[n.change,function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.submit.apply(null,arguments)}],paste:n.change}})])}),[],!1,null,"df270a88",null),z=R.exports,U=e(7811),Y={name:"ClearAtSelect",components:{Multiselect:e.n(U)()},props:{clearAt:{type:Object,default:null}},data:function(){return{options:[{label:(0,l.translate)("user_status","Don't clear"),clearAt:null},{label:(0,l.translate)("user_status","30 minutes"),clearAt:{type:"period",time:1800}},{label:(0,l.translate)("user_status","1 hour"),clearAt:{type:"period",time:3600}},{label:(0,l.translate)("user_status","4 hours"),clearAt:{type:"period",time:14400}},{label:(0,l.translate)("user_status","Today"),clearAt:{type:"end-of",time:"day"}},{label:(0,l.translate)("user_status","This week"),clearAt:{type:"end-of",time:"week"}}]}},computed:{option:function(){return{clearAt:this.clearAt,label:p(this.clearAt)}}},methods:{select:function(n){n&&this.$emit("select-clear-at",n.clearAt)}}},L=e(90094),W={};W.styleTagTransform=w(),W.setAttributes=x(),W.insert=v().bind(null,"head"),W.domAPI=b(),W.insertStyleElement=S(),f()(L.Z,W),L.Z&&L.Z.locals&&L.Z.locals;var H=(0,E.Z)(Y,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"clear-at-select"},[e("span",{staticClass:"clear-at-select__label"},[n._v("\n\t\t"+n._s(n.$t("user_status","Clear status message after"))+"\n\t")]),n._v(" "),e("Multiselect",{attrs:{label:"label",value:n.option,options:n.options,"open-direction":"top"},on:{select:n.select}})],1)}),[],!1,null,"6dde9a43",null).exports,K={name:"OnlineStatusSelect",props:{checked:{type:Boolean,default:!1},icon:{type:String,required:!0},type:{type:String,required:!0},label:{type:String,required:!0},subline:{type:String,default:null}},computed:{id:function(){return"user-status-online-status-".concat(this.type)}},methods:{onChange:function(){this.$emit("select",this.type)}}},Q=e(10045),V={};V.styleTagTransform=w(),V.setAttributes=x(),V.insert=v().bind(null,"head"),V.domAPI=b(),V.insertStyleElement=S(),f()(Q.Z,V),Q.Z&&Q.Z.locals&&Q.Z.locals;var X=(0,E.Z)(K,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"user-status-online-select"},[e("input",{staticClass:"user-status-online-select__input",attrs:{id:n.id,type:"radio",name:"user-status-online"},domProps:{checked:n.checked},on:{change:n.onChange}}),n._v(" "),e("label",{staticClass:"user-status-online-select__label",class:n.icon,attrs:{for:n.id}},[n._v("\n\t\t"+n._s(n.label)+"\n\t\t"),e("em",{staticClass:"user-status-online-select__subline"},[n._v(n._s(n.subline))])])])}),[],!1,null,"d5c541dc",null).exports;function J(n,t,e,s,a,r,i){try{var o=n[r](i),l=o.value}catch(n){return void e(n)}o.done?t(l):Promise.resolve(l).then(s,a)}function N(n){return function(){var t=this,e=arguments;return new Promise((function(s,a){var r=n.apply(t,e);function i(n){J(r,s,a,i,o,"next",n)}function o(n){J(r,s,a,i,o,"throw",n)}i(void 0)}))}}var nn={name:"SetStatusModal",components:{ClearAtSelect:H,CustomMessageInput:z,EmojiPicker:r(),Modal:o(),OnlineStatusSelect:X,PredefinedStatusesList:T},mixins:[u.Z],data:function(){return{clearAt:null,icon:null,message:"",messageId:"",isSavingStatus:!1,statuses:[{type:"online",label:(0,l.translate)("user_status","Online"),icon:"icon-user-status-online"},{type:"away",label:(0,l.translate)("user_status","Away"),icon:"icon-user-status-away"},{type:"dnd",label:(0,l.translate)("user_status","Do not disturb"),subline:(0,l.translate)("user_status","Mute all notifications"),icon:"icon-user-status-dnd"},{type:"invisible",label:(0,l.translate)("user_status","Invisible"),subline:(0,l.translate)("user_status","Appear offline"),icon:"icon-user-status-invisible"}]}},computed:{visibleIcon:function(){return this.icon||"😀"}},mounted:function(){this.messageId=this.$store.state.userStatus.messageId,this.icon=this.$store.state.userStatus.icon,this.message=this.$store.state.userStatus.message||"",null!==this.$store.state.userStatus.clearAt&&(this.clearAt={type:"_time",time:this.$store.state.userStatus.clearAt})},methods:{closeModal:function(){this.$emit("close")},setIcon:function(n){var t=this;this.messageId=null,this.icon=n,this.$nextTick((function(){t.$refs.customMessageInput.focus()}))},setMessage:function(n){this.messageId=null,this.message=n},setClearAt:function(n){this.clearAt=n},selectPredefinedMessage:function(n){this.messageId=n.id,this.clearAt=n.clearAt,this.icon=n.icon,this.message=n.message},saveStatus:function(){var n=this;return N(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!n.isSavingStatus){t.next=2;break}return t.abrupt("return");case 2:if(t.prev=2,n.isSavingStatus=!0,void 0===n.messageId||null===n.messageId){t.next=9;break}return t.next=7,n.$store.dispatch("setPredefinedMessage",{messageId:n.messageId,clearAt:n.clearAt});case 7:t.next=11;break;case 9:return t.next=11,n.$store.dispatch("setCustomMessage",{message:n.message,icon:n.icon,clearAt:n.clearAt});case 11:t.next=19;break;case 13:return t.prev=13,t.t0=t.catch(2),(0,s.x2)(n.$t("user_status","There was an error saving the status")),console.debug(t.t0),n.isSavingStatus=!1,t.abrupt("return");case 19:n.isSavingStatus=!1,n.closeModal();case 21:case"end":return t.stop()}}),t,null,[[2,13]])})))()},clearStatus:function(){var n=this;return N(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,n.isSavingStatus=!0,t.next=4,n.$store.dispatch("clearMessage");case 4:t.next=12;break;case 6:return t.prev=6,t.t0=t.catch(0),(0,s.x2)(n.$t("user_status","There was an error clearing the status")),console.debug(t.t0),n.isSavingStatus=!1,t.abrupt("return");case 12:n.isSavingStatus=!1,n.closeModal();case 14:case"end":return t.stop()}}),t,null,[[0,6]])})))()}}},tn=e(25846),en={};en.styleTagTransform=w(),en.setAttributes=x(),en.insert=v().bind(null,"head"),en.domAPI=b(),en.insertStyleElement=S(),f()(tn.Z,en),tn.Z&&tn.Z.locals&&tn.Z.locals;var sn=(0,E.Z)(nn,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("Modal",{attrs:{size:"normal",title:n.$t("user_status","Set status")},on:{close:n.closeModal}},[e("div",{staticClass:"set-status-modal"},[e("div",{staticClass:"set-status-modal__header"},[e("h3",[n._v(n._s(n.$t("user_status","Online status")))])]),n._v(" "),e("div",{staticClass:"set-status-modal__online-status"},n._l(n.statuses,(function(t){return e("OnlineStatusSelect",n._b({key:t.type,attrs:{checked:t.type===n.statusType},on:{select:n.changeStatus}},"OnlineStatusSelect",t,!1))})),1),n._v(" "),e("div",{staticClass:"set-status-modal__header"},[e("h3",[n._v(n._s(n.$t("user_status","Status message")))])]),n._v(" "),e("div",{staticClass:"set-status-modal__custom-input"},[e("EmojiPicker",{on:{select:n.setIcon}},[e("button",{staticClass:"custom-input__emoji-button"},[n._v("\n\t\t\t\t\t"+n._s(n.visibleIcon)+"\n\t\t\t\t")])]),n._v(" "),e("CustomMessageInput",{ref:"customMessageInput",attrs:{message:n.message},on:{change:n.setMessage,submit:n.saveStatus}})],1),n._v(" "),e("PredefinedStatusesList",{on:{"select-status":n.selectPredefinedMessage}}),n._v(" "),e("ClearAtSelect",{attrs:{"clear-at":n.clearAt},on:{"select-clear-at":n.setClearAt}}),n._v(" "),e("div",{staticClass:"status-buttons"},[e("button",{staticClass:"status-buttons__select",attrs:{disabled:n.isSavingStatus},on:{click:n.clearStatus}},[n._v("\n\t\t\t\t"+n._s(n.$t("user_status","Clear status message"))+"\n\t\t\t")]),n._v(" "),e("button",{staticClass:"status-buttons__primary primary",attrs:{disabled:n.isSavingStatus},on:{click:n.saveStatus}},[n._v("\n\t\t\t\t"+n._s(n.$t("user_status","Set status message"))+"\n\t\t\t")])])],1)])}),[],!1,null,"2369ed26",null).exports}}]);
-//# sourceMappingURL=user-status-modal-299.js.map?v=5a28ce594312bb1512c0 \ No newline at end of file
+"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[299],{90094:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".clear-at-select[data-v-6dde9a43]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-6dde9a43]{margin-right:10px}.clear-at-select .multiselect[data-v-6dde9a43]{flex-grow:1;min-width:130px}","",{version:3,sources:["webpack://./apps/user_status/src/components/ClearAtSelect.vue"],names:[],mappings:"AAsFA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},91899:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".custom-input__form[data-v-df270a88]{flex-grow:1}.custom-input__form input[data-v-df270a88]{width:100%;border-radius:0 var(--border-radius) var(--border-radius) 0}","",{version:3,sources:["webpack://./apps/user_status/src/components/CustomMessageInput.vue"],names:[],mappings:"AAwEA,qCACC,WAAA,CAEA,2CACC,UAAA,CACA,2DAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.custom-input__form {\n\tflex-grow: 1;\n\n\tinput {\n\t\twidth: 100%;\n\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},10045:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".user-status-online-select__input[data-v-d5c541dc]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-d5c541dc]{display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]{cursor:pointer}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]:hover{border-color:var(--color-primary)}.user-status-online-select__subline[data-v-d5c541dc]{display:block;color:var(--color-text-lighter)}","",{version:3,sources:["webpack://./apps/user_status/src/components/OnlineStatusSelect.vue"],names:[],mappings:"AAmFC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,aAAA,CACA,UAfc,CAgBd,WAhBc,CAiBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAvBU,CAyBV,2GAEC,cAAA,CAIF,iPAGC,iCAAA,CAGD,qDACC,aAAA,CACA,+BAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\n"],sourceRoot:""}]),t.Z=i},28935:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,'.predefined-status[data-v-5e390d16]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-5e390d16]:hover,.predefined-status[data-v-5e390d16]:focus{background-color:var(--color-background-hover)}.predefined-status__icon[data-v-5e390d16]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-5e390d16]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-5e390d16]{opacity:.7}.predefined-status__clear-at[data-v-5e390d16]::before{content:" - "}',"",{version:3,sources:["webpack://./apps/user_status/src/components/PredefinedStatus.vue"],names:[],mappings:"AA6EA,oCACC,YAAA,CACA,gBAAA,CACA,0BAAA,CACA,eAAA,CACA,kCAAA,CACA,kBAAA,CACA,eAAA,CAEA,oFAEC,8CAAA,CAGD,0CACC,eAAA,CACA,iBAAA,CAGD,6CACC,gBAAA,CACA,aAAA,CAGD,8CACC,UAAA,CAEA,sDACC,aAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' - ';\n\t\t}\n\t}\n}\n"],sourceRoot:""}]),t.Z=i},21279:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".predefined-statuses-list[data-v-fddcc16e]{display:flex;flex-direction:column;margin-bottom:10px}","",{version:3,sources:["webpack://./apps/user_status/src/components/PredefinedStatusesList.vue"],names:[],mappings:"AAiFA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n"],sourceRoot:""}]),t.Z=i},94111:function(n,t,e){var s=e(87537),a=e.n(s),r=e(23645),i=e.n(r)()(a());i.push([n.id,".set-status-modal[data-v-b8c9a9ba]{padding:8px 20px 20px 20px}.set-status-modal__header[data-v-b8c9a9ba]{text-align:center;font-weight:bold}.set-status-modal__online-status[data-v-b8c9a9ba]{display:grid;margin-bottom:40px;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-b8c9a9ba]{display:flex;width:100%;margin-bottom:10px}.set-status-modal__custom-input .custom-input__emoji-button[data-v-b8c9a9ba]{flex-basis:40px;flex-grow:0;width:40px;height:34px;margin-right:0;border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.set-status-modal .status-buttons[data-v-b8c9a9ba]{display:flex}.set-status-modal .status-buttons button[data-v-b8c9a9ba]{flex-basis:50%}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-b8c9a9ba]{grid-template-columns:none !important}}","",{version:3,sources:["webpack://./apps/user_status/src/components/SetStatusModal.vue"],names:[],mappings:"AA4OA,mCACC,0BAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CAGD,kDACC,YAAA,CAEA,kBAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAEA,6EACC,eAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CACA,2DAAA,CAIF,mDACC,YAAA,CAEA,0DACC,cAAA,CAKH,0CACC,kDACC,qCAAA,CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.set-status-modal {\n\tpadding: 8px 20px 20px 20px;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\t// Space between the two sections\n\t\tmargin-bottom: 40px;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\n\t\t.custom-input__emoji-button {\n\t\t\tflex-basis: 40px;\n\t\t\tflex-grow: 0;\n\t\t\twidth: 40px;\n\t\t\theight: 34px;\n\t\t\tmargin-right: 0;\n\t\t\tborder-right: none;\n\t\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t\t}\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\n\t\tbutton {\n\t\t\tflex-basis: 50%;\n\t\t}\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n"],sourceRoot:""}]),t.Z=i},63755:function(n,t,e){e.r(t),e.d(t,{default:function(){return sn}});var s=e(26932),a=e(64056),r=e.n(a),i=e(47450),l=e.n(i),o=e(9944),u=e(84387),c=e(80351),d=e.n(c),A=e(64039),p=function(n){if(null===n)return(0,o.translate)("user_status","Don't clear");if("end-of"===n.type)switch(n.time){case"day":return(0,o.translate)("user_status","Today");case"week":return(0,o.translate)("user_status","This week");default:return null}if("period"===n.type)return d().duration(1e3*n.time).humanize();if("_time"===n.type){var t=d()((0,A.n)()),e=d()(n.time,"X");return d().duration(t.diff(e)).humanize()}return null},m={name:"PredefinedStatus",filters:{clearAtFilter:p},props:{messageId:{type:String,required:!0},icon:{type:String,required:!0},message:{type:String,required:!0},clearAt:{type:Object,required:!1,default:null}},methods:{select:function(){this.$emit("select")}}},f=e(93379),b=e.n(f),C=e(7795),_=e.n(C),g=e(90569),v=e.n(g),h=e(3565),y=e.n(h),x=e(19216),S=e.n(x),k=e(44589),w=e.n(k),$=e(28935),Z={};Z.styleTagTransform=w(),Z.setAttributes=y(),Z.insert=v().bind(null,"head"),Z.domAPI=_(),Z.insertStyleElement=S(),b()($.Z,Z),$.Z&&$.Z.locals&&$.Z.locals;var P=e(51900),E=(0,P.Z)(m,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"predefined-status",attrs:{tabindex:"0"},on:{keyup:[function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.select.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])?null:n.select.apply(null,arguments)}],click:n.select}},[e("span",{staticClass:"predefined-status__icon"},[n._v("\n\t\t"+n._s(n.icon)+"\n\t")]),n._v(" "),e("span",{staticClass:"predefined-status__message"},[n._v("\n\t\t"+n._s(n.message)+"\n\t")]),n._v(" "),e("span",{staticClass:"predefined-status__clear-at"},[n._v("\n\t\t"+n._s(n._f("clearAtFilter")(n.clearAt))+"\n\t")])])}),[],!1,null,"5e390d16",null);function I(n,t){var e=Object.keys(n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(n);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),e.push.apply(e,s)}return e}function O(n){for(var t=1;t<arguments.length;t++){var e=null!=arguments[t]?arguments[t]:{};t%2?I(Object(e),!0).forEach((function(t){B(n,t,e[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(e)):I(Object(e)).forEach((function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(e,t))}))}return n}function B(n,t,e){return t in n?Object.defineProperty(n,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[t]=e,n}var D={name:"PredefinedStatusesList",components:{PredefinedStatus:E.exports},computed:O(O({},(0,e(20629).rn)({predefinedStatuses:function(n){return n.predefinedStatuses.predefinedStatuses}})),{},{hasLoaded:function(){return this.predefinedStatuses.length>0}}),mounted:function(){this.$store.dispatch("loadAllPredefinedStatuses")},methods:{selectStatus:function(n){this.$emit("select-status",n)}}},M=e(21279),j={};j.styleTagTransform=w(),j.setAttributes=y(),j.insert=v().bind(null,"head"),j.domAPI=_(),j.insertStyleElement=S(),b()(M.Z,j),M.Z&&M.Z.locals&&M.Z.locals;var T=(0,P.Z)(D,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return n.hasLoaded?e("div",{staticClass:"predefined-statuses-list"},n._l(n.predefinedStatuses,(function(t){return e("PredefinedStatus",{key:t.id,attrs:{"message-id":t.id,icon:t.icon,message:t.message,"clear-at":t.clearAt},on:{select:function(e){return n.selectStatus(t)}}})})),1):e("div",{staticClass:"predefined-statuses-list"},[e("div",{staticClass:"icon icon-loading-small"})])}),[],!1,null,"fddcc16e",null).exports,q={name:"CustomMessageInput",props:{message:{type:String,required:!0,default:function(){return""}},disabled:{type:Boolean,default:!1}},methods:{focus:function(){this.$refs.input.focus()},change:function(n){this.$emit("change",n.target.value)},submit:function(n){this.$emit("submit",n.target.value)}}},G=e(91899),R={};R.styleTagTransform=w(),R.setAttributes=y(),R.insert=v().bind(null,"head"),R.domAPI=_(),R.insertStyleElement=S(),b()(G.Z,R),G.Z&&G.Z.locals&&G.Z.locals;var z=(0,P.Z)(q,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("form",{staticClass:"custom-input__form",on:{submit:function(n){n.preventDefault()}}},[e("input",{ref:"input",attrs:{maxlength:"80",disabled:n.disabled,placeholder:n.$t("user_status","What is your status?"),type:"text"},domProps:{value:n.message},on:{change:n.change,keyup:[n.change,function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.submit.apply(null,arguments)}],paste:n.change}})])}),[],!1,null,"df270a88",null),F=z.exports,U=e(7811),L={name:"ClearAtSelect",components:{Multiselect:e.n(U)()},props:{clearAt:{type:Object,default:null}},data:function(){return{options:[{label:(0,o.translate)("user_status","Don't clear"),clearAt:null},{label:(0,o.translate)("user_status","30 minutes"),clearAt:{type:"period",time:1800}},{label:(0,o.translate)("user_status","1 hour"),clearAt:{type:"period",time:3600}},{label:(0,o.translate)("user_status","4 hours"),clearAt:{type:"period",time:14400}},{label:(0,o.translate)("user_status","Today"),clearAt:{type:"end-of",time:"day"}},{label:(0,o.translate)("user_status","This week"),clearAt:{type:"end-of",time:"week"}}]}},computed:{option:function(){return{clearAt:this.clearAt,label:p(this.clearAt)}}},methods:{select:function(n){n&&this.$emit("select-clear-at",n.clearAt)}}},W=e(90094),Y={};Y.styleTagTransform=w(),Y.setAttributes=y(),Y.insert=v().bind(null,"head"),Y.domAPI=_(),Y.insertStyleElement=S(),b()(W.Z,Y),W.Z&&W.Z.locals&&W.Z.locals;var H=(0,P.Z)(L,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"clear-at-select"},[e("span",{staticClass:"clear-at-select__label"},[n._v("\n\t\t"+n._s(n.$t("user_status","Clear status message after"))+"\n\t")]),n._v(" "),e("Multiselect",{attrs:{label:"label",value:n.option,options:n.options,"open-direction":"top"},on:{select:n.select}})],1)}),[],!1,null,"6dde9a43",null).exports,K={name:"OnlineStatusSelect",props:{checked:{type:Boolean,default:!1},icon:{type:String,required:!0},type:{type:String,required:!0},label:{type:String,required:!0},subline:{type:String,default:null}},computed:{id:function(){return"user-status-online-status-".concat(this.type)}},methods:{onChange:function(){this.$emit("select",this.type)}}},Q=e(10045),V={};V.styleTagTransform=w(),V.setAttributes=y(),V.insert=v().bind(null,"head"),V.domAPI=_(),V.insertStyleElement=S(),b()(Q.Z,V),Q.Z&&Q.Z.locals&&Q.Z.locals;var X=(0,P.Z)(K,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"user-status-online-select"},[e("input",{staticClass:"user-status-online-select__input",attrs:{id:n.id,type:"radio",name:"user-status-online"},domProps:{checked:n.checked},on:{change:n.onChange}}),n._v(" "),e("label",{staticClass:"user-status-online-select__label",class:n.icon,attrs:{for:n.id}},[n._v("\n\t\t"+n._s(n.label)+"\n\t\t"),e("em",{staticClass:"user-status-online-select__subline"},[n._v(n._s(n.subline))])])])}),[],!1,null,"d5c541dc",null).exports;function J(n,t,e,s,a,r,i){try{var l=n[r](i),o=l.value}catch(n){return void e(n)}l.done?t(o):Promise.resolve(o).then(s,a)}function N(n){return function(){var t=this,e=arguments;return new Promise((function(s,a){var r=n.apply(t,e);function i(n){J(r,s,a,i,l,"next",n)}function l(n){J(r,s,a,i,l,"throw",n)}i(void 0)}))}}var nn={name:"SetStatusModal",components:{ClearAtSelect:H,CustomMessageInput:F,EmojiPicker:r(),Modal:l(),OnlineStatusSelect:X,PredefinedStatusesList:T},mixins:[u.Z],data:function(){return{clearAt:null,icon:null,message:"",messageId:"",isSavingStatus:!1,statuses:[{type:"online",label:(0,o.translate)("user_status","Online"),icon:"icon-user-status-online"},{type:"away",label:(0,o.translate)("user_status","Away"),icon:"icon-user-status-away"},{type:"dnd",label:(0,o.translate)("user_status","Do not disturb"),subline:(0,o.translate)("user_status","Mute all notifications"),icon:"icon-user-status-dnd"},{type:"invisible",label:(0,o.translate)("user_status","Invisible"),subline:(0,o.translate)("user_status","Appear offline"),icon:"icon-user-status-invisible"}]}},computed:{visibleIcon:function(){return this.icon||"😀"}},mounted:function(){this.messageId=this.$store.state.userStatus.messageId,this.icon=this.$store.state.userStatus.icon,this.message=this.$store.state.userStatus.message||"",null!==this.$store.state.userStatus.clearAt&&(this.clearAt={type:"_time",time:this.$store.state.userStatus.clearAt})},methods:{closeModal:function(){this.$emit("close")},setIcon:function(n){var t=this;this.messageId=null,this.icon=n,this.$nextTick((function(){t.$refs.customMessageInput.focus()}))},setMessage:function(n){this.messageId=null,this.message=n},setClearAt:function(n){this.clearAt=n},selectPredefinedMessage:function(n){this.messageId=n.id,this.clearAt=n.clearAt,this.icon=n.icon,this.message=n.message},saveStatus:function(){var n=this;return N(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!n.isSavingStatus){t.next=2;break}return t.abrupt("return");case 2:if(t.prev=2,n.isSavingStatus=!0,void 0===n.messageId||null===n.messageId){t.next=9;break}return t.next=7,n.$store.dispatch("setPredefinedMessage",{messageId:n.messageId,clearAt:n.clearAt});case 7:t.next=11;break;case 9:return t.next=11,n.$store.dispatch("setCustomMessage",{message:n.message,icon:n.icon,clearAt:n.clearAt});case 11:t.next=19;break;case 13:return t.prev=13,t.t0=t.catch(2),(0,s.x2)(n.$t("user_status","There was an error saving the status")),console.debug(t.t0),n.isSavingStatus=!1,t.abrupt("return");case 19:n.isSavingStatus=!1,n.closeModal();case 21:case"end":return t.stop()}}),t,null,[[2,13]])})))()},clearStatus:function(){var n=this;return N(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,n.isSavingStatus=!0,t.next=4,n.$store.dispatch("clearMessage");case 4:t.next=12;break;case 6:return t.prev=6,t.t0=t.catch(0),(0,s.x2)(n.$t("user_status","There was an error clearing the status")),console.debug(t.t0),n.isSavingStatus=!1,t.abrupt("return");case 12:n.isSavingStatus=!1,n.closeModal();case 14:case"end":return t.stop()}}),t,null,[[0,6]])})))()}}},tn=e(94111),en={};en.styleTagTransform=w(),en.setAttributes=y(),en.insert=v().bind(null,"head"),en.domAPI=_(),en.insertStyleElement=S(),b()(tn.Z,en),tn.Z&&tn.Z.locals&&tn.Z.locals;var sn=(0,P.Z)(nn,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("Modal",{attrs:{size:"normal",title:n.$t("user_status","Set status")},on:{close:n.closeModal}},[e("div",{staticClass:"set-status-modal"},[e("div",{staticClass:"set-status-modal__header"},[e("h3",[n._v(n._s(n.$t("user_status","Online status")))])]),n._v(" "),e("div",{staticClass:"set-status-modal__online-status"},n._l(n.statuses,(function(t){return e("OnlineStatusSelect",n._b({key:t.type,attrs:{checked:t.type===n.statusType},on:{select:n.changeStatus}},"OnlineStatusSelect",t,!1))})),1),n._v(" "),e("div",{staticClass:"set-status-modal__header"},[e("h3",[n._v(n._s(n.$t("user_status","Status message")))])]),n._v(" "),e("div",{staticClass:"set-status-modal__custom-input"},[e("EmojiPicker",{on:{select:n.setIcon}},[e("button",{staticClass:"custom-input__emoji-button"},[n._v("\n\t\t\t\t\t"+n._s(n.visibleIcon)+"\n\t\t\t\t")])]),n._v(" "),e("CustomMessageInput",{ref:"customMessageInput",attrs:{message:n.message},on:{change:n.setMessage,submit:n.saveStatus}})],1),n._v(" "),e("PredefinedStatusesList",{on:{"select-status":n.selectPredefinedMessage}}),n._v(" "),e("ClearAtSelect",{attrs:{"clear-at":n.clearAt},on:{"select-clear-at":n.setClearAt}}),n._v(" "),e("div",{staticClass:"status-buttons"},[e("button",{staticClass:"status-buttons__select",attrs:{disabled:n.isSavingStatus},on:{click:n.clearStatus}},[n._v("\n\t\t\t\t"+n._s(n.$t("user_status","Clear status message"))+"\n\t\t\t")]),n._v(" "),e("button",{staticClass:"status-buttons__primary primary",attrs:{disabled:n.isSavingStatus},on:{click:n.saveStatus}},[n._v("\n\t\t\t\t"+n._s(n.$t("user_status","Set status message"))+"\n\t\t\t")])])],1)])}),[],!1,null,"b8c9a9ba",null).exports}}]);
+//# sourceMappingURL=user-status-modal-299.js.map?v=d16ed23bae91bfaa8306 \ No newline at end of file
diff --git a/dist/user-status-modal-299.js.map b/dist/user-status-modal-299.js.map
index 3d77b4875ba..22b6b82fd68 100644
--- a/dist/user-status-modal-299.js.map
+++ b/dist/user-status-modal-299.js.map
@@ -1 +1 @@
-{"version":3,"file":"user-status-modal-299.js?v=5a28ce594312bb1512c0","mappings":"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","sources":["webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=2369ed26&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=template&id=2369ed26&scoped=true&","webpack:///nextcloud/apps/user_status/src/filters/clearAtFilter.js","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?d634","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?159c","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=template&id=5e390d16&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?e807","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?944d","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=template&id=fddcc16e&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?79a1","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?87a5","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=template&id=df270a88&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue","webpack:///nextcloud/apps/user_status/src/services/clearAtOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?3451","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?b1cd","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=template&id=6dde9a43&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?54ea","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?1ac6","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=template&id=d5c541dc&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/services/statusOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?829f","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?4fb2"],"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, \".clear-at-select[data-v-6dde9a43]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-6dde9a43]{margin-right:10px}.clear-at-select .multiselect[data-v-6dde9a43]{flex-grow:1;min-width:130px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/ClearAtSelect.vue\"],\"names\":[],\"mappings\":\"AAsFA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.clear-at-select {\\n\\tdisplay: flex;\\n\\tmargin-bottom: 10px;\\n\\talign-items: center;\\n\\n\\t&__label {\\n\\t\\tmargin-right: 10px;\\n\\t}\\n\\n\\t.multiselect {\\n\\t\\tflex-grow: 1;\\n\\t\\tmin-width: 130px;\\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, \".custom-input__form[data-v-df270a88]{flex-grow:1}.custom-input__form input[data-v-df270a88]{width:100%;border-radius:0 var(--border-radius) var(--border-radius) 0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/CustomMessageInput.vue\"],\"names\":[],\"mappings\":\"AAwEA,qCACC,WAAA,CAEA,2CACC,UAAA,CACA,2DAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.custom-input__form {\\n\\tflex-grow: 1;\\n\\n\\tinput {\\n\\t\\twidth: 100%;\\n\\t\\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\\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-status-online-select__input[data-v-d5c541dc]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-d5c541dc]{display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]{cursor:pointer}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]:hover{border-color:var(--color-primary)}.user-status-online-select__subline[data-v-d5c541dc]{display:block;color:var(--color-text-lighter)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/OnlineStatusSelect.vue\"],\"names\":[],\"mappings\":\"AAmFC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,aAAA,CACA,UAfc,CAgBd,WAhBc,CAiBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAvBU,CAyBV,2GAEC,cAAA,CAIF,iPAGC,iCAAA,CAGD,qDACC,aAAA,CACA,+BAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n$icon-size: 24px;\\n$label-padding: 8px;\\n\\n.user-status-online-select {\\n\\t// Inputs are here for keyboard navigation, they are not visually visible\\n\\t&__input {\\n\\t\\tposition: absolute;\\n\\t\\ttop: auto;\\n\\t\\tleft: -10000px;\\n\\t\\toverflow: hidden;\\n\\t\\twidth: 1px;\\n\\t\\theight: 1px;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: block;\\n\\t\\tmargin: $label-padding;\\n\\t\\tpadding: $label-padding;\\n\\t\\tpadding-left: $icon-size + $label-padding * 2;\\n\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\tbackground-position: $label-padding center;\\n\\t\\tbackground-size: $icon-size;\\n\\n\\t\\tspan,\\n\\t\\t& {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t}\\n\\t}\\n\\n\\t&__input:checked + &__label,\\n\\t&__input:focus + &__label,\\n\\t&__label:hover {\\n\\t\\tborder-color: var(--color-primary);\\n\\t}\\n\\n\\t&__subline {\\n\\t\\tdisplay: block;\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n}\\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, \".predefined-status[data-v-5e390d16]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-5e390d16]:hover,.predefined-status[data-v-5e390d16]:focus{background-color:var(--color-background-hover)}.predefined-status__icon[data-v-5e390d16]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-5e390d16]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-5e390d16]{opacity:.7}.predefined-status__clear-at[data-v-5e390d16]::before{content:\\\" - \\\"}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/PredefinedStatus.vue\"],\"names\":[],\"mappings\":\"AA6EA,oCACC,YAAA,CACA,gBAAA,CACA,0BAAA,CACA,eAAA,CACA,kCAAA,CACA,kBAAA,CACA,eAAA,CAEA,oFAEC,8CAAA,CAGD,0CACC,eAAA,CACA,iBAAA,CAGD,6CACC,gBAAA,CACA,aAAA,CAGD,8CACC,UAAA,CAEA,sDACC,aAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.predefined-status {\\n\\tdisplay: flex;\\n\\tflex-wrap: nowrap;\\n\\tjustify-content: flex-start;\\n\\tflex-basis: 100%;\\n\\tborder-radius: var(--border-radius);\\n\\talign-items: center;\\n\\tmin-height: 44px;\\n\\n\\t&:hover,\\n\\t&:focus {\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t}\\n\\n\\t&__icon {\\n\\t\\tflex-basis: 40px;\\n\\t\\ttext-align: center;\\n\\t}\\n\\n\\t&__message {\\n\\t\\tfont-weight: bold;\\n\\t\\tpadding: 0 6px;\\n\\t}\\n\\n\\t&__clear-at {\\n\\t\\topacity: .7;\\n\\n\\t\\t&::before {\\n\\t\\t\\tcontent: ' - ';\\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, \".predefined-statuses-list[data-v-fddcc16e]{display:flex;flex-direction:column;margin-bottom:10px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/PredefinedStatusesList.vue\"],\"names\":[],\"mappings\":\"AAiFA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.predefined-statuses-list {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tmargin-bottom: 10px;\\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, \"[data-v-2369ed26] .modal-wrapper .prev,[data-v-2369ed26] .modal-wrapper .next{display:none !important}[data-v-2369ed26] .modal-wrapper .modal-container{max-height:100% !important}[data-v-2369ed26] .modal-header .modal-title{display:none}.set-status-modal[data-v-2369ed26]{min-height:200px;padding:8px 20px 20px 20px;max-height:95vh;overflow:auto}.set-status-modal__header[data-v-2369ed26]{text-align:center;font-weight:bold}.set-status-modal__online-status[data-v-2369ed26]{display:grid;margin-bottom:40px;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-2369ed26]{display:flex;width:100%;margin-bottom:10px}.set-status-modal__custom-input .custom-input__emoji-button[data-v-2369ed26]{flex-basis:40px;flex-grow:0;width:40px;height:34px;margin-right:0;border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.set-status-modal .status-buttons[data-v-2369ed26]{display:flex}.set-status-modal .status-buttons button[data-v-2369ed26]{flex-basis:50%}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-2369ed26]{grid-template-columns:none !important}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/SetStatusModal.vue\"],\"names\":[],\"mappings\":\"AA8OE,8EACC,uBAAA,CAGD,kDACC,0BAAA,CAIF,6CACC,YAAA,CAIF,mCACC,gBAAA,CACA,0BAAA,CAEA,eAAA,CACA,aAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CAGD,kDACC,YAAA,CAEA,kBAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAEA,6EACC,eAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CACA,2DAAA,CAIF,mDACC,YAAA,CAEA,0DACC,cAAA,CAKH,0CACC,kDACC,qCAAA,CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// TODO: can be removed once migrated to @nextcloud-vue >= 5.0\\n::v-deep {\\n\\t.modal-wrapper {\\n\\t\\t.prev, .next {\\n\\t\\t\\tdisplay: none !important;\\n\\t\\t}\\n\\n\\t\\t.modal-container {\\n\\t\\t\\tmax-height: 100% !important;\\n\\t\\t}\\n\\t}\\n\\n\\t.modal-header .modal-title {\\n\\t\\tdisplay: none;\\n\\t}\\n}\\n\\n.set-status-modal {\\n\\tmin-height: 200px;\\n\\tpadding: 8px 20px 20px 20px;\\n\\t// Enable scrollbar for too long content, same way as in Dashboard customize\\n\\tmax-height: 95vh;\\n\\toverflow: auto;\\n\\n\\t&__header {\\n\\t\\ttext-align: center;\\n\\t\\tfont-weight: bold;\\n\\t}\\n\\n\\t&__online-status {\\n\\t\\tdisplay: grid;\\n\\t\\t// Space between the two sections\\n\\t\\tmargin-bottom: 40px;\\n\\t\\tgrid-template-columns: 1fr 1fr;\\n\\t}\\n\\n\\t&__custom-input {\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\t\\tmargin-bottom: 10px;\\n\\n\\t\\t.custom-input__emoji-button {\\n\\t\\t\\tflex-basis: 40px;\\n\\t\\t\\tflex-grow: 0;\\n\\t\\t\\twidth: 40px;\\n\\t\\t\\theight: 34px;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tborder-right: none;\\n\\t\\t\\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\\n\\t\\t}\\n\\t}\\n\\n\\t.status-buttons {\\n\\t\\tdisplay: flex;\\n\\n\\t\\tbutton {\\n\\t\\t\\tflex-basis: 50%;\\n\\t\\t}\\n\\t}\\n}\\n\\n@media only screen and (max-width: 500px) {\\n\\t.set-status-modal__online-status {\\n\\t\\tgrid-template-columns: none !important;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"size\":\"normal\",\"title\":_vm.$t('user_status', 'Set status')},on:{\"close\":_vm.closeModal}},[_c('div',{staticClass:\"set-status-modal\"},[_c('div',{staticClass:\"set-status-modal__header\"},[_c('h3',[_vm._v(_vm._s(_vm.$t('user_status', 'Online status')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__online-status\"},_vm._l((_vm.statuses),function(status){return _c('OnlineStatusSelect',_vm._b({key:status.type,attrs:{\"checked\":status.type === _vm.statusType},on:{\"select\":_vm.changeStatus}},'OnlineStatusSelect',status,false))}),1),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__header\"},[_c('h3',[_vm._v(_vm._s(_vm.$t('user_status', 'Status message')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__custom-input\"},[_c('EmojiPicker',{on:{\"select\":_vm.setIcon}},[_c('button',{staticClass:\"custom-input__emoji-button\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.visibleIcon)+\"\\n\\t\\t\\t\\t\")])]),_vm._v(\" \"),_c('CustomMessageInput',{ref:\"customMessageInput\",attrs:{\"message\":_vm.message},on:{\"change\":_vm.setMessage,\"submit\":_vm.saveStatus}})],1),_vm._v(\" \"),_c('PredefinedStatusesList',{on:{\"select-status\":_vm.selectPredefinedMessage}}),_vm._v(\" \"),_c('ClearAtSelect',{attrs:{\"clear-at\":_vm.clearAt},on:{\"select-clear-at\":_vm.setClearAt}}),_vm._v(\" \"),_c('div',{staticClass:\"status-buttons\"},[_c('button',{staticClass:\"status-buttons__select\",attrs:{\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.clearStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status message'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('button',{staticClass:\"status-buttons__primary primary\",attrs:{\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.saveStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Set status message'))+\"\\n\\t\\t\\t\")])])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\nimport moment from '@nextcloud/moment'\nimport { dateFactory } from '../services/dateService'\n\n/**\n * Formats a clearAt object to be human readable\n *\n * @param {object} clearAt The clearAt object\n * @return {string|null}\n */\nconst clearAtFilter = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn t('user_status', 'Don\\'t clear')\n\t}\n\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\t\treturn t('user_status', 'Today')\n\t\tcase 'week':\n\t\t\treturn t('user_status', 'This week')\n\n\t\tdefault:\n\t\t\treturn null\n\t\t}\n\t}\n\n\tif (clearAt.type === 'period') {\n\t\treturn moment.duration(clearAt.time * 1000).humanize()\n\t}\n\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\tconst momentNow = moment(dateFactory())\n\t\tconst momentClearAt = moment(clearAt.time, 'X')\n\n\t\treturn moment.duration(momentNow.diff(momentClearAt)).humanize()\n\t}\n\n\treturn null\n}\n\nexport {\n\tclearAtFilter,\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<template>\n\t<div class=\"predefined-status\"\n\t\ttabindex=\"0\"\n\t\t@keyup.enter=\"select\"\n\t\t@keyup.space=\"select\"\n\t\t@click=\"select\">\n\t\t<span class=\"predefined-status__icon\">\n\t\t\t{{ icon }}\n\t\t</span>\n\t\t<span class=\"predefined-status__message\">\n\t\t\t{{ message }}\n\t\t</span>\n\t\t<span class=\"predefined-status__clear-at\">\n\t\t\t{{ clearAt | clearAtFilter }}\n\t\t</span>\n\t</div>\n</template>\n\n<script>\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'PredefinedStatus',\n\tfilters: {\n\t\tclearAtFilter,\n\t},\n\tprops: {\n\t\tmessageId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user clicks the row\n\t\t */\n\t\tselect() {\n\t\t\tthis.$emit('select')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' - ';\n\t\t}\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PredefinedStatus.vue?vue&type=template&id=5e390d16&scoped=true&\"\nimport script from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&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 \"5e390d16\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"predefined-status\",attrs:{\"tabindex\":\"0\"},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.select.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"])){ return null; }return _vm.select.apply(null, arguments)}],\"click\":_vm.select}},[_c('span',{staticClass:\"predefined-status__icon\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.icon)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__message\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.message)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__clear-at\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm._f(\"clearAtFilter\")(_vm.clearAt))+\"\\n\\t\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<div v-if=\"hasLoaded\"\n\t\tclass=\"predefined-statuses-list\">\n\t\t<PredefinedStatus v-for=\"status in predefinedStatuses\"\n\t\t\t:key=\"status.id\"\n\t\t\t:message-id=\"status.id\"\n\t\t\t:icon=\"status.icon\"\n\t\t\t:message=\"status.message\"\n\t\t\t:clear-at=\"status.clearAt\"\n\t\t\t@select=\"selectStatus(status)\" />\n\t</div>\n\t<div v-else\n\t\tclass=\"predefined-statuses-list\">\n\t\t<div class=\"icon icon-loading-small\" />\n\t</div>\n</template>\n\n<script>\nimport PredefinedStatus from './PredefinedStatus'\nimport { mapState } from 'vuex'\n\nexport default {\n\tname: 'PredefinedStatusesList',\n\tcomponents: {\n\t\tPredefinedStatus,\n\t},\n\tcomputed: {\n\t\t...mapState({\n\t\t\tpredefinedStatuses: state => state.predefinedStatuses.predefinedStatuses,\n\t\t}),\n\t\t/**\n\t\t * Indicator whether the predefined statuses have already been loaded\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasLoaded() {\n\t\t\treturn this.predefinedStatuses.length > 0\n\t\t},\n\t},\n\t/**\n\t * Loads all predefined statuses from the server\n\t * when this component is mounted\n\t */\n\tmounted() {\n\t\tthis.$store.dispatch('loadAllPredefinedStatuses')\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user selects a status\n\t\t *\n\t\t * @param {object} status The selected status\n\t\t */\n\t\tselectStatus(status) {\n\t\t\tthis.$emit('select-status', status)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PredefinedStatusesList.vue?vue&type=template&id=fddcc16e&scoped=true&\"\nimport script from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&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 \"fddcc16e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasLoaded)?_c('div',{staticClass:\"predefined-statuses-list\"},_vm._l((_vm.predefinedStatuses),function(status){return _c('PredefinedStatus',{key:status.id,attrs:{\"message-id\":status.id,\"icon\":status.icon,\"message\":status.message,\"clear-at\":status.clearAt},on:{\"select\":function($event){return _vm.selectStatus(status)}}})}),1):_c('div',{staticClass:\"predefined-statuses-list\"},[_c('div',{staticClass:\"icon icon-loading-small\"})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<template>\n\t<form class=\"custom-input__form\"\n\t\t@submit.prevent>\n\t\t<input ref=\"input\"\n\t\t\tmaxlength=\"80\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:placeholder=\"$t('user_status', 'What is your status?')\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"message\"\n\t\t\t@change=\"change\"\n\t\t\t@keyup=\"change\"\n\t\t\t@paste=\"change\"\n\t\t\t@keyup.enter=\"submit\">\n\t</form>\n</template>\n\n<script>\nexport default {\n\tname: 'CustomMessageInput',\n\tprops: {\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tdefault: () => '',\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmethods: {\n\t\tfocus() {\n\t\t\tthis.$refs.input.focus()\n\t\t},\n\n\t\t/**\n\t\t * Notifies the parent component about a changed input\n\t\t *\n\t\t * @param {Event} event The Change Event\n\t\t */\n\t\tchange(event) {\n\t\t\tthis.$emit('change', event.target.value)\n\t\t},\n\n\t\tsubmit(event) {\n\t\t\tthis.$emit('submit', event.target.value)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.custom-input__form {\n\tflex-grow: 1;\n\n\tinput {\n\t\twidth: 100%;\n\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CustomMessageInput.vue?vue&type=template&id=df270a88&scoped=true&\"\nimport script from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&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 \"df270a88\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{staticClass:\"custom-input__form\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('input',{ref:\"input\",attrs:{\"maxlength\":\"80\",\"disabled\":_vm.disabled,\"placeholder\":_vm.$t('user_status', 'What is your status?'),\"type\":\"text\"},domProps:{\"value\":_vm.message},on:{\"change\":_vm.change,\"keyup\":[_vm.change,function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.submit.apply(null, arguments)}],\"paste\":_vm.change}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<div class=\"clear-at-select\">\n\t\t<span class=\"clear-at-select__label\">\n\t\t\t{{ $t('user_status', 'Clear status message after') }}\n\t\t</span>\n\t\t<Multiselect label=\"label\"\n\t\t\t:value=\"option\"\n\t\t\t:options=\"options\"\n\t\t\topen-direction=\"top\"\n\t\t\t@select=\"select\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { getAllClearAtOptions } from '../services/clearAtOptionsService'\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'ClearAtSelect',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\toptions: getAllClearAtOptions(),\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Returns an object of the currently selected option\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\toption() {\n\t\t\treturn {\n\t\t\t\tclearAt: this.clearAt,\n\t\t\t\tlabel: clearAtFilter(this.clearAt),\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Triggered when the user selects a new option.\n\t\t *\n\t\t * @param {object=} option The new selected option\n\t\t */\n\t\tselect(option) {\n\t\t\tif (!option) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.$emit('select-clear-at', option.clearAt)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n</style>\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns an array\n *\n * @return {object[]}\n */\nconst getAllClearAtOptions = () => {\n\treturn [{\n\t\tlabel: t('user_status', 'Don\\'t clear'),\n\t\tclearAt: null,\n\t}, {\n\t\tlabel: t('user_status', '30 minutes'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 1800,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '1 hour'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 3600,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '4 hours'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 14400,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'Today'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'day',\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'This week'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'week',\n\t\t},\n\t}]\n}\n\nexport {\n\tgetAllClearAtOptions,\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ClearAtSelect.vue?vue&type=template&id=6dde9a43&scoped=true&\"\nimport script from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&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 \"6dde9a43\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"clear-at-select\"},[_c('span',{staticClass:\"clear-at-select__label\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status message after'))+\"\\n\\t\")]),_vm._v(\" \"),_c('Multiselect',{attrs:{\"label\":\"label\",\"value\":_vm.option,\"options\":_vm.options,\"open-direction\":\"top\"},on:{\"select\":_vm.select}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 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<template>\n\t<div class=\"user-status-online-select\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\tclass=\"user-status-online-select__input\"\n\t\t\ttype=\"radio\"\n\t\t\tname=\"user-status-online\"\n\t\t\t@change=\"onChange\">\n\t\t<label :for=\"id\" :class=\"icon\" class=\"user-status-online-select__label\">\n\t\t\t{{ label }}\n\t\t\t<em class=\"user-status-online-select__subline\">{{ subline }}</em>\n\t\t</label>\n\t</div>\n</template>\n\n<script>\nexport default {\n\tname: 'OnlineStatusSelect',\n\n\tprops: {\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tsubline: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tid() {\n\t\t\treturn `user-status-online-status-${this.type}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonChange() {\n\t\t\tthis.$emit('select', this.type)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./OnlineStatusSelect.vue?vue&type=template&id=d5c541dc&scoped=true&\"\nimport script from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&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 \"d5c541dc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-status-online-select\"},[_c('input',{staticClass:\"user-status-online-select__input\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"user-status-online\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onChange}}),_vm._v(\" \"),_c('label',{staticClass:\"user-status-online-select__label\",class:_vm.icon,attrs:{\"for\":_vm.id}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.label)+\"\\n\\t\\t\"),_c('em',{staticClass:\"user-status-online-select__subline\"},[_vm._v(_vm._s(_vm.subline))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<Modal size=\"normal\"\n\t\t:title=\"$t('user_status', 'Set status')\"\n\t\t@close=\"closeModal\">\n\t\t<div class=\"set-status-modal\">\n\t\t\t<!-- Status selector -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h3>{{ $t('user_status', 'Online status') }}</h3>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__online-status\">\n\t\t\t\t<OnlineStatusSelect v-for=\"status in statuses\"\n\t\t\t\t\t:key=\"status.type\"\n\t\t\t\t\tv-bind=\"status\"\n\t\t\t\t\t:checked=\"status.type === statusType\"\n\t\t\t\t\t@select=\"changeStatus\" />\n\t\t\t</div>\n\n\t\t\t<!-- Status message -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h3>{{ $t('user_status', 'Status message') }}</h3>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__custom-input\">\n\t\t\t\t<EmojiPicker @select=\"setIcon\">\n\t\t\t\t\t<button class=\"custom-input__emoji-button\">\n\t\t\t\t\t\t{{ visibleIcon }}\n\t\t\t\t\t</button>\n\t\t\t\t</EmojiPicker>\n\t\t\t\t<CustomMessageInput ref=\"customMessageInput\"\n\t\t\t\t\t:message=\"message\"\n\t\t\t\t\t@change=\"setMessage\"\n\t\t\t\t\t@submit=\"saveStatus\" />\n\t\t\t</div>\n\t\t\t<PredefinedStatusesList @select-status=\"selectPredefinedMessage\" />\n\t\t\t<ClearAtSelect :clear-at=\"clearAt\"\n\t\t\t\t@select-clear-at=\"setClearAt\" />\n\t\t\t<div class=\"status-buttons\">\n\t\t\t\t<button class=\"status-buttons__select\" :disabled=\"isSavingStatus\" @click=\"clearStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Clear status message') }}\n\t\t\t\t</button>\n\t\t\t\t<button class=\"status-buttons__primary primary\" :disabled=\"isSavingStatus\" @click=\"saveStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Set status message') }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</Modal>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport EmojiPicker from '@nextcloud/vue/dist/Components/EmojiPicker'\nimport Modal from '@nextcloud/vue/dist/Components/Modal'\n\nimport { getAllStatusOptions } from '../services/statusOptionsService'\nimport OnlineStatusMixin from '../mixins/OnlineStatusMixin'\nimport PredefinedStatusesList from './PredefinedStatusesList'\nimport CustomMessageInput from './CustomMessageInput'\nimport ClearAtSelect from './ClearAtSelect'\nimport OnlineStatusSelect from './OnlineStatusSelect'\n\nexport default {\n\tname: 'SetStatusModal',\n\n\tcomponents: {\n\t\tClearAtSelect,\n\t\tCustomMessageInput,\n\t\tEmojiPicker,\n\t\tModal,\n\t\tOnlineStatusSelect,\n\t\tPredefinedStatusesList,\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\tclearAt: null,\n\t\t\ticon: null,\n\t\t\tmessage: '',\n\t\t\tmessageId: '',\n\t\t\tisSavingStatus: false,\n\t\t\tstatuses: getAllStatusOptions(),\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Returns the user-set icon or a smiley in case no icon is set\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleIcon() {\n\t\t\treturn this.icon || '😀'\n\t\t},\n\t},\n\n\t/**\n\t * Loads the current status when a user opens dialog\n\t */\n\tmounted() {\n\t\tthis.messageId = this.$store.state.userStatus.messageId\n\t\tthis.icon = this.$store.state.userStatus.icon\n\t\tthis.message = this.$store.state.userStatus.message || ''\n\n\t\tif (this.$store.state.userStatus.clearAt !== null) {\n\t\t\tthis.clearAt = {\n\t\t\t\ttype: '_time',\n\t\t\t\ttime: this.$store.state.userStatus.clearAt,\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Closes the Set Status modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.$emit('close')\n\t\t},\n\t\t/**\n\t\t * Sets a new icon\n\t\t *\n\t\t * @param {string} icon The new icon\n\t\t */\n\t\tsetIcon(icon) {\n\t\t\tthis.messageId = null\n\t\t\tthis.icon = icon\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.customMessageInput.focus()\n\t\t\t})\n\t\t},\n\t\t/**\n\t\t * Sets a new message\n\t\t *\n\t\t * @param {string} message The new message\n\t\t */\n\t\tsetMessage(message) {\n\t\t\tthis.messageId = null\n\t\t\tthis.message = message\n\t\t},\n\t\t/**\n\t\t * Sets a new clearAt value\n\t\t *\n\t\t * @param {object} clearAt The new clearAt object\n\t\t */\n\t\tsetClearAt(clearAt) {\n\t\t\tthis.clearAt = clearAt\n\t\t},\n\t\t/**\n\t\t * Sets new icon/message/clearAt based on a predefined message\n\t\t *\n\t\t * @param {object} status The predefined status object\n\t\t */\n\t\tselectPredefinedMessage(status) {\n\t\t\tthis.messageId = status.id\n\t\t\tthis.clearAt = status.clearAt\n\t\t\tthis.icon = status.icon\n\t\t\tthis.message = status.message\n\t\t},\n\t\t/**\n\t\t * Saves the status and closes the\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync saveStatus() {\n\t\t\tif (this.isSavingStatus) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tif (this.messageId !== undefined && this.messageId !== null) {\n\t\t\t\t\tawait this.$store.dispatch('setPredefinedMessage', {\n\t\t\t\t\t\tmessageId: this.messageId,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('setCustomMessage', {\n\t\t\t\t\t\tmessage: this.message,\n\t\t\t\t\t\ticon: this.icon,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t\t/**\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync clearStatus() {\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tawait this.$store.dispatch('clearMessage')\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error clearing the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// TODO: can be removed once migrated to @nextcloud-vue >= 5.0\n::v-deep {\n\t.modal-wrapper {\n\t\t.prev, .next {\n\t\t\tdisplay: none !important;\n\t\t}\n\n\t\t.modal-container {\n\t\t\tmax-height: 100% !important;\n\t\t}\n\t}\n\n\t.modal-header .modal-title {\n\t\tdisplay: none;\n\t}\n}\n\n.set-status-modal {\n\tmin-height: 200px;\n\tpadding: 8px 20px 20px 20px;\n\t// Enable scrollbar for too long content, same way as in Dashboard customize\n\tmax-height: 95vh;\n\toverflow: auto;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\t// Space between the two sections\n\t\tmargin-bottom: 40px;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\n\t\t.custom-input__emoji-button {\n\t\t\tflex-basis: 40px;\n\t\t\tflex-grow: 0;\n\t\t\twidth: 40px;\n\t\t\theight: 34px;\n\t\t\tmargin-right: 0;\n\t\t\tborder-right: none;\n\t\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t\t}\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\n\t\tbutton {\n\t\t\tflex-basis: 50%;\n\t\t}\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=script&lang=js&\"","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author Jan C. Borchardt <hey@jancborchardt.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns a list of all user-definable statuses\n *\n * @return {object[]}\n */\nconst getAllStatusOptions = () => {\n\treturn [{\n\t\ttype: 'online',\n\t\tlabel: t('user_status', 'Online'),\n\t\ticon: 'icon-user-status-online',\n\t}, {\n\t\ttype: 'away',\n\t\tlabel: t('user_status', 'Away'),\n\t\ticon: 'icon-user-status-away',\n\t}, {\n\t\ttype: 'dnd',\n\t\tlabel: t('user_status', 'Do not disturb'),\n\t\tsubline: t('user_status', 'Mute all notifications'),\n\t\ticon: 'icon-user-status-dnd',\n\n\t}, {\n\t\ttype: 'invisible',\n\t\tlabel: t('user_status', 'Invisible'),\n\t\tsubline: t('user_status', 'Appear offline'),\n\t\ticon: 'icon-user-status-invisible',\n\t}]\n}\n\nexport {\n\tgetAllStatusOptions,\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=style&index=0&id=2369ed26&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=style&index=0&id=2369ed26&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SetStatusModal.vue?vue&type=template&id=2369ed26&scoped=true&\"\nimport script from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SetStatusModal.vue?vue&type=style&index=0&id=2369ed26&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 \"2369ed26\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","clearAtFilter","clearAt","t","type","time","moment","humanize","momentNow","dateFactory","momentClearAt","diff","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","on","$event","indexOf","_k","keyCode","key","select","apply","arguments","_v","_s","icon","message","_f","_l","status","selectStatus","preventDefault","ref","disabled","$t","domProps","change","submit","label","option","checked","onChange","class","subline","closeModal","_b","statusType","changeStatus","setIcon","visibleIcon","setMessage","saveStatus","selectPredefinedMessage","setClearAt","isSavingStatus","clearStatus"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"user-status-modal-299.js?v=d16ed23bae91bfaa8306","mappings":"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","sources":["webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=style&index=0&id=b8c9a9ba&lang=scss&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=template&id=b8c9a9ba&scoped=true&","webpack:///nextcloud/apps/user_status/src/filters/clearAtFilter.js","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?d634","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?159c","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatus.vue?vue&type=template&id=5e390d16&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?e807","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?944d","webpack:///nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue?vue&type=template&id=fddcc16e&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?79a1","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?87a5","webpack:///nextcloud/apps/user_status/src/components/CustomMessageInput.vue?vue&type=template&id=df270a88&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue","webpack:///nextcloud/apps/user_status/src/services/clearAtOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?3451","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?b1cd","webpack:///nextcloud/apps/user_status/src/components/ClearAtSelect.vue?vue&type=template&id=6dde9a43&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?54ea","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?1ac6","webpack:///nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue?vue&type=template&id=d5c541dc&scoped=true&","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue","webpack:///nextcloud/apps/user_status/src/components/SetStatusModal.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/user_status/src/services/statusOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?5cf7","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?4fb2"],"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, \".clear-at-select[data-v-6dde9a43]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-6dde9a43]{margin-right:10px}.clear-at-select .multiselect[data-v-6dde9a43]{flex-grow:1;min-width:130px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/ClearAtSelect.vue\"],\"names\":[],\"mappings\":\"AAsFA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.clear-at-select {\\n\\tdisplay: flex;\\n\\tmargin-bottom: 10px;\\n\\talign-items: center;\\n\\n\\t&__label {\\n\\t\\tmargin-right: 10px;\\n\\t}\\n\\n\\t.multiselect {\\n\\t\\tflex-grow: 1;\\n\\t\\tmin-width: 130px;\\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, \".custom-input__form[data-v-df270a88]{flex-grow:1}.custom-input__form input[data-v-df270a88]{width:100%;border-radius:0 var(--border-radius) var(--border-radius) 0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/CustomMessageInput.vue\"],\"names\":[],\"mappings\":\"AAwEA,qCACC,WAAA,CAEA,2CACC,UAAA,CACA,2DAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.custom-input__form {\\n\\tflex-grow: 1;\\n\\n\\tinput {\\n\\t\\twidth: 100%;\\n\\t\\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\\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-status-online-select__input[data-v-d5c541dc]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-d5c541dc]{display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]{cursor:pointer}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]:hover{border-color:var(--color-primary)}.user-status-online-select__subline[data-v-d5c541dc]{display:block;color:var(--color-text-lighter)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/OnlineStatusSelect.vue\"],\"names\":[],\"mappings\":\"AAmFC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,aAAA,CACA,UAfc,CAgBd,WAhBc,CAiBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAvBU,CAyBV,2GAEC,cAAA,CAIF,iPAGC,iCAAA,CAGD,qDACC,aAAA,CACA,+BAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n$icon-size: 24px;\\n$label-padding: 8px;\\n\\n.user-status-online-select {\\n\\t// Inputs are here for keyboard navigation, they are not visually visible\\n\\t&__input {\\n\\t\\tposition: absolute;\\n\\t\\ttop: auto;\\n\\t\\tleft: -10000px;\\n\\t\\toverflow: hidden;\\n\\t\\twidth: 1px;\\n\\t\\theight: 1px;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: block;\\n\\t\\tmargin: $label-padding;\\n\\t\\tpadding: $label-padding;\\n\\t\\tpadding-left: $icon-size + $label-padding * 2;\\n\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\tbackground-position: $label-padding center;\\n\\t\\tbackground-size: $icon-size;\\n\\n\\t\\tspan,\\n\\t\\t& {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t}\\n\\t}\\n\\n\\t&__input:checked + &__label,\\n\\t&__input:focus + &__label,\\n\\t&__label:hover {\\n\\t\\tborder-color: var(--color-primary);\\n\\t}\\n\\n\\t&__subline {\\n\\t\\tdisplay: block;\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n}\\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, \".predefined-status[data-v-5e390d16]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-5e390d16]:hover,.predefined-status[data-v-5e390d16]:focus{background-color:var(--color-background-hover)}.predefined-status__icon[data-v-5e390d16]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-5e390d16]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-5e390d16]{opacity:.7}.predefined-status__clear-at[data-v-5e390d16]::before{content:\\\" - \\\"}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/PredefinedStatus.vue\"],\"names\":[],\"mappings\":\"AA6EA,oCACC,YAAA,CACA,gBAAA,CACA,0BAAA,CACA,eAAA,CACA,kCAAA,CACA,kBAAA,CACA,eAAA,CAEA,oFAEC,8CAAA,CAGD,0CACC,eAAA,CACA,iBAAA,CAGD,6CACC,gBAAA,CACA,aAAA,CAGD,8CACC,UAAA,CAEA,sDACC,aAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.predefined-status {\\n\\tdisplay: flex;\\n\\tflex-wrap: nowrap;\\n\\tjustify-content: flex-start;\\n\\tflex-basis: 100%;\\n\\tborder-radius: var(--border-radius);\\n\\talign-items: center;\\n\\tmin-height: 44px;\\n\\n\\t&:hover,\\n\\t&:focus {\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t}\\n\\n\\t&__icon {\\n\\t\\tflex-basis: 40px;\\n\\t\\ttext-align: center;\\n\\t}\\n\\n\\t&__message {\\n\\t\\tfont-weight: bold;\\n\\t\\tpadding: 0 6px;\\n\\t}\\n\\n\\t&__clear-at {\\n\\t\\topacity: .7;\\n\\n\\t\\t&::before {\\n\\t\\t\\tcontent: ' - ';\\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, \".predefined-statuses-list[data-v-fddcc16e]{display:flex;flex-direction:column;margin-bottom:10px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/PredefinedStatusesList.vue\"],\"names\":[],\"mappings\":\"AAiFA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.predefined-statuses-list {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tmargin-bottom: 10px;\\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, \".set-status-modal[data-v-b8c9a9ba]{padding:8px 20px 20px 20px}.set-status-modal__header[data-v-b8c9a9ba]{text-align:center;font-weight:bold}.set-status-modal__online-status[data-v-b8c9a9ba]{display:grid;margin-bottom:40px;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-b8c9a9ba]{display:flex;width:100%;margin-bottom:10px}.set-status-modal__custom-input .custom-input__emoji-button[data-v-b8c9a9ba]{flex-basis:40px;flex-grow:0;width:40px;height:34px;margin-right:0;border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.set-status-modal .status-buttons[data-v-b8c9a9ba]{display:flex}.set-status-modal .status-buttons button[data-v-b8c9a9ba]{flex-basis:50%}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-b8c9a9ba]{grid-template-columns:none !important}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/SetStatusModal.vue\"],\"names\":[],\"mappings\":\"AA4OA,mCACC,0BAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CAGD,kDACC,YAAA,CAEA,kBAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAEA,6EACC,eAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CACA,2DAAA,CAIF,mDACC,YAAA,CAEA,0DACC,cAAA,CAKH,0CACC,kDACC,qCAAA,CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.set-status-modal {\\n\\tpadding: 8px 20px 20px 20px;\\n\\n\\t&__header {\\n\\t\\ttext-align: center;\\n\\t\\tfont-weight: bold;\\n\\t}\\n\\n\\t&__online-status {\\n\\t\\tdisplay: grid;\\n\\t\\t// Space between the two sections\\n\\t\\tmargin-bottom: 40px;\\n\\t\\tgrid-template-columns: 1fr 1fr;\\n\\t}\\n\\n\\t&__custom-input {\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\t\\tmargin-bottom: 10px;\\n\\n\\t\\t.custom-input__emoji-button {\\n\\t\\t\\tflex-basis: 40px;\\n\\t\\t\\tflex-grow: 0;\\n\\t\\t\\twidth: 40px;\\n\\t\\t\\theight: 34px;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tborder-right: none;\\n\\t\\t\\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\\n\\t\\t}\\n\\t}\\n\\n\\t.status-buttons {\\n\\t\\tdisplay: flex;\\n\\n\\t\\tbutton {\\n\\t\\t\\tflex-basis: 50%;\\n\\t\\t}\\n\\t}\\n}\\n\\n@media only screen and (max-width: 500px) {\\n\\t.set-status-modal__online-status {\\n\\t\\tgrid-template-columns: none !important;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"size\":\"normal\",\"title\":_vm.$t('user_status', 'Set status')},on:{\"close\":_vm.closeModal}},[_c('div',{staticClass:\"set-status-modal\"},[_c('div',{staticClass:\"set-status-modal__header\"},[_c('h3',[_vm._v(_vm._s(_vm.$t('user_status', 'Online status')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__online-status\"},_vm._l((_vm.statuses),function(status){return _c('OnlineStatusSelect',_vm._b({key:status.type,attrs:{\"checked\":status.type === _vm.statusType},on:{\"select\":_vm.changeStatus}},'OnlineStatusSelect',status,false))}),1),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__header\"},[_c('h3',[_vm._v(_vm._s(_vm.$t('user_status', 'Status message')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__custom-input\"},[_c('EmojiPicker',{on:{\"select\":_vm.setIcon}},[_c('button',{staticClass:\"custom-input__emoji-button\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.visibleIcon)+\"\\n\\t\\t\\t\\t\")])]),_vm._v(\" \"),_c('CustomMessageInput',{ref:\"customMessageInput\",attrs:{\"message\":_vm.message},on:{\"change\":_vm.setMessage,\"submit\":_vm.saveStatus}})],1),_vm._v(\" \"),_c('PredefinedStatusesList',{on:{\"select-status\":_vm.selectPredefinedMessage}}),_vm._v(\" \"),_c('ClearAtSelect',{attrs:{\"clear-at\":_vm.clearAt},on:{\"select-clear-at\":_vm.setClearAt}}),_vm._v(\" \"),_c('div',{staticClass:\"status-buttons\"},[_c('button',{staticClass:\"status-buttons__select\",attrs:{\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.clearStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status message'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('button',{staticClass:\"status-buttons__primary primary\",attrs:{\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.saveStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Set status message'))+\"\\n\\t\\t\\t\")])])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\nimport moment from '@nextcloud/moment'\nimport { dateFactory } from '../services/dateService'\n\n/**\n * Formats a clearAt object to be human readable\n *\n * @param {object} clearAt The clearAt object\n * @return {string|null}\n */\nconst clearAtFilter = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn t('user_status', 'Don\\'t clear')\n\t}\n\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\t\treturn t('user_status', 'Today')\n\t\tcase 'week':\n\t\t\treturn t('user_status', 'This week')\n\n\t\tdefault:\n\t\t\treturn null\n\t\t}\n\t}\n\n\tif (clearAt.type === 'period') {\n\t\treturn moment.duration(clearAt.time * 1000).humanize()\n\t}\n\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\tconst momentNow = moment(dateFactory())\n\t\tconst momentClearAt = moment(clearAt.time, 'X')\n\n\t\treturn moment.duration(momentNow.diff(momentClearAt)).humanize()\n\t}\n\n\treturn null\n}\n\nexport {\n\tclearAtFilter,\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<template>\n\t<div class=\"predefined-status\"\n\t\ttabindex=\"0\"\n\t\t@keyup.enter=\"select\"\n\t\t@keyup.space=\"select\"\n\t\t@click=\"select\">\n\t\t<span class=\"predefined-status__icon\">\n\t\t\t{{ icon }}\n\t\t</span>\n\t\t<span class=\"predefined-status__message\">\n\t\t\t{{ message }}\n\t\t</span>\n\t\t<span class=\"predefined-status__clear-at\">\n\t\t\t{{ clearAt | clearAtFilter }}\n\t\t</span>\n\t</div>\n</template>\n\n<script>\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'PredefinedStatus',\n\tfilters: {\n\t\tclearAtFilter,\n\t},\n\tprops: {\n\t\tmessageId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user clicks the row\n\t\t */\n\t\tselect() {\n\t\t\tthis.$emit('select')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' - ';\n\t\t}\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PredefinedStatus.vue?vue&type=template&id=5e390d16&scoped=true&\"\nimport script from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatus.vue?vue&type=style&index=0&id=5e390d16&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 \"5e390d16\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"predefined-status\",attrs:{\"tabindex\":\"0\"},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.select.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"])){ return null; }return _vm.select.apply(null, arguments)}],\"click\":_vm.select}},[_c('span',{staticClass:\"predefined-status__icon\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.icon)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__message\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.message)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__clear-at\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm._f(\"clearAtFilter\")(_vm.clearAt))+\"\\n\\t\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<div v-if=\"hasLoaded\"\n\t\tclass=\"predefined-statuses-list\">\n\t\t<PredefinedStatus v-for=\"status in predefinedStatuses\"\n\t\t\t:key=\"status.id\"\n\t\t\t:message-id=\"status.id\"\n\t\t\t:icon=\"status.icon\"\n\t\t\t:message=\"status.message\"\n\t\t\t:clear-at=\"status.clearAt\"\n\t\t\t@select=\"selectStatus(status)\" />\n\t</div>\n\t<div v-else\n\t\tclass=\"predefined-statuses-list\">\n\t\t<div class=\"icon icon-loading-small\" />\n\t</div>\n</template>\n\n<script>\nimport PredefinedStatus from './PredefinedStatus'\nimport { mapState } from 'vuex'\n\nexport default {\n\tname: 'PredefinedStatusesList',\n\tcomponents: {\n\t\tPredefinedStatus,\n\t},\n\tcomputed: {\n\t\t...mapState({\n\t\t\tpredefinedStatuses: state => state.predefinedStatuses.predefinedStatuses,\n\t\t}),\n\t\t/**\n\t\t * Indicator whether the predefined statuses have already been loaded\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasLoaded() {\n\t\t\treturn this.predefinedStatuses.length > 0\n\t\t},\n\t},\n\t/**\n\t * Loads all predefined statuses from the server\n\t * when this component is mounted\n\t */\n\tmounted() {\n\t\tthis.$store.dispatch('loadAllPredefinedStatuses')\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user selects a status\n\t\t *\n\t\t * @param {object} status The selected status\n\t\t */\n\t\tselectStatus(status) {\n\t\t\tthis.$emit('select-status', status)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PredefinedStatusesList.vue?vue&type=template&id=fddcc16e&scoped=true&\"\nimport script from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatusesList.vue?vue&type=style&index=0&id=fddcc16e&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 \"fddcc16e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasLoaded)?_c('div',{staticClass:\"predefined-statuses-list\"},_vm._l((_vm.predefinedStatuses),function(status){return _c('PredefinedStatus',{key:status.id,attrs:{\"message-id\":status.id,\"icon\":status.icon,\"message\":status.message,\"clear-at\":status.clearAt},on:{\"select\":function($event){return _vm.selectStatus(status)}}})}),1):_c('div',{staticClass:\"predefined-statuses-list\"},[_c('div',{staticClass:\"icon icon-loading-small\"})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<template>\n\t<form class=\"custom-input__form\"\n\t\t@submit.prevent>\n\t\t<input ref=\"input\"\n\t\t\tmaxlength=\"80\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:placeholder=\"$t('user_status', 'What is your status?')\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"message\"\n\t\t\t@change=\"change\"\n\t\t\t@keyup=\"change\"\n\t\t\t@paste=\"change\"\n\t\t\t@keyup.enter=\"submit\">\n\t</form>\n</template>\n\n<script>\nexport default {\n\tname: 'CustomMessageInput',\n\tprops: {\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tdefault: () => '',\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmethods: {\n\t\tfocus() {\n\t\t\tthis.$refs.input.focus()\n\t\t},\n\n\t\t/**\n\t\t * Notifies the parent component about a changed input\n\t\t *\n\t\t * @param {Event} event The Change Event\n\t\t */\n\t\tchange(event) {\n\t\t\tthis.$emit('change', event.target.value)\n\t\t},\n\n\t\tsubmit(event) {\n\t\t\tthis.$emit('submit', event.target.value)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.custom-input__form {\n\tflex-grow: 1;\n\n\tinput {\n\t\twidth: 100%;\n\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CustomMessageInput.vue?vue&type=template&id=df270a88&scoped=true&\"\nimport script from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomMessageInput.vue?vue&type=style&index=0&id=df270a88&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 \"df270a88\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{staticClass:\"custom-input__form\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('input',{ref:\"input\",attrs:{\"maxlength\":\"80\",\"disabled\":_vm.disabled,\"placeholder\":_vm.$t('user_status', 'What is your status?'),\"type\":\"text\"},domProps:{\"value\":_vm.message},on:{\"change\":_vm.change,\"keyup\":[_vm.change,function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.submit.apply(null, arguments)}],\"paste\":_vm.change}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<div class=\"clear-at-select\">\n\t\t<span class=\"clear-at-select__label\">\n\t\t\t{{ $t('user_status', 'Clear status message after') }}\n\t\t</span>\n\t\t<Multiselect label=\"label\"\n\t\t\t:value=\"option\"\n\t\t\t:options=\"options\"\n\t\t\topen-direction=\"top\"\n\t\t\t@select=\"select\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { getAllClearAtOptions } from '../services/clearAtOptionsService'\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'ClearAtSelect',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\toptions: getAllClearAtOptions(),\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Returns an object of the currently selected option\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\toption() {\n\t\t\treturn {\n\t\t\t\tclearAt: this.clearAt,\n\t\t\t\tlabel: clearAtFilter(this.clearAt),\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Triggered when the user selects a new option.\n\t\t *\n\t\t * @param {object=} option The new selected option\n\t\t */\n\t\tselect(option) {\n\t\t\tif (!option) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.$emit('select-clear-at', option.clearAt)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n</style>\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns an array\n *\n * @return {object[]}\n */\nconst getAllClearAtOptions = () => {\n\treturn [{\n\t\tlabel: t('user_status', 'Don\\'t clear'),\n\t\tclearAt: null,\n\t}, {\n\t\tlabel: t('user_status', '30 minutes'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 1800,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '1 hour'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 3600,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '4 hours'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 14400,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'Today'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'day',\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'This week'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'week',\n\t\t},\n\t}]\n}\n\nexport {\n\tgetAllClearAtOptions,\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ClearAtSelect.vue?vue&type=template&id=6dde9a43&scoped=true&\"\nimport script from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClearAtSelect.vue?vue&type=style&index=0&id=6dde9a43&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 \"6dde9a43\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"clear-at-select\"},[_c('span',{staticClass:\"clear-at-select__label\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status message after'))+\"\\n\\t\")]),_vm._v(\" \"),_c('Multiselect',{attrs:{\"label\":\"label\",\"value\":_vm.option,\"options\":_vm.options,\"open-direction\":\"top\"},on:{\"select\":_vm.select}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 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<template>\n\t<div class=\"user-status-online-select\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\tclass=\"user-status-online-select__input\"\n\t\t\ttype=\"radio\"\n\t\t\tname=\"user-status-online\"\n\t\t\t@change=\"onChange\">\n\t\t<label :for=\"id\" :class=\"icon\" class=\"user-status-online-select__label\">\n\t\t\t{{ label }}\n\t\t\t<em class=\"user-status-online-select__subline\">{{ subline }}</em>\n\t\t</label>\n\t</div>\n</template>\n\n<script>\nexport default {\n\tname: 'OnlineStatusSelect',\n\n\tprops: {\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tsubline: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tid() {\n\t\t\treturn `user-status-online-status-${this.type}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonChange() {\n\t\t\tthis.$emit('select', this.type)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./OnlineStatusSelect.vue?vue&type=template&id=d5c541dc&scoped=true&\"\nimport script from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&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 \"d5c541dc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-status-online-select\"},[_c('input',{staticClass:\"user-status-online-select__input\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"user-status-online\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onChange}}),_vm._v(\" \"),_c('label',{staticClass:\"user-status-online-select__label\",class:_vm.icon,attrs:{\"for\":_vm.id}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.label)+\"\\n\\t\\t\"),_c('em',{staticClass:\"user-status-online-select__subline\"},[_vm._v(_vm._s(_vm.subline))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<Modal size=\"normal\"\n\t\t:title=\"$t('user_status', 'Set status')\"\n\t\t@close=\"closeModal\">\n\t\t<div class=\"set-status-modal\">\n\t\t\t<!-- Status selector -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h3>{{ $t('user_status', 'Online status') }}</h3>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__online-status\">\n\t\t\t\t<OnlineStatusSelect v-for=\"status in statuses\"\n\t\t\t\t\t:key=\"status.type\"\n\t\t\t\t\tv-bind=\"status\"\n\t\t\t\t\t:checked=\"status.type === statusType\"\n\t\t\t\t\t@select=\"changeStatus\" />\n\t\t\t</div>\n\n\t\t\t<!-- Status message -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h3>{{ $t('user_status', 'Status message') }}</h3>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__custom-input\">\n\t\t\t\t<EmojiPicker @select=\"setIcon\">\n\t\t\t\t\t<button class=\"custom-input__emoji-button\">\n\t\t\t\t\t\t{{ visibleIcon }}\n\t\t\t\t\t</button>\n\t\t\t\t</EmojiPicker>\n\t\t\t\t<CustomMessageInput ref=\"customMessageInput\"\n\t\t\t\t\t:message=\"message\"\n\t\t\t\t\t@change=\"setMessage\"\n\t\t\t\t\t@submit=\"saveStatus\" />\n\t\t\t</div>\n\t\t\t<PredefinedStatusesList @select-status=\"selectPredefinedMessage\" />\n\t\t\t<ClearAtSelect :clear-at=\"clearAt\"\n\t\t\t\t@select-clear-at=\"setClearAt\" />\n\t\t\t<div class=\"status-buttons\">\n\t\t\t\t<button class=\"status-buttons__select\" :disabled=\"isSavingStatus\" @click=\"clearStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Clear status message') }}\n\t\t\t\t</button>\n\t\t\t\t<button class=\"status-buttons__primary primary\" :disabled=\"isSavingStatus\" @click=\"saveStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Set status message') }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</Modal>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport EmojiPicker from '@nextcloud/vue/dist/Components/EmojiPicker'\nimport Modal from '@nextcloud/vue/dist/Components/Modal'\n\nimport { getAllStatusOptions } from '../services/statusOptionsService'\nimport OnlineStatusMixin from '../mixins/OnlineStatusMixin'\nimport PredefinedStatusesList from './PredefinedStatusesList'\nimport CustomMessageInput from './CustomMessageInput'\nimport ClearAtSelect from './ClearAtSelect'\nimport OnlineStatusSelect from './OnlineStatusSelect'\n\nexport default {\n\tname: 'SetStatusModal',\n\n\tcomponents: {\n\t\tClearAtSelect,\n\t\tCustomMessageInput,\n\t\tEmojiPicker,\n\t\tModal,\n\t\tOnlineStatusSelect,\n\t\tPredefinedStatusesList,\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\tclearAt: null,\n\t\t\ticon: null,\n\t\t\tmessage: '',\n\t\t\tmessageId: '',\n\t\t\tisSavingStatus: false,\n\t\t\tstatuses: getAllStatusOptions(),\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Returns the user-set icon or a smiley in case no icon is set\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleIcon() {\n\t\t\treturn this.icon || '😀'\n\t\t},\n\t},\n\n\t/**\n\t * Loads the current status when a user opens dialog\n\t */\n\tmounted() {\n\t\tthis.messageId = this.$store.state.userStatus.messageId\n\t\tthis.icon = this.$store.state.userStatus.icon\n\t\tthis.message = this.$store.state.userStatus.message || ''\n\n\t\tif (this.$store.state.userStatus.clearAt !== null) {\n\t\t\tthis.clearAt = {\n\t\t\t\ttype: '_time',\n\t\t\t\ttime: this.$store.state.userStatus.clearAt,\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Closes the Set Status modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.$emit('close')\n\t\t},\n\t\t/**\n\t\t * Sets a new icon\n\t\t *\n\t\t * @param {string} icon The new icon\n\t\t */\n\t\tsetIcon(icon) {\n\t\t\tthis.messageId = null\n\t\t\tthis.icon = icon\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.customMessageInput.focus()\n\t\t\t})\n\t\t},\n\t\t/**\n\t\t * Sets a new message\n\t\t *\n\t\t * @param {string} message The new message\n\t\t */\n\t\tsetMessage(message) {\n\t\t\tthis.messageId = null\n\t\t\tthis.message = message\n\t\t},\n\t\t/**\n\t\t * Sets a new clearAt value\n\t\t *\n\t\t * @param {object} clearAt The new clearAt object\n\t\t */\n\t\tsetClearAt(clearAt) {\n\t\t\tthis.clearAt = clearAt\n\t\t},\n\t\t/**\n\t\t * Sets new icon/message/clearAt based on a predefined message\n\t\t *\n\t\t * @param {object} status The predefined status object\n\t\t */\n\t\tselectPredefinedMessage(status) {\n\t\t\tthis.messageId = status.id\n\t\t\tthis.clearAt = status.clearAt\n\t\t\tthis.icon = status.icon\n\t\t\tthis.message = status.message\n\t\t},\n\t\t/**\n\t\t * Saves the status and closes the\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync saveStatus() {\n\t\t\tif (this.isSavingStatus) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tif (this.messageId !== undefined && this.messageId !== null) {\n\t\t\t\t\tawait this.$store.dispatch('setPredefinedMessage', {\n\t\t\t\t\t\tmessageId: this.messageId,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('setCustomMessage', {\n\t\t\t\t\t\tmessage: this.message,\n\t\t\t\t\t\ticon: this.icon,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t\t/**\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync clearStatus() {\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tawait this.$store.dispatch('clearMessage')\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error clearing the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.set-status-modal {\n\tpadding: 8px 20px 20px 20px;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\t// Space between the two sections\n\t\tmargin-bottom: 40px;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\n\t\t.custom-input__emoji-button {\n\t\t\tflex-basis: 40px;\n\t\t\tflex-grow: 0;\n\t\t\twidth: 40px;\n\t\t\theight: 34px;\n\t\t\tmargin-right: 0;\n\t\t\tborder-right: none;\n\t\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t\t}\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\n\t\tbutton {\n\t\t\tflex-basis: 50%;\n\t\t}\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=script&lang=js&\"","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author Jan C. Borchardt <hey@jancborchardt.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns a list of all user-definable statuses\n *\n * @return {object[]}\n */\nconst getAllStatusOptions = () => {\n\treturn [{\n\t\ttype: 'online',\n\t\tlabel: t('user_status', 'Online'),\n\t\ticon: 'icon-user-status-online',\n\t}, {\n\t\ttype: 'away',\n\t\tlabel: t('user_status', 'Away'),\n\t\ticon: 'icon-user-status-away',\n\t}, {\n\t\ttype: 'dnd',\n\t\tlabel: t('user_status', 'Do not disturb'),\n\t\tsubline: t('user_status', 'Mute all notifications'),\n\t\ticon: 'icon-user-status-dnd',\n\n\t}, {\n\t\ttype: 'invisible',\n\t\tlabel: t('user_status', 'Invisible'),\n\t\tsubline: t('user_status', 'Appear offline'),\n\t\ticon: 'icon-user-status-invisible',\n\t}]\n}\n\nexport {\n\tgetAllStatusOptions,\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=style&index=0&id=b8c9a9ba&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.vue?vue&type=style&index=0&id=b8c9a9ba&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SetStatusModal.vue?vue&type=template&id=b8c9a9ba&scoped=true&\"\nimport script from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SetStatusModal.vue?vue&type=style&index=0&id=b8c9a9ba&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 \"b8c9a9ba\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","clearAtFilter","clearAt","t","type","time","moment","humanize","momentNow","dateFactory","momentClearAt","diff","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","on","$event","indexOf","_k","keyCode","key","select","apply","arguments","_v","_s","icon","message","_f","_l","status","selectStatus","preventDefault","ref","disabled","$t","domProps","change","submit","label","option","checked","onChange","class","subline","closeModal","_b","statusType","changeStatus","setIcon","visibleIcon","setMessage","saveStatus","selectPredefinedMessage","setClearAt","isSavingStatus","clearStatus"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/user_status-menu.js b/dist/user_status-menu.js
index 342b03980ad..9ca8969565b 100644
--- a/dist/user_status-menu.js
+++ b/dist/user_status-menu.js
@@ -1,3 +1,3 @@
/*! For license information please see user_status-menu.js.LICENSE.txt */
-!function(){var e,n,r,s={93365:function(t,e,n){var r={"./af":36026,"./af.js":36026,"./ar":28093,"./ar-dz":41943,"./ar-dz.js":41943,"./ar-kw":23969,"./ar-kw.js":23969,"./ar-ly":40594,"./ar-ly.js":40594,"./ar-ma":18369,"./ar-ma.js":18369,"./ar-sa":32579,"./ar-sa.js":32579,"./ar-tn":76442,"./ar-tn.js":76442,"./ar.js":28093,"./az":86425,"./az.js":86425,"./be":22004,"./be.js":22004,"./bg":42982,"./bg.js":42982,"./bm":21067,"./bm.js":21067,"./bn":8366,"./bn.js":8366,"./bo":95040,"./bo.js":95040,"./br":521,"./br.js":521,"./bs":83242,"./bs.js":83242,"./ca":73046,"./ca.js":73046,"./cs":25794,"./cs.js":25794,"./cv":28231,"./cv.js":28231,"./cy":10927,"./cy.js":10927,"./da":42832,"./da.js":42832,"./de":29415,"./de-at":3331,"./de-at.js":3331,"./de-ch":45524,"./de-ch.js":45524,"./de.js":29415,"./dv":44700,"./dv.js":44700,"./el":88752,"./el.js":88752,"./en-SG":16706,"./en-SG.js":16706,"./en-au":90444,"./en-au.js":90444,"./en-ca":65959,"./en-ca.js":65959,"./en-gb":62762,"./en-gb.js":62762,"./en-ie":40909,"./en-ie.js":40909,"./en-il":79909,"./en-il.js":79909,"./en-nz":75200,"./en-nz.js":75200,"./eo":27447,"./eo.js":27447,"./es":86756,"./es-do":47049,"./es-do.js":47049,"./es-us":57133,"./es-us.js":57133,"./es.js":86756,"./et":72182,"./et.js":72182,"./eu":14419,"./eu.js":14419,"./fa":2916,"./fa.js":2916,"./fi":49964,"./fi.js":49964,"./fo":26094,"./fo.js":26094,"./fr":35833,"./fr-ca":56994,"./fr-ca.js":56994,"./fr-ch":2740,"./fr-ch.js":2740,"./fr.js":35833,"./fy":69542,"./fy.js":69542,"./ga":93264,"./ga.js":93264,"./gd":77457,"./gd.js":77457,"./gl":83043,"./gl.js":83043,"./gom-latn":28379,"./gom-latn.js":28379,"./gu":406,"./gu.js":406,"./he":73219,"./he.js":73219,"./hi":99834,"./hi.js":99834,"./hr":28754,"./hr.js":28754,"./hu":93945,"./hu.js":93945,"./hy-am":81319,"./hy-am.js":81319,"./id":24875,"./id.js":24875,"./is":23724,"./is.js":23724,"./it":79906,"./it-ch":34303,"./it-ch.js":34303,"./it.js":79906,"./ja":77105,"./ja.js":77105,"./jv":15026,"./jv.js":15026,"./ka":67416,"./ka.js":67416,"./kk":79734,"./kk.js":79734,"./km":60757,"./km.js":60757,"./kn":58369,"./kn.js":58369,"./ko":77687,"./ko.js":77687,"./ku":95544,"./ku.js":95544,"./ky":85431,"./ky.js":85431,"./lb":13613,"./lb.js":13613,"./lo":34252,"./lo.js":34252,"./lt":84619,"./lt.js":84619,"./lv":93760,"./lv.js":93760,"./me":93393,"./me.js":93393,"./mi":12369,"./mi.js":12369,"./mk":48664,"./mk.js":48664,"./ml":23099,"./ml.js":23099,"./mn":98539,"./mn.js":98539,"./mr":778,"./mr.js":778,"./ms":39970,"./ms-my":82625,"./ms-my.js":82625,"./ms.js":39970,"./mt":15714,"./mt.js":15714,"./my":53055,"./my.js":53055,"./nb":73945,"./nb.js":73945,"./ne":63645,"./ne.js":63645,"./nl":4829,"./nl-be":12823,"./nl-be.js":12823,"./nl.js":4829,"./nn":23756,"./nn.js":23756,"./pa-in":97877,"./pa-in.js":97877,"./pl":53066,"./pl.js":53066,"./pt":28677,"./pt-br":81592,"./pt-br.js":81592,"./pt.js":28677,"./ro":32722,"./ro.js":32722,"./ru":59138,"./ru.js":59138,"./sd":32568,"./sd.js":32568,"./se":49753,"./se.js":49753,"./si":58024,"./si.js":58024,"./sk":31058,"./sk.js":31058,"./sl":43452,"./sl.js":43452,"./sq":2795,"./sq.js":2795,"./sr":26976,"./sr-cyrl":38819,"./sr-cyrl.js":38819,"./sr.js":26976,"./ss":7467,"./ss.js":7467,"./sv":42787,"./sv.js":42787,"./sw":80298,"./sw.js":80298,"./ta":57532,"./ta.js":57532,"./te":76076,"./te.js":76076,"./tet":40452,"./tet.js":40452,"./tg":64794,"./tg.js":64794,"./th":48245,"./th.js":48245,"./tl-ph":36056,"./tl-ph.js":36056,"./tlh":15249,"./tlh.js":15249,"./tr":22053,"./tr.js":22053,"./tzl":39871,"./tzl.js":39871,"./tzm":39574,"./tzm-latn":19210,"./tzm-latn.js":19210,"./tzm.js":39574,"./ug-cn":91532,"./ug-cn.js":91532,"./uk":11432,"./uk.js":11432,"./ur":88523,"./ur.js":88523,"./uz":54958,"./uz-latn":68735,"./uz-latn.js":68735,"./uz.js":54958,"./vi":83398,"./vi.js":83398,"./x-pseudo":56665,"./x-pseudo.js":56665,"./yo":11642,"./yo.js":11642,"./zh-cn":5462,"./zh-cn.js":5462,"./zh-hk":92530,"./zh-hk.js":92530,"./zh-tw":97333,"./zh-tw.js":97333};function s(t){var e=a(t);return n(e)}function a(t){if(!n.o(r,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return r[t]}s.keys=function(){return Object.keys(r)},s.resolve=a,t.exports=s,s.id=93365},82205:function(e,n,r){"use strict";var s=r(20144),a=r(22200),o=r(79753),u=r(16453),i=r(74854),c=r(20296),l=r.n(c),d=r(4820);function m(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}var f=function(){var t,e=(t=regeneratorRuntime.mark((function t(e){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(0,o.generateUrl)("/apps/user_status/heartbeat"),t.next=3,d.default.put(n,{status:e?"away":"online"});case 3:return r=t.sent,t.abrupt("return",r.data);case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){m(a,r,s,o,u,"next",t)}function u(t){m(a,r,s,o,u,"throw",t)}o(void 0)}))});return function(t){return e.apply(this,arguments)}}(),p=r(84387);function h(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}var v=(0,u.loadState)("user_status","profileEnabled",!1).profileEnabled,g={name:"UserStatus",components:{SetStatusModal:function(){return Promise.all([r.e(874),r.e(299)]).then(r.bind(r,72209))}},mixins:[p.Z],props:{inline:{type:Boolean,default:!1}},data:function(){return{displayName:(0,a.getCurrentUser)().displayName,heartbeatInterval:null,isAway:!1,isModalOpen:!1,loadingProfilePage:!1,mouseMoveListener:null,profileEnabled:v,setAwayTimeout:null}},computed:{profilePageLink:function(){return this.profileEnabled?(0,o.generateUrl)("/u/{userId}",{userId:(0,a.getCurrentUser)().uid}):null}},mounted:function(){var t=this;(0,i.subscribe)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,i.subscribe)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),this.$store.dispatch("loadStatusFromInitialState"),OC.config.session_keepalive&&(this.heartbeatInterval=setInterval(this._backgroundHeartbeat.bind(this),3e5),this.setAwayTimeout=function(){t.isAway=!0},this.mouseMoveListener=l()((function(){var e=t.isAway;t.isAway=!1,clearTimeout(t.setAwayTimeout),setTimeout(t.setAwayTimeout,12e4),e&&t._backgroundHeartbeat()}),2e3,!0),window.addEventListener("mousemove",this.mouseMoveListener,{capture:!0,passive:!0}),this._backgroundHeartbeat()),(0,i.subscribe)("user_status:status.updated",this.handleUserStatusUpdated)},beforeDestroy:function(){(0,i.unsubscribe)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,i.unsubscribe)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),window.removeEventListener("mouseMove",this.mouseMoveListener),clearInterval(this.heartbeatInterval),(0,i.unsubscribe)("user_status:status.updated",this.handleUserStatusUpdated)},methods:{handleDisplayNameUpdate:function(t){this.displayName=t},handleProfileEnabledUpdate:function(t){this.profileEnabled=t},loadProfilePage:function(){this.profileEnabled&&(this.loadingProfilePage=!0)},openModal:function(){this.isModalOpen=!0},closeModal:function(){this.isModalOpen=!1},_backgroundHeartbeat:function(){var t,e=this;return(t=regeneratorRuntime.mark((function t(){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,f(e.isAway);case 3:if(null==(n=t.sent)||!n.userId){t.next=8;break}e.$store.dispatch("setStatusFromHeartbeat",n),t.next=10;break;case 8:return t.next=10,e.$store.dispatch("reFetchStatusFromServer");case 10:t.next=15;break;case 12:t.prev=12,t.t0=t.catch(0),console.debug("Failed sending heartbeat, got: "+(null===(r=t.t0.response)||void 0===r?void 0:r.status));case 15:case"end":return t.stop()}}),t,null,[[0,12]])})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){h(a,r,s,o,u,"next",t)}function u(t){h(a,r,s,o,u,"throw",t)}o(void 0)}))})()},handleUserStatusUpdated:function(t){OC.getCurrentUser().uid===t.userId&&this.$store.dispatch("setStatusFromObject",{status:t.status,icon:t.icon,message:t.message})}}},A=g,b=r(93379),j=r.n(b),y=r(7795),w=r.n(y),C=r(90569),x=r.n(C),_=r(3565),k=r.n(_),S=r(19216),P=r.n(S),O=r(44589),I=r.n(O),U=r(45347),M={};M.styleTagTransform=I(),M.setAttributes=k(),M.insert=x().bind(null,"head"),M.domAPI=w(),M.insertStyleElement=P(),j()(U.Z,M),U.Z&&U.Z.locals&&U.Z.locals;var D=(0,r(51900).Z)(A,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("li",[n("div",{staticClass:"user-status-menu-item"},[t.inline?t._e():n("a",{staticClass:"user-status-menu-item__header",attrs:{href:t.profilePageLink},on:{click:t.loadProfilePage}},[n("div",{staticClass:"user-status-menu-item__header-content"},[n("div",{staticClass:"user-status-menu-item__header-content-displayname"},[t._v(t._s(t.displayName))]),t._v(" "),t.loadingProfilePage?n("div",{staticClass:"icon-loading-small"}):n("div",{staticClass:"user-status-menu-item__header-content-placeholder"})]),t._v(" "),t.profileEnabled?n("div",[t._v("\n\t\t\t\t"+t._s(t.t("user_status","View profile"))+"\n\t\t\t")]):t._e()]),t._v(" "),n(t.inline?"button":"a",{tag:"toggle",staticClass:"user-status-menu-item__toggle",class:{"user-status-menu-item__toggle--inline":t.inline},attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openModal.apply(null,arguments)}}},[n("span",{staticClass:"user-status-menu-item__toggle-icon",class:t.statusIcon}),t._v("\n\t\t\t"+t._s(t.visibleMessage)+"\n\t\t")])],1),t._v(" "),t.isModalOpen?n("SetStatusModal",{on:{close:t.closeModal}}):t._e()],1)}),[],!1,null,"e652bbe6",null),E=D.exports,R=r(20629);function T(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}var z=function(){var t,e=(t=regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/predefined_statuses?format=json"),t.next=3,d.default.get(e);case 3:return n=t.sent,t.abrupt("return",n.data.ocs.data);case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){T(a,r,s,o,u,"next",t)}function u(t){T(a,r,s,o,u,"throw",t)}o(void 0)}))});return function(){return e.apply(this,arguments)}}();function B(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return F(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?F(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,s=function(){};return{s:s,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,u=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return o=t.done,t},e:function(t){u=!0,a=t},f:function(){try{o||null==n.return||n.return()}finally{if(u)throw a}}}}function F(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function $(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}var N={loadAllPredefinedStatuses:function(t){return(e=regeneratorRuntime.mark((function e(){var n,r,s,a,o,u;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.state,r=t.commit,!(n.predefinedStatuses.length>0)){e.next=3;break}return e.abrupt("return");case 3:return e.next=5,z();case 5:s=e.sent,a=B(s);try{for(a.s();!(o=a.n()).done;)u=o.value,r("addPredefinedStatus",u)}catch(t){a.e(t)}finally{a.f()}case 8:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,s){var a=e.apply(t,n);function o(t){$(a,r,s,o,u,"next",t)}function u(t){$(a,r,s,o,u,"throw",t)}o(void 0)}))})();var e}},L={state:{predefinedStatuses:[]},mutations:{addPredefinedStatus:function(t,e){t.predefinedStatuses.push(e)}},getters:{},actions:N};function q(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}function Z(t){return function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){q(a,r,s,o,u,"next",t)}function u(t){q(a,r,s,o,u,"throw",t)}o(void 0)}))}}var H=function(){var t=Z(regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status"),t.next=3,d.default.get(e);case 3:return n=t.sent,t.abrupt("return",n.data.ocs.data);case 5:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),G=function(){var t=Z(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/status"),t.next=3,d.default.put(n,{statusType:e});case 3:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),Q=function(){var t=Z(regeneratorRuntime.mark((function t(e){var n,r,s=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=s.length>1&&void 0!==s[1]?s[1]:null,r=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message/predefined?format=json"),t.next=4,d.default.put(r,{messageId:e,clearAt:n});case 4:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),W=function(){var t=Z(regeneratorRuntime.mark((function t(e){var n,r,s,a=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=a.length>1&&void 0!==a[1]?a[1]:null,r=a.length>2&&void 0!==a[2]?a[2]:null,s=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message/custom?format=json"),t.next=5,d.default.put(s,{message:e,statusIcon:n,clearAt:r});case 5:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),J=function(){var t=Z(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message?format=json"),t.next=3,d.default.delete(e);case 3:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),K=r(64039),V=r(80351),X=r.n(V),Y=function(t){if(null===t)return null;var e=(0,K.n)();if("period"===t.type)return e.setSeconds(e.getSeconds()+t.time),Math.floor(e.getTime()/1e3);if("end-of"===t.type)switch(t.time){case"day":case"week":return Number(X()(e).endOf(t.time).format("X"))}return"_time"===t.type?t.time:null};function tt(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}function et(t){return function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){tt(a,r,s,o,u,"next",t)}function u(t){tt(a,r,s,o,u,"throw",t)}o(void 0)}))}}var nt={state:{status:null,statusIsUserDefined:null,message:null,icon:null,clearAt:null,messageIsPredefined:null,messageId:null},mutations:{setStatus:function(t,e){var n=e.statusType;t.status=n,t.statusIsUserDefined=!0},setPredefinedMessage:function(t,e){var n=e.messageId,r=e.clearAt,s=e.message,a=e.icon;t.messageId=n,t.messageIsPredefined=!0,t.message=s,t.icon=a,t.clearAt=r},setCustomMessage:function(t,e){var n=e.message,r=e.icon,s=e.clearAt;t.messageId=null,t.messageIsPredefined=!1,t.message=n,t.icon=r,t.clearAt=s},clearMessage:function(t){t.messageId=null,t.messageIsPredefined=!1,t.message=null,t.icon=null,t.clearAt=null},loadStatusFromServer:function(t,e){var n=e.status,r=e.statusIsUserDefined,s=e.message,a=e.icon,o=e.clearAt,u=e.messageIsPredefined,i=e.messageId;t.status=n,t.statusIsUserDefined=r,t.message=s,t.icon=a,t.clearAt=o,t.messageIsPredefined=u,t.messageId=i}},getters:{},actions:{setStatus:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,u;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.state,u=e.statusType,n.next=4,G(u);case 4:s("setStatus",{statusType:u}),(0,i.emit)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(r=(0,a.getCurrentUser)())||void 0===r?void 0:r.uid});case 6:case"end":return n.stop()}}),n)})))()},setStatusFromObject:function(t,e){return et(regeneratorRuntime.mark((function n(){var r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:r=t.commit,t.state,r("loadStatusFromServer",e);case 2:case"end":return n.stop()}}),n)})))()},setPredefinedMessage:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,u,c,l,d,m,f,p;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.rootState,u=t.state,c=e.messageId,l=e.clearAt,d=Y(l),n.next=5,Q(c,d);case 5:m=o.predefinedStatuses.predefinedStatuses.find((function(t){return t.id===c})),f=m.message,p=m.icon,s("setPredefinedMessage",{messageId:c,clearAt:d,message:f,icon:p}),(0,i.emit)("user_status:status.updated",{status:u.status,message:u.message,icon:u.icon,clearAt:u.clearAt,userId:null===(r=(0,a.getCurrentUser)())||void 0===r?void 0:r.uid});case 9:case"end":return n.stop()}}),n)})))()},setCustomMessage:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,u,c,l,d;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.state,u=e.message,c=e.icon,l=e.clearAt,d=Y(l),n.next=5,W(u,c,d);case 5:s("setCustomMessage",{message:u,icon:c,clearAt:d}),(0,i.emit)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(r=(0,a.getCurrentUser)())||void 0===r?void 0:r.uid});case 7:case"end":return n.stop()}}),n)})))()},clearMessage:function(t){return et(regeneratorRuntime.mark((function e(){var n,r,s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=t.commit,s=t.state,e.next=3,J();case 3:r("clearMessage"),(0,i.emit)("user_status:status.updated",{status:s.status,message:s.message,icon:s.icon,clearAt:s.clearAt,userId:null===(n=(0,a.getCurrentUser)())||void 0===n?void 0:n.uid});case 5:case"end":return e.stop()}}),e)})))()},reFetchStatusFromServer:function(t){return et(regeneratorRuntime.mark((function e(){var n,r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.commit,e.next=3,H();case 3:r=e.sent,n("loadStatusFromServer",r);case 5:case"end":return e.stop()}}),e)})))()},setStatusFromHeartbeat:function(t,e){return et(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:(0,t.commit)("loadStatusFromServer",e);case 2:case"end":return n.stop()}}),n)})))()},loadStatusFromInitialState:function(t){(0,t.commit)("loadStatusFromServer",(0,u.loadState)("user_status","status"))}}};s.default.use(R.ZP);var rt=new R.yh({modules:{predefinedStatuses:L,userStatus:nt},strict:!0}),st=r(28017),at=r.n(st);r.nc=btoa((0,a.getRequestToken)()),s.default.prototype.t=t,s.default.prototype.$t=t;var ot=document.getElementById("avatardiv-menu"),ut={preloadedUserStatus:{message:ot.dataset.userstatus_message,icon:ot.dataset.userstatus_icon,status:ot.dataset.userstatus},user:ot.dataset.user,displayName:ot.dataset.displayname,url:ot.dataset.avatar,disableMenu:!0,disableTooltip:!0};new(s.default.extend(at()))({propsData:ut}).$mount("#avatardiv-menu"),new s.default({el:'li[data-id="user_status-menuitem"]',name:"UserStatusRoot",render:function(t){return t(E)},store:rt}),document.addEventListener("DOMContentLoaded",(function(){OCA.Dashboard&&OCA.Dashboard.registerStatus("status",(function(t){return new(s.default.extend(E))({propsData:{inline:!0},store:rt}).$mount(t)}))}))},84387:function(t,e,n){"use strict";var r=n(20629),s=n(26932);function a(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function u(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?o(Object(n),!0).forEach((function(e){i(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}e.Z={computed:u(u({},(0,r.rn)({statusType:function(t){return t.userStatus.status},statusIsUserDefined:function(t){return t.userStatus.statusIsUserDefined},customIcon:function(t){return t.userStatus.icon},customMessage:function(t){return t.userStatus.message}})),{},{visibleMessage:function(){if(this.customIcon&&this.customMessage)return"".concat(this.customIcon," ").concat(this.customMessage);if(this.customMessage)return this.customMessage;if(this.statusIsUserDefined)switch(this.statusType){case"online":return this.$t("user_status","Online");case"away":return this.$t("user_status","Away");case"dnd":return this.$t("user_status","Do not disturb");case"invisible":return this.$t("user_status","Invisible");case"offline":return this.$t("user_status","Offline")}return this.$t("user_status","Set status")},statusIcon:function(){switch(this.statusType){case"online":return"icon-user-status-online";case"away":return"icon-user-status-away";case"dnd":return"icon-user-status-dnd";case"invisible":case"offline":return"icon-user-status-invisible"}return""}}),methods:{changeStatus:function(t){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,n.$store.dispatch("setStatus",{statusType:t});case 3:e.next=9;break;case 5:e.prev=5,e.t0=e.catch(0),(0,s.x2)(n.$t("user_status","There was an error saving the new status")),console.debug(e.t0);case 9:case"end":return e.stop()}}),e,null,[[0,5]])})),function(){var t=this,n=arguments;return new Promise((function(r,s){var o=e.apply(t,n);function u(t){a(o,r,s,u,i,"next",t)}function i(t){a(o,r,s,u,i,"throw",t)}u(void 0)}))})()}}}},64039:function(t,e,n){"use strict";n.d(e,{n:function(){return r}});var r=function(){return new Date}},45347:function(t,e,n){"use strict";var r=n(87537),s=n.n(r),a=n(23645),o=n.n(a)()(s());o.push([t.id,".user-status-menu-item__header[data-v-e652bbe6]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-e652bbe6]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-e652bbe6]{cursor:default !important}.user-status-menu-item__header[data-v-e652bbe6]:not([href]):hover{background-color:transparent !important}.user-status-menu-item__header-content[data-v-e652bbe6]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-e652bbe6]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-e652bbe6]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-e652bbe6]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-e652bbe6]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px}.user-status-menu-item__toggle--inline[data-v-e652bbe6]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-background-translucent);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-e652bbe6]:active,.user-status-menu-item__toggle--inline[data-v-e652bbe6]:hover,.user-status-menu-item__toggle--inline[data-v-e652bbe6]:focus{background-color:var(--color-background-hover)}li[data-v-e652bbe6]{list-style-type:none}","",{version:3,sources:["webpack://./apps/user_status/src/UserStatus.vue"],names:[],mappings:"AAgOC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,uCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,oDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAMJ,oBACC,oBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-background-translucent);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n"],sourceRoot:""}]),e.Z=o}},a={};function o(t){var e=a[t];if(void 0!==e)return e.exports;var n=a[t]={id:t,loaded:!1,exports:{}};return s[t].call(n.exports,n,n.exports,o),n.loaded=!0,n.exports}o.m=s,o.amdD=function(){throw new Error("define cannot be used indirect")},o.amdO={},e=[],o.O=function(t,n,r,s){if(!n){var a=1/0;for(l=0;l<e.length;l++){n=e[l][0],r=e[l][1],s=e[l][2];for(var u=!0,i=0;i<n.length;i++)(!1&s||a>=s)&&Object.keys(o.O).every((function(t){return o.O[t](n[i])}))?n.splice(i--,1):(u=!1,s<a&&(a=s));if(u){e.splice(l--,1);var c=r();void 0!==c&&(t=c)}}return t}s=s||0;for(var l=e.length;l>0&&e[l-1][2]>s;l--)e[l]=e[l-1];e[l]=[n,r,s]},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.f={},o.e=function(t){return Promise.all(Object.keys(o.f).reduce((function(e,n){return o.f[n](t,e),e}),[]))},o.u=function(t){return"user-status-modal-"+t+".js?v=5a28ce594312bb1512c0"},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n={},r="nextcloud:",o.l=function(t,e,s,a){if(n[t])n[t].push(e);else{var u,i;if(void 0!==s)for(var c=document.getElementsByTagName("script"),l=0;l<c.length;l++){var d=c[l];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==r+s){u=d;break}}u||(i=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,o.nc&&u.setAttribute("nonce",o.nc),u.setAttribute("data-webpack",r+s),u.src=t),n[t]=[e];var m=function(e,r){u.onerror=u.onload=null,clearTimeout(f);var s=n[t];if(delete n[t],u.parentNode&&u.parentNode.removeChild(u),s&&s.forEach((function(t){return t(r)})),e)return e(r)},f=setTimeout(m.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=m.bind(null,u.onerror),u.onload=m.bind(null,u.onload),i&&document.head.appendChild(u)}},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},o.j=613,function(){var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t}(),function(){o.b=document.baseURI||self.location.href;var t={613:0};o.f.j=function(e,n){var r=o.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var s=new Promise((function(n,s){r=t[e]=[n,s]}));n.push(r[2]=s);var a=o.p+o.u(e),u=new Error;o.l(a,(function(n){if(o.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var s=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.src;u.message="Loading chunk "+e+" failed.\n("+s+": "+a+")",u.name="ChunkLoadError",u.type=s,u.request=a,r[1](u)}}),"chunk-"+e,e)}},o.O.j=function(e){return 0===t[e]};var e=function(e,n){var r,s,a=n[0],u=n[1],i=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(r in u)o.o(u,r)&&(o.m[r]=u[r]);if(i)var l=i(o)}for(e&&e(n);c<a.length;c++)s=a[c],o.o(t,s)&&t[s]&&t[s][0](),t[s]=0;return o.O(l)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}();var u=o.O(void 0,[874],(function(){return o(82205)}));u=o.O(u)}();
-//# sourceMappingURL=user_status-menu.js.map?v=2eee60a145d15dbdc4b5 \ No newline at end of file
+!function(){var e,n,r,s={93365:function(t,e,n){var r={"./af":36026,"./af.js":36026,"./ar":28093,"./ar-dz":41943,"./ar-dz.js":41943,"./ar-kw":23969,"./ar-kw.js":23969,"./ar-ly":40594,"./ar-ly.js":40594,"./ar-ma":18369,"./ar-ma.js":18369,"./ar-sa":32579,"./ar-sa.js":32579,"./ar-tn":76442,"./ar-tn.js":76442,"./ar.js":28093,"./az":86425,"./az.js":86425,"./be":22004,"./be.js":22004,"./bg":42982,"./bg.js":42982,"./bm":21067,"./bm.js":21067,"./bn":8366,"./bn.js":8366,"./bo":95040,"./bo.js":95040,"./br":521,"./br.js":521,"./bs":83242,"./bs.js":83242,"./ca":73046,"./ca.js":73046,"./cs":25794,"./cs.js":25794,"./cv":28231,"./cv.js":28231,"./cy":10927,"./cy.js":10927,"./da":42832,"./da.js":42832,"./de":29415,"./de-at":3331,"./de-at.js":3331,"./de-ch":45524,"./de-ch.js":45524,"./de.js":29415,"./dv":44700,"./dv.js":44700,"./el":88752,"./el.js":88752,"./en-SG":16706,"./en-SG.js":16706,"./en-au":90444,"./en-au.js":90444,"./en-ca":65959,"./en-ca.js":65959,"./en-gb":62762,"./en-gb.js":62762,"./en-ie":40909,"./en-ie.js":40909,"./en-il":79909,"./en-il.js":79909,"./en-nz":75200,"./en-nz.js":75200,"./eo":27447,"./eo.js":27447,"./es":86756,"./es-do":47049,"./es-do.js":47049,"./es-us":57133,"./es-us.js":57133,"./es.js":86756,"./et":72182,"./et.js":72182,"./eu":14419,"./eu.js":14419,"./fa":2916,"./fa.js":2916,"./fi":49964,"./fi.js":49964,"./fo":26094,"./fo.js":26094,"./fr":35833,"./fr-ca":56994,"./fr-ca.js":56994,"./fr-ch":2740,"./fr-ch.js":2740,"./fr.js":35833,"./fy":69542,"./fy.js":69542,"./ga":93264,"./ga.js":93264,"./gd":77457,"./gd.js":77457,"./gl":83043,"./gl.js":83043,"./gom-latn":28379,"./gom-latn.js":28379,"./gu":406,"./gu.js":406,"./he":73219,"./he.js":73219,"./hi":99834,"./hi.js":99834,"./hr":28754,"./hr.js":28754,"./hu":93945,"./hu.js":93945,"./hy-am":81319,"./hy-am.js":81319,"./id":24875,"./id.js":24875,"./is":23724,"./is.js":23724,"./it":79906,"./it-ch":34303,"./it-ch.js":34303,"./it.js":79906,"./ja":77105,"./ja.js":77105,"./jv":15026,"./jv.js":15026,"./ka":67416,"./ka.js":67416,"./kk":79734,"./kk.js":79734,"./km":60757,"./km.js":60757,"./kn":58369,"./kn.js":58369,"./ko":77687,"./ko.js":77687,"./ku":95544,"./ku.js":95544,"./ky":85431,"./ky.js":85431,"./lb":13613,"./lb.js":13613,"./lo":34252,"./lo.js":34252,"./lt":84619,"./lt.js":84619,"./lv":93760,"./lv.js":93760,"./me":93393,"./me.js":93393,"./mi":12369,"./mi.js":12369,"./mk":48664,"./mk.js":48664,"./ml":23099,"./ml.js":23099,"./mn":98539,"./mn.js":98539,"./mr":778,"./mr.js":778,"./ms":39970,"./ms-my":82625,"./ms-my.js":82625,"./ms.js":39970,"./mt":15714,"./mt.js":15714,"./my":53055,"./my.js":53055,"./nb":73945,"./nb.js":73945,"./ne":63645,"./ne.js":63645,"./nl":4829,"./nl-be":12823,"./nl-be.js":12823,"./nl.js":4829,"./nn":23756,"./nn.js":23756,"./pa-in":97877,"./pa-in.js":97877,"./pl":53066,"./pl.js":53066,"./pt":28677,"./pt-br":81592,"./pt-br.js":81592,"./pt.js":28677,"./ro":32722,"./ro.js":32722,"./ru":59138,"./ru.js":59138,"./sd":32568,"./sd.js":32568,"./se":49753,"./se.js":49753,"./si":58024,"./si.js":58024,"./sk":31058,"./sk.js":31058,"./sl":43452,"./sl.js":43452,"./sq":2795,"./sq.js":2795,"./sr":26976,"./sr-cyrl":38819,"./sr-cyrl.js":38819,"./sr.js":26976,"./ss":7467,"./ss.js":7467,"./sv":42787,"./sv.js":42787,"./sw":80298,"./sw.js":80298,"./ta":57532,"./ta.js":57532,"./te":76076,"./te.js":76076,"./tet":40452,"./tet.js":40452,"./tg":64794,"./tg.js":64794,"./th":48245,"./th.js":48245,"./tl-ph":36056,"./tl-ph.js":36056,"./tlh":15249,"./tlh.js":15249,"./tr":22053,"./tr.js":22053,"./tzl":39871,"./tzl.js":39871,"./tzm":39574,"./tzm-latn":19210,"./tzm-latn.js":19210,"./tzm.js":39574,"./ug-cn":91532,"./ug-cn.js":91532,"./uk":11432,"./uk.js":11432,"./ur":88523,"./ur.js":88523,"./uz":54958,"./uz-latn":68735,"./uz-latn.js":68735,"./uz.js":54958,"./vi":83398,"./vi.js":83398,"./x-pseudo":56665,"./x-pseudo.js":56665,"./yo":11642,"./yo.js":11642,"./zh-cn":5462,"./zh-cn.js":5462,"./zh-hk":92530,"./zh-hk.js":92530,"./zh-tw":97333,"./zh-tw.js":97333};function s(t){var e=a(t);return n(e)}function a(t){if(!n.o(r,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return r[t]}s.keys=function(){return Object.keys(r)},s.resolve=a,t.exports=s,s.id=93365},82205:function(e,n,r){"use strict";var s=r(20144),a=r(22200),o=r(79753),u=r(16453),i=r(74854),c=r(20296),l=r.n(c),d=r(4820);function m(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}var f=function(){var t,e=(t=regeneratorRuntime.mark((function t(e){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(0,o.generateUrl)("/apps/user_status/heartbeat"),t.next=3,d.default.put(n,{status:e?"away":"online"});case 3:return r=t.sent,t.abrupt("return",r.data);case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){m(a,r,s,o,u,"next",t)}function u(t){m(a,r,s,o,u,"throw",t)}o(void 0)}))});return function(t){return e.apply(this,arguments)}}(),p=r(84387);function h(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}var v=(0,u.loadState)("user_status","profileEnabled",!1).profileEnabled,g={name:"UserStatus",components:{SetStatusModal:function(){return Promise.all([r.e(874),r.e(299)]).then(r.bind(r,63755))}},mixins:[p.Z],props:{inline:{type:Boolean,default:!1}},data:function(){return{displayName:(0,a.getCurrentUser)().displayName,heartbeatInterval:null,isAway:!1,isModalOpen:!1,loadingProfilePage:!1,mouseMoveListener:null,profileEnabled:v,setAwayTimeout:null}},computed:{profilePageLink:function(){return this.profileEnabled?(0,o.generateUrl)("/u/{userId}",{userId:(0,a.getCurrentUser)().uid}):null}},mounted:function(){var t=this;(0,i.subscribe)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,i.subscribe)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),this.$store.dispatch("loadStatusFromInitialState"),OC.config.session_keepalive&&(this.heartbeatInterval=setInterval(this._backgroundHeartbeat.bind(this),3e5),this.setAwayTimeout=function(){t.isAway=!0},this.mouseMoveListener=l()((function(){var e=t.isAway;t.isAway=!1,clearTimeout(t.setAwayTimeout),setTimeout(t.setAwayTimeout,12e4),e&&t._backgroundHeartbeat()}),2e3,!0),window.addEventListener("mousemove",this.mouseMoveListener,{capture:!0,passive:!0}),this._backgroundHeartbeat()),(0,i.subscribe)("user_status:status.updated",this.handleUserStatusUpdated)},beforeDestroy:function(){(0,i.unsubscribe)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,i.unsubscribe)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),window.removeEventListener("mouseMove",this.mouseMoveListener),clearInterval(this.heartbeatInterval),(0,i.unsubscribe)("user_status:status.updated",this.handleUserStatusUpdated)},methods:{handleDisplayNameUpdate:function(t){this.displayName=t},handleProfileEnabledUpdate:function(t){this.profileEnabled=t},loadProfilePage:function(){this.profileEnabled&&(this.loadingProfilePage=!0)},openModal:function(){this.isModalOpen=!0},closeModal:function(){this.isModalOpen=!1},_backgroundHeartbeat:function(){var t,e=this;return(t=regeneratorRuntime.mark((function t(){var n,r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,f(e.isAway);case 3:if(null==(n=t.sent)||!n.userId){t.next=8;break}e.$store.dispatch("setStatusFromHeartbeat",n),t.next=10;break;case 8:return t.next=10,e.$store.dispatch("reFetchStatusFromServer");case 10:t.next=15;break;case 12:t.prev=12,t.t0=t.catch(0),console.debug("Failed sending heartbeat, got: "+(null===(r=t.t0.response)||void 0===r?void 0:r.status));case 15:case"end":return t.stop()}}),t,null,[[0,12]])})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){h(a,r,s,o,u,"next",t)}function u(t){h(a,r,s,o,u,"throw",t)}o(void 0)}))})()},handleUserStatusUpdated:function(t){OC.getCurrentUser().uid===t.userId&&this.$store.dispatch("setStatusFromObject",{status:t.status,icon:t.icon,message:t.message})}}},A=g,b=r(93379),j=r.n(b),y=r(7795),w=r.n(y),C=r(90569),x=r.n(C),_=r(3565),k=r.n(_),S=r(19216),P=r.n(S),O=r(44589),I=r.n(O),U=r(45347),M={};M.styleTagTransform=I(),M.setAttributes=k(),M.insert=x().bind(null,"head"),M.domAPI=w(),M.insertStyleElement=P(),j()(U.Z,M),U.Z&&U.Z.locals&&U.Z.locals;var D=(0,r(51900).Z)(A,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("li",[n("div",{staticClass:"user-status-menu-item"},[t.inline?t._e():n("a",{staticClass:"user-status-menu-item__header",attrs:{href:t.profilePageLink},on:{click:t.loadProfilePage}},[n("div",{staticClass:"user-status-menu-item__header-content"},[n("div",{staticClass:"user-status-menu-item__header-content-displayname"},[t._v(t._s(t.displayName))]),t._v(" "),t.loadingProfilePage?n("div",{staticClass:"icon-loading-small"}):n("div",{staticClass:"user-status-menu-item__header-content-placeholder"})]),t._v(" "),t.profileEnabled?n("div",[t._v("\n\t\t\t\t"+t._s(t.t("user_status","View profile"))+"\n\t\t\t")]):t._e()]),t._v(" "),n(t.inline?"button":"a",{tag:"toggle",staticClass:"user-status-menu-item__toggle",class:{"user-status-menu-item__toggle--inline":t.inline},attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openModal.apply(null,arguments)}}},[n("span",{staticClass:"user-status-menu-item__toggle-icon",class:t.statusIcon}),t._v("\n\t\t\t"+t._s(t.visibleMessage)+"\n\t\t")])],1),t._v(" "),t.isModalOpen?n("SetStatusModal",{on:{close:t.closeModal}}):t._e()],1)}),[],!1,null,"e652bbe6",null),E=D.exports,R=r(20629);function T(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}var z=function(){var t,e=(t=regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/predefined_statuses?format=json"),t.next=3,d.default.get(e);case 3:return n=t.sent,t.abrupt("return",n.data.ocs.data);case 5:case"end":return t.stop()}}),t)})),function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){T(a,r,s,o,u,"next",t)}function u(t){T(a,r,s,o,u,"throw",t)}o(void 0)}))});return function(){return e.apply(this,arguments)}}();function B(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=function(t,e){if(t){if("string"==typeof t)return F(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?F(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var r=0,s=function(){};return{s:s,n:function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}},e:function(t){throw t},f:s}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,u=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return o=t.done,t},e:function(t){u=!0,a=t},f:function(){try{o||null==n.return||n.return()}finally{if(u)throw a}}}}function F(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function $(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}var N={loadAllPredefinedStatuses:function(t){return(e=regeneratorRuntime.mark((function e(){var n,r,s,a,o,u;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.state,r=t.commit,!(n.predefinedStatuses.length>0)){e.next=3;break}return e.abrupt("return");case 3:return e.next=5,z();case 5:s=e.sent,a=B(s);try{for(a.s();!(o=a.n()).done;)u=o.value,r("addPredefinedStatus",u)}catch(t){a.e(t)}finally{a.f()}case 8:case"end":return e.stop()}}),e)})),function(){var t=this,n=arguments;return new Promise((function(r,s){var a=e.apply(t,n);function o(t){$(a,r,s,o,u,"next",t)}function u(t){$(a,r,s,o,u,"throw",t)}o(void 0)}))})();var e}},L={state:{predefinedStatuses:[]},mutations:{addPredefinedStatus:function(t,e){t.predefinedStatuses.push(e)}},getters:{},actions:N};function q(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}function Z(t){return function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){q(a,r,s,o,u,"next",t)}function u(t){q(a,r,s,o,u,"throw",t)}o(void 0)}))}}var H=function(){var t=Z(regeneratorRuntime.mark((function t(){var e,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status"),t.next=3,d.default.get(e);case 3:return n=t.sent,t.abrupt("return",n.data.ocs.data);case 5:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),G=function(){var t=Z(regeneratorRuntime.mark((function t(e){var n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/status"),t.next=3,d.default.put(n,{statusType:e});case 3:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),Q=function(){var t=Z(regeneratorRuntime.mark((function t(e){var n,r,s=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=s.length>1&&void 0!==s[1]?s[1]:null,r=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message/predefined?format=json"),t.next=4,d.default.put(r,{messageId:e,clearAt:n});case 4:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),W=function(){var t=Z(regeneratorRuntime.mark((function t(e){var n,r,s,a=arguments;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=a.length>1&&void 0!==a[1]?a[1]:null,r=a.length>2&&void 0!==a[2]?a[2]:null,s=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message/custom?format=json"),t.next=5,d.default.put(s,{message:e,statusIcon:n,clearAt:r});case 5:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),J=function(){var t=Z(regeneratorRuntime.mark((function t(){var e;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=(0,o.generateOcsUrl)("apps/user_status/api/v1/user_status/message?format=json"),t.next=3,d.default.delete(e);case 3:case"end":return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),K=r(64039),V=r(80351),X=r.n(V),Y=function(t){if(null===t)return null;var e=(0,K.n)();if("period"===t.type)return e.setSeconds(e.getSeconds()+t.time),Math.floor(e.getTime()/1e3);if("end-of"===t.type)switch(t.time){case"day":case"week":return Number(X()(e).endOf(t.time).format("X"))}return"_time"===t.type?t.time:null};function tt(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}function et(t){return function(){var e=this,n=arguments;return new Promise((function(r,s){var a=t.apply(e,n);function o(t){tt(a,r,s,o,u,"next",t)}function u(t){tt(a,r,s,o,u,"throw",t)}o(void 0)}))}}var nt={state:{status:null,statusIsUserDefined:null,message:null,icon:null,clearAt:null,messageIsPredefined:null,messageId:null},mutations:{setStatus:function(t,e){var n=e.statusType;t.status=n,t.statusIsUserDefined=!0},setPredefinedMessage:function(t,e){var n=e.messageId,r=e.clearAt,s=e.message,a=e.icon;t.messageId=n,t.messageIsPredefined=!0,t.message=s,t.icon=a,t.clearAt=r},setCustomMessage:function(t,e){var n=e.message,r=e.icon,s=e.clearAt;t.messageId=null,t.messageIsPredefined=!1,t.message=n,t.icon=r,t.clearAt=s},clearMessage:function(t){t.messageId=null,t.messageIsPredefined=!1,t.message=null,t.icon=null,t.clearAt=null},loadStatusFromServer:function(t,e){var n=e.status,r=e.statusIsUserDefined,s=e.message,a=e.icon,o=e.clearAt,u=e.messageIsPredefined,i=e.messageId;t.status=n,t.statusIsUserDefined=r,t.message=s,t.icon=a,t.clearAt=o,t.messageIsPredefined=u,t.messageId=i}},getters:{},actions:{setStatus:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,u;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.state,u=e.statusType,n.next=4,G(u);case 4:s("setStatus",{statusType:u}),(0,i.emit)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(r=(0,a.getCurrentUser)())||void 0===r?void 0:r.uid});case 6:case"end":return n.stop()}}),n)})))()},setStatusFromObject:function(t,e){return et(regeneratorRuntime.mark((function n(){var r;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:r=t.commit,t.state,r("loadStatusFromServer",e);case 2:case"end":return n.stop()}}),n)})))()},setPredefinedMessage:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,u,c,l,d,m,f,p;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.rootState,u=t.state,c=e.messageId,l=e.clearAt,d=Y(l),n.next=5,Q(c,d);case 5:m=o.predefinedStatuses.predefinedStatuses.find((function(t){return t.id===c})),f=m.message,p=m.icon,s("setPredefinedMessage",{messageId:c,clearAt:d,message:f,icon:p}),(0,i.emit)("user_status:status.updated",{status:u.status,message:u.message,icon:u.icon,clearAt:u.clearAt,userId:null===(r=(0,a.getCurrentUser)())||void 0===r?void 0:r.uid});case 9:case"end":return n.stop()}}),n)})))()},setCustomMessage:function(t,e){return et(regeneratorRuntime.mark((function n(){var r,s,o,u,c,l,d;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return s=t.commit,o=t.state,u=e.message,c=e.icon,l=e.clearAt,d=Y(l),n.next=5,W(u,c,d);case 5:s("setCustomMessage",{message:u,icon:c,clearAt:d}),(0,i.emit)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(r=(0,a.getCurrentUser)())||void 0===r?void 0:r.uid});case 7:case"end":return n.stop()}}),n)})))()},clearMessage:function(t){return et(regeneratorRuntime.mark((function e(){var n,r,s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=t.commit,s=t.state,e.next=3,J();case 3:r("clearMessage"),(0,i.emit)("user_status:status.updated",{status:s.status,message:s.message,icon:s.icon,clearAt:s.clearAt,userId:null===(n=(0,a.getCurrentUser)())||void 0===n?void 0:n.uid});case 5:case"end":return e.stop()}}),e)})))()},reFetchStatusFromServer:function(t){return et(regeneratorRuntime.mark((function e(){var n,r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.commit,e.next=3,H();case 3:r=e.sent,n("loadStatusFromServer",r);case 5:case"end":return e.stop()}}),e)})))()},setStatusFromHeartbeat:function(t,e){return et(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:(0,t.commit)("loadStatusFromServer",e);case 2:case"end":return n.stop()}}),n)})))()},loadStatusFromInitialState:function(t){(0,t.commit)("loadStatusFromServer",(0,u.loadState)("user_status","status"))}}};s.default.use(R.ZP);var rt=new R.yh({modules:{predefinedStatuses:L,userStatus:nt},strict:!0}),st=r(28017),at=r.n(st);r.nc=btoa((0,a.getRequestToken)()),s.default.prototype.t=t,s.default.prototype.$t=t;var ot=document.getElementById("avatardiv-menu"),ut={preloadedUserStatus:{message:ot.dataset.userstatus_message,icon:ot.dataset.userstatus_icon,status:ot.dataset.userstatus},user:ot.dataset.user,displayName:ot.dataset.displayname,url:ot.dataset.avatar,disableMenu:!0,disableTooltip:!0};new(s.default.extend(at()))({propsData:ut}).$mount("#avatardiv-menu"),new s.default({el:'li[data-id="user_status-menuitem"]',name:"UserStatusRoot",render:function(t){return t(E)},store:rt}),document.addEventListener("DOMContentLoaded",(function(){OCA.Dashboard&&OCA.Dashboard.registerStatus("status",(function(t){return new(s.default.extend(E))({propsData:{inline:!0},store:rt}).$mount(t)}))}))},84387:function(t,e,n){"use strict";var r=n(20629),s=n(26932);function a(t,e,n,r,s,a,o){try{var u=t[a](o),i=u.value}catch(t){return void n(t)}u.done?e(i):Promise.resolve(i).then(r,s)}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function u(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?o(Object(n),!0).forEach((function(e){i(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}e.Z={computed:u(u({},(0,r.rn)({statusType:function(t){return t.userStatus.status},statusIsUserDefined:function(t){return t.userStatus.statusIsUserDefined},customIcon:function(t){return t.userStatus.icon},customMessage:function(t){return t.userStatus.message}})),{},{visibleMessage:function(){if(this.customIcon&&this.customMessage)return"".concat(this.customIcon," ").concat(this.customMessage);if(this.customMessage)return this.customMessage;if(this.statusIsUserDefined)switch(this.statusType){case"online":return this.$t("user_status","Online");case"away":return this.$t("user_status","Away");case"dnd":return this.$t("user_status","Do not disturb");case"invisible":return this.$t("user_status","Invisible");case"offline":return this.$t("user_status","Offline")}return this.$t("user_status","Set status")},statusIcon:function(){switch(this.statusType){case"online":return"icon-user-status-online";case"away":return"icon-user-status-away";case"dnd":return"icon-user-status-dnd";case"invisible":case"offline":return"icon-user-status-invisible"}return""}}),methods:{changeStatus:function(t){var e,n=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,n.$store.dispatch("setStatus",{statusType:t});case 3:e.next=9;break;case 5:e.prev=5,e.t0=e.catch(0),(0,s.x2)(n.$t("user_status","There was an error saving the new status")),console.debug(e.t0);case 9:case"end":return e.stop()}}),e,null,[[0,5]])})),function(){var t=this,n=arguments;return new Promise((function(r,s){var o=e.apply(t,n);function u(t){a(o,r,s,u,i,"next",t)}function i(t){a(o,r,s,u,i,"throw",t)}u(void 0)}))})()}}}},64039:function(t,e,n){"use strict";n.d(e,{n:function(){return r}});var r=function(){return new Date}},45347:function(t,e,n){"use strict";var r=n(87537),s=n.n(r),a=n(23645),o=n.n(a)()(s());o.push([t.id,".user-status-menu-item__header[data-v-e652bbe6]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-e652bbe6]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-e652bbe6]{cursor:default !important}.user-status-menu-item__header[data-v-e652bbe6]:not([href]):hover{background-color:transparent !important}.user-status-menu-item__header-content[data-v-e652bbe6]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-e652bbe6]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-e652bbe6]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-e652bbe6]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-e652bbe6]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px}.user-status-menu-item__toggle--inline[data-v-e652bbe6]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-background-translucent);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-e652bbe6]:active,.user-status-menu-item__toggle--inline[data-v-e652bbe6]:hover,.user-status-menu-item__toggle--inline[data-v-e652bbe6]:focus{background-color:var(--color-background-hover)}li[data-v-e652bbe6]{list-style-type:none}","",{version:3,sources:["webpack://./apps/user_status/src/UserStatus.vue"],names:[],mappings:"AAgOC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,uCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,oDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAMJ,oBACC,oBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-background-translucent);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n"],sourceRoot:""}]),e.Z=o}},a={};function o(t){var e=a[t];if(void 0!==e)return e.exports;var n=a[t]={id:t,loaded:!1,exports:{}};return s[t].call(n.exports,n,n.exports,o),n.loaded=!0,n.exports}o.m=s,o.amdD=function(){throw new Error("define cannot be used indirect")},o.amdO={},e=[],o.O=function(t,n,r,s){if(!n){var a=1/0;for(l=0;l<e.length;l++){n=e[l][0],r=e[l][1],s=e[l][2];for(var u=!0,i=0;i<n.length;i++)(!1&s||a>=s)&&Object.keys(o.O).every((function(t){return o.O[t](n[i])}))?n.splice(i--,1):(u=!1,s<a&&(a=s));if(u){e.splice(l--,1);var c=r();void 0!==c&&(t=c)}}return t}s=s||0;for(var l=e.length;l>0&&e[l-1][2]>s;l--)e[l]=e[l-1];e[l]=[n,r,s]},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,{a:e}),e},o.d=function(t,e){for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.f={},o.e=function(t){return Promise.all(Object.keys(o.f).reduce((function(e,n){return o.f[n](t,e),e}),[]))},o.u=function(t){return"user-status-modal-"+t+".js?v=d16ed23bae91bfaa8306"},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n={},r="nextcloud:",o.l=function(t,e,s,a){if(n[t])n[t].push(e);else{var u,i;if(void 0!==s)for(var c=document.getElementsByTagName("script"),l=0;l<c.length;l++){var d=c[l];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==r+s){u=d;break}}u||(i=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,o.nc&&u.setAttribute("nonce",o.nc),u.setAttribute("data-webpack",r+s),u.src=t),n[t]=[e];var m=function(e,r){u.onerror=u.onload=null,clearTimeout(f);var s=n[t];if(delete n[t],u.parentNode&&u.parentNode.removeChild(u),s&&s.forEach((function(t){return t(r)})),e)return e(r)},f=setTimeout(m.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=m.bind(null,u.onerror),u.onload=m.bind(null,u.onload),i&&document.head.appendChild(u)}},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},o.j=613,function(){var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");n.length&&(t=n[n.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t}(),function(){o.b=document.baseURI||self.location.href;var t={613:0};o.f.j=function(e,n){var r=o.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var s=new Promise((function(n,s){r=t[e]=[n,s]}));n.push(r[2]=s);var a=o.p+o.u(e),u=new Error;o.l(a,(function(n){if(o.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var s=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.src;u.message="Loading chunk "+e+" failed.\n("+s+": "+a+")",u.name="ChunkLoadError",u.type=s,u.request=a,r[1](u)}}),"chunk-"+e,e)}},o.O.j=function(e){return 0===t[e]};var e=function(e,n){var r,s,a=n[0],u=n[1],i=n[2],c=0;if(a.some((function(e){return 0!==t[e]}))){for(r in u)o.o(u,r)&&(o.m[r]=u[r]);if(i)var l=i(o)}for(e&&e(n);c<a.length;c++)s=a[c],o.o(t,s)&&t[s]&&t[s][0](),t[s]=0;return o.O(l)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))}();var u=o.O(void 0,[874],(function(){return o(82205)}));u=o.O(u)}();
+//# sourceMappingURL=user_status-menu.js.map?v=25b60b1c5a366280e716 \ No newline at end of file
diff --git a/dist/user_status-menu.js.map b/dist/user_status-menu.js.map
index 8239db19bbd..61f7884f213 100644
--- a/dist/user_status-menu.js.map
+++ b/dist/user_status-menu.js.map
@@ -1 +1 @@
-{"version":3,"file":"user_status-menu.js?v=2eee60a145d15dbdc4b5","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/node_modules/@nextcloud/moment/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/apps/user_status/src/services/heartbeatService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?a54b","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?d74a","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=template&id=e652bbe6&scoped=true&","webpack:///nextcloud/apps/user_status/src/services/predefinedStatusService.js","webpack:///nextcloud/apps/user_status/src/store/predefinedStatuses.js","webpack:///nextcloud/apps/user_status/src/services/statusService.js","webpack:///nextcloud/apps/user_status/src/services/clearAtService.js","webpack:///nextcloud/apps/user_status/src/store/userStatus.js","webpack:///nextcloud/apps/user_status/src/store/index.js","webpack:///nextcloud/apps/user_status/src/menu.js","webpack:///nextcloud/apps/user_status/src/mixins/OnlineStatusMixin.js","webpack:///nextcloud/apps/user_status/src/services/dateService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=style&index=0&id=e652bbe6&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var map = {\n\t\"./af\": 36026,\n\t\"./af.js\": 36026,\n\t\"./ar\": 28093,\n\t\"./ar-dz\": 41943,\n\t\"./ar-dz.js\": 41943,\n\t\"./ar-kw\": 23969,\n\t\"./ar-kw.js\": 23969,\n\t\"./ar-ly\": 40594,\n\t\"./ar-ly.js\": 40594,\n\t\"./ar-ma\": 18369,\n\t\"./ar-ma.js\": 18369,\n\t\"./ar-sa\": 32579,\n\t\"./ar-sa.js\": 32579,\n\t\"./ar-tn\": 76442,\n\t\"./ar-tn.js\": 76442,\n\t\"./ar.js\": 28093,\n\t\"./az\": 86425,\n\t\"./az.js\": 86425,\n\t\"./be\": 22004,\n\t\"./be.js\": 22004,\n\t\"./bg\": 42982,\n\t\"./bg.js\": 42982,\n\t\"./bm\": 21067,\n\t\"./bm.js\": 21067,\n\t\"./bn\": 8366,\n\t\"./bn.js\": 8366,\n\t\"./bo\": 95040,\n\t\"./bo.js\": 95040,\n\t\"./br\": 521,\n\t\"./br.js\": 521,\n\t\"./bs\": 83242,\n\t\"./bs.js\": 83242,\n\t\"./ca\": 73046,\n\t\"./ca.js\": 73046,\n\t\"./cs\": 25794,\n\t\"./cs.js\": 25794,\n\t\"./cv\": 28231,\n\t\"./cv.js\": 28231,\n\t\"./cy\": 10927,\n\t\"./cy.js\": 10927,\n\t\"./da\": 42832,\n\t\"./da.js\": 42832,\n\t\"./de\": 29415,\n\t\"./de-at\": 3331,\n\t\"./de-at.js\": 3331,\n\t\"./de-ch\": 45524,\n\t\"./de-ch.js\": 45524,\n\t\"./de.js\": 29415,\n\t\"./dv\": 44700,\n\t\"./dv.js\": 44700,\n\t\"./el\": 88752,\n\t\"./el.js\": 88752,\n\t\"./en-SG\": 16706,\n\t\"./en-SG.js\": 16706,\n\t\"./en-au\": 90444,\n\t\"./en-au.js\": 90444,\n\t\"./en-ca\": 65959,\n\t\"./en-ca.js\": 65959,\n\t\"./en-gb\": 62762,\n\t\"./en-gb.js\": 62762,\n\t\"./en-ie\": 40909,\n\t\"./en-ie.js\": 40909,\n\t\"./en-il\": 79909,\n\t\"./en-il.js\": 79909,\n\t\"./en-nz\": 75200,\n\t\"./en-nz.js\": 75200,\n\t\"./eo\": 27447,\n\t\"./eo.js\": 27447,\n\t\"./es\": 86756,\n\t\"./es-do\": 47049,\n\t\"./es-do.js\": 47049,\n\t\"./es-us\": 57133,\n\t\"./es-us.js\": 57133,\n\t\"./es.js\": 86756,\n\t\"./et\": 72182,\n\t\"./et.js\": 72182,\n\t\"./eu\": 14419,\n\t\"./eu.js\": 14419,\n\t\"./fa\": 2916,\n\t\"./fa.js\": 2916,\n\t\"./fi\": 49964,\n\t\"./fi.js\": 49964,\n\t\"./fo\": 26094,\n\t\"./fo.js\": 26094,\n\t\"./fr\": 35833,\n\t\"./fr-ca\": 56994,\n\t\"./fr-ca.js\": 56994,\n\t\"./fr-ch\": 2740,\n\t\"./fr-ch.js\": 2740,\n\t\"./fr.js\": 35833,\n\t\"./fy\": 69542,\n\t\"./fy.js\": 69542,\n\t\"./ga\": 93264,\n\t\"./ga.js\": 93264,\n\t\"./gd\": 77457,\n\t\"./gd.js\": 77457,\n\t\"./gl\": 83043,\n\t\"./gl.js\": 83043,\n\t\"./gom-latn\": 28379,\n\t\"./gom-latn.js\": 28379,\n\t\"./gu\": 406,\n\t\"./gu.js\": 406,\n\t\"./he\": 73219,\n\t\"./he.js\": 73219,\n\t\"./hi\": 99834,\n\t\"./hi.js\": 99834,\n\t\"./hr\": 28754,\n\t\"./hr.js\": 28754,\n\t\"./hu\": 93945,\n\t\"./hu.js\": 93945,\n\t\"./hy-am\": 81319,\n\t\"./hy-am.js\": 81319,\n\t\"./id\": 24875,\n\t\"./id.js\": 24875,\n\t\"./is\": 23724,\n\t\"./is.js\": 23724,\n\t\"./it\": 79906,\n\t\"./it-ch\": 34303,\n\t\"./it-ch.js\": 34303,\n\t\"./it.js\": 79906,\n\t\"./ja\": 77105,\n\t\"./ja.js\": 77105,\n\t\"./jv\": 15026,\n\t\"./jv.js\": 15026,\n\t\"./ka\": 67416,\n\t\"./ka.js\": 67416,\n\t\"./kk\": 79734,\n\t\"./kk.js\": 79734,\n\t\"./km\": 60757,\n\t\"./km.js\": 60757,\n\t\"./kn\": 58369,\n\t\"./kn.js\": 58369,\n\t\"./ko\": 77687,\n\t\"./ko.js\": 77687,\n\t\"./ku\": 95544,\n\t\"./ku.js\": 95544,\n\t\"./ky\": 85431,\n\t\"./ky.js\": 85431,\n\t\"./lb\": 13613,\n\t\"./lb.js\": 13613,\n\t\"./lo\": 34252,\n\t\"./lo.js\": 34252,\n\t\"./lt\": 84619,\n\t\"./lt.js\": 84619,\n\t\"./lv\": 93760,\n\t\"./lv.js\": 93760,\n\t\"./me\": 93393,\n\t\"./me.js\": 93393,\n\t\"./mi\": 12369,\n\t\"./mi.js\": 12369,\n\t\"./mk\": 48664,\n\t\"./mk.js\": 48664,\n\t\"./ml\": 23099,\n\t\"./ml.js\": 23099,\n\t\"./mn\": 98539,\n\t\"./mn.js\": 98539,\n\t\"./mr\": 778,\n\t\"./mr.js\": 778,\n\t\"./ms\": 39970,\n\t\"./ms-my\": 82625,\n\t\"./ms-my.js\": 82625,\n\t\"./ms.js\": 39970,\n\t\"./mt\": 15714,\n\t\"./mt.js\": 15714,\n\t\"./my\": 53055,\n\t\"./my.js\": 53055,\n\t\"./nb\": 73945,\n\t\"./nb.js\": 73945,\n\t\"./ne\": 63645,\n\t\"./ne.js\": 63645,\n\t\"./nl\": 4829,\n\t\"./nl-be\": 12823,\n\t\"./nl-be.js\": 12823,\n\t\"./nl.js\": 4829,\n\t\"./nn\": 23756,\n\t\"./nn.js\": 23756,\n\t\"./pa-in\": 97877,\n\t\"./pa-in.js\": 97877,\n\t\"./pl\": 53066,\n\t\"./pl.js\": 53066,\n\t\"./pt\": 28677,\n\t\"./pt-br\": 81592,\n\t\"./pt-br.js\": 81592,\n\t\"./pt.js\": 28677,\n\t\"./ro\": 32722,\n\t\"./ro.js\": 32722,\n\t\"./ru\": 59138,\n\t\"./ru.js\": 59138,\n\t\"./sd\": 32568,\n\t\"./sd.js\": 32568,\n\t\"./se\": 49753,\n\t\"./se.js\": 49753,\n\t\"./si\": 58024,\n\t\"./si.js\": 58024,\n\t\"./sk\": 31058,\n\t\"./sk.js\": 31058,\n\t\"./sl\": 43452,\n\t\"./sl.js\": 43452,\n\t\"./sq\": 2795,\n\t\"./sq.js\": 2795,\n\t\"./sr\": 26976,\n\t\"./sr-cyrl\": 38819,\n\t\"./sr-cyrl.js\": 38819,\n\t\"./sr.js\": 26976,\n\t\"./ss\": 7467,\n\t\"./ss.js\": 7467,\n\t\"./sv\": 42787,\n\t\"./sv.js\": 42787,\n\t\"./sw\": 80298,\n\t\"./sw.js\": 80298,\n\t\"./ta\": 57532,\n\t\"./ta.js\": 57532,\n\t\"./te\": 76076,\n\t\"./te.js\": 76076,\n\t\"./tet\": 40452,\n\t\"./tet.js\": 40452,\n\t\"./tg\": 64794,\n\t\"./tg.js\": 64794,\n\t\"./th\": 48245,\n\t\"./th.js\": 48245,\n\t\"./tl-ph\": 36056,\n\t\"./tl-ph.js\": 36056,\n\t\"./tlh\": 15249,\n\t\"./tlh.js\": 15249,\n\t\"./tr\": 22053,\n\t\"./tr.js\": 22053,\n\t\"./tzl\": 39871,\n\t\"./tzl.js\": 39871,\n\t\"./tzm\": 39574,\n\t\"./tzm-latn\": 19210,\n\t\"./tzm-latn.js\": 19210,\n\t\"./tzm.js\": 39574,\n\t\"./ug-cn\": 91532,\n\t\"./ug-cn.js\": 91532,\n\t\"./uk\": 11432,\n\t\"./uk.js\": 11432,\n\t\"./ur\": 88523,\n\t\"./ur.js\": 88523,\n\t\"./uz\": 54958,\n\t\"./uz-latn\": 68735,\n\t\"./uz-latn.js\": 68735,\n\t\"./uz.js\": 54958,\n\t\"./vi\": 83398,\n\t\"./vi.js\": 83398,\n\t\"./x-pseudo\": 56665,\n\t\"./x-pseudo.js\": 56665,\n\t\"./yo\": 11642,\n\t\"./yo.js\": 11642,\n\t\"./zh-cn\": 5462,\n\t\"./zh-cn.js\": 5462,\n\t\"./zh-hk\": 92530,\n\t\"./zh-hk.js\": 92530,\n\t\"./zh-tw\": 97333,\n\t\"./zh-tw.js\": 97333\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 93365;","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\n/**\n * Sends a heartbeat\n *\n * @param {boolean} isAway Whether or not the user is active\n * @return {Promise<void>}\n */\nconst sendHeartbeat = async (isAway) => {\n\tconst url = generateUrl('/apps/user_status/heartbeat')\n\tconst response = await HttpClient.put(url, {\n\t\tstatus: isAway ? 'away' : 'online',\n\t})\n\treturn response.data\n}\n\nexport {\n\tsendHeartbeat,\n}\n","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<li>\n\t\t<div class=\"user-status-menu-item\">\n\t\t\t<!-- Username display -->\n\t\t\t<a v-if=\"!inline\"\n\t\t\t\tclass=\"user-status-menu-item__header\"\n\t\t\t\t:href=\"profilePageLink\"\n\t\t\t\t@click=\"loadProfilePage\">\n\t\t\t\t<div class=\"user-status-menu-item__header-content\">\n\t\t\t\t\t<div class=\"user-status-menu-item__header-content-displayname\">{{ displayName }}</div>\n\t\t\t\t\t<div v-if=\"!loadingProfilePage\" class=\"user-status-menu-item__header-content-placeholder\" />\n\t\t\t\t\t<div v-else class=\"icon-loading-small\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"profileEnabled\">\n\t\t\t\t\t{{ t('user_status', 'View profile') }}\n\t\t\t\t</div>\n\t\t\t</a>\n\n\t\t\t<!-- Status modal toggle -->\n\t\t\t<toggle :is=\"inline ? 'button' : 'a'\"\n\t\t\t\t:class=\"{'user-status-menu-item__toggle--inline': inline}\"\n\t\t\t\tclass=\"user-status-menu-item__toggle\"\n\t\t\t\thref=\"#\"\n\t\t\t\t@click.prevent.stop=\"openModal\">\n\t\t\t\t<span :class=\"statusIcon\" class=\"user-status-menu-item__toggle-icon\" />\n\t\t\t\t{{ visibleMessage }}\n\t\t\t</toggle>\n\t\t</div>\n\n\t\t<!-- Status management modal -->\n\t\t<SetStatusModal v-if=\"isModalOpen\"\n\t\t\t@close=\"closeModal\" />\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport debounce from 'debounce'\n\nimport { sendHeartbeat } from './services/heartbeatService'\nimport OnlineStatusMixin from './mixins/OnlineStatusMixin'\n\nconst { profileEnabled } = loadState('user_status', 'profileEnabled', false)\n\nexport default {\n\tname: 'UserStatus',\n\n\tcomponents: {\n\t\tSetStatusModal: () => import(/* webpackChunkName: 'user-status-modal' */'./components/SetStatusModal'),\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tprops: {\n\t\tinline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdisplayName: getCurrentUser().displayName,\n\t\t\theartbeatInterval: null,\n\t\t\tisAway: false,\n\t\t\tisModalOpen: false,\n\t\t\tloadingProfilePage: false,\n\t\t\tmouseMoveListener: null,\n\t\t\tprofileEnabled,\n\t\t\tsetAwayTimeout: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * The profile page link\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tprofilePageLink() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\treturn generateUrl('/u/{userId}', { userId: getCurrentUser().uid })\n\t\t\t}\n\t\t\t// Since an anchor element is used rather than a button,\n\t\t\t// this hack removes href if the profile is disabled so that disabling pointer-events is not needed to prevent a click from opening a page\n\t\t\t// and to allow the hover event for styling\n\t\t\treturn null\n\t\t},\n\t},\n\n\t/**\n\t * Loads the current user's status from initial state\n\t * and stores it in Vuex\n\t */\n\tmounted() {\n\t\tsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\n\t\tthis.$store.dispatch('loadStatusFromInitialState')\n\n\t\tif (OC.config.session_keepalive) {\n\t\t\t// Send the latest status to the server every 5 minutes\n\t\t\tthis.heartbeatInterval = setInterval(this._backgroundHeartbeat.bind(this), 1000 * 60 * 5)\n\t\t\tthis.setAwayTimeout = () => {\n\t\t\t\tthis.isAway = true\n\t\t\t}\n\t\t\t// Catch mouse movements, but debounce to once every 30 seconds\n\t\t\tthis.mouseMoveListener = debounce(() => {\n\t\t\t\tconst wasAway = this.isAway\n\t\t\t\tthis.isAway = false\n\t\t\t\t// Reset the two minute counter\n\t\t\t\tclearTimeout(this.setAwayTimeout)\n\t\t\t\t// If the user did not move the mouse within two minutes,\n\t\t\t\t// mark them as away\n\t\t\t\tsetTimeout(this.setAwayTimeout, 1000 * 60 * 2)\n\n\t\t\t\tif (wasAway) {\n\t\t\t\t\tthis._backgroundHeartbeat()\n\t\t\t\t}\n\t\t\t}, 1000 * 2, true)\n\t\t\twindow.addEventListener('mousemove', this.mouseMoveListener, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: true,\n\t\t\t})\n\n\t\t\tthis._backgroundHeartbeat()\n\t\t}\n\t\tsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\t/**\n\t * Some housekeeping before destroying the component\n\t */\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tunsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t\twindow.removeEventListener('mouseMove', this.mouseMoveListener)\n\t\tclearInterval(this.heartbeatInterval)\n\t\tunsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\tmethods: {\n\t\thandleDisplayNameUpdate(displayName) {\n\t\t\tthis.displayName = displayName\n\t\t},\n\n\t\thandleProfileEnabledUpdate(profileEnabled) {\n\t\t\tthis.profileEnabled = profileEnabled\n\t\t},\n\n\t\tloadProfilePage() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\tthis.loadingProfilePage = true\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Opens the modal to set a custom status\n\t\t */\n\t\topenModal() {\n\t\t\tthis.isModalOpen = true\n\t\t},\n\t\t/**\n\t\t * Closes the modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.isModalOpen = false\n\t\t},\n\n\t\t/**\n\t\t * Sends the status heartbeat to the server\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @private\n\t\t */\n\t\tasync _backgroundHeartbeat() {\n\t\t\ttry {\n\t\t\t\tconst status = await sendHeartbeat(this.isAway)\n\t\t\t\tif (status?.userId) {\n\t\t\t\t\tthis.$store.dispatch('setStatusFromHeartbeat', status)\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('reFetchStatusFromServer')\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.debug('Failed sending heartbeat, got: ' + error.response?.status)\n\t\t\t}\n\t\t},\n\t\thandleUserStatusUpdated(state) {\n\t\t\tif (OC.getCurrentUser().uid === state.userId) {\n\t\t\t\tthis.$store.dispatch('setStatusFromObject', {\n\t\t\t\t\tstatus: state.status,\n\t\t\t\t\ticon: state.icon,\n\t\t\t\t\tmessage: state.message,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-background-translucent);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.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!./UserStatus.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!./UserStatus.vue?vue&type=style&index=0&id=e652bbe6&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!./UserStatus.vue?vue&type=style&index=0&id=e652bbe6&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserStatus.vue?vue&type=template&id=e652bbe6&scoped=true&\"\nimport script from \"./UserStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./UserStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserStatus.vue?vue&type=style&index=0&id=e652bbe6&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 \"e652bbe6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',[_c('div',{staticClass:\"user-status-menu-item\"},[(!_vm.inline)?_c('a',{staticClass:\"user-status-menu-item__header\",attrs:{\"href\":_vm.profilePageLink},on:{\"click\":_vm.loadProfilePage}},[_c('div',{staticClass:\"user-status-menu-item__header-content\"},[_c('div',{staticClass:\"user-status-menu-item__header-content-displayname\"},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),(!_vm.loadingProfilePage)?_c('div',{staticClass:\"user-status-menu-item__header-content-placeholder\"}):_c('div',{staticClass:\"icon-loading-small\"})]),_vm._v(\" \"),(_vm.profileEnabled)?_c('div',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('user_status', 'View profile'))+\"\\n\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c(_vm.inline ? 'button' : 'a',{tag:\"toggle\",staticClass:\"user-status-menu-item__toggle\",class:{'user-status-menu-item__toggle--inline': _vm.inline},attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openModal.apply(null, arguments)}}},[_c('span',{staticClass:\"user-status-menu-item__toggle-icon\",class:_vm.statusIcon}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.visibleMessage)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.isModalOpen)?_c('SetStatusModal',{on:{\"close\":_vm.closeModal}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches all predefined statuses from the server\n *\n * @return {Promise<void>}\n */\nconst fetchAllPredefinedStatuses = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/predefined_statuses?format=json')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\nexport {\n\tfetchAllPredefinedStatuses,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { fetchAllPredefinedStatuses } from '../services/predefinedStatusService'\n\nconst state = {\n\tpredefinedStatuses: [],\n}\n\nconst mutations = {\n\n\t/**\n\t * Adds a predefined status to the state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} status The status to add\n\t */\n\taddPredefinedStatus(state, status) {\n\t\tstate.predefinedStatuses.push(status)\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Loads all predefined statuses from the server\n\t *\n\t * @param {object} vuex The Vuex components\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state -\n\t */\n\tasync loadAllPredefinedStatuses({ state, commit }) {\n\t\tif (state.predefinedStatuses.length > 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst statuses = await fetchAllPredefinedStatuses()\n\t\tfor (const status of statuses) {\n\t\t\tcommit('addPredefinedStatus', status)\n\t\t}\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches the current user-status\n *\n * @return {Promise<object>}\n */\nconst fetchCurrentStatus = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\n/**\n * Sets the status\n *\n * @param {string} statusType The status (online / away / dnd / invisible)\n * @return {Promise<void>}\n */\nconst setStatus = async (statusType) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/status')\n\tawait HttpClient.put(url, {\n\t\tstatusType,\n\t})\n}\n\n/**\n * Sets a message based on our predefined statuses\n *\n * @param {string} messageId The id of the message, taken from predefined status service\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setPredefinedMessage = async (messageId, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/predefined?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessageId,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Sets a custom message\n *\n * @param {string} message The user-defined message\n * @param {string | null} statusIcon The user-defined icon\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setCustomMessage = async (message, statusIcon = null, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/custom?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessage,\n\t\tstatusIcon,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Clears the current status of the user\n *\n * @return {Promise<void>}\n */\nconst clearMessage = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message?format=json')\n\tawait HttpClient.delete(url)\n}\n\nexport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetCustomMessage,\n\tsetPredefinedMessage,\n\tclearMessage,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tdateFactory,\n} from './dateService'\nimport moment from '@nextcloud/moment'\n\n/**\n * Calculates the actual clearAt timestamp\n *\n * @param {object | null} clearAt The clear-at config\n * @return {number | null}\n */\nconst getTimestampForClearAt = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn null\n\t}\n\n\tconst date = dateFactory()\n\n\tif (clearAt.type === 'period') {\n\t\tdate.setSeconds(date.getSeconds() + clearAt.time)\n\t\treturn Math.floor(date.getTime() / 1000)\n\t}\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\tcase 'week':\n\t\t\treturn Number(moment(date).endOf(clearAt.time).format('X'))\n\t\t}\n\t}\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\treturn clearAt.time\n\t}\n\n\treturn null\n}\n\nexport {\n\tgetTimestampForClearAt,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetPredefinedMessage,\n\tsetCustomMessage,\n\tclearMessage,\n} from '../services/statusService'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getTimestampForClearAt } from '../services/clearAtService'\nimport { emit } from '@nextcloud/event-bus'\n\nconst state = {\n\t// Status (online / away / dnd / invisible / offline)\n\tstatus: null,\n\t// Whether or not the status is user-defined\n\tstatusIsUserDefined: null,\n\t// A custom message set by the user\n\tmessage: null,\n\t// The icon selected by the user\n\ticon: null,\n\t// When to automatically clean the status\n\tclearAt: null,\n\t// Whether or not the message is predefined\n\t// (and can automatically be translated by Nextcloud)\n\tmessageIsPredefined: null,\n\t// The id of the message in case it's predefined\n\tmessageId: null,\n}\n\nconst mutations = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.statusType The new status type\n\t */\n\tsetStatus(state, { statusType }) {\n\t\tstate.status = statusType\n\t\tstate.statusIsUserDefined = true\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {number | null} data.clearAt When to automatically clear the status\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t */\n\tsetPredefinedMessage(state, { messageId, clearAt, message, icon }) {\n\t\tstate.messageId = messageId\n\t\tstate.messageIsPredefined = true\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t */\n\tsetCustomMessage(state, { message, icon, clearAt }) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} state The Vuex state\n\t */\n\tclearMessage(state) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = null\n\t\tstate.icon = null\n\t\tstate.clearAt = null\n\t},\n\n\t/**\n\t * Loads the status from initial state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.status The status type\n\t * @param {boolean} data.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t * @param {boolean} data.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} data.messageId The id of the predefined message\n\t */\n\tloadStatusFromServer(state, { status, statusIsUserDefined, message, icon, clearAt, messageIsPredefined, messageId }) {\n\t\tstate.status = status\n\t\tstate.statusIsUserDefined = statusIsUserDefined\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t\tstate.messageIsPredefined = messageIsPredefined\n\t\tstate.messageId = messageId\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.statusType The new status type\n\t * @return {Promise<void>}\n\t */\n\tasync setStatus({ commit, state }, { statusType }) {\n\t\tawait setStatus(statusType)\n\t\tcommit('setStatus', { statusType })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Update status from 'user_status:status.updated' update.\n\t * This doesn't trigger another 'user_status:status.updated'\n\t * event.\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {string} status The new status\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromObject({ commit, state }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} vuex.rootState The Vuex root state\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setPredefinedMessage({ commit, rootState, state }, { messageId, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setPredefinedMessage(messageId, resolvedClearAt)\n\t\tconst status = rootState.predefinedStatuses.predefinedStatuses.find((status) => status.id === messageId)\n\t\tconst { message, icon } = status\n\n\t\tcommit('setPredefinedMessage', { messageId, clearAt: resolvedClearAt, message, icon })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setCustomMessage({ commit, state }, { message, icon, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setCustomMessage(message, icon, resolvedClearAt)\n\t\tcommit('setCustomMessage', { message, icon, clearAt: resolvedClearAt })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @return {Promise<void>}\n\t */\n\tasync clearMessage({ commit, state }) {\n\t\tawait clearMessage()\n\t\tcommit('clearMessage')\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Re-fetches the status from the server\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @return {Promise<void>}\n\t */\n\tasync reFetchStatusFromServer({ commit }) {\n\t\tconst status = await fetchCurrentStatus()\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Stores the status we got in the reply of the heartbeat\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} status The data destructuring object\n\t * @param {string} status.status The status type\n\t * @param {boolean} status.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} status.message The message\n\t * @param {string} status.icon The icon\n\t * @param {number} status.clearAt When to automatically clear the status\n\t * @param {boolean} status.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} status.messageId The id of the predefined message\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromHeartbeat({ commit }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Loads the server from the initial state\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t */\n\tloadStatusFromInitialState({ commit }) {\n\t\tconst status = loadState('user_status', 'status')\n\t\tcommit('loadStatusFromServer', status)\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport predefinedStatuses from './predefinedStatuses'\nimport userStatus from './userStatus'\n\nVue.use(Vuex)\n\nexport default new Store({\n\tmodules: {\n\t\tpredefinedStatuses,\n\t\tuserStatus,\n\t},\n\tstrict: true,\n})\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport { getRequestToken } from '@nextcloud/auth'\nimport UserStatus from './UserStatus'\nimport store from './store'\nimport Avatar from '@nextcloud/vue/dist/Components/Avatar'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.prototype.t = t\nVue.prototype.$t = t\n\nconst avatarDiv = document.getElementById('avatardiv-menu')\nconst propsData = {\n\tpreloadedUserStatus: {\n\t\tmessage: avatarDiv.dataset.userstatus_message,\n\t\ticon: avatarDiv.dataset.userstatus_icon,\n\t\tstatus: avatarDiv.dataset.userstatus,\n\t},\n\tuser: avatarDiv.dataset.user,\n\tdisplayName: avatarDiv.dataset.displayname,\n\turl: avatarDiv.dataset.avatar,\n\tdisableMenu: true,\n\tdisableTooltip: true,\n}\n\nconst AvatarInMenu = Vue.extend(Avatar)\nnew AvatarInMenu({ propsData }).$mount('#avatardiv-menu')\n\n// Register settings menu entry\nexport default new Vue({\n\tel: 'li[data-id=\"user_status-menuitem\"]',\n\t// eslint-disable-next-line vue/match-component-file-name\n\tname: 'UserStatusRoot',\n\trender: h => h(UserStatus),\n\tstore,\n})\n\n// Register dashboard status\ndocument.addEventListener('DOMContentLoaded', function() {\n\tif (!OCA.Dashboard) {\n\t\treturn\n\t}\n\n\tOCA.Dashboard.registerStatus('status', (el) => {\n\t\tconst Dashboard = Vue.extend(UserStatus)\n\t\treturn new Dashboard({\n\t\t\tpropsData: {\n\t\t\t\tinline: true,\n\t\t\t},\n\t\t\tstore,\n\t\t}).$mount(el)\n\t})\n})\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { mapState } from 'vuex'\nimport { showError } from '@nextcloud/dialogs'\n\nexport default {\n\tcomputed: {\n\t\t...mapState({\n\t\t\tstatusType: state => state.userStatus.status,\n\t\t\tstatusIsUserDefined: state => state.userStatus.statusIsUserDefined,\n\t\t\tcustomIcon: state => state.userStatus.icon,\n\t\t\tcustomMessage: state => state.userStatus.message,\n\t\t}),\n\n\t\t/**\n\t\t * The message displayed in the top right corner\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleMessage() {\n\t\t\tif (this.customIcon && this.customMessage) {\n\t\t\t\treturn `${this.customIcon} ${this.customMessage}`\n\t\t\t}\n\n\t\t\tif (this.customMessage) {\n\t\t\t\treturn this.customMessage\n\t\t\t}\n\n\t\t\tif (this.statusIsUserDefined) {\n\t\t\t\tswitch (this.statusType) {\n\t\t\t\tcase 'online':\n\t\t\t\t\treturn this.$t('user_status', 'Online')\n\n\t\t\t\tcase 'away':\n\t\t\t\t\treturn this.$t('user_status', 'Away')\n\n\t\t\t\tcase 'dnd':\n\t\t\t\t\treturn this.$t('user_status', 'Do not disturb')\n\n\t\t\t\tcase 'invisible':\n\t\t\t\t\treturn this.$t('user_status', 'Invisible')\n\n\t\t\t\tcase 'offline':\n\t\t\t\t\treturn this.$t('user_status', 'Offline')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.$t('user_status', 'Set status')\n\t\t},\n\n\t\t/**\n\t\t * The status indicator icon\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tstatusIcon() {\n\t\t\tswitch (this.statusType) {\n\t\t\tcase 'online':\n\t\t\t\treturn 'icon-user-status-online'\n\n\t\t\tcase 'away':\n\t\t\t\treturn 'icon-user-status-away'\n\n\t\t\tcase 'dnd':\n\t\t\t\treturn 'icon-user-status-dnd'\n\n\t\t\tcase 'invisible':\n\t\t\tcase 'offline':\n\t\t\t\treturn 'icon-user-status-invisible'\n\t\t\t}\n\n\t\t\treturn ''\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Changes the user-status\n\t\t *\n\t\t * @param {string} statusType (online / away / dnd / invisible)\n\t\t */\n\t\tasync changeStatus(statusType) {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setStatus', { statusType })\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the new status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst dateFactory = () => {\n\treturn new Date()\n}\n\nexport {\n\tdateFactory,\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".user-status-menu-item__header[data-v-e652bbe6]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-e652bbe6]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-e652bbe6]{cursor:default !important}.user-status-menu-item__header[data-v-e652bbe6]:not([href]):hover{background-color:transparent !important}.user-status-menu-item__header-content[data-v-e652bbe6]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-e652bbe6]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-e652bbe6]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-e652bbe6]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-e652bbe6]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px}.user-status-menu-item__toggle--inline[data-v-e652bbe6]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-background-translucent);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-e652bbe6]:active,.user-status-menu-item__toggle--inline[data-v-e652bbe6]:hover,.user-status-menu-item__toggle--inline[data-v-e652bbe6]:focus{background-color:var(--color-background-hover)}li[data-v-e652bbe6]{list-style-type:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/UserStatus.vue\"],\"names\":[],\"mappings\":\"AAgOC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,uCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,oDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAMJ,oBACC,oBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.user-status-menu-item {\\n\\t&__header {\\n\\t\\tdisplay: flex !important;\\n\\t\\tflex-direction: column !important;\\n\\t\\twidth: auto !important;\\n\\t\\theight: 44px * 1.5 !important;\\n\\t\\tpadding: 10px 12px 5px 12px !important;\\n\\t\\talign-items: flex-start !important;\\n\\t\\tcolor: var(--color-main-text) !important;\\n\\n\\t\\t&:not([href]) {\\n\\t\\t\\theight: var(--header-menu-item-height) !important;\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t\\tcursor: default !important;\\n\\n\\t\\t\\t& * {\\n\\t\\t\\t\\tcursor: default !important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&:hover {\\n\\t\\t\\t\\tbackground-color: transparent !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-content {\\n\\t\\t\\tdisplay: inline-flex !important;\\n\\t\\t\\tfont-weight: bold !important;\\n\\t\\t\\tgap: 0 10px !important;\\n\\t\\t\\twidth: auto;\\n\\n\\t\\t\\t&-displayname {\\n\\t\\t\\t\\twidth: auto;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-placeholder {\\n\\t\\t\\t\\twidth: 16px !important;\\n\\t\\t\\t\\theight: 24px !important;\\n\\t\\t\\t\\tmargin-right: 10px !important;\\n\\t\\t\\t\\tvisibility: hidden !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tspan {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__toggle {\\n\\t\\t&-icon {\\n\\t\\t\\twidth: 16px;\\n\\t\\t\\theight: 16px;\\n\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\topacity: 1 !important;\\n\\t\\t\\tbackground-size: 16px;\\n\\t\\t}\\n\\n\\t\\t// In dashboard\\n\\t\\t&--inline {\\n\\t\\t\\twidth: auto;\\n\\t\\t\\tmin-width: 44px;\\n\\t\\t\\theight: 44px;\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tborder: 0;\\n\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\tbackground-color: var(--color-background-translucent);\\n\\t\\t\\tfont-size: inherit;\\n\\t\\t\\tfont-weight: normal;\\n\\n\\t\\t\\t-webkit-backdrop-filter: var(--background-blur);\\n\\t\\t\\tbackdrop-filter: var(--background-blur);\\n\\n\\t\\t\\t&:active,\\n\\t\\t\\t&:hover,\\n\\t\\t\\t&:focus {\\n\\t\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\nli {\\n\\tlist-style-type: none;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + \"user-status-modal\" + \"-\" + chunkId + \".js?v=\" + \"5a28ce594312bb1512c0\" + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 613;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t613: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(82205); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","sendHeartbeat","isAway","url","generateUrl","HttpClient","status","response","data","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_h","$createElement","_c","_self","staticClass","inline","_e","attrs","profilePageLink","on","loadProfilePage","_v","_s","displayName","loadingProfilePage","t","tag","class","$event","preventDefault","stopPropagation","openModal","apply","arguments","statusIcon","visibleMessage","closeModal","fetchAllPredefinedStatuses","generateOcsUrl","ocs","actions","loadAllPredefinedStatuses","state","commit","predefinedStatuses","length","statuses","mutations","addPredefinedStatus","push","getters","fetchCurrentStatus","setStatus","statusType","setPredefinedMessage","messageId","clearAt","setCustomMessage","message","clearMessage","getTimestampForClearAt","date","dateFactory","type","setSeconds","getSeconds","time","Math","floor","getTime","Number","moment","endOf","format","statusIsUserDefined","icon","messageIsPredefined","loadStatusFromServer","emit","userId","getCurrentUser","uid","setStatusFromObject","rootState","resolvedClearAt","find","reFetchStatusFromServer","setStatusFromHeartbeat","loadStatusFromInitialState","loadState","Vue","Vuex","Store","modules","userStatus","strict","__webpack_nonce__","btoa","getRequestToken","avatarDiv","document","getElementById","propsData","preloadedUserStatus","dataset","userstatus_message","userstatus_icon","userstatus","user","displayname","avatar","disableMenu","disableTooltip","Avatar","$mount","el","name","render","h","UserStatus","store","addEventListener","OCA","Dashboard","registerStatus","computed","mapState","customIcon","customMessage","$t","methods","changeStatus","$store","dispatch","showError","console","debug","Date","___CSS_LOADER_EXPORT___","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","amdD","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","key","splice","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","get","f","chunkId","Promise","all","reduce","promises","u","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","forEach","setTimeout","bind","target","head","appendChild","Symbol","toStringTag","value","nmd","paths","children","scriptUrl","importScripts","location","currentScript","replace","p","b","baseURI","self","href","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"user_status-menu.js?v=25b60b1c5a366280e716","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/node_modules/@nextcloud/moment/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/apps/user_status/src/services/heartbeatService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?a54b","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?d74a","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=template&id=e652bbe6&scoped=true&","webpack:///nextcloud/apps/user_status/src/services/predefinedStatusService.js","webpack:///nextcloud/apps/user_status/src/store/predefinedStatuses.js","webpack:///nextcloud/apps/user_status/src/services/statusService.js","webpack:///nextcloud/apps/user_status/src/services/clearAtService.js","webpack:///nextcloud/apps/user_status/src/store/userStatus.js","webpack:///nextcloud/apps/user_status/src/store/index.js","webpack:///nextcloud/apps/user_status/src/menu.js","webpack:///nextcloud/apps/user_status/src/mixins/OnlineStatusMixin.js","webpack:///nextcloud/apps/user_status/src/services/dateService.js","webpack:///nextcloud/apps/user_status/src/UserStatus.vue?vue&type=style&index=0&id=e652bbe6&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var map = {\n\t\"./af\": 36026,\n\t\"./af.js\": 36026,\n\t\"./ar\": 28093,\n\t\"./ar-dz\": 41943,\n\t\"./ar-dz.js\": 41943,\n\t\"./ar-kw\": 23969,\n\t\"./ar-kw.js\": 23969,\n\t\"./ar-ly\": 40594,\n\t\"./ar-ly.js\": 40594,\n\t\"./ar-ma\": 18369,\n\t\"./ar-ma.js\": 18369,\n\t\"./ar-sa\": 32579,\n\t\"./ar-sa.js\": 32579,\n\t\"./ar-tn\": 76442,\n\t\"./ar-tn.js\": 76442,\n\t\"./ar.js\": 28093,\n\t\"./az\": 86425,\n\t\"./az.js\": 86425,\n\t\"./be\": 22004,\n\t\"./be.js\": 22004,\n\t\"./bg\": 42982,\n\t\"./bg.js\": 42982,\n\t\"./bm\": 21067,\n\t\"./bm.js\": 21067,\n\t\"./bn\": 8366,\n\t\"./bn.js\": 8366,\n\t\"./bo\": 95040,\n\t\"./bo.js\": 95040,\n\t\"./br\": 521,\n\t\"./br.js\": 521,\n\t\"./bs\": 83242,\n\t\"./bs.js\": 83242,\n\t\"./ca\": 73046,\n\t\"./ca.js\": 73046,\n\t\"./cs\": 25794,\n\t\"./cs.js\": 25794,\n\t\"./cv\": 28231,\n\t\"./cv.js\": 28231,\n\t\"./cy\": 10927,\n\t\"./cy.js\": 10927,\n\t\"./da\": 42832,\n\t\"./da.js\": 42832,\n\t\"./de\": 29415,\n\t\"./de-at\": 3331,\n\t\"./de-at.js\": 3331,\n\t\"./de-ch\": 45524,\n\t\"./de-ch.js\": 45524,\n\t\"./de.js\": 29415,\n\t\"./dv\": 44700,\n\t\"./dv.js\": 44700,\n\t\"./el\": 88752,\n\t\"./el.js\": 88752,\n\t\"./en-SG\": 16706,\n\t\"./en-SG.js\": 16706,\n\t\"./en-au\": 90444,\n\t\"./en-au.js\": 90444,\n\t\"./en-ca\": 65959,\n\t\"./en-ca.js\": 65959,\n\t\"./en-gb\": 62762,\n\t\"./en-gb.js\": 62762,\n\t\"./en-ie\": 40909,\n\t\"./en-ie.js\": 40909,\n\t\"./en-il\": 79909,\n\t\"./en-il.js\": 79909,\n\t\"./en-nz\": 75200,\n\t\"./en-nz.js\": 75200,\n\t\"./eo\": 27447,\n\t\"./eo.js\": 27447,\n\t\"./es\": 86756,\n\t\"./es-do\": 47049,\n\t\"./es-do.js\": 47049,\n\t\"./es-us\": 57133,\n\t\"./es-us.js\": 57133,\n\t\"./es.js\": 86756,\n\t\"./et\": 72182,\n\t\"./et.js\": 72182,\n\t\"./eu\": 14419,\n\t\"./eu.js\": 14419,\n\t\"./fa\": 2916,\n\t\"./fa.js\": 2916,\n\t\"./fi\": 49964,\n\t\"./fi.js\": 49964,\n\t\"./fo\": 26094,\n\t\"./fo.js\": 26094,\n\t\"./fr\": 35833,\n\t\"./fr-ca\": 56994,\n\t\"./fr-ca.js\": 56994,\n\t\"./fr-ch\": 2740,\n\t\"./fr-ch.js\": 2740,\n\t\"./fr.js\": 35833,\n\t\"./fy\": 69542,\n\t\"./fy.js\": 69542,\n\t\"./ga\": 93264,\n\t\"./ga.js\": 93264,\n\t\"./gd\": 77457,\n\t\"./gd.js\": 77457,\n\t\"./gl\": 83043,\n\t\"./gl.js\": 83043,\n\t\"./gom-latn\": 28379,\n\t\"./gom-latn.js\": 28379,\n\t\"./gu\": 406,\n\t\"./gu.js\": 406,\n\t\"./he\": 73219,\n\t\"./he.js\": 73219,\n\t\"./hi\": 99834,\n\t\"./hi.js\": 99834,\n\t\"./hr\": 28754,\n\t\"./hr.js\": 28754,\n\t\"./hu\": 93945,\n\t\"./hu.js\": 93945,\n\t\"./hy-am\": 81319,\n\t\"./hy-am.js\": 81319,\n\t\"./id\": 24875,\n\t\"./id.js\": 24875,\n\t\"./is\": 23724,\n\t\"./is.js\": 23724,\n\t\"./it\": 79906,\n\t\"./it-ch\": 34303,\n\t\"./it-ch.js\": 34303,\n\t\"./it.js\": 79906,\n\t\"./ja\": 77105,\n\t\"./ja.js\": 77105,\n\t\"./jv\": 15026,\n\t\"./jv.js\": 15026,\n\t\"./ka\": 67416,\n\t\"./ka.js\": 67416,\n\t\"./kk\": 79734,\n\t\"./kk.js\": 79734,\n\t\"./km\": 60757,\n\t\"./km.js\": 60757,\n\t\"./kn\": 58369,\n\t\"./kn.js\": 58369,\n\t\"./ko\": 77687,\n\t\"./ko.js\": 77687,\n\t\"./ku\": 95544,\n\t\"./ku.js\": 95544,\n\t\"./ky\": 85431,\n\t\"./ky.js\": 85431,\n\t\"./lb\": 13613,\n\t\"./lb.js\": 13613,\n\t\"./lo\": 34252,\n\t\"./lo.js\": 34252,\n\t\"./lt\": 84619,\n\t\"./lt.js\": 84619,\n\t\"./lv\": 93760,\n\t\"./lv.js\": 93760,\n\t\"./me\": 93393,\n\t\"./me.js\": 93393,\n\t\"./mi\": 12369,\n\t\"./mi.js\": 12369,\n\t\"./mk\": 48664,\n\t\"./mk.js\": 48664,\n\t\"./ml\": 23099,\n\t\"./ml.js\": 23099,\n\t\"./mn\": 98539,\n\t\"./mn.js\": 98539,\n\t\"./mr\": 778,\n\t\"./mr.js\": 778,\n\t\"./ms\": 39970,\n\t\"./ms-my\": 82625,\n\t\"./ms-my.js\": 82625,\n\t\"./ms.js\": 39970,\n\t\"./mt\": 15714,\n\t\"./mt.js\": 15714,\n\t\"./my\": 53055,\n\t\"./my.js\": 53055,\n\t\"./nb\": 73945,\n\t\"./nb.js\": 73945,\n\t\"./ne\": 63645,\n\t\"./ne.js\": 63645,\n\t\"./nl\": 4829,\n\t\"./nl-be\": 12823,\n\t\"./nl-be.js\": 12823,\n\t\"./nl.js\": 4829,\n\t\"./nn\": 23756,\n\t\"./nn.js\": 23756,\n\t\"./pa-in\": 97877,\n\t\"./pa-in.js\": 97877,\n\t\"./pl\": 53066,\n\t\"./pl.js\": 53066,\n\t\"./pt\": 28677,\n\t\"./pt-br\": 81592,\n\t\"./pt-br.js\": 81592,\n\t\"./pt.js\": 28677,\n\t\"./ro\": 32722,\n\t\"./ro.js\": 32722,\n\t\"./ru\": 59138,\n\t\"./ru.js\": 59138,\n\t\"./sd\": 32568,\n\t\"./sd.js\": 32568,\n\t\"./se\": 49753,\n\t\"./se.js\": 49753,\n\t\"./si\": 58024,\n\t\"./si.js\": 58024,\n\t\"./sk\": 31058,\n\t\"./sk.js\": 31058,\n\t\"./sl\": 43452,\n\t\"./sl.js\": 43452,\n\t\"./sq\": 2795,\n\t\"./sq.js\": 2795,\n\t\"./sr\": 26976,\n\t\"./sr-cyrl\": 38819,\n\t\"./sr-cyrl.js\": 38819,\n\t\"./sr.js\": 26976,\n\t\"./ss\": 7467,\n\t\"./ss.js\": 7467,\n\t\"./sv\": 42787,\n\t\"./sv.js\": 42787,\n\t\"./sw\": 80298,\n\t\"./sw.js\": 80298,\n\t\"./ta\": 57532,\n\t\"./ta.js\": 57532,\n\t\"./te\": 76076,\n\t\"./te.js\": 76076,\n\t\"./tet\": 40452,\n\t\"./tet.js\": 40452,\n\t\"./tg\": 64794,\n\t\"./tg.js\": 64794,\n\t\"./th\": 48245,\n\t\"./th.js\": 48245,\n\t\"./tl-ph\": 36056,\n\t\"./tl-ph.js\": 36056,\n\t\"./tlh\": 15249,\n\t\"./tlh.js\": 15249,\n\t\"./tr\": 22053,\n\t\"./tr.js\": 22053,\n\t\"./tzl\": 39871,\n\t\"./tzl.js\": 39871,\n\t\"./tzm\": 39574,\n\t\"./tzm-latn\": 19210,\n\t\"./tzm-latn.js\": 19210,\n\t\"./tzm.js\": 39574,\n\t\"./ug-cn\": 91532,\n\t\"./ug-cn.js\": 91532,\n\t\"./uk\": 11432,\n\t\"./uk.js\": 11432,\n\t\"./ur\": 88523,\n\t\"./ur.js\": 88523,\n\t\"./uz\": 54958,\n\t\"./uz-latn\": 68735,\n\t\"./uz-latn.js\": 68735,\n\t\"./uz.js\": 54958,\n\t\"./vi\": 83398,\n\t\"./vi.js\": 83398,\n\t\"./x-pseudo\": 56665,\n\t\"./x-pseudo.js\": 56665,\n\t\"./yo\": 11642,\n\t\"./yo.js\": 11642,\n\t\"./zh-cn\": 5462,\n\t\"./zh-cn.js\": 5462,\n\t\"./zh-hk\": 92530,\n\t\"./zh-hk.js\": 92530,\n\t\"./zh-tw\": 97333,\n\t\"./zh-tw.js\": 97333\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 93365;","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\n/**\n * Sends a heartbeat\n *\n * @param {boolean} isAway Whether or not the user is active\n * @return {Promise<void>}\n */\nconst sendHeartbeat = async (isAway) => {\n\tconst url = generateUrl('/apps/user_status/heartbeat')\n\tconst response = await HttpClient.put(url, {\n\t\tstatus: isAway ? 'away' : 'online',\n\t})\n\treturn response.data\n}\n\nexport {\n\tsendHeartbeat,\n}\n","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<li>\n\t\t<div class=\"user-status-menu-item\">\n\t\t\t<!-- Username display -->\n\t\t\t<a v-if=\"!inline\"\n\t\t\t\tclass=\"user-status-menu-item__header\"\n\t\t\t\t:href=\"profilePageLink\"\n\t\t\t\t@click=\"loadProfilePage\">\n\t\t\t\t<div class=\"user-status-menu-item__header-content\">\n\t\t\t\t\t<div class=\"user-status-menu-item__header-content-displayname\">{{ displayName }}</div>\n\t\t\t\t\t<div v-if=\"!loadingProfilePage\" class=\"user-status-menu-item__header-content-placeholder\" />\n\t\t\t\t\t<div v-else class=\"icon-loading-small\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"profileEnabled\">\n\t\t\t\t\t{{ t('user_status', 'View profile') }}\n\t\t\t\t</div>\n\t\t\t</a>\n\n\t\t\t<!-- Status modal toggle -->\n\t\t\t<toggle :is=\"inline ? 'button' : 'a'\"\n\t\t\t\t:class=\"{'user-status-menu-item__toggle--inline': inline}\"\n\t\t\t\tclass=\"user-status-menu-item__toggle\"\n\t\t\t\thref=\"#\"\n\t\t\t\t@click.prevent.stop=\"openModal\">\n\t\t\t\t<span :class=\"statusIcon\" class=\"user-status-menu-item__toggle-icon\" />\n\t\t\t\t{{ visibleMessage }}\n\t\t\t</toggle>\n\t\t</div>\n\n\t\t<!-- Status management modal -->\n\t\t<SetStatusModal v-if=\"isModalOpen\"\n\t\t\t@close=\"closeModal\" />\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport debounce from 'debounce'\n\nimport { sendHeartbeat } from './services/heartbeatService'\nimport OnlineStatusMixin from './mixins/OnlineStatusMixin'\n\nconst { profileEnabled } = loadState('user_status', 'profileEnabled', false)\n\nexport default {\n\tname: 'UserStatus',\n\n\tcomponents: {\n\t\tSetStatusModal: () => import(/* webpackChunkName: 'user-status-modal' */'./components/SetStatusModal'),\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tprops: {\n\t\tinline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdisplayName: getCurrentUser().displayName,\n\t\t\theartbeatInterval: null,\n\t\t\tisAway: false,\n\t\t\tisModalOpen: false,\n\t\t\tloadingProfilePage: false,\n\t\t\tmouseMoveListener: null,\n\t\t\tprofileEnabled,\n\t\t\tsetAwayTimeout: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * The profile page link\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tprofilePageLink() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\treturn generateUrl('/u/{userId}', { userId: getCurrentUser().uid })\n\t\t\t}\n\t\t\t// Since an anchor element is used rather than a button,\n\t\t\t// this hack removes href if the profile is disabled so that disabling pointer-events is not needed to prevent a click from opening a page\n\t\t\t// and to allow the hover event for styling\n\t\t\treturn null\n\t\t},\n\t},\n\n\t/**\n\t * Loads the current user's status from initial state\n\t * and stores it in Vuex\n\t */\n\tmounted() {\n\t\tsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\n\t\tthis.$store.dispatch('loadStatusFromInitialState')\n\n\t\tif (OC.config.session_keepalive) {\n\t\t\t// Send the latest status to the server every 5 minutes\n\t\t\tthis.heartbeatInterval = setInterval(this._backgroundHeartbeat.bind(this), 1000 * 60 * 5)\n\t\t\tthis.setAwayTimeout = () => {\n\t\t\t\tthis.isAway = true\n\t\t\t}\n\t\t\t// Catch mouse movements, but debounce to once every 30 seconds\n\t\t\tthis.mouseMoveListener = debounce(() => {\n\t\t\t\tconst wasAway = this.isAway\n\t\t\t\tthis.isAway = false\n\t\t\t\t// Reset the two minute counter\n\t\t\t\tclearTimeout(this.setAwayTimeout)\n\t\t\t\t// If the user did not move the mouse within two minutes,\n\t\t\t\t// mark them as away\n\t\t\t\tsetTimeout(this.setAwayTimeout, 1000 * 60 * 2)\n\n\t\t\t\tif (wasAway) {\n\t\t\t\t\tthis._backgroundHeartbeat()\n\t\t\t\t}\n\t\t\t}, 1000 * 2, true)\n\t\t\twindow.addEventListener('mousemove', this.mouseMoveListener, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: true,\n\t\t\t})\n\n\t\t\tthis._backgroundHeartbeat()\n\t\t}\n\t\tsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\t/**\n\t * Some housekeeping before destroying the component\n\t */\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tunsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t\twindow.removeEventListener('mouseMove', this.mouseMoveListener)\n\t\tclearInterval(this.heartbeatInterval)\n\t\tunsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\tmethods: {\n\t\thandleDisplayNameUpdate(displayName) {\n\t\t\tthis.displayName = displayName\n\t\t},\n\n\t\thandleProfileEnabledUpdate(profileEnabled) {\n\t\t\tthis.profileEnabled = profileEnabled\n\t\t},\n\n\t\tloadProfilePage() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\tthis.loadingProfilePage = true\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Opens the modal to set a custom status\n\t\t */\n\t\topenModal() {\n\t\t\tthis.isModalOpen = true\n\t\t},\n\t\t/**\n\t\t * Closes the modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.isModalOpen = false\n\t\t},\n\n\t\t/**\n\t\t * Sends the status heartbeat to the server\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @private\n\t\t */\n\t\tasync _backgroundHeartbeat() {\n\t\t\ttry {\n\t\t\t\tconst status = await sendHeartbeat(this.isAway)\n\t\t\t\tif (status?.userId) {\n\t\t\t\t\tthis.$store.dispatch('setStatusFromHeartbeat', status)\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('reFetchStatusFromServer')\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.debug('Failed sending heartbeat, got: ' + error.response?.status)\n\t\t\t}\n\t\t},\n\t\thandleUserStatusUpdated(state) {\n\t\t\tif (OC.getCurrentUser().uid === state.userId) {\n\t\t\t\tthis.$store.dispatch('setStatusFromObject', {\n\t\t\t\t\tstatus: state.status,\n\t\t\t\t\ticon: state.icon,\n\t\t\t\t\tmessage: state.message,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-background-translucent);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.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!./UserStatus.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!./UserStatus.vue?vue&type=style&index=0&id=e652bbe6&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!./UserStatus.vue?vue&type=style&index=0&id=e652bbe6&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserStatus.vue?vue&type=template&id=e652bbe6&scoped=true&\"\nimport script from \"./UserStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./UserStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserStatus.vue?vue&type=style&index=0&id=e652bbe6&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 \"e652bbe6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',[_c('div',{staticClass:\"user-status-menu-item\"},[(!_vm.inline)?_c('a',{staticClass:\"user-status-menu-item__header\",attrs:{\"href\":_vm.profilePageLink},on:{\"click\":_vm.loadProfilePage}},[_c('div',{staticClass:\"user-status-menu-item__header-content\"},[_c('div',{staticClass:\"user-status-menu-item__header-content-displayname\"},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),(!_vm.loadingProfilePage)?_c('div',{staticClass:\"user-status-menu-item__header-content-placeholder\"}):_c('div',{staticClass:\"icon-loading-small\"})]),_vm._v(\" \"),(_vm.profileEnabled)?_c('div',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('user_status', 'View profile'))+\"\\n\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c(_vm.inline ? 'button' : 'a',{tag:\"toggle\",staticClass:\"user-status-menu-item__toggle\",class:{'user-status-menu-item__toggle--inline': _vm.inline},attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openModal.apply(null, arguments)}}},[_c('span',{staticClass:\"user-status-menu-item__toggle-icon\",class:_vm.statusIcon}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.visibleMessage)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.isModalOpen)?_c('SetStatusModal',{on:{\"close\":_vm.closeModal}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches all predefined statuses from the server\n *\n * @return {Promise<void>}\n */\nconst fetchAllPredefinedStatuses = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/predefined_statuses?format=json')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\nexport {\n\tfetchAllPredefinedStatuses,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { fetchAllPredefinedStatuses } from '../services/predefinedStatusService'\n\nconst state = {\n\tpredefinedStatuses: [],\n}\n\nconst mutations = {\n\n\t/**\n\t * Adds a predefined status to the state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} status The status to add\n\t */\n\taddPredefinedStatus(state, status) {\n\t\tstate.predefinedStatuses.push(status)\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Loads all predefined statuses from the server\n\t *\n\t * @param {object} vuex The Vuex components\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state -\n\t */\n\tasync loadAllPredefinedStatuses({ state, commit }) {\n\t\tif (state.predefinedStatuses.length > 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst statuses = await fetchAllPredefinedStatuses()\n\t\tfor (const status of statuses) {\n\t\t\tcommit('addPredefinedStatus', status)\n\t\t}\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches the current user-status\n *\n * @return {Promise<object>}\n */\nconst fetchCurrentStatus = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\n/**\n * Sets the status\n *\n * @param {string} statusType The status (online / away / dnd / invisible)\n * @return {Promise<void>}\n */\nconst setStatus = async (statusType) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/status')\n\tawait HttpClient.put(url, {\n\t\tstatusType,\n\t})\n}\n\n/**\n * Sets a message based on our predefined statuses\n *\n * @param {string} messageId The id of the message, taken from predefined status service\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setPredefinedMessage = async (messageId, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/predefined?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessageId,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Sets a custom message\n *\n * @param {string} message The user-defined message\n * @param {string | null} statusIcon The user-defined icon\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setCustomMessage = async (message, statusIcon = null, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/custom?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessage,\n\t\tstatusIcon,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Clears the current status of the user\n *\n * @return {Promise<void>}\n */\nconst clearMessage = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message?format=json')\n\tawait HttpClient.delete(url)\n}\n\nexport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetCustomMessage,\n\tsetPredefinedMessage,\n\tclearMessage,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tdateFactory,\n} from './dateService'\nimport moment from '@nextcloud/moment'\n\n/**\n * Calculates the actual clearAt timestamp\n *\n * @param {object | null} clearAt The clear-at config\n * @return {number | null}\n */\nconst getTimestampForClearAt = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn null\n\t}\n\n\tconst date = dateFactory()\n\n\tif (clearAt.type === 'period') {\n\t\tdate.setSeconds(date.getSeconds() + clearAt.time)\n\t\treturn Math.floor(date.getTime() / 1000)\n\t}\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\tcase 'week':\n\t\t\treturn Number(moment(date).endOf(clearAt.time).format('X'))\n\t\t}\n\t}\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\treturn clearAt.time\n\t}\n\n\treturn null\n}\n\nexport {\n\tgetTimestampForClearAt,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetPredefinedMessage,\n\tsetCustomMessage,\n\tclearMessage,\n} from '../services/statusService'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getTimestampForClearAt } from '../services/clearAtService'\nimport { emit } from '@nextcloud/event-bus'\n\nconst state = {\n\t// Status (online / away / dnd / invisible / offline)\n\tstatus: null,\n\t// Whether or not the status is user-defined\n\tstatusIsUserDefined: null,\n\t// A custom message set by the user\n\tmessage: null,\n\t// The icon selected by the user\n\ticon: null,\n\t// When to automatically clean the status\n\tclearAt: null,\n\t// Whether or not the message is predefined\n\t// (and can automatically be translated by Nextcloud)\n\tmessageIsPredefined: null,\n\t// The id of the message in case it's predefined\n\tmessageId: null,\n}\n\nconst mutations = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.statusType The new status type\n\t */\n\tsetStatus(state, { statusType }) {\n\t\tstate.status = statusType\n\t\tstate.statusIsUserDefined = true\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {number | null} data.clearAt When to automatically clear the status\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t */\n\tsetPredefinedMessage(state, { messageId, clearAt, message, icon }) {\n\t\tstate.messageId = messageId\n\t\tstate.messageIsPredefined = true\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t */\n\tsetCustomMessage(state, { message, icon, clearAt }) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} state The Vuex state\n\t */\n\tclearMessage(state) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = null\n\t\tstate.icon = null\n\t\tstate.clearAt = null\n\t},\n\n\t/**\n\t * Loads the status from initial state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.status The status type\n\t * @param {boolean} data.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t * @param {boolean} data.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} data.messageId The id of the predefined message\n\t */\n\tloadStatusFromServer(state, { status, statusIsUserDefined, message, icon, clearAt, messageIsPredefined, messageId }) {\n\t\tstate.status = status\n\t\tstate.statusIsUserDefined = statusIsUserDefined\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t\tstate.messageIsPredefined = messageIsPredefined\n\t\tstate.messageId = messageId\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.statusType The new status type\n\t * @return {Promise<void>}\n\t */\n\tasync setStatus({ commit, state }, { statusType }) {\n\t\tawait setStatus(statusType)\n\t\tcommit('setStatus', { statusType })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Update status from 'user_status:status.updated' update.\n\t * This doesn't trigger another 'user_status:status.updated'\n\t * event.\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {string} status The new status\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromObject({ commit, state }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} vuex.rootState The Vuex root state\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setPredefinedMessage({ commit, rootState, state }, { messageId, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setPredefinedMessage(messageId, resolvedClearAt)\n\t\tconst status = rootState.predefinedStatuses.predefinedStatuses.find((status) => status.id === messageId)\n\t\tconst { message, icon } = status\n\n\t\tcommit('setPredefinedMessage', { messageId, clearAt: resolvedClearAt, message, icon })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setCustomMessage({ commit, state }, { message, icon, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setCustomMessage(message, icon, resolvedClearAt)\n\t\tcommit('setCustomMessage', { message, icon, clearAt: resolvedClearAt })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @return {Promise<void>}\n\t */\n\tasync clearMessage({ commit, state }) {\n\t\tawait clearMessage()\n\t\tcommit('clearMessage')\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Re-fetches the status from the server\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @return {Promise<void>}\n\t */\n\tasync reFetchStatusFromServer({ commit }) {\n\t\tconst status = await fetchCurrentStatus()\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Stores the status we got in the reply of the heartbeat\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} status The data destructuring object\n\t * @param {string} status.status The status type\n\t * @param {boolean} status.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} status.message The message\n\t * @param {string} status.icon The icon\n\t * @param {number} status.clearAt When to automatically clear the status\n\t * @param {boolean} status.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} status.messageId The id of the predefined message\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromHeartbeat({ commit }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Loads the server from the initial state\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t */\n\tloadStatusFromInitialState({ commit }) {\n\t\tconst status = loadState('user_status', 'status')\n\t\tcommit('loadStatusFromServer', status)\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport predefinedStatuses from './predefinedStatuses'\nimport userStatus from './userStatus'\n\nVue.use(Vuex)\n\nexport default new Store({\n\tmodules: {\n\t\tpredefinedStatuses,\n\t\tuserStatus,\n\t},\n\tstrict: true,\n})\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport { getRequestToken } from '@nextcloud/auth'\nimport UserStatus from './UserStatus'\nimport store from './store'\nimport Avatar from '@nextcloud/vue/dist/Components/Avatar'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\nVue.prototype.t = t\nVue.prototype.$t = t\n\nconst avatarDiv = document.getElementById('avatardiv-menu')\nconst propsData = {\n\tpreloadedUserStatus: {\n\t\tmessage: avatarDiv.dataset.userstatus_message,\n\t\ticon: avatarDiv.dataset.userstatus_icon,\n\t\tstatus: avatarDiv.dataset.userstatus,\n\t},\n\tuser: avatarDiv.dataset.user,\n\tdisplayName: avatarDiv.dataset.displayname,\n\turl: avatarDiv.dataset.avatar,\n\tdisableMenu: true,\n\tdisableTooltip: true,\n}\n\nconst AvatarInMenu = Vue.extend(Avatar)\nnew AvatarInMenu({ propsData }).$mount('#avatardiv-menu')\n\n// Register settings menu entry\nexport default new Vue({\n\tel: 'li[data-id=\"user_status-menuitem\"]',\n\t// eslint-disable-next-line vue/match-component-file-name\n\tname: 'UserStatusRoot',\n\trender: h => h(UserStatus),\n\tstore,\n})\n\n// Register dashboard status\ndocument.addEventListener('DOMContentLoaded', function() {\n\tif (!OCA.Dashboard) {\n\t\treturn\n\t}\n\n\tOCA.Dashboard.registerStatus('status', (el) => {\n\t\tconst Dashboard = Vue.extend(UserStatus)\n\t\treturn new Dashboard({\n\t\t\tpropsData: {\n\t\t\t\tinline: true,\n\t\t\t},\n\t\t\tstore,\n\t\t}).$mount(el)\n\t})\n})\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { mapState } from 'vuex'\nimport { showError } from '@nextcloud/dialogs'\n\nexport default {\n\tcomputed: {\n\t\t...mapState({\n\t\t\tstatusType: state => state.userStatus.status,\n\t\t\tstatusIsUserDefined: state => state.userStatus.statusIsUserDefined,\n\t\t\tcustomIcon: state => state.userStatus.icon,\n\t\t\tcustomMessage: state => state.userStatus.message,\n\t\t}),\n\n\t\t/**\n\t\t * The message displayed in the top right corner\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleMessage() {\n\t\t\tif (this.customIcon && this.customMessage) {\n\t\t\t\treturn `${this.customIcon} ${this.customMessage}`\n\t\t\t}\n\n\t\t\tif (this.customMessage) {\n\t\t\t\treturn this.customMessage\n\t\t\t}\n\n\t\t\tif (this.statusIsUserDefined) {\n\t\t\t\tswitch (this.statusType) {\n\t\t\t\tcase 'online':\n\t\t\t\t\treturn this.$t('user_status', 'Online')\n\n\t\t\t\tcase 'away':\n\t\t\t\t\treturn this.$t('user_status', 'Away')\n\n\t\t\t\tcase 'dnd':\n\t\t\t\t\treturn this.$t('user_status', 'Do not disturb')\n\n\t\t\t\tcase 'invisible':\n\t\t\t\t\treturn this.$t('user_status', 'Invisible')\n\n\t\t\t\tcase 'offline':\n\t\t\t\t\treturn this.$t('user_status', 'Offline')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.$t('user_status', 'Set status')\n\t\t},\n\n\t\t/**\n\t\t * The status indicator icon\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tstatusIcon() {\n\t\t\tswitch (this.statusType) {\n\t\t\tcase 'online':\n\t\t\t\treturn 'icon-user-status-online'\n\n\t\t\tcase 'away':\n\t\t\t\treturn 'icon-user-status-away'\n\n\t\t\tcase 'dnd':\n\t\t\t\treturn 'icon-user-status-dnd'\n\n\t\t\tcase 'invisible':\n\t\t\tcase 'offline':\n\t\t\t\treturn 'icon-user-status-invisible'\n\t\t\t}\n\n\t\t\treturn ''\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Changes the user-status\n\t\t *\n\t\t * @param {string} statusType (online / away / dnd / invisible)\n\t\t */\n\t\tasync changeStatus(statusType) {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setStatus', { statusType })\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the new status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst dateFactory = () => {\n\treturn new Date()\n}\n\nexport {\n\tdateFactory,\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".user-status-menu-item__header[data-v-e652bbe6]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-e652bbe6]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-e652bbe6]{cursor:default !important}.user-status-menu-item__header[data-v-e652bbe6]:not([href]):hover{background-color:transparent !important}.user-status-menu-item__header-content[data-v-e652bbe6]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-e652bbe6]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-e652bbe6]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-e652bbe6]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-e652bbe6]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px}.user-status-menu-item__toggle--inline[data-v-e652bbe6]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-background-translucent);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-e652bbe6]:active,.user-status-menu-item__toggle--inline[data-v-e652bbe6]:hover,.user-status-menu-item__toggle--inline[data-v-e652bbe6]:focus{background-color:var(--color-background-hover)}li[data-v-e652bbe6]{list-style-type:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/UserStatus.vue\"],\"names\":[],\"mappings\":\"AAgOC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,uCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,oDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAMJ,oBACC,oBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.user-status-menu-item {\\n\\t&__header {\\n\\t\\tdisplay: flex !important;\\n\\t\\tflex-direction: column !important;\\n\\t\\twidth: auto !important;\\n\\t\\theight: 44px * 1.5 !important;\\n\\t\\tpadding: 10px 12px 5px 12px !important;\\n\\t\\talign-items: flex-start !important;\\n\\t\\tcolor: var(--color-main-text) !important;\\n\\n\\t\\t&:not([href]) {\\n\\t\\t\\theight: var(--header-menu-item-height) !important;\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t\\tcursor: default !important;\\n\\n\\t\\t\\t& * {\\n\\t\\t\\t\\tcursor: default !important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&:hover {\\n\\t\\t\\t\\tbackground-color: transparent !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-content {\\n\\t\\t\\tdisplay: inline-flex !important;\\n\\t\\t\\tfont-weight: bold !important;\\n\\t\\t\\tgap: 0 10px !important;\\n\\t\\t\\twidth: auto;\\n\\n\\t\\t\\t&-displayname {\\n\\t\\t\\t\\twidth: auto;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-placeholder {\\n\\t\\t\\t\\twidth: 16px !important;\\n\\t\\t\\t\\theight: 24px !important;\\n\\t\\t\\t\\tmargin-right: 10px !important;\\n\\t\\t\\t\\tvisibility: hidden !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tspan {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__toggle {\\n\\t\\t&-icon {\\n\\t\\t\\twidth: 16px;\\n\\t\\t\\theight: 16px;\\n\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\topacity: 1 !important;\\n\\t\\t\\tbackground-size: 16px;\\n\\t\\t}\\n\\n\\t\\t// In dashboard\\n\\t\\t&--inline {\\n\\t\\t\\twidth: auto;\\n\\t\\t\\tmin-width: 44px;\\n\\t\\t\\theight: 44px;\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tborder: 0;\\n\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\tbackground-color: var(--color-background-translucent);\\n\\t\\t\\tfont-size: inherit;\\n\\t\\t\\tfont-weight: normal;\\n\\n\\t\\t\\t-webkit-backdrop-filter: var(--background-blur);\\n\\t\\t\\tbackdrop-filter: var(--background-blur);\\n\\n\\t\\t\\t&:active,\\n\\t\\t\\t&:hover,\\n\\t\\t\\t&:focus {\\n\\t\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\nli {\\n\\tlist-style-type: none;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + \"user-status-modal\" + \"-\" + chunkId + \".js?v=\" + \"d16ed23bae91bfaa8306\" + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 613;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t613: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(82205); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","sendHeartbeat","isAway","url","generateUrl","HttpClient","status","response","data","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_h","$createElement","_c","_self","staticClass","inline","_e","attrs","profilePageLink","on","loadProfilePage","_v","_s","displayName","loadingProfilePage","t","tag","class","$event","preventDefault","stopPropagation","openModal","apply","arguments","statusIcon","visibleMessage","closeModal","fetchAllPredefinedStatuses","generateOcsUrl","ocs","actions","loadAllPredefinedStatuses","state","commit","predefinedStatuses","length","statuses","mutations","addPredefinedStatus","push","getters","fetchCurrentStatus","setStatus","statusType","setPredefinedMessage","messageId","clearAt","setCustomMessage","message","clearMessage","getTimestampForClearAt","date","dateFactory","type","setSeconds","getSeconds","time","Math","floor","getTime","Number","moment","endOf","format","statusIsUserDefined","icon","messageIsPredefined","loadStatusFromServer","emit","userId","getCurrentUser","uid","setStatusFromObject","rootState","resolvedClearAt","find","reFetchStatusFromServer","setStatusFromHeartbeat","loadStatusFromInitialState","loadState","Vue","Vuex","Store","modules","userStatus","strict","__webpack_nonce__","btoa","getRequestToken","avatarDiv","document","getElementById","propsData","preloadedUserStatus","dataset","userstatus_message","userstatus_icon","userstatus","user","displayname","avatar","disableMenu","disableTooltip","Avatar","$mount","el","name","render","h","UserStatus","store","addEventListener","OCA","Dashboard","registerStatus","computed","mapState","customIcon","customMessage","$t","methods","changeStatus","$store","dispatch","showError","console","debug","Date","___CSS_LOADER_EXPORT___","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","amdD","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","key","splice","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","get","f","chunkId","Promise","all","reduce","promises","u","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","forEach","setTimeout","bind","target","head","appendChild","Symbol","toStringTag","value","nmd","paths","children","scriptUrl","importScripts","location","currentScript","replace","p","b","baseURI","self","href","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file