summaryrefslogtreecommitdiffstats
path: root/dist
diff options
context:
space:
mode:
authorJohn Molakvoæ <skjnldsv@users.noreply.github.com>2023-05-05 13:57:55 +0200
committerGitHub <noreply@github.com>2023-05-05 13:57:55 +0200
commit263a6910c41c07614e2a40349f2ae23e2fca0cb9 (patch)
tree352cfec4058c40d2a3f64e77d77d37a1197b2008 /dist
parenta1ed1db01b1e6cb798277baddfa41458631595c6 (diff)
parent4c71d8f8a418c1b2a2a1679b1f0fb2b8e221f651 (diff)
downloadnextcloud-server-263a6910c41c07614e2a40349f2ae23e2fca0cb9.tar.gz
nextcloud-server-263a6910c41c07614e2a40349f2ae23e2fca0cb9.zip
Merge pull request #38063 from nextcloud/fix/theming
Diffstat (limited to 'dist')
-rw-r--r--dist/theming-admin-theming.js4
-rw-r--r--dist/theming-admin-theming.js.map2
-rw-r--r--dist/theming-personal-theming.js4
-rw-r--r--dist/theming-personal-theming.js.map2
4 files changed, 6 insertions, 6 deletions
diff --git a/dist/theming-admin-theming.js b/dist/theming-admin-theming.js
index 41034d46e27..3651ac83fb9 100644
--- a/dist/theming-admin-theming.js
+++ b/dist/theming-admin-theming.js
@@ -1,3 +1,3 @@
/*! For license information please see theming-admin-theming.js.LICENSE.txt */
-(()=>{"use strict";var e,a={5076:(e,a,n)=>{var i=n(20144),r=n(79954),o=n(15961),l=n(4820),s=n(79753);const d=["color","logo","background","logoheader","favicon","disable-user-theming"],u={emits:["update:theming"],data:()=>({showSuccess:!1,errorMessage:""}),computed:{id(){return"admin-theming-".concat(this.name)}},methods:{reset(){this.showSuccess=!1,this.errorMessage=""},handleSuccess(){this.showSuccess=!0,setTimeout((()=>{this.showSuccess=!1}),2e3),d.includes(this.name)&&this.$emit("update:theming")}}},c={mixins:[u],watch:{value(e){this.localValue=e}},data(){return{localValue:this.value}},methods:{async save(){this.reset();const e=(0,s.generateUrl)("/apps/theming/ajax/updateStylesheet"),t=!0===this.localValue?"yes":!1===this.localValue?"no":this.localValue;try{await l.default.post(e,{setting:this.name,value:t}),this.$emit("update:value",this.localValue),this.handleSuccess()}catch(e){var a;this.errorMessage=null===(a=e.response.data.data)||void 0===a?void 0:a.message}},async undo(){this.reset();const e=(0,s.generateUrl)("/apps/theming/ajax/undoChanges");try{await l.default.post(e,{setting:this.name}),this.$emit("update:value",this.defaultValue),this.handleSuccess()}catch(e){var t;this.errorMessage=null===(t=e.response.data.data)||void 0===t?void 0:t.message}}}},m={name:"CheckboxField",components:{NcCheckboxRadioSwitch:o.rw,NcNoteCard:o.qf},mixins:[c],props:{name:{type:String,required:!0},value:{type:Boolean,required:!0},defaultValue:{type:Boolean,required:!0},displayName:{type:String,required:!0},label:{type:String,required:!0},description:{type:String,required:!0}}};var p=n(93379),g=n.n(p),h=n(7795),A=n.n(h),f=n(90569),v=n.n(f),y=n(3565),C=n.n(y),b=n(19216),N=n.n(b),x=n(44589),w=n.n(x),_=n(17083),k={};k.styleTagTransform=w(),k.setAttributes=C(),k.insert=v().bind(null,"head"),k.domAPI=A(),k.insertStyleElement=N(),g()(_.Z,k),_.Z&&_.Z.locals&&_.Z.locals;var M=n(51900);const S=(0,M.Z)(m,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"field"},[t("label",{attrs:{for:e.id}},[e._v(e._s(e.displayName))]),e._v(" "),t("div",{staticClass:"field__row"},[t("NcCheckboxRadioSwitch",{attrs:{type:"switch",id:e.id,checked:e.localValue},on:{"update:checked":[function(t){e.localValue=t},e.save]}},[e._v("\n\t\t\t"+e._s(e.label)+"\n\t\t")])],1),e._v(" "),t("p",{staticClass:"field__description"},[e._v(e._s(e.description))]),e._v(" "),e.errorMessage?t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[e._v(e._s(e.errorMessage))])]):e._e()],1)}),[],!1,null,"17145f08",null).exports;var T=n(20296),I=n(92425);const L={name:"ColorPickerField",components:{NcButton:o.P2,NcColorPicker:o.m,NcNoteCard:o.qf,Undo:I.default},mixins:[c],props:{name:{type:String,required:!0},value:{type:String,required:!0},defaultValue:{type:String,required:!0},displayName:{type:String,required:!0}},methods:{debounceSave:(0,T.debounce)((async function(){await this.save()}),200)}};var F=n(4510),U={};U.styleTagTransform=w(),U.setAttributes=C(),U.insert=v().bind(null,"head"),U.domAPI=A(),U.insertStyleElement=N(),g()(F.Z,U),F.Z&&F.Z.locals&&F.Z.locals;const D=(0,M.Z)(L,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"field"},[t("label",{attrs:{for:e.id}},[e._v(e._s(e.displayName))]),e._v(" "),t("div",{staticClass:"field__row"},[t("NcColorPicker",{attrs:{value:e.localValue,"advanced-fields":!0},on:{"update:value":[function(t){e.localValue=t},e.debounceSave]}},[t("NcButton",{staticClass:"field__button",attrs:{type:"primary",id:e.id,"aria-label":e.t("theming","Select a custom color"),"data-admin-theming-setting-primary-color-picker":""}},[e._v("\n\t\t\t\t"+e._s(e.value)+"\n\t\t\t")])],1),e._v(" "),e.value!==e.defaultValue?t("NcButton",{attrs:{type:"tertiary","aria-label":e.t("theming","Reset to default"),"data-admin-theming-setting-primary-color-reset":""},on:{click:e.undo},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Undo",{attrs:{size:20}})]},proxy:!0}],null,!1,33666776)}):e._e()],1),e._v(" "),e.errorMessage?t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[e._v(e._s(e.errorMessage))])]):e._e()],1)}),[],!1,null,"105820ba",null).exports;var j=n(57612),V=n(75762);const E={name:"FileInputField",components:{Delete:j.Z,NcButton:o.P2,NcLoadingIcon:o.lb,NcNoteCard:o.qf,Undo:I.default,Upload:V.Z},mixins:[u],props:{name:{type:String,required:!0},mimeName:{type:String,required:!0},mimeValue:{type:String,required:!0},defaultMimeValue:{type:String,required:!0},displayName:{type:String,required:!0},ariaLabel:{type:String,required:!0}},data:()=>({showLoading:!1}),computed:{showReset(){return this.mimeValue!==this.defaultMimeValue},showRemove(){if("background"===this.name){if(this.mimeValue.startsWith("image/"))return!0;if(this.mimeValue===this.defaultMimeValue)return!0}return!1}},methods:{activateLocalFilePicker(){this.reset(),this.$refs.input.value=null,this.$refs.input.click()},async onChange(e){const t=e.target.files[0],a=new FormData;a.append("key",this.name),a.append("image",t);const n=(0,s.generateUrl)("/apps/theming/ajax/uploadImage");try{this.showLoading=!0,await l.default.post(n,a),this.showLoading=!1,this.$emit("update:mime-value",t.type),this.handleSuccess()}catch(e){var i;this.showLoading=!1,this.errorMessage=null===(i=e.response.data.data)||void 0===i?void 0:i.message}},async undo(){this.reset();const e=(0,s.generateUrl)("/apps/theming/ajax/undoChanges");try{await l.default.post(e,{setting:this.mimeName}),this.$emit("update:mime-value",this.defaultMimeValue),this.handleSuccess()}catch(e){var t;this.errorMessage=null===(t=e.response.data.data)||void 0===t?void 0:t.message}},async removeBackground(){this.reset();const e=(0,s.generateUrl)("/apps/theming/ajax/updateStylesheet");try{await l.default.post(e,{setting:this.mimeName,value:"backgroundColor"}),this.$emit("update:mime-value","backgroundColor"),this.handleSuccess()}catch(e){var t;this.errorMessage=null===(t=e.response.data.data)||void 0===t?void 0:t.message}}}},P=E;var z=n(78169),B={};B.styleTagTransform=w(),B.setAttributes=C(),B.insert=v().bind(null,"head"),B.domAPI=A(),B.insertStyleElement=N(),g()(z.Z,B),z.Z&&z.Z.locals&&z.Z.locals;const O=(0,M.Z)(P,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"field"},[t("label",{attrs:{for:e.id}},[e._v(e._s(e.displayName))]),e._v(" "),t("div",{staticClass:"field__row"},[t("NcButton",{attrs:{type:"secondary",id:e.id,"aria-label":e.ariaLabel,"data-admin-theming-setting-file-picker":""},on:{click:e.activateLocalFilePicker},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Upload",{attrs:{size:20}})]},proxy:!0}])},[e._v("\n\t\t\t"+e._s(e.t("theming","Upload"))+"\n\t\t")]),e._v(" "),e.showReset?t("NcButton",{attrs:{type:"tertiary","aria-label":e.t("theming","Reset to default"),"data-admin-theming-setting-file-reset":""},on:{click:e.undo},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Undo",{attrs:{size:20}})]},proxy:!0}],null,!1,33666776)}):e._e(),e._v(" "),e.showRemove?t("NcButton",{attrs:{type:"tertiary","aria-label":e.t("theming","Remove background image"),"data-admin-theming-setting-file-remove":""},on:{click:e.removeBackground},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Delete",{attrs:{size:20}})]},proxy:!0}],null,!1,2705356561)}):e._e(),e._v(" "),e.showLoading?t("NcLoadingIcon",{staticClass:"field__loading-icon",attrs:{size:20}}):e._e()],1),e._v(" "),"logoheader"!==e.name&&"favicon"!==e.name||e.mimeValue===e.defaultMimeValue?e._e():t("div",{staticClass:"field__preview",class:{"field__preview--logoheader":"logoheader"===e.name,"field__preview--favicon":"favicon"===e.name}}),e._v(" "),e.errorMessage?t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[e._v(e._s(e.errorMessage))])]):e._e(),e._v(" "),t("input",{ref:"input",attrs:{type:"file"},on:{change:e.onChange}})],1)}),[],!1,null,"3d620660",null).exports,Z={name:"TextField",components:{NcTextField:o.h3},mixins:[c],props:{name:{type:String,required:!0},value:{type:String,required:!0},defaultValue:{type:String,required:!0},type:{type:String,required:!0},displayName:{type:String,required:!0},placeholder:{type:String,required:!0},maxlength:{type:Number,required:!0}}};var R=n(75012),Y={};Y.styleTagTransform=w(),Y.setAttributes=C(),Y.insert=v().bind(null,"head"),Y.domAPI=A(),Y.insertStyleElement=N(),g()(R.Z,Y),R.Z&&R.Z.locals&&R.Z.locals;const q=(0,M.Z)(Z,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"field"},[t("NcTextField",{attrs:{value:e.localValue,label:e.displayName,"label-visible":!0,placeholder:e.placeholder,type:e.type,maxlength:e.maxlength,spellcheck:!1,success:e.showSuccess,error:Boolean(e.errorMessage),"helper-text":e.errorMessage,"show-trailing-button":e.value!==e.defaultValue,"trailing-button-icon":"undo"},on:{"update:value":function(t){e.localValue=t},"trailing-button-click":e.undo,keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.save.apply(null,arguments)},blur:e.save}})],1)}),[],!1,null,"21244e1d",null).exports,{backgroundMime:G,canThemeIcons:$,color:W,docUrl:H,docUrlIcons:Q,faviconMime:X,isThemable:J,legalNoticeUrl:K,logoheaderMime:ee,logoMime:te,name:ae,notThemableErrorMessage:ne,privacyPolicyUrl:ie,slogan:re,url:oe,userThemingDisabled:le}=(0,r.j)("theming","adminThemingParameters"),se=[{name:"name",value:ae,defaultValue:"Nextcloud",type:"text",displayName:t("theming","Name"),placeholder:t("theming","Name"),maxlength:250},{name:"url",value:oe,defaultValue:"https://nextcloud.com",type:"url",displayName:t("theming","Web link"),placeholder:"https://…",maxlength:500},{name:"slogan",value:re,defaultValue:t("theming","a safe home for all your data"),type:"text",displayName:t("theming","Slogan"),placeholder:t("theming","Slogan"),maxlength:500}],de={name:"color",value:W,defaultValue:"#0082c9",displayName:t("theming","Color")},ue=[{name:"logo",mimeName:"logoMime",mimeValue:te,defaultMimeValue:"",displayName:t("theming","Logo"),ariaLabel:t("theming","Upload new logo")},{name:"background",mimeName:"backgroundMime",mimeValue:G,defaultMimeValue:"",displayName:t("theming","Background and login image"),ariaLabel:t("theming","Upload new background and login image")}],ce=[{name:"imprintUrl",value:K,defaultValue:"",type:"url",displayName:t("theming","Legal notice link"),placeholder:"https://…",maxlength:500},{name:"privacyUrl",value:ie,defaultValue:"",type:"url",displayName:t("theming","Privacy policy link"),placeholder:"https://…",maxlength:500}],me=[{name:"logoheader",mimeName:"logoheaderMime",mimeValue:ee,defaultMimeValue:"",displayName:t("theming","Header logo"),ariaLabel:t("theming","Upload new header logo")},{name:"favicon",mimeName:"faviconMime",mimeValue:X,defaultMimeValue:"",displayName:t("theming","Favicon"),ariaLabel:t("theming","Upload new favicon")}],pe={name:"disable-user-theming",value:le,defaultValue:!1,displayName:t("theming","User settings"),label:t("theming","Disable user theming"),description:t("theming","Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on.")},ge={name:"AdminTheming",components:{CheckboxField:S,ColorPickerField:D,FileInputField:O,NcNoteCard:o.qf,NcSettingsSection:o.gE,TextField:q},emits:["update:theming"],data:()=>({textFields:se,colorPickerField:de,fileInputFields:ue,advancedTextFields:ce,advancedFileInputFields:me,userThemingField:pe,canThemeIcons:$,docUrl:H,docUrlIcons:Q,isThemable:J,notThemableErrorMessage:ne})};var he=n(27247),Ae={};Ae.styleTagTransform=w(),Ae.setAttributes=C(),Ae.insert=v().bind(null,"head"),Ae.domAPI=A(),Ae.insertStyleElement=N(),g()(he.Z,Ae),he.Z&&he.Z.locals&&he.Z.locals;const fe=(0,M.Z)(ge,(function(){var e=this,t=e._self._c;return t("section",[t("NcSettingsSection",{attrs:{title:e.t("theming","Theming"),description:e.t("theming","Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users."),"doc-url":e.docUrl,"data-admin-theming-settings":""}},[t("div",{staticClass:"admin-theming"},[e.isThemable?e._e():t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[e._v(e._s(e.notThemableErrorMessage))])]),e._v(" "),e._l(e.textFields,(function(a){return t("TextField",{key:a.name,attrs:{"data-admin-theming-setting-field":a.name,"default-value":a.defaultValue,"display-name":a.displayName,maxlength:a.maxlength,name:a.name,placeholder:a.placeholder,type:a.type,value:a.value},on:{"update:value":function(t){return e.$set(a,"value",t)},"update:theming":function(t){return e.$emit("update:theming")}}})})),e._v(" "),t("ColorPickerField",{attrs:{name:e.colorPickerField.name,"default-value":e.colorPickerField.defaultValue,"display-name":e.colorPickerField.displayName,value:e.colorPickerField.value,"data-admin-theming-setting-primary-color":""},on:{"update:value":function(t){return e.$set(e.colorPickerField,"value",t)},"update:theming":function(t){return e.$emit("update:theming")}}}),e._v(" "),e._l(e.fileInputFields,(function(a){return t("FileInputField",{key:a.name,attrs:{"aria-label":a.ariaLabel,"data-admin-theming-setting-file":a.name,"default-mime-value":a.defaultMimeValue,"display-name":a.displayName,"mime-name":a.mimeName,"mime-value":a.mimeValue,name:a.name},on:{"update:mimeValue":function(t){return e.$set(a,"mimeValue",t)},"update:mime-value":function(t){return e.$set(a,"mimeValue",t)},"update:theming":function(t){return e.$emit("update:theming")}}})})),e._v(" "),t("div",{staticClass:"admin-theming__preview",attrs:{"data-admin-theming-preview":""}},[t("div",{staticClass:"admin-theming__preview-logo",attrs:{"data-admin-theming-preview-logo":""}})])],2)]),e._v(" "),t("NcSettingsSection",{attrs:{title:e.t("theming","Advanced options")}},[t("div",{staticClass:"admin-theming-advanced"},[e._l(e.advancedTextFields,(function(a){return t("TextField",{key:a.name,attrs:{name:a.name,value:a.value,"default-value":a.defaultValue,type:a.type,"display-name":a.displayName,placeholder:a.placeholder,maxlength:a.maxlength},on:{"update:value":function(t){return e.$set(a,"value",t)},"update:theming":function(t){return e.$emit("update:theming")}}})})),e._v(" "),e._l(e.advancedFileInputFields,(function(a){return t("FileInputField",{key:a.name,attrs:{name:a.name,"mime-name":a.mimeName,"mime-value":a.mimeValue,"default-mime-value":a.defaultMimeValue,"display-name":a.displayName,"aria-label":a.ariaLabel},on:{"update:mimeValue":function(t){return e.$set(a,"mimeValue",t)},"update:mime-value":function(t){return e.$set(a,"mimeValue",t)},"update:theming":function(t){return e.$emit("update:theming")}}})})),e._v(" "),t("CheckboxField",{attrs:{name:e.userThemingField.name,value:e.userThemingField.value,"default-value":e.userThemingField.defaultValue,"display-name":e.userThemingField.displayName,label:e.userThemingField.label,description:e.userThemingField.description,"data-admin-theming-setting-disable-user-theming":""},on:{"update:theming":function(t){return e.$emit("update:theming")}}}),e._v(" "),e.canThemeIcons?e._e():t("a",{attrs:{href:e.docUrlIcons,rel:"noreferrer noopener"}},[t("em",[e._v(e._s(e.t("theming","Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color.")))])])],2)])],1)}),[],!1,null,"4f7ac635",null).exports;i.default.prototype.OC=OC,i.default.prototype.t=t;const ve=new(i.default.extend(fe));ve.$mount("#admin-theming"),ve.$on("update:theming",(()=>{[...document.head.querySelectorAll("link.theme")].forEach((e=>{const t=new URL(e.href);t.searchParams.set("v",Date.now());const a=e.cloneNode();a.href=t.toString(),a.onload=()=>e.remove(),document.head.append(a)}))}))},27247:(e,t,a)=>{a.d(t,{Z:()=>m});var n=a(87537),i=a.n(n),r=a(23645),o=a.n(r),l=a(61667),s=a.n(l),d=new URL(a(92770),a.b),u=o()(i()),c=s()(d);u.push([e.id,".admin-theming[data-v-4f7ac635],.admin-theming-advanced[data-v-4f7ac635]{display:flex;flex-direction:column;gap:8px 0}.admin-theming__preview[data-v-4f7ac635]{width:230px;height:140px;background-size:cover;background-position:center;text-align:center;margin-top:10px;background-color:var(--color-primary-default, #0082c9);background-image:var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)))}.admin-theming__preview-logo[data-v-4f7ac635]{width:20%;height:20%;margin-top:20px;display:inline-block;background-size:contain;background-position:center;background-repeat:no-repeat;background-image:var(--image-logo, url("+c+"))}","",{version:3,sources:["webpack://./apps/theming/src/AdminTheming.vue"],names:[],mappings:"AACA,yEAEC,YAAA,CACA,qBAAA,CACA,SAAA,CAIA,yCACC,WAAA,CACA,YAAA,CACA,qBAAA,CACA,0BAAA,CACA,iBAAA,CACA,eAAA,CAIA,sDAAA,CAKA,iIAAA,CAEA,8CACC,SAAA,CACA,UAAA,CACA,eAAA,CACA,oBAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,2EAAA",sourcesContent:["\n.admin-theming,\n.admin-theming-advanced {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px 0;\n}\n\n.admin-theming {\n\t&__preview {\n\t\twidth: 230px;\n\t\theight: 140px;\n\t\tbackground-size: cover;\n\t\tbackground-position: center;\n\t\ttext-align: center;\n\t\tmargin-top: 10px;\n\t\t/* This is basically https://github.com/nextcloud/server/blob/master/core/css/guest.css\n\t\t But without the user variables. That way the admin can preview the render as guest*/\n\t\t/* As guest, there is no user color color-background-plain */\n\t\tbackground-color: var(--color-primary-default, #0082c9);\n\t\t/* As guest, there is no user background (--image-background)\n\t\t1. Empty background if defined\n\t\t2. Else default background\n\t\t3. Finally default gradient (should not happened, the background is always defined anyway) */\n\t\tbackground-image: var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)));\n\n\t\t&-logo {\n\t\t\twidth: 20%;\n\t\t\theight: 20%;\n\t\t\tmargin-top: 20px;\n\t\t\tdisplay: inline-block;\n\t\t\tbackground-size: contain;\n\t\t\tbackground-position: center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-image: var(--image-logo, url('../../../core/img/logo/logo.svg'));\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const m=u},17083:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(87537),i=a.n(n),r=a(23645),o=a.n(r)()(i());o.push([e.id,".field[data-v-17145f08]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-17145f08]{display:flex;gap:0 4px}.field__description[data-v-17145f08]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/shared/field.scss","webpack://./apps/theming/src/components/admin/CheckboxField.vue"],names:[],mappings:"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCzBD,qCACC,mCAAA",sourcesContent:["/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n.field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px 0;\n\n\t&__row {\n\t\tdisplay: flex;\n\t\tgap: 0 4px;\n\t}\n}\n","\n@import './shared/field.scss';\n\n.field {\n\t&__description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n"],sourceRoot:""}]);const l=o},4510:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(87537),i=a.n(n),r=a(23645),o=a.n(r)()(i());o.push([e.id,".field[data-v-105820ba]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-105820ba]{display:flex;gap:0 4px}.field__button[data-v-105820ba]{width:230px !important;border-radius:var(--border-radius-large) !important;background-color:var(--color-primary-default) !important}.field__button[data-v-105820ba]:hover{background-color:var(--color-primary-element-default-hover) !important}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/shared/field.scss","webpack://./apps/theming/src/components/admin/ColorPickerField.vue"],names:[],mappings:"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCxBD,gCACC,sBAAA,CACA,mDAAA,CACA,wDAAA,CACA,sCACC,sEAAA",sourcesContent:["/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n.field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px 0;\n\n\t&__row {\n\t\tdisplay: flex;\n\t\tgap: 0 4px;\n\t}\n}\n","\n@import './shared/field.scss';\n\n.field {\n\t// Override default NcButton styles\n\t&__button {\n\t\twidth: 230px !important;\n\t\tborder-radius: var(--border-radius-large) !important;\n\t\tbackground-color: var(--color-primary-default) !important;\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-primary-element-default-hover) !important;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const l=o},78169:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(87537),i=a.n(n),r=a(23645),o=a.n(r)()(i());o.push([e.id,".field[data-v-3d620660]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-3d620660]{display:flex;gap:0 4px}.field__loading-icon[data-v-3d620660]{width:44px;height:44px}.field__preview[data-v-3d620660]{width:70px;height:70px;background-size:contain;background-position:center;background-repeat:no-repeat;margin:10px 0}.field__preview--logoheader[data-v-3d620660]{background-image:var(--image-logoheader)}.field__preview--favicon[data-v-3d620660]{background-image:var(--image-favicon)}input[type=file][data-v-3d620660]{display:none}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/shared/field.scss","webpack://./apps/theming/src/components/admin/FileInputField.vue"],names:[],mappings:"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCzBD,sCACC,UAAA,CACA,WAAA,CAGD,iCACC,UAAA,CACA,WAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,aAAA,CAEA,6CACC,wCAAA,CAGD,0CACC,qCAAA,CAKH,kCACC,YAAA",sourcesContent:["/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n.field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px 0;\n\n\t&__row {\n\t\tdisplay: flex;\n\t\tgap: 0 4px;\n\t}\n}\n","\n@import './shared/field.scss';\n\n.field {\n\t&__loading-icon {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&__preview {\n\t\twidth: 70px;\n\t\theight: 70px;\n\t\tbackground-size: contain;\n\t\tbackground-position: center;\n\t\tbackground-repeat: no-repeat;\n\t\tmargin: 10px 0;\n\n\t\t&--logoheader {\n\t\t\tbackground-image: var(--image-logoheader);\n\t\t}\n\n\t\t&--favicon {\n\t\t\tbackground-image: var(--image-favicon);\n\t\t}\n\t}\n}\n\ninput[type=\"file\"] {\n\tdisplay: none;\n}\n"],sourceRoot:""}]);const l=o},75012:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(87537),i=a.n(n),r=a(23645),o=a.n(r)()(i());o.push([e.id,".field[data-v-21244e1d]{max-width:400px}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/TextField.vue"],names:[],mappings:"AACA,wBACC,eAAA",sourcesContent:["\n.field {\n\tmax-width: 400px;\n}\n"],sourceRoot:""}]);const l=o},92770:e=>{e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU2IiBoZWlnaHQ9IjEyOCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjU2IDEyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtMTI4IDdjLTI1Ljg3MSAwLTQ3LjgxNyAxNy40ODUtNTQuNzEzIDQxLjIwOS01Ljk3OTUtMTIuNDYxLTE4LjY0Mi0yMS4yMDktMzMuMjg3LTIxLjIwOS0yMC4zMDQgMC0zNyAxNi42OTYtMzcgMzdzMTYuNjk2IDM3IDM3IDM3YzE0LjY0NSAwIDI3LjMwOC04Ljc0ODEgMzMuMjg3LTIxLjIwOSA2Ljg5NTcgMjMuNzI0IDI4Ljg0MiA0MS4yMDkgNTQuNzEzIDQxLjIwOXM0Ny44MTctMTcuNDg1IDU0LjcxMy00MS4yMDljNS45Nzk1IDEyLjQ2MSAxOC42NDIgMjEuMjA5IDMzLjI4NyAyMS4yMDkgMjAuMzA0IDAgMzctMTYuNjk2IDM3LTM3cy0xNi42OTYtMzctMzctMzdjLTE0LjY0NSAwLTI3LjMwOCA4Ljc0ODEtMzMuMjg3IDIxLjIwOS02Ljg5NTctMjMuNzI0LTI4Ljg0Mi00MS4yMDktNTQuNzEzLTQxLjIwOXptMCAyMmMxOS40NiAwIDM1IDE1LjU0IDM1IDM1cy0xNS41NCAzNS0zNSAzNS0zNS0xNS41NC0zNS0zNSAxNS41NC0zNSAzNS0zNXptLTg4IDIwYzguNDE0NiAwIDE1IDYuNTg1NCAxNSAxNXMtNi41ODU0IDE1LTE1IDE1LTE1LTYuNTg1NC0xNS0xNSA2LjU4NTQtMTUgMTUtMTV6bTE3NiAwYzguNDE0NiAwIDE1IDYuNTg1NCAxNSAxNXMtNi41ODU0IDE1LTE1IDE1LTE1LTYuNTg1NC0xNS0xNSA2LjU4NTQtMTUgMTUtMTV6IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0iI2ZmZiIgc3R5bGU9Ii1pbmtzY2FwZS1zdHJva2U6bm9uZSIvPjwvc3ZnPgo="}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={id:e,loaded:!1,exports:{}};return a[e].call(r.exports,r,r.exports,i),r.loaded=!0,r.exports}i.m=a,e=[],i.O=(t,a,n,r)=>{if(!a){var o=1/0;for(u=0;u<e.length;u++){a=e[u][0],n=e[u][1],r=e[u][2];for(var l=!0,s=0;s<a.length;s++)(!1&r||o>=r)&&Object.keys(i.O).every((e=>i.O[e](a[s])))?a.splice(s--,1):(l=!1,r<o&&(o=r));if(l){e.splice(u--,1);var d=n();void 0!==d&&(t=d)}}return t}r=r||0;for(var u=e.length;u>0&&e[u-1][2]>r;u--)e[u]=e[u-1];e[u]=[a,n,r]},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var a in t)i.o(t,a)&&!i.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),i.j=5544,(()=>{i.b=document.baseURI||self.location.href;var e={5544:0};i.O.j=t=>0===e[t];var t=(t,a)=>{var n,r,o=a[0],l=a[1],s=a[2],d=0;if(o.some((t=>0!==e[t]))){for(n in l)i.o(l,n)&&(i.m[n]=l[n]);if(s)var u=s(i)}for(t&&t(a);d<o.length;d++)r=o[d],i.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return i.O(u)},a=self.webpackChunknextcloud=self.webpackChunknextcloud||[];a.forEach(t.bind(null,0)),a.push=t.bind(null,a.push.bind(a))})(),i.nc=void 0;var r=i.O(void 0,[7874],(()=>i(5076)));r=i.O(r)})();
-//# sourceMappingURL=theming-admin-theming.js.map?v=cdb642bf665b85834430 \ No newline at end of file
+(()=>{"use strict";var e,a={62786:(e,a,n)=>{var i=n(20144),r=n(79954),o=n(15961),l=n(4820),s=n(79753);const d=["color","logo","background","logoheader","favicon","disable-user-theming"],u={emits:["update:theming"],data:()=>({showSuccess:!1,errorMessage:""}),computed:{id(){return"admin-theming-".concat(this.name)}},methods:{reset(){this.showSuccess=!1,this.errorMessage=""},handleSuccess(){this.showSuccess=!0,setTimeout((()=>{this.showSuccess=!1}),2e3),d.includes(this.name)&&this.$emit("update:theming")}}},c={mixins:[u],watch:{value(e){this.localValue=e}},data(){return{localValue:this.value}},methods:{async save(){this.reset();const e=(0,s.generateUrl)("/apps/theming/ajax/updateStylesheet"),t=!0===this.localValue?"yes":!1===this.localValue?"no":this.localValue;try{await l.default.post(e,{setting:this.name,value:t}),this.$emit("update:value",this.localValue),this.handleSuccess()}catch(e){var a;this.errorMessage=null===(a=e.response.data.data)||void 0===a?void 0:a.message}},async undo(){this.reset();const e=(0,s.generateUrl)("/apps/theming/ajax/undoChanges");try{await l.default.post(e,{setting:this.name}),this.$emit("update:value",this.defaultValue),this.handleSuccess()}catch(e){var t;this.errorMessage=null===(t=e.response.data.data)||void 0===t?void 0:t.message}}}},m={name:"CheckboxField",components:{NcCheckboxRadioSwitch:o.rw,NcNoteCard:o.qf},mixins:[c],props:{name:{type:String,required:!0},value:{type:Boolean,required:!0},defaultValue:{type:Boolean,required:!0},displayName:{type:String,required:!0},label:{type:String,required:!0},description:{type:String,required:!0}}};var p=n(93379),g=n.n(p),h=n(7795),A=n.n(h),f=n(90569),v=n.n(f),y=n(3565),C=n.n(y),b=n(19216),N=n.n(b),x=n(44589),w=n.n(x),_=n(17083),k={};k.styleTagTransform=w(),k.setAttributes=C(),k.insert=v().bind(null,"head"),k.domAPI=A(),k.insertStyleElement=N(),g()(_.Z,k),_.Z&&_.Z.locals&&_.Z.locals;var S=n(51900);const M=(0,S.Z)(m,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"field"},[t("label",{attrs:{for:e.id}},[e._v(e._s(e.displayName))]),e._v(" "),t("div",{staticClass:"field__row"},[t("NcCheckboxRadioSwitch",{attrs:{type:"switch",id:e.id,checked:e.localValue},on:{"update:checked":[function(t){e.localValue=t},e.save]}},[e._v("\n\t\t\t"+e._s(e.label)+"\n\t\t")])],1),e._v(" "),t("p",{staticClass:"field__description"},[e._v(e._s(e.description))]),e._v(" "),e.errorMessage?t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[e._v(e._s(e.errorMessage))])]):e._e()],1)}),[],!1,null,"17145f08",null).exports;var T=n(20296),I=n(92425);const L={name:"ColorPickerField",components:{NcButton:o.P2,NcColorPicker:o.m,NcNoteCard:o.qf,Undo:I.default},mixins:[c],props:{name:{type:String,required:!0},value:{type:String,required:!0},defaultValue:{type:String,required:!0},displayName:{type:String,required:!0}},methods:{debounceSave:(0,T.debounce)((async function(){await this.save()}),200)}};var U=n(3598),F={};F.styleTagTransform=w(),F.setAttributes=C(),F.insert=v().bind(null,"head"),F.domAPI=A(),F.insertStyleElement=N(),g()(U.Z,F),U.Z&&U.Z.locals&&U.Z.locals;const D=(0,S.Z)(L,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"field"},[t("label",{attrs:{for:e.id}},[e._v(e._s(e.displayName))]),e._v(" "),t("div",{staticClass:"field__row"},[t("NcColorPicker",{attrs:{value:e.localValue,"advanced-fields":!0},on:{"update:value":[function(t){e.localValue=t},e.debounceSave]}},[t("NcButton",{staticClass:"field__button",attrs:{type:"primary",id:e.id,"aria-label":e.t("theming","Select a custom color"),"data-admin-theming-setting-primary-color-picker":""}},[e._v("\n\t\t\t\t"+e._s(e.value)+"\n\t\t\t")])],1),e._v(" "),e.value!==e.defaultValue?t("NcButton",{attrs:{type:"tertiary","aria-label":e.t("theming","Reset to default"),"data-admin-theming-setting-primary-color-reset":""},on:{click:e.undo},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Undo",{attrs:{size:20}})]},proxy:!0}],null,!1,33666776)}):e._e()],1),e._v(" "),e.errorMessage?t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[e._v(e._s(e.errorMessage))])]):e._e()],1)}),[],!1,null,"73de0887",null).exports;var j=n(57612),V=n(75762);const z={name:"FileInputField",components:{Delete:j.Z,NcButton:o.P2,NcLoadingIcon:o.lb,NcNoteCard:o.qf,Undo:I.default,Upload:V.Z},mixins:[u],props:{name:{type:String,required:!0},mimeName:{type:String,required:!0},mimeValue:{type:String,required:!0},defaultMimeValue:{type:String,required:!0},displayName:{type:String,required:!0},ariaLabel:{type:String,required:!0}},data:()=>({showLoading:!1}),computed:{showReset(){return this.mimeValue!==this.defaultMimeValue},showRemove(){if("background"===this.name){if(this.mimeValue.startsWith("image/"))return!0;if(this.mimeValue===this.defaultMimeValue)return!0}return!1}},methods:{activateLocalFilePicker(){this.reset(),this.$refs.input.value=null,this.$refs.input.click()},async onChange(e){const t=e.target.files[0],a=new FormData;a.append("key",this.name),a.append("image",t);const n=(0,s.generateUrl)("/apps/theming/ajax/uploadImage");try{this.showLoading=!0,await l.default.post(n,a),this.showLoading=!1,this.$emit("update:mime-value",t.type),this.handleSuccess()}catch(e){var i;this.showLoading=!1,this.errorMessage=null===(i=e.response.data.data)||void 0===i?void 0:i.message}},async undo(){this.reset();const e=(0,s.generateUrl)("/apps/theming/ajax/undoChanges");try{await l.default.post(e,{setting:this.mimeName}),this.$emit("update:mime-value",this.defaultMimeValue),this.handleSuccess()}catch(e){var t;this.errorMessage=null===(t=e.response.data.data)||void 0===t?void 0:t.message}},async removeBackground(){this.reset();const e=(0,s.generateUrl)("/apps/theming/ajax/updateStylesheet");try{await l.default.post(e,{setting:this.mimeName,value:"backgroundColor"}),this.$emit("update:mime-value","backgroundColor"),this.handleSuccess()}catch(e){var t;this.errorMessage=null===(t=e.response.data.data)||void 0===t?void 0:t.message}}}},E=z;var P=n(78169),B={};B.styleTagTransform=w(),B.setAttributes=C(),B.insert=v().bind(null,"head"),B.domAPI=A(),B.insertStyleElement=N(),g()(P.Z,B),P.Z&&P.Z.locals&&P.Z.locals;const O=(0,S.Z)(E,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"field"},[t("label",{attrs:{for:e.id}},[e._v(e._s(e.displayName))]),e._v(" "),t("div",{staticClass:"field__row"},[t("NcButton",{attrs:{type:"secondary",id:e.id,"aria-label":e.ariaLabel,"data-admin-theming-setting-file-picker":""},on:{click:e.activateLocalFilePicker},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Upload",{attrs:{size:20}})]},proxy:!0}])},[e._v("\n\t\t\t"+e._s(e.t("theming","Upload"))+"\n\t\t")]),e._v(" "),e.showReset?t("NcButton",{attrs:{type:"tertiary","aria-label":e.t("theming","Reset to default"),"data-admin-theming-setting-file-reset":""},on:{click:e.undo},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Undo",{attrs:{size:20}})]},proxy:!0}],null,!1,33666776)}):e._e(),e._v(" "),e.showRemove?t("NcButton",{attrs:{type:"tertiary","aria-label":e.t("theming","Remove background image"),"data-admin-theming-setting-file-remove":""},on:{click:e.removeBackground},scopedSlots:e._u([{key:"icon",fn:function(){return[t("Delete",{attrs:{size:20}})]},proxy:!0}],null,!1,2705356561)}):e._e(),e._v(" "),e.showLoading?t("NcLoadingIcon",{staticClass:"field__loading-icon",attrs:{size:20}}):e._e()],1),e._v(" "),"logoheader"!==e.name&&"favicon"!==e.name||e.mimeValue===e.defaultMimeValue?e._e():t("div",{staticClass:"field__preview",class:{"field__preview--logoheader":"logoheader"===e.name,"field__preview--favicon":"favicon"===e.name}}),e._v(" "),e.errorMessage?t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[e._v(e._s(e.errorMessage))])]):e._e(),e._v(" "),t("input",{ref:"input",attrs:{type:"file"},on:{change:e.onChange}})],1)}),[],!1,null,"3d620660",null).exports,Z={name:"TextField",components:{NcTextField:o.h3},mixins:[c],props:{name:{type:String,required:!0},value:{type:String,required:!0},defaultValue:{type:String,required:!0},type:{type:String,required:!0},displayName:{type:String,required:!0},placeholder:{type:String,required:!0},maxlength:{type:Number,required:!0}}};var R=n(75012),Y={};Y.styleTagTransform=w(),Y.setAttributes=C(),Y.insert=v().bind(null,"head"),Y.domAPI=A(),Y.insertStyleElement=N(),g()(R.Z,Y),R.Z&&R.Z.locals&&R.Z.locals;const q=(0,S.Z)(Z,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"field"},[t("NcTextField",{attrs:{value:e.localValue,label:e.displayName,"label-visible":!0,placeholder:e.placeholder,type:e.type,maxlength:e.maxlength,spellcheck:!1,success:e.showSuccess,error:Boolean(e.errorMessage),"helper-text":e.errorMessage,"show-trailing-button":e.value!==e.defaultValue,"trailing-button-icon":"undo"},on:{"update:value":function(t){e.localValue=t},"trailing-button-click":e.undo,keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.save.apply(null,arguments)},blur:e.save}})],1)}),[],!1,null,"21244e1d",null).exports,{backgroundMime:G,canThemeIcons:$,color:W,docUrl:H,docUrlIcons:Q,faviconMime:X,isThemable:J,legalNoticeUrl:K,logoheaderMime:ee,logoMime:te,name:ae,notThemableErrorMessage:ne,privacyPolicyUrl:ie,slogan:re,url:oe,userThemingDisabled:le}=(0,r.j)("theming","adminThemingParameters"),se=[{name:"name",value:ae,defaultValue:"Nextcloud",type:"text",displayName:t("theming","Name"),placeholder:t("theming","Name"),maxlength:250},{name:"url",value:oe,defaultValue:"https://nextcloud.com",type:"url",displayName:t("theming","Web link"),placeholder:"https://…",maxlength:500},{name:"slogan",value:re,defaultValue:t("theming","a safe home for all your data"),type:"text",displayName:t("theming","Slogan"),placeholder:t("theming","Slogan"),maxlength:500}],de={name:"color",value:W,defaultValue:"#0082c9",displayName:t("theming","Color")},ue=[{name:"logo",mimeName:"logoMime",mimeValue:te,defaultMimeValue:"",displayName:t("theming","Logo"),ariaLabel:t("theming","Upload new logo")},{name:"background",mimeName:"backgroundMime",mimeValue:G,defaultMimeValue:"",displayName:t("theming","Background and login image"),ariaLabel:t("theming","Upload new background and login image")}],ce=[{name:"imprintUrl",value:K,defaultValue:"",type:"url",displayName:t("theming","Legal notice link"),placeholder:"https://…",maxlength:500},{name:"privacyUrl",value:ie,defaultValue:"",type:"url",displayName:t("theming","Privacy policy link"),placeholder:"https://…",maxlength:500}],me=[{name:"logoheader",mimeName:"logoheaderMime",mimeValue:ee,defaultMimeValue:"",displayName:t("theming","Header logo"),ariaLabel:t("theming","Upload new header logo")},{name:"favicon",mimeName:"faviconMime",mimeValue:X,defaultMimeValue:"",displayName:t("theming","Favicon"),ariaLabel:t("theming","Upload new favicon")}],pe={name:"disable-user-theming",value:le,defaultValue:!1,displayName:t("theming","User settings"),label:t("theming","Disable user theming"),description:t("theming","Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on.")},ge={name:"AdminTheming",components:{CheckboxField:M,ColorPickerField:D,FileInputField:O,NcNoteCard:o.qf,NcSettingsSection:o.gE,TextField:q},emits:["update:theming"],data:()=>({textFields:se,colorPickerField:de,fileInputFields:ue,advancedTextFields:ce,advancedFileInputFields:me,userThemingField:pe,canThemeIcons:$,docUrl:H,docUrlIcons:Q,isThemable:J,notThemableErrorMessage:ne})};var he=n(27247),Ae={};Ae.styleTagTransform=w(),Ae.setAttributes=C(),Ae.insert=v().bind(null,"head"),Ae.domAPI=A(),Ae.insertStyleElement=N(),g()(he.Z,Ae),he.Z&&he.Z.locals&&he.Z.locals;const fe=(0,S.Z)(ge,(function(){var e=this,t=e._self._c;return t("section",[t("NcSettingsSection",{attrs:{title:e.t("theming","Theming"),description:e.t("theming","Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users."),"doc-url":e.docUrl,"data-admin-theming-settings":""}},[t("div",{staticClass:"admin-theming"},[e.isThemable?e._e():t("NcNoteCard",{attrs:{type:"error","show-alert":!0}},[t("p",[e._v(e._s(e.notThemableErrorMessage))])]),e._v(" "),e._l(e.textFields,(function(a){return t("TextField",{key:a.name,attrs:{"data-admin-theming-setting-field":a.name,"default-value":a.defaultValue,"display-name":a.displayName,maxlength:a.maxlength,name:a.name,placeholder:a.placeholder,type:a.type,value:a.value},on:{"update:value":function(t){return e.$set(a,"value",t)},"update:theming":function(t){return e.$emit("update:theming")}}})})),e._v(" "),t("ColorPickerField",{attrs:{name:e.colorPickerField.name,"default-value":e.colorPickerField.defaultValue,"display-name":e.colorPickerField.displayName,value:e.colorPickerField.value,"data-admin-theming-setting-primary-color":""},on:{"update:value":function(t){return e.$set(e.colorPickerField,"value",t)},"update:theming":function(t){return e.$emit("update:theming")}}}),e._v(" "),e._l(e.fileInputFields,(function(a){return t("FileInputField",{key:a.name,attrs:{"aria-label":a.ariaLabel,"data-admin-theming-setting-file":a.name,"default-mime-value":a.defaultMimeValue,"display-name":a.displayName,"mime-name":a.mimeName,"mime-value":a.mimeValue,name:a.name},on:{"update:mimeValue":function(t){return e.$set(a,"mimeValue",t)},"update:mime-value":function(t){return e.$set(a,"mimeValue",t)},"update:theming":function(t){return e.$emit("update:theming")}}})})),e._v(" "),t("div",{staticClass:"admin-theming__preview",attrs:{"data-admin-theming-preview":""}},[t("div",{staticClass:"admin-theming__preview-logo",attrs:{"data-admin-theming-preview-logo":""}})])],2)]),e._v(" "),t("NcSettingsSection",{attrs:{title:e.t("theming","Advanced options")}},[t("div",{staticClass:"admin-theming-advanced"},[e._l(e.advancedTextFields,(function(a){return t("TextField",{key:a.name,attrs:{name:a.name,value:a.value,"default-value":a.defaultValue,type:a.type,"display-name":a.displayName,placeholder:a.placeholder,maxlength:a.maxlength},on:{"update:value":function(t){return e.$set(a,"value",t)},"update:theming":function(t){return e.$emit("update:theming")}}})})),e._v(" "),e._l(e.advancedFileInputFields,(function(a){return t("FileInputField",{key:a.name,attrs:{name:a.name,"mime-name":a.mimeName,"mime-value":a.mimeValue,"default-mime-value":a.defaultMimeValue,"display-name":a.displayName,"aria-label":a.ariaLabel},on:{"update:mimeValue":function(t){return e.$set(a,"mimeValue",t)},"update:mime-value":function(t){return e.$set(a,"mimeValue",t)},"update:theming":function(t){return e.$emit("update:theming")}}})})),e._v(" "),t("CheckboxField",{attrs:{name:e.userThemingField.name,value:e.userThemingField.value,"default-value":e.userThemingField.defaultValue,"display-name":e.userThemingField.displayName,label:e.userThemingField.label,description:e.userThemingField.description,"data-admin-theming-setting-disable-user-theming":""},on:{"update:theming":function(t){return e.$emit("update:theming")}}}),e._v(" "),e.canThemeIcons?e._e():t("a",{attrs:{href:e.docUrlIcons,rel:"noreferrer noopener"}},[t("em",[e._v(e._s(e.t("theming","Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color.")))])])],2)])],1)}),[],!1,null,"4f7ac635",null).exports;i.default.prototype.OC=OC,i.default.prototype.t=t;const ve=new(i.default.extend(fe));ve.$mount("#admin-theming"),ve.$on("update:theming",(()=>{[...document.head.querySelectorAll("link.theme")].forEach((e=>{const t=new URL(e.href);t.searchParams.set("v",Date.now());const a=e.cloneNode();a.href=t.toString(),a.onload=()=>e.remove(),document.head.append(a)}))}))},27247:(e,t,a)=>{a.d(t,{Z:()=>m});var n=a(87537),i=a.n(n),r=a(23645),o=a.n(r),l=a(61667),s=a.n(l),d=new URL(a(92770),a.b),u=o()(i()),c=s()(d);u.push([e.id,".admin-theming[data-v-4f7ac635],.admin-theming-advanced[data-v-4f7ac635]{display:flex;flex-direction:column;gap:8px 0}.admin-theming__preview[data-v-4f7ac635]{width:230px;height:140px;background-size:cover;background-position:center;text-align:center;margin-top:10px;background-color:var(--color-primary-default, #0082c9);background-image:var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)))}.admin-theming__preview-logo[data-v-4f7ac635]{width:20%;height:20%;margin-top:20px;display:inline-block;background-size:contain;background-position:center;background-repeat:no-repeat;background-image:var(--image-logo, url("+c+"))}","",{version:3,sources:["webpack://./apps/theming/src/AdminTheming.vue"],names:[],mappings:"AACA,yEAEC,YAAA,CACA,qBAAA,CACA,SAAA,CAIA,yCACC,WAAA,CACA,YAAA,CACA,qBAAA,CACA,0BAAA,CACA,iBAAA,CACA,eAAA,CAIA,sDAAA,CAKA,iIAAA,CAEA,8CACC,SAAA,CACA,UAAA,CACA,eAAA,CACA,oBAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,2EAAA",sourcesContent:["\n.admin-theming,\n.admin-theming-advanced {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px 0;\n}\n\n.admin-theming {\n\t&__preview {\n\t\twidth: 230px;\n\t\theight: 140px;\n\t\tbackground-size: cover;\n\t\tbackground-position: center;\n\t\ttext-align: center;\n\t\tmargin-top: 10px;\n\t\t/* This is basically https://github.com/nextcloud/server/blob/master/core/css/guest.css\n\t\t But without the user variables. That way the admin can preview the render as guest*/\n\t\t/* As guest, there is no user color color-background-plain */\n\t\tbackground-color: var(--color-primary-default, #0082c9);\n\t\t/* As guest, there is no user background (--image-background)\n\t\t1. Empty background if defined\n\t\t2. Else default background\n\t\t3. Finally default gradient (should not happened, the background is always defined anyway) */\n\t\tbackground-image: var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)));\n\n\t\t&-logo {\n\t\t\twidth: 20%;\n\t\t\theight: 20%;\n\t\t\tmargin-top: 20px;\n\t\t\tdisplay: inline-block;\n\t\t\tbackground-size: contain;\n\t\t\tbackground-position: center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-image: var(--image-logo, url('../../../core/img/logo/logo.svg'));\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const m=u},17083:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(87537),i=a.n(n),r=a(23645),o=a.n(r)()(i());o.push([e.id,".field[data-v-17145f08]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-17145f08]{display:flex;gap:0 4px}.field__description[data-v-17145f08]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/shared/field.scss","webpack://./apps/theming/src/components/admin/CheckboxField.vue"],names:[],mappings:"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCzBD,qCACC,mCAAA",sourcesContent:["/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n.field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px 0;\n\n\t&__row {\n\t\tdisplay: flex;\n\t\tgap: 0 4px;\n\t}\n}\n","\n@import './shared/field.scss';\n\n.field {\n\t&__description {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n"],sourceRoot:""}]);const l=o},3598:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(87537),i=a.n(n),r=a(23645),o=a.n(r)()(i());o.push([e.id,'.field[data-v-73de0887]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-73de0887]{display:flex;gap:0 4px}.field__button[data-v-73de0887]{width:230px !important;border-radius:var(--border-radius-large) !important;background-color:var(--color-primary-default) !important}.field__button[data-v-73de0887]:hover::after{background-color:#fff;content:"";position:absolute;width:100%;height:100%;opacity:.2;filter:var(--primary-invert-if-bright)}.field__button[data-v-73de0887] *{z-index:1}',"",{version:3,sources:["webpack://./apps/theming/src/components/admin/shared/field.scss","webpack://./apps/theming/src/components/admin/ColorPickerField.vue"],names:[],mappings:"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCxBD,gCACC,sBAAA,CACA,mDAAA,CACA,wDAAA,CAIA,6CACC,qBAAA,CACA,UAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,sCAAA,CAID,kCACC,SAAA",sourcesContent:["/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n.field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px 0;\n\n\t&__row {\n\t\tdisplay: flex;\n\t\tgap: 0 4px;\n\t}\n}\n","\n@import './shared/field.scss';\n\n.field {\n\t// Override default NcButton styles\n\t&__button {\n\t\twidth: 230px !important;\n\t\tborder-radius: var(--border-radius-large) !important;\n\t\tbackground-color: var(--color-primary-default) !important;\n\n\t\t// emulated hover state because it would not make sense\n\t\t// to create a dedicated global variable for the color-primary-default\n\t\t&:hover::after {\n\t\t\tbackground-color: white;\n\t\t\tcontent: \"\";\n\t\t\tposition: absolute;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\topacity: .2;\n\t\t\tfilter: var(--primary-invert-if-bright);\n\t\t}\n\n\t\t// Above the ::after\n\t\t&::v-deep * {\n\t\t\tz-index: 1;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const l=o},78169:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(87537),i=a.n(n),r=a(23645),o=a.n(r)()(i());o.push([e.id,".field[data-v-3d620660]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-3d620660]{display:flex;gap:0 4px}.field__loading-icon[data-v-3d620660]{width:44px;height:44px}.field__preview[data-v-3d620660]{width:70px;height:70px;background-size:contain;background-position:center;background-repeat:no-repeat;margin:10px 0}.field__preview--logoheader[data-v-3d620660]{background-image:var(--image-logoheader)}.field__preview--favicon[data-v-3d620660]{background-image:var(--image-favicon)}input[type=file][data-v-3d620660]{display:none}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/shared/field.scss","webpack://./apps/theming/src/components/admin/FileInputField.vue"],names:[],mappings:"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCzBD,sCACC,UAAA,CACA,WAAA,CAGD,iCACC,UAAA,CACA,WAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,aAAA,CAEA,6CACC,wCAAA,CAGD,0CACC,qCAAA,CAKH,kCACC,YAAA",sourcesContent:["/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n.field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px 0;\n\n\t&__row {\n\t\tdisplay: flex;\n\t\tgap: 0 4px;\n\t}\n}\n","\n@import './shared/field.scss';\n\n.field {\n\t&__loading-icon {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&__preview {\n\t\twidth: 70px;\n\t\theight: 70px;\n\t\tbackground-size: contain;\n\t\tbackground-position: center;\n\t\tbackground-repeat: no-repeat;\n\t\tmargin: 10px 0;\n\n\t\t&--logoheader {\n\t\t\tbackground-image: var(--image-logoheader);\n\t\t}\n\n\t\t&--favicon {\n\t\t\tbackground-image: var(--image-favicon);\n\t\t}\n\t}\n}\n\ninput[type=\"file\"] {\n\tdisplay: none;\n}\n"],sourceRoot:""}]);const l=o},75012:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(87537),i=a.n(n),r=a(23645),o=a.n(r)()(i());o.push([e.id,".field[data-v-21244e1d]{max-width:400px}","",{version:3,sources:["webpack://./apps/theming/src/components/admin/TextField.vue"],names:[],mappings:"AACA,wBACC,eAAA",sourcesContent:["\n.field {\n\tmax-width: 400px;\n}\n"],sourceRoot:""}]);const l=o},92770:e=>{e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU2IiBoZWlnaHQ9IjEyOCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjU2IDEyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJtMTI4IDdjLTI1Ljg3MSAwLTQ3LjgxNyAxNy40ODUtNTQuNzEzIDQxLjIwOS01Ljk3OTUtMTIuNDYxLTE4LjY0Mi0yMS4yMDktMzMuMjg3LTIxLjIwOS0yMC4zMDQgMC0zNyAxNi42OTYtMzcgMzdzMTYuNjk2IDM3IDM3IDM3YzE0LjY0NSAwIDI3LjMwOC04Ljc0ODEgMzMuMjg3LTIxLjIwOSA2Ljg5NTcgMjMuNzI0IDI4Ljg0MiA0MS4yMDkgNTQuNzEzIDQxLjIwOXM0Ny44MTctMTcuNDg1IDU0LjcxMy00MS4yMDljNS45Nzk1IDEyLjQ2MSAxOC42NDIgMjEuMjA5IDMzLjI4NyAyMS4yMDkgMjAuMzA0IDAgMzctMTYuNjk2IDM3LTM3cy0xNi42OTYtMzctMzctMzdjLTE0LjY0NSAwLTI3LjMwOCA4Ljc0ODEtMzMuMjg3IDIxLjIwOS02Ljg5NTctMjMuNzI0LTI4Ljg0Mi00MS4yMDktNTQuNzEzLTQxLjIwOXptMCAyMmMxOS40NiAwIDM1IDE1LjU0IDM1IDM1cy0xNS41NCAzNS0zNSAzNS0zNS0xNS41NC0zNS0zNSAxNS41NC0zNSAzNS0zNXptLTg4IDIwYzguNDE0NiAwIDE1IDYuNTg1NCAxNSAxNXMtNi41ODU0IDE1LTE1IDE1LTE1LTYuNTg1NC0xNS0xNSA2LjU4NTQtMTUgMTUtMTV6bTE3NiAwYzguNDE0NiAwIDE1IDYuNTg1NCAxNSAxNXMtNi41ODU0IDE1LTE1IDE1LTE1LTYuNTg1NC0xNS0xNSA2LjU4NTQtMTUgMTUtMTV6IiBjb2xvcj0iIzAwMDAwMCIgZmlsbD0iI2ZmZiIgc3R5bGU9Ii1pbmtzY2FwZS1zdHJva2U6bm9uZSIvPjwvc3ZnPgo="}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={id:e,loaded:!1,exports:{}};return a[e].call(r.exports,r,r.exports,i),r.loaded=!0,r.exports}i.m=a,e=[],i.O=(t,a,n,r)=>{if(!a){var o=1/0;for(u=0;u<e.length;u++){a=e[u][0],n=e[u][1],r=e[u][2];for(var l=!0,s=0;s<a.length;s++)(!1&r||o>=r)&&Object.keys(i.O).every((e=>i.O[e](a[s])))?a.splice(s--,1):(l=!1,r<o&&(o=r));if(l){e.splice(u--,1);var d=n();void 0!==d&&(t=d)}}return t}r=r||0;for(var u=e.length;u>0&&e[u-1][2]>r;u--)e[u]=e[u-1];e[u]=[a,n,r]},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var a in t)i.o(t,a)&&!i.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),i.j=5544,(()=>{i.b=document.baseURI||self.location.href;var e={5544:0};i.O.j=t=>0===e[t];var t=(t,a)=>{var n,r,o=a[0],l=a[1],s=a[2],d=0;if(o.some((t=>0!==e[t]))){for(n in l)i.o(l,n)&&(i.m[n]=l[n]);if(s)var u=s(i)}for(t&&t(a);d<o.length;d++)r=o[d],i.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return i.O(u)},a=self.webpackChunknextcloud=self.webpackChunknextcloud||[];a.forEach(t.bind(null,0)),a.push=t.bind(null,a.push.bind(a))})(),i.nc=void 0;var r=i.O(void 0,[7874],(()=>i(62786)));r=i.O(r)})();
+//# sourceMappingURL=theming-admin-theming.js.map?v=476f9df93b30a4b3e447 \ No newline at end of file
diff --git a/dist/theming-admin-theming.js.map b/dist/theming-admin-theming.js.map
index 0d4244a483b..8c96508c46a 100644
--- a/dist/theming-admin-theming.js.map
+++ b/dist/theming-admin-theming.js.map
@@ -1 +1 @@
-{"version":3,"file":"theming-admin-theming.js?v=cdb642bf665b85834430","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/theming/src/mixins/admin/FieldMixin.js","webpack:///nextcloud/apps/theming/src/mixins/admin/TextValueMixin.js","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue","webpack://nextcloud/./apps/theming/src/components/admin/CheckboxField.vue?c5ca","webpack://nextcloud/./apps/theming/src/components/admin/CheckboxField.vue?8981","webpack://nextcloud/./apps/theming/src/components/admin/CheckboxField.vue?f479","webpack://nextcloud/./apps/theming/src/components/admin/ColorPickerField.vue?fdaf","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/components/admin/ColorPickerField.vue?40be","webpack://nextcloud/./apps/theming/src/components/admin/ColorPickerField.vue?977d","webpack://nextcloud/./apps/theming/src/components/admin/FileInputField.vue?2d6f","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/components/admin/FileInputField.vue?fcb2","webpack://nextcloud/./apps/theming/src/components/admin/FileInputField.vue?4d24","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue","webpack://nextcloud/./apps/theming/src/components/admin/TextField.vue?2236","webpack://nextcloud/./apps/theming/src/components/admin/TextField.vue?c7b6","webpack://nextcloud/./apps/theming/src/components/admin/TextField.vue?e6c1","webpack:///nextcloud/apps/theming/src/AdminTheming.vue","webpack:///nextcloud/apps/theming/src/AdminTheming.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/AdminTheming.vue?8b95","webpack://nextcloud/./apps/theming/src/AdminTheming.vue?6138","webpack://nextcloud/./apps/theming/src/AdminTheming.vue?e575","webpack:///nextcloud/apps/theming/src/admin-settings.js","webpack:///nextcloud/apps/theming/src/helpers/refreshStyles.js","webpack:///nextcloud/apps/theming/src/AdminTheming.vue?vue&type=style&index=0&id=4f7ac635&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue?vue&type=style&index=0&id=17145f08&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue?vue&type=style&index=0&id=105820ba&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue?vue&type=style&index=0&id=3d620660&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue?vue&type=style&index=0&id=21244e1d&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","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/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (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((key) => (__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 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst styleRefreshFields = [\n\t'color',\n\t'logo',\n\t'background',\n\t'logoheader',\n\t'favicon',\n\t'disable-user-theming',\n]\n\nexport default {\n\temits: [\n\t\t'update:theming',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowSuccess: false,\n\t\t\terrorMessage: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tid() {\n\t\t\treturn `admin-theming-${this.name}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\treset() {\n\t\t\tthis.showSuccess = false\n\t\t\tthis.errorMessage = ''\n\t\t},\n\n\t\thandleSuccess() {\n\t\t\tthis.showSuccess = true\n\t\t\tsetTimeout(() => { this.showSuccess = false }, 2000)\n\t\t\tif (styleRefreshFields.includes(this.name)) {\n\t\t\t\tthis.$emit('update:theming')\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\nimport FieldMixin from './FieldMixin.js'\n\nexport default {\n\tmixins: [\n\t\tFieldMixin,\n\t],\n\n\twatch: {\n\t\tvalue(value) {\n\t\t\tthis.localValue = value\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tlocalValue: this.value,\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync save() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/updateStylesheet')\n\t\t\t// Convert boolean to string as server expects string value\n\t\t\tconst valueToPost = this.localValue === true ? 'yes' : this.localValue === false ? 'no' : this.localValue\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.name,\n\t\t\t\t\tvalue: valueToPost,\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:value', this.localValue)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\n\t\tasync undo() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/undoChanges')\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.name,\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:value', this.defaultValue)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\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!./CheckboxField.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!./CheckboxField.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<div class=\"field\">\n\t\t<label :for=\"id\">{{ displayName }}</label>\n\t\t<div class=\"field__row\">\n\t\t\t<NcCheckboxRadioSwitch type=\"switch\"\n\t\t\t\t:id=\"id\"\n\t\t\t\t:checked.sync=\"localValue\"\n\t\t\t\t@update:checked=\"save\">\n\t\t\t\t{{ label }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</div>\n\n\t\t<p class=\"field__description\">{{ description }}</p>\n\n\t\t<NcNoteCard v-if=\"errorMessage\"\n\t\t\ttype=\"error\"\n\t\t\t:show-alert=\"true\">\n\t\t\t<p>{{ errorMessage }}</p>\n\t\t</NcNoteCard>\n\t</div>\n</template>\n\n<script>\nimport {\n\tNcCheckboxRadioSwitch,\n\tNcNoteCard,\n} from '@nextcloud/vue'\n\nimport TextValueMixin from '../../mixins/admin/TextValueMixin.js'\n\nexport default {\n\tname: 'CheckboxField',\n\n\tcomponents: {\n\t\tNcCheckboxRadioSwitch,\n\t\tNcNoteCard,\n\t},\n\n\tmixins: [\n\t\tTextValueMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultValue: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\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\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './shared/field.scss';\n\n.field {\n\t&__description {\n\t\tcolor: var(--color-text-maxcontrast);\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!./CheckboxField.vue?vue&type=style&index=0&id=17145f08&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CheckboxField.vue?vue&type=style&index=0&id=17145f08&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CheckboxField.vue?vue&type=template&id=17145f08&scoped=true&\"\nimport script from \"./CheckboxField.vue?vue&type=script&lang=js&\"\nexport * from \"./CheckboxField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CheckboxField.vue?vue&type=style&index=0&id=17145f08&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"17145f08\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"field\"},[_c('label',{attrs:{\"for\":_vm.id}},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),_c('div',{staticClass:\"field__row\"},[_c('NcCheckboxRadioSwitch',{attrs:{\"type\":\"switch\",\"id\":_vm.id,\"checked\":_vm.localValue},on:{\"update:checked\":[function($event){_vm.localValue=$event},_vm.save]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.label)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('p',{staticClass:\"field__description\"},[_vm._v(_vm._s(_vm.description))]),_vm._v(\" \"),(_vm.errorMessage)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"field\"},[_c('label',{attrs:{\"for\":_vm.id}},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),_c('div',{staticClass:\"field__row\"},[_c('NcColorPicker',{attrs:{\"value\":_vm.localValue,\"advanced-fields\":true},on:{\"update:value\":[function($event){_vm.localValue=$event},_vm.debounceSave]}},[_c('NcButton',{staticClass:\"field__button\",attrs:{\"type\":\"primary\",\"id\":_vm.id,\"aria-label\":_vm.t('theming', 'Select a custom color'),\"data-admin-theming-setting-primary-color-picker\":\"\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.value)+\"\\n\\t\\t\\t\")])],1),_vm._v(\" \"),(_vm.value !== _vm.defaultValue)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('theming', 'Reset to default'),\"data-admin-theming-setting-primary-color-reset\":\"\"},on:{\"click\":_vm.undo},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Undo',{attrs:{\"size\":20}})]},proxy:true}],null,false,33666776)}):_vm._e()],1),_vm._v(\" \"),(_vm.errorMessage)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<div class=\"field\">\n\t\t<label :for=\"id\">{{ displayName }}</label>\n\t\t<div class=\"field__row\">\n\t\t\t<NcColorPicker :value.sync=\"localValue\"\n\t\t\t\t:advanced-fields=\"true\"\n\t\t\t\t@update:value=\"debounceSave\">\n\t\t\t\t<NcButton class=\"field__button\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t:id=\"id\"\n\t\t\t\t\t:aria-label=\"t('theming', 'Select a custom color')\"\n\t\t\t\t\tdata-admin-theming-setting-primary-color-picker>\n\t\t\t\t\t{{ value }}\n\t\t\t\t</NcButton>\n\t\t\t</NcColorPicker>\n\t\t\t<NcButton v-if=\"value !== defaultValue\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:aria-label=\"t('theming', 'Reset to default')\"\n\t\t\t\tdata-admin-theming-setting-primary-color-reset\n\t\t\t\t@click=\"undo\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Undo :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\n\t\t<NcNoteCard v-if=\"errorMessage\"\n\t\t\ttype=\"error\"\n\t\t\t:show-alert=\"true\">\n\t\t\t<p>{{ errorMessage }}</p>\n\t\t</NcNoteCard>\n\t</div>\n</template>\n\n<script>\nimport { debounce } from 'debounce'\nimport {\n\tNcButton,\n\tNcColorPicker,\n\tNcNoteCard,\n} from '@nextcloud/vue'\nimport Undo from 'vue-material-design-icons/UndoVariant.vue'\n\nimport TextValueMixin from '../../mixins/admin/TextValueMixin.js'\n\nexport default {\n\tname: 'ColorPickerField',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tNcColorPicker,\n\t\tNcNoteCard,\n\t\tUndo,\n\t},\n\n\tmixins: [\n\t\tTextValueMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tmethods: {\n\t\tdebounceSave: debounce(async function() {\n\t\t\tawait this.save()\n\t\t}, 200),\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './shared/field.scss';\n\n.field {\n\t// Override default NcButton styles\n\t&__button {\n\t\twidth: 230px !important;\n\t\tborder-radius: var(--border-radius-large) !important;\n\t\tbackground-color: var(--color-primary-default) !important;\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-primary-element-default-hover) !important;\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!./ColorPickerField.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!./ColorPickerField.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!./ColorPickerField.vue?vue&type=style&index=0&id=105820ba&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ColorPickerField.vue?vue&type=style&index=0&id=105820ba&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ColorPickerField.vue?vue&type=template&id=105820ba&scoped=true&\"\nimport script from \"./ColorPickerField.vue?vue&type=script&lang=js&\"\nexport * from \"./ColorPickerField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ColorPickerField.vue?vue&type=style&index=0&id=105820ba&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"105820ba\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"field\"},[_c('label',{attrs:{\"for\":_vm.id}},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),_c('div',{staticClass:\"field__row\"},[_c('NcButton',{attrs:{\"type\":\"secondary\",\"id\":_vm.id,\"aria-label\":_vm.ariaLabel,\"data-admin-theming-setting-file-picker\":\"\"},on:{\"click\":_vm.activateLocalFilePicker},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Upload',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('theming', 'Upload'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.showReset)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('theming', 'Reset to default'),\"data-admin-theming-setting-file-reset\":\"\"},on:{\"click\":_vm.undo},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Undo',{attrs:{\"size\":20}})]},proxy:true}],null,false,33666776)}):_vm._e(),_vm._v(\" \"),(_vm.showRemove)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('theming', 'Remove background image'),\"data-admin-theming-setting-file-remove\":\"\"},on:{\"click\":_vm.removeBackground},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Delete',{attrs:{\"size\":20}})]},proxy:true}],null,false,2705356561)}):_vm._e(),_vm._v(\" \"),(_vm.showLoading)?_c('NcLoadingIcon',{staticClass:\"field__loading-icon\",attrs:{\"size\":20}}):_vm._e()],1),_vm._v(\" \"),((_vm.name === 'logoheader' || _vm.name === 'favicon') && _vm.mimeValue !== _vm.defaultMimeValue)?_c('div',{staticClass:\"field__preview\",class:{\n\t\t\t'field__preview--logoheader': _vm.name === 'logoheader',\n\t\t\t'field__preview--favicon': _vm.name === 'favicon',\n\t\t}}):_vm._e(),_vm._v(\" \"),(_vm.errorMessage)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e(),_vm._v(\" \"),_c('input',{ref:\"input\",attrs:{\"type\":\"file\"},on:{\"change\":_vm.onChange}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<div class=\"field\">\n\t\t<label :for=\"id\">{{ displayName }}</label>\n\t\t<div class=\"field__row\">\n\t\t\t<NcButton type=\"secondary\"\n\t\t\t\t:id=\"id\"\n\t\t\t\t:aria-label=\"ariaLabel\"\n\t\t\t\tdata-admin-theming-setting-file-picker\n\t\t\t\t@click=\"activateLocalFilePicker\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Upload :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('theming', 'Upload') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"showReset\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:aria-label=\"t('theming', 'Reset to default')\"\n\t\t\t\tdata-admin-theming-setting-file-reset\n\t\t\t\t@click=\"undo\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Undo :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"showRemove\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:aria-label=\"t('theming', 'Remove background image')\"\n\t\t\t\tdata-admin-theming-setting-file-remove\n\t\t\t\t@click=\"removeBackground\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Delete :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcLoadingIcon v-if=\"showLoading\"\n\t\t\t\tclass=\"field__loading-icon\"\n\t\t\t\t:size=\"20\" />\n\t\t</div>\n\n\t\t<div v-if=\"(name === 'logoheader' || name === 'favicon') && mimeValue !== defaultMimeValue\"\n\t\t\tclass=\"field__preview\"\n\t\t\t:class=\"{\n\t\t\t\t'field__preview--logoheader': name === 'logoheader',\n\t\t\t\t'field__preview--favicon': name === 'favicon',\n\t\t\t}\" />\n\n\t\t<NcNoteCard v-if=\"errorMessage\"\n\t\t\ttype=\"error\"\n\t\t\t:show-alert=\"true\">\n\t\t\t<p>{{ errorMessage }}</p>\n\t\t</NcNoteCard>\n\n\t\t<input ref=\"input\"\n\t\t\ttype=\"file\"\n\t\t\t@change=\"onChange\">\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\nimport {\n\tNcButton,\n\tNcLoadingIcon,\n\tNcNoteCard,\n} from '@nextcloud/vue'\nimport Delete from 'vue-material-design-icons/Delete.vue'\nimport Undo from 'vue-material-design-icons/UndoVariant.vue'\nimport Upload from 'vue-material-design-icons/Upload.vue'\n\nimport FieldMixin from '../../mixins/admin/FieldMixin.js'\n\nexport default {\n\tname: 'FileInputField',\n\n\tcomponents: {\n\t\tDelete,\n\t\tNcButton,\n\t\tNcLoadingIcon,\n\t\tNcNoteCard,\n\t\tUndo,\n\t\tUpload,\n\t},\n\n\tmixins: [\n\t\tFieldMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmimeName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmimeValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultMimeValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tshowLoading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tshowReset() {\n\t\t\treturn this.mimeValue !== this.defaultMimeValue\n\t\t},\n\n\t\tshowRemove() {\n\t\t\tif (this.name === 'background') {\n\t\t\t\tif (this.mimeValue.startsWith('image/')) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\tif (this.mimeValue === this.defaultMimeValue) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t},\n\n\tmethods: {\n\t\tactivateLocalFilePicker() {\n\t\t\tthis.reset()\n\t\t\t// Set to null so that selecting the same file will trigger the change event\n\t\t\tthis.$refs.input.value = null\n\t\t\tthis.$refs.input.click()\n\t\t},\n\n\t\tasync onChange(e) {\n\t\t\tconst file = e.target.files[0]\n\n\t\t\tconst formData = new FormData()\n\t\t\tformData.append('key', this.name)\n\t\t\tformData.append('image', file)\n\n\t\t\tconst url = generateUrl('/apps/theming/ajax/uploadImage')\n\t\t\ttry {\n\t\t\t\tthis.showLoading = true\n\t\t\t\tawait axios.post(url, formData)\n\t\t\t\tthis.showLoading = false\n\t\t\t\tthis.$emit('update:mime-value', file.type)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.showLoading = false\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\n\t\tasync undo() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/undoChanges')\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.mimeName,\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:mime-value', this.defaultMimeValue)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\n\t\tasync removeBackground() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/updateStylesheet')\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.mimeName,\n\t\t\t\t\tvalue: 'backgroundColor',\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:mime-value', 'backgroundColor')\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './shared/field.scss';\n\n.field {\n\t&__loading-icon {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&__preview {\n\t\twidth: 70px;\n\t\theight: 70px;\n\t\tbackground-size: contain;\n\t\tbackground-position: center;\n\t\tbackground-repeat: no-repeat;\n\t\tmargin: 10px 0;\n\n\t\t&--logoheader {\n\t\t\tbackground-image: var(--image-logoheader);\n\t\t}\n\n\t\t&--favicon {\n\t\t\tbackground-image: var(--image-favicon);\n\t\t}\n\t}\n}\n\ninput[type=\"file\"] {\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!./FileInputField.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!./FileInputField.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!./FileInputField.vue?vue&type=style&index=0&id=3d620660&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileInputField.vue?vue&type=style&index=0&id=3d620660&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileInputField.vue?vue&type=template&id=3d620660&scoped=true&\"\nimport script from \"./FileInputField.vue?vue&type=script&lang=js&\"\nexport * from \"./FileInputField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FileInputField.vue?vue&type=style&index=0&id=3d620660&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3d620660\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextField.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!./TextField.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<div class=\"field\">\n\t\t<NcTextField :value.sync=\"localValue\"\n\t\t\t:label=\"displayName\"\n\t\t\t:label-visible=\"true\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t:type=\"type\"\n\t\t\t:maxlength=\"maxlength\"\n\t\t\t:spellcheck=\"false\"\n\t\t\t:success=\"showSuccess\"\n\t\t\t:error=\"Boolean(errorMessage)\"\n\t\t\t:helper-text=\"errorMessage\"\n\t\t\t:show-trailing-button=\"value !== defaultValue\"\n\t\t\ttrailing-button-icon=\"undo\"\n\t\t\t@trailing-button-click=\"undo\"\n\t\t\t@keydown.enter=\"save\"\n\t\t\t@blur=\"save\" />\n\t</div>\n</template>\n\n<script>\nimport { NcTextField } from '@nextcloud/vue'\n\nimport TextValueMixin from '../../mixins/admin/TextValueMixin.js'\n\nexport default {\n\tname: 'TextField',\n\n\tcomponents: {\n\t\tNcTextField,\n\t},\n\n\tmixins: [\n\t\tTextValueMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultValue: {\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\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmaxlength: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.field {\n\tmax-width: 400px;\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!./TextField.vue?vue&type=style&index=0&id=21244e1d&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextField.vue?vue&type=style&index=0&id=21244e1d&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TextField.vue?vue&type=template&id=21244e1d&scoped=true&\"\nimport script from \"./TextField.vue?vue&type=script&lang=js&\"\nexport * from \"./TextField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TextField.vue?vue&type=style&index=0&id=21244e1d&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"21244e1d\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"field\"},[_c('NcTextField',{attrs:{\"value\":_vm.localValue,\"label\":_vm.displayName,\"label-visible\":true,\"placeholder\":_vm.placeholder,\"type\":_vm.type,\"maxlength\":_vm.maxlength,\"spellcheck\":false,\"success\":_vm.showSuccess,\"error\":Boolean(_vm.errorMessage),\"helper-text\":_vm.errorMessage,\"show-trailing-button\":_vm.value !== _vm.defaultValue,\"trailing-button-icon\":\"undo\"},on:{\"update:value\":function($event){_vm.localValue=$event},\"trailing-button-click\":_vm.undo,\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.save.apply(null, arguments)},\"blur\":_vm.save}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<section>\n\t\t<NcSettingsSection :title=\"t('theming', 'Theming')\"\n\t\t\t:description=\"t('theming', 'Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users.')\"\n\t\t\t:doc-url=\"docUrl\"\n\t\t\tdata-admin-theming-settings>\n\t\t\t<div class=\"admin-theming\">\n\t\t\t\t<NcNoteCard v-if=\"!isThemable\"\n\t\t\t\t\ttype=\"error\"\n\t\t\t\t\t:show-alert=\"true\">\n\t\t\t\t\t<p>{{ notThemableErrorMessage }}</p>\n\t\t\t\t</NcNoteCard>\n\n\t\t\t\t<!-- Name, web link, slogan... fields -->\n\t\t\t\t<TextField v-for=\"field in textFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:data-admin-theming-setting-field=\"field.name\"\n\t\t\t\t\t:default-value=\"field.defaultValue\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:maxlength=\"field.maxlength\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t:placeholder=\"field.placeholder\"\n\t\t\t\t\t:type=\"field.type\"\n\t\t\t\t\t:value.sync=\"field.value\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\n\t\t\t\t<!-- Primary color picker -->\n\t\t\t\t<ColorPickerField :name=\"colorPickerField.name\"\n\t\t\t\t\t:default-value=\"colorPickerField.defaultValue\"\n\t\t\t\t\t:display-name=\"colorPickerField.displayName\"\n\t\t\t\t\t:value.sync=\"colorPickerField.value\"\n\t\t\t\t\tdata-admin-theming-setting-primary-color\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\n\t\t\t\t<!-- Default background picker -->\n\t\t\t\t<FileInputField v-for=\"field in fileInputFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:aria-label=\"field.ariaLabel\"\n\t\t\t\t\t:data-admin-theming-setting-file=\"field.name\"\n\t\t\t\t\t:default-mime-value=\"field.defaultMimeValue\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:mime-name=\"field.mimeName\"\n\t\t\t\t\t:mime-value.sync=\"field.mimeValue\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<div class=\"admin-theming__preview\" data-admin-theming-preview>\n\t\t\t\t\t<div class=\"admin-theming__preview-logo\" data-admin-theming-preview-logo />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</NcSettingsSection>\n\t\t<NcSettingsSection :title=\"t('theming', 'Advanced options')\">\n\t\t\t<div class=\"admin-theming-advanced\">\n\t\t\t\t<TextField v-for=\"field in advancedTextFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t:value.sync=\"field.value\"\n\t\t\t\t\t:default-value=\"field.defaultValue\"\n\t\t\t\t\t:type=\"field.type\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:placeholder=\"field.placeholder\"\n\t\t\t\t\t:maxlength=\"field.maxlength\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<FileInputField v-for=\"field in advancedFileInputFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t:mime-name=\"field.mimeName\"\n\t\t\t\t\t:mime-value.sync=\"field.mimeValue\"\n\t\t\t\t\t:default-mime-value=\"field.defaultMimeValue\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:aria-label=\"field.ariaLabel\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<CheckboxField :name=\"userThemingField.name\"\n\t\t\t\t\t:value=\"userThemingField.value\"\n\t\t\t\t\t:default-value=\"userThemingField.defaultValue\"\n\t\t\t\t\t:display-name=\"userThemingField.displayName\"\n\t\t\t\t\t:label=\"userThemingField.label\"\n\t\t\t\t\t:description=\"userThemingField.description\"\n\t\t\t\t\tdata-admin-theming-setting-disable-user-theming\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<a v-if=\"!canThemeIcons\"\n\t\t\t\t\t:href=\"docUrlIcons\"\n\t\t\t\t\trel=\"noreferrer noopener\">\n\t\t\t\t\t<em>{{ t('theming', 'Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color.') }}</em>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</NcSettingsSection>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport {\n\tNcNoteCard,\n\tNcSettingsSection,\n} from '@nextcloud/vue'\nimport CheckboxField from './components/admin/CheckboxField.vue'\nimport ColorPickerField from './components/admin/ColorPickerField.vue'\nimport FileInputField from './components/admin/FileInputField.vue'\nimport TextField from './components/admin/TextField.vue'\n\nconst {\n\tbackgroundMime,\n\tcanThemeIcons,\n\tcolor,\n\tdocUrl,\n\tdocUrlIcons,\n\tfaviconMime,\n\tisThemable,\n\tlegalNoticeUrl,\n\tlogoheaderMime,\n\tlogoMime,\n\tname,\n\tnotThemableErrorMessage,\n\tprivacyPolicyUrl,\n\tslogan,\n\turl,\n\tuserThemingDisabled,\n} = loadState('theming', 'adminThemingParameters')\n\nconst textFields = [\n\t{\n\t\tname: 'name',\n\t\tvalue: name,\n\t\tdefaultValue: 'Nextcloud',\n\t\ttype: 'text',\n\t\tdisplayName: t('theming', 'Name'),\n\t\tplaceholder: t('theming', 'Name'),\n\t\tmaxlength: 250,\n\t},\n\t{\n\t\tname: 'url',\n\t\tvalue: url,\n\t\tdefaultValue: 'https://nextcloud.com',\n\t\ttype: 'url',\n\t\tdisplayName: t('theming', 'Web link'),\n\t\tplaceholder: 'https://…',\n\t\tmaxlength: 500,\n\t},\n\t{\n\t\tname: 'slogan',\n\t\tvalue: slogan,\n\t\tdefaultValue: t('theming', 'a safe home for all your data'),\n\t\ttype: 'text',\n\t\tdisplayName: t('theming', 'Slogan'),\n\t\tplaceholder: t('theming', 'Slogan'),\n\t\tmaxlength: 500,\n\t},\n]\n\nconst colorPickerField = {\n\tname: 'color',\n\tvalue: color,\n\tdefaultValue: '#0082c9',\n\tdisplayName: t('theming', 'Color'),\n}\n\nconst fileInputFields = [\n\t{\n\t\tname: 'logo',\n\t\tmimeName: 'logoMime',\n\t\tmimeValue: logoMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Logo'),\n\t\tariaLabel: t('theming', 'Upload new logo'),\n\t},\n\t{\n\t\tname: 'background',\n\t\tmimeName: 'backgroundMime',\n\t\tmimeValue: backgroundMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Background and login image'),\n\t\tariaLabel: t('theming', 'Upload new background and login image'),\n\t},\n]\n\nconst advancedTextFields = [\n\t{\n\t\tname: 'imprintUrl',\n\t\tvalue: legalNoticeUrl,\n\t\tdefaultValue: '',\n\t\ttype: 'url',\n\t\tdisplayName: t('theming', 'Legal notice link'),\n\t\tplaceholder: 'https://…',\n\t\tmaxlength: 500,\n\t},\n\t{\n\t\tname: 'privacyUrl',\n\t\tvalue: privacyPolicyUrl,\n\t\tdefaultValue: '',\n\t\ttype: 'url',\n\t\tdisplayName: t('theming', 'Privacy policy link'),\n\t\tplaceholder: 'https://…',\n\t\tmaxlength: 500,\n\t},\n]\n\nconst advancedFileInputFields = [\n\t{\n\t\tname: 'logoheader',\n\t\tmimeName: 'logoheaderMime',\n\t\tmimeValue: logoheaderMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Header logo'),\n\t\tariaLabel: t('theming', 'Upload new header logo'),\n\t},\n\t{\n\t\tname: 'favicon',\n\t\tmimeName: 'faviconMime',\n\t\tmimeValue: faviconMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Favicon'),\n\t\tariaLabel: t('theming', 'Upload new favicon'),\n\t},\n]\n\nconst userThemingField = {\n\tname: 'disable-user-theming',\n\tvalue: userThemingDisabled,\n\tdefaultValue: false,\n\tdisplayName: t('theming', 'User settings'),\n\tlabel: t('theming', 'Disable user theming'),\n\tdescription: t('theming', 'Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on.'),\n}\n\nexport default {\n\tname: 'AdminTheming',\n\n\tcomponents: {\n\t\tCheckboxField,\n\t\tColorPickerField,\n\t\tFileInputField,\n\t\tNcNoteCard,\n\t\tNcSettingsSection,\n\t\tTextField,\n\t},\n\n\temits: [\n\t\t'update:theming',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\ttextFields,\n\t\t\tcolorPickerField,\n\t\t\tfileInputFields,\n\t\t\tadvancedTextFields,\n\t\t\tadvancedFileInputFields,\n\t\t\tuserThemingField,\n\n\t\t\tcanThemeIcons,\n\t\t\tdocUrl,\n\t\t\tdocUrlIcons,\n\t\t\tisThemable,\n\t\t\tnotThemableErrorMessage,\n\t\t}\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.admin-theming,\n.admin-theming-advanced {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px 0;\n}\n\n.admin-theming {\n\t&__preview {\n\t\twidth: 230px;\n\t\theight: 140px;\n\t\tbackground-size: cover;\n\t\tbackground-position: center;\n\t\ttext-align: center;\n\t\tmargin-top: 10px;\n\t\t/* This is basically https://github.com/nextcloud/server/blob/master/core/css/guest.css\n\t\t But without the user variables. That way the admin can preview the render as guest*/\n\t\t/* As guest, there is no user color color-background-plain */\n\t\tbackground-color: var(--color-primary-default, #0082c9);\n\t\t/* As guest, there is no user background (--image-background)\n\t\t1. Empty background if defined\n\t\t2. Else default background\n\t\t3. Finally default gradient (should not happened, the background is always defined anyway) */\n\t\tbackground-image: var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)));\n\n\t\t&-logo {\n\t\t\twidth: 20%;\n\t\t\theight: 20%;\n\t\t\tmargin-top: 20px;\n\t\t\tdisplay: inline-block;\n\t\t\tbackground-size: contain;\n\t\t\tbackground-position: center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-image: var(--image-logo, url('../../../core/img/logo/logo.svg'));\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!./AdminTheming.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!./AdminTheming.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!./AdminTheming.vue?vue&type=style&index=0&id=4f7ac635&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminTheming.vue?vue&type=style&index=0&id=4f7ac635&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AdminTheming.vue?vue&type=template&id=4f7ac635&scoped=true&\"\nimport script from \"./AdminTheming.vue?vue&type=script&lang=js&\"\nexport * from \"./AdminTheming.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AdminTheming.vue?vue&type=style&index=0&id=4f7ac635&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f7ac635\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('NcSettingsSection',{attrs:{\"title\":_vm.t('theming', 'Theming'),\"description\":_vm.t('theming', 'Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users.'),\"doc-url\":_vm.docUrl,\"data-admin-theming-settings\":\"\"}},[_c('div',{staticClass:\"admin-theming\"},[(!_vm.isThemable)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.notThemableErrorMessage))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.textFields),function(field){return _c('TextField',{key:field.name,attrs:{\"data-admin-theming-setting-field\":field.name,\"default-value\":field.defaultValue,\"display-name\":field.displayName,\"maxlength\":field.maxlength,\"name\":field.name,\"placeholder\":field.placeholder,\"type\":field.type,\"value\":field.value},on:{\"update:value\":function($event){return _vm.$set(field, \"value\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_c('ColorPickerField',{attrs:{\"name\":_vm.colorPickerField.name,\"default-value\":_vm.colorPickerField.defaultValue,\"display-name\":_vm.colorPickerField.displayName,\"value\":_vm.colorPickerField.value,\"data-admin-theming-setting-primary-color\":\"\"},on:{\"update:value\":function($event){return _vm.$set(_vm.colorPickerField, \"value\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}}),_vm._v(\" \"),_vm._l((_vm.fileInputFields),function(field){return _c('FileInputField',{key:field.name,attrs:{\"aria-label\":field.ariaLabel,\"data-admin-theming-setting-file\":field.name,\"default-mime-value\":field.defaultMimeValue,\"display-name\":field.displayName,\"mime-name\":field.mimeName,\"mime-value\":field.mimeValue,\"name\":field.name},on:{\"update:mimeValue\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:mime-value\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_c('div',{staticClass:\"admin-theming__preview\",attrs:{\"data-admin-theming-preview\":\"\"}},[_c('div',{staticClass:\"admin-theming__preview-logo\",attrs:{\"data-admin-theming-preview-logo\":\"\"}})])],2)]),_vm._v(\" \"),_c('NcSettingsSection',{attrs:{\"title\":_vm.t('theming', 'Advanced options')}},[_c('div',{staticClass:\"admin-theming-advanced\"},[_vm._l((_vm.advancedTextFields),function(field){return _c('TextField',{key:field.name,attrs:{\"name\":field.name,\"value\":field.value,\"default-value\":field.defaultValue,\"type\":field.type,\"display-name\":field.displayName,\"placeholder\":field.placeholder,\"maxlength\":field.maxlength},on:{\"update:value\":function($event){return _vm.$set(field, \"value\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_vm._l((_vm.advancedFileInputFields),function(field){return _c('FileInputField',{key:field.name,attrs:{\"name\":field.name,\"mime-name\":field.mimeName,\"mime-value\":field.mimeValue,\"default-mime-value\":field.defaultMimeValue,\"display-name\":field.displayName,\"aria-label\":field.ariaLabel},on:{\"update:mimeValue\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:mime-value\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_c('CheckboxField',{attrs:{\"name\":_vm.userThemingField.name,\"value\":_vm.userThemingField.value,\"default-value\":_vm.userThemingField.defaultValue,\"display-name\":_vm.userThemingField.displayName,\"label\":_vm.userThemingField.label,\"description\":_vm.userThemingField.description,\"data-admin-theming-setting-disable-user-theming\":\"\"},on:{\"update:theming\":function($event){return _vm.$emit('update:theming')}}}),_vm._v(\" \"),(!_vm.canThemeIcons)?_c('a',{attrs:{\"href\":_vm.docUrlIcons,\"rel\":\"noreferrer noopener\"}},[_c('em',[_vm._v(_vm._s(_vm.t('theming', 'Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color.')))])]):_vm._e()],2)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport App from './AdminTheming.vue'\nimport { refreshStyles } from './helpers/refreshStyles.js'\n\nVue.prototype.OC = OC\nVue.prototype.t = t\n\nconst View = Vue.extend(App)\nconst theming = new View()\ntheming.$mount('#admin-theming')\ntheming.$on('update:theming', refreshStyles)\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const refreshStyles = () => {\n\t// Refresh server-side generated theming CSS\n\t[...document.head.querySelectorAll('link.theme')].forEach(theme => {\n\t\tconst url = new URL(theme.href)\n\t\turl.searchParams.set('v', Date.now())\n\t\tconst newTheme = theme.cloneNode()\n\t\tnewTheme.href = url.toString()\n\t\tnewTheme.onload = () => theme.remove()\n\t\tdocument.head.append(newTheme)\n\t})\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\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../../../core/img/logo/logo.svg\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".admin-theming[data-v-4f7ac635],.admin-theming-advanced[data-v-4f7ac635]{display:flex;flex-direction:column;gap:8px 0}.admin-theming__preview[data-v-4f7ac635]{width:230px;height:140px;background-size:cover;background-position:center;text-align:center;margin-top:10px;background-color:var(--color-primary-default, #0082c9);background-image:var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)))}.admin-theming__preview-logo[data-v-4f7ac635]{width:20%;height:20%;margin-top:20px;display:inline-block;background-size:contain;background-position:center;background-repeat:no-repeat;background-image:var(--image-logo, url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \"))}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/AdminTheming.vue\"],\"names\":[],\"mappings\":\"AACA,yEAEC,YAAA,CACA,qBAAA,CACA,SAAA,CAIA,yCACC,WAAA,CACA,YAAA,CACA,qBAAA,CACA,0BAAA,CACA,iBAAA,CACA,eAAA,CAIA,sDAAA,CAKA,iIAAA,CAEA,8CACC,SAAA,CACA,UAAA,CACA,eAAA,CACA,oBAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,2EAAA\",\"sourcesContent\":[\"\\n.admin-theming,\\n.admin-theming-advanced {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 8px 0;\\n}\\n\\n.admin-theming {\\n\\t&__preview {\\n\\t\\twidth: 230px;\\n\\t\\theight: 140px;\\n\\t\\tbackground-size: cover;\\n\\t\\tbackground-position: center;\\n\\t\\ttext-align: center;\\n\\t\\tmargin-top: 10px;\\n\\t\\t/* This is basically https://github.com/nextcloud/server/blob/master/core/css/guest.css\\n\\t\\t But without the user variables. That way the admin can preview the render as guest*/\\n\\t\\t/* As guest, there is no user color color-background-plain */\\n\\t\\tbackground-color: var(--color-primary-default, #0082c9);\\n\\t\\t/* As guest, there is no user background (--image-background)\\n\\t\\t1. Empty background if defined\\n\\t\\t2. Else default background\\n\\t\\t3. Finally default gradient (should not happened, the background is always defined anyway) */\\n\\t\\tbackground-image: var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)));\\n\\n\\t\\t&-logo {\\n\\t\\t\\twidth: 20%;\\n\\t\\t\\theight: 20%;\\n\\t\\t\\tmargin-top: 20px;\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\tbackground-size: contain;\\n\\t\\t\\tbackground-position: center;\\n\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t\\tbackground-image: var(--image-logo, url('../../../core/img/logo/logo.svg'));\\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, \".field[data-v-17145f08]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-17145f08]{display:flex;gap:0 4px}.field__description[data-v-17145f08]{color:var(--color-text-maxcontrast)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/shared/field.scss\",\"webpack://./apps/theming/src/components/admin/CheckboxField.vue\"],\"names\":[],\"mappings\":\"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCzBD,qCACC,mCAAA\",\"sourcesContent\":[\"/**\\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.com>\\n *\\n * @license AGPL-3.0-or-later\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n.field {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 4px 0;\\n\\n\\t&__row {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 4px;\\n\\t}\\n}\\n\",\"\\n@import './shared/field.scss';\\n\\n.field {\\n\\t&__description {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".field[data-v-105820ba]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-105820ba]{display:flex;gap:0 4px}.field__button[data-v-105820ba]{width:230px !important;border-radius:var(--border-radius-large) !important;background-color:var(--color-primary-default) !important}.field__button[data-v-105820ba]:hover{background-color:var(--color-primary-element-default-hover) !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/shared/field.scss\",\"webpack://./apps/theming/src/components/admin/ColorPickerField.vue\"],\"names\":[],\"mappings\":\"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCxBD,gCACC,sBAAA,CACA,mDAAA,CACA,wDAAA,CACA,sCACC,sEAAA\",\"sourcesContent\":[\"/**\\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.com>\\n *\\n * @license AGPL-3.0-or-later\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n.field {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 4px 0;\\n\\n\\t&__row {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 4px;\\n\\t}\\n}\\n\",\"\\n@import './shared/field.scss';\\n\\n.field {\\n\\t// Override default NcButton styles\\n\\t&__button {\\n\\t\\twidth: 230px !important;\\n\\t\\tborder-radius: var(--border-radius-large) !important;\\n\\t\\tbackground-color: var(--color-primary-default) !important;\\n\\t\\t&:hover {\\n\\t\\t\\tbackground-color: var(--color-primary-element-default-hover) !important;\\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, \".field[data-v-3d620660]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-3d620660]{display:flex;gap:0 4px}.field__loading-icon[data-v-3d620660]{width:44px;height:44px}.field__preview[data-v-3d620660]{width:70px;height:70px;background-size:contain;background-position:center;background-repeat:no-repeat;margin:10px 0}.field__preview--logoheader[data-v-3d620660]{background-image:var(--image-logoheader)}.field__preview--favicon[data-v-3d620660]{background-image:var(--image-favicon)}input[type=file][data-v-3d620660]{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/shared/field.scss\",\"webpack://./apps/theming/src/components/admin/FileInputField.vue\"],\"names\":[],\"mappings\":\"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCzBD,sCACC,UAAA,CACA,WAAA,CAGD,iCACC,UAAA,CACA,WAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,aAAA,CAEA,6CACC,wCAAA,CAGD,0CACC,qCAAA,CAKH,kCACC,YAAA\",\"sourcesContent\":[\"/**\\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.com>\\n *\\n * @license AGPL-3.0-or-later\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n.field {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 4px 0;\\n\\n\\t&__row {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 4px;\\n\\t}\\n}\\n\",\"\\n@import './shared/field.scss';\\n\\n.field {\\n\\t&__loading-icon {\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\t&__preview {\\n\\t\\twidth: 70px;\\n\\t\\theight: 70px;\\n\\t\\tbackground-size: contain;\\n\\t\\tbackground-position: center;\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\tmargin: 10px 0;\\n\\n\\t\\t&--logoheader {\\n\\t\\t\\tbackground-image: var(--image-logoheader);\\n\\t\\t}\\n\\n\\t\\t&--favicon {\\n\\t\\t\\tbackground-image: var(--image-favicon);\\n\\t\\t}\\n\\t}\\n}\\n\\ninput[type=\\\"file\\\"] {\\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, \".field[data-v-21244e1d]{max-width:400px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/TextField.vue\"],\"names\":[],\"mappings\":\"AACA,wBACC,eAAA\",\"sourcesContent\":[\"\\n.field {\\n\\tmax-width: 400px;\\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","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (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 = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 5544;","__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\t5544: 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 = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (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((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(5076)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","styleRefreshFields","emits","data","showSuccess","errorMessage","computed","id","concat","this","name","methods","reset","handleSuccess","setTimeout","includes","$emit","mixins","FieldMixin","watch","value","localValue","async","url","generateUrl","valueToPost","axios","setting","e","_e$response$data$data","response","message","defaultValue","_e$response$data$data2","components","NcCheckboxRadioSwitch","NcNoteCard","TextValueMixin","props","type","String","required","Boolean","displayName","label","description","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_c","_self","staticClass","attrs","_v","_s","on","$event","save","_e","NcButton","NcColorPicker","Undo","debounceSave","debounce","t","undo","scopedSlots","_u","key","fn","proxy","Delete","NcLoadingIcon","Upload","mimeName","mimeValue","defaultMimeValue","ariaLabel","showLoading","showReset","showRemove","startsWith","activateLocalFilePicker","$refs","input","click","file","target","files","formData","FormData","append","_e$response$data$data3","removeBackground","class","ref","onChange","NcTextField","placeholder","maxlength","Number","indexOf","_k","keyCode","apply","arguments","backgroundMime","canThemeIcons","color","docUrl","docUrlIcons","faviconMime","isThemable","legalNoticeUrl","logoheaderMime","logoMime","notThemableErrorMessage","privacyPolicyUrl","slogan","userThemingDisabled","loadState","textFields","colorPickerField","fileInputFields","advancedTextFields","advancedFileInputFields","userThemingField","CheckboxField","ColorPickerField","FileInputField","NcSettingsSection","TextField","_l","field","$set","Vue","OC","theming","App","$mount","$on","refreshStyles","document","head","querySelectorAll","forEach","theme","URL","href","searchParams","set","Date","now","newTheme","cloneNode","toString","onload","remove","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_EXPORT___","___CSS_LOADER_URL_REPLACEMENT_0___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"theming-admin-theming.js?v=476f9df93b30a4b3e447","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/theming/src/mixins/admin/FieldMixin.js","webpack:///nextcloud/apps/theming/src/mixins/admin/TextValueMixin.js","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue","webpack://nextcloud/./apps/theming/src/components/admin/CheckboxField.vue?c5ca","webpack://nextcloud/./apps/theming/src/components/admin/CheckboxField.vue?8981","webpack://nextcloud/./apps/theming/src/components/admin/CheckboxField.vue?f479","webpack://nextcloud/./apps/theming/src/components/admin/ColorPickerField.vue?fdaf","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/components/admin/ColorPickerField.vue?49ae","webpack://nextcloud/./apps/theming/src/components/admin/ColorPickerField.vue?977d","webpack://nextcloud/./apps/theming/src/components/admin/FileInputField.vue?2d6f","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/components/admin/FileInputField.vue?fcb2","webpack://nextcloud/./apps/theming/src/components/admin/FileInputField.vue?4d24","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue","webpack://nextcloud/./apps/theming/src/components/admin/TextField.vue?2236","webpack://nextcloud/./apps/theming/src/components/admin/TextField.vue?c7b6","webpack://nextcloud/./apps/theming/src/components/admin/TextField.vue?e6c1","webpack:///nextcloud/apps/theming/src/AdminTheming.vue","webpack:///nextcloud/apps/theming/src/AdminTheming.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/AdminTheming.vue?8b95","webpack://nextcloud/./apps/theming/src/AdminTheming.vue?6138","webpack://nextcloud/./apps/theming/src/AdminTheming.vue?e575","webpack:///nextcloud/apps/theming/src/admin-settings.js","webpack:///nextcloud/apps/theming/src/helpers/refreshStyles.js","webpack:///nextcloud/apps/theming/src/AdminTheming.vue?vue&type=style&index=0&id=4f7ac635&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/CheckboxField.vue?vue&type=style&index=0&id=17145f08&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/ColorPickerField.vue?vue&type=style&index=0&id=73de0887&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/FileInputField.vue?vue&type=style&index=0&id=3d620660&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/admin/TextField.vue?vue&type=style&index=0&id=21244e1d&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","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/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (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((key) => (__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 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst styleRefreshFields = [\n\t'color',\n\t'logo',\n\t'background',\n\t'logoheader',\n\t'favicon',\n\t'disable-user-theming',\n]\n\nexport default {\n\temits: [\n\t\t'update:theming',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowSuccess: false,\n\t\t\terrorMessage: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tid() {\n\t\t\treturn `admin-theming-${this.name}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\treset() {\n\t\t\tthis.showSuccess = false\n\t\t\tthis.errorMessage = ''\n\t\t},\n\n\t\thandleSuccess() {\n\t\t\tthis.showSuccess = true\n\t\t\tsetTimeout(() => { this.showSuccess = false }, 2000)\n\t\t\tif (styleRefreshFields.includes(this.name)) {\n\t\t\t\tthis.$emit('update:theming')\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\nimport FieldMixin from './FieldMixin.js'\n\nexport default {\n\tmixins: [\n\t\tFieldMixin,\n\t],\n\n\twatch: {\n\t\tvalue(value) {\n\t\t\tthis.localValue = value\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tlocalValue: this.value,\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync save() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/updateStylesheet')\n\t\t\t// Convert boolean to string as server expects string value\n\t\t\tconst valueToPost = this.localValue === true ? 'yes' : this.localValue === false ? 'no' : this.localValue\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.name,\n\t\t\t\t\tvalue: valueToPost,\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:value', this.localValue)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\n\t\tasync undo() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/undoChanges')\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.name,\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:value', this.defaultValue)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\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!./CheckboxField.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!./CheckboxField.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<div class=\"field\">\n\t\t<label :for=\"id\">{{ displayName }}</label>\n\t\t<div class=\"field__row\">\n\t\t\t<NcCheckboxRadioSwitch type=\"switch\"\n\t\t\t\t:id=\"id\"\n\t\t\t\t:checked.sync=\"localValue\"\n\t\t\t\t@update:checked=\"save\">\n\t\t\t\t{{ label }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</div>\n\n\t\t<p class=\"field__description\">{{ description }}</p>\n\n\t\t<NcNoteCard v-if=\"errorMessage\"\n\t\t\ttype=\"error\"\n\t\t\t:show-alert=\"true\">\n\t\t\t<p>{{ errorMessage }}</p>\n\t\t</NcNoteCard>\n\t</div>\n</template>\n\n<script>\nimport {\n\tNcCheckboxRadioSwitch,\n\tNcNoteCard,\n} from '@nextcloud/vue'\n\nimport TextValueMixin from '../../mixins/admin/TextValueMixin.js'\n\nexport default {\n\tname: 'CheckboxField',\n\n\tcomponents: {\n\t\tNcCheckboxRadioSwitch,\n\t\tNcNoteCard,\n\t},\n\n\tmixins: [\n\t\tTextValueMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultValue: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\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\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './shared/field.scss';\n\n.field {\n\t&__description {\n\t\tcolor: var(--color-text-maxcontrast);\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!./CheckboxField.vue?vue&type=style&index=0&id=17145f08&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CheckboxField.vue?vue&type=style&index=0&id=17145f08&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CheckboxField.vue?vue&type=template&id=17145f08&scoped=true&\"\nimport script from \"./CheckboxField.vue?vue&type=script&lang=js&\"\nexport * from \"./CheckboxField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CheckboxField.vue?vue&type=style&index=0&id=17145f08&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"17145f08\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"field\"},[_c('label',{attrs:{\"for\":_vm.id}},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),_c('div',{staticClass:\"field__row\"},[_c('NcCheckboxRadioSwitch',{attrs:{\"type\":\"switch\",\"id\":_vm.id,\"checked\":_vm.localValue},on:{\"update:checked\":[function($event){_vm.localValue=$event},_vm.save]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.label)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('p',{staticClass:\"field__description\"},[_vm._v(_vm._s(_vm.description))]),_vm._v(\" \"),(_vm.errorMessage)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"field\"},[_c('label',{attrs:{\"for\":_vm.id}},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),_c('div',{staticClass:\"field__row\"},[_c('NcColorPicker',{attrs:{\"value\":_vm.localValue,\"advanced-fields\":true},on:{\"update:value\":[function($event){_vm.localValue=$event},_vm.debounceSave]}},[_c('NcButton',{staticClass:\"field__button\",attrs:{\"type\":\"primary\",\"id\":_vm.id,\"aria-label\":_vm.t('theming', 'Select a custom color'),\"data-admin-theming-setting-primary-color-picker\":\"\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.value)+\"\\n\\t\\t\\t\")])],1),_vm._v(\" \"),(_vm.value !== _vm.defaultValue)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('theming', 'Reset to default'),\"data-admin-theming-setting-primary-color-reset\":\"\"},on:{\"click\":_vm.undo},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Undo',{attrs:{\"size\":20}})]},proxy:true}],null,false,33666776)}):_vm._e()],1),_vm._v(\" \"),(_vm.errorMessage)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<div class=\"field\">\n\t\t<label :for=\"id\">{{ displayName }}</label>\n\t\t<div class=\"field__row\">\n\t\t\t<NcColorPicker :value.sync=\"localValue\"\n\t\t\t\t:advanced-fields=\"true\"\n\t\t\t\t@update:value=\"debounceSave\">\n\t\t\t\t<NcButton class=\"field__button\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t:id=\"id\"\n\t\t\t\t\t:aria-label=\"t('theming', 'Select a custom color')\"\n\t\t\t\t\tdata-admin-theming-setting-primary-color-picker>\n\t\t\t\t\t{{ value }}\n\t\t\t\t</NcButton>\n\t\t\t</NcColorPicker>\n\t\t\t<NcButton v-if=\"value !== defaultValue\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:aria-label=\"t('theming', 'Reset to default')\"\n\t\t\t\tdata-admin-theming-setting-primary-color-reset\n\t\t\t\t@click=\"undo\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Undo :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\n\t\t<NcNoteCard v-if=\"errorMessage\"\n\t\t\ttype=\"error\"\n\t\t\t:show-alert=\"true\">\n\t\t\t<p>{{ errorMessage }}</p>\n\t\t</NcNoteCard>\n\t</div>\n</template>\n\n<script>\nimport { debounce } from 'debounce'\nimport {\n\tNcButton,\n\tNcColorPicker,\n\tNcNoteCard,\n} from '@nextcloud/vue'\nimport Undo from 'vue-material-design-icons/UndoVariant.vue'\n\nimport TextValueMixin from '../../mixins/admin/TextValueMixin.js'\n\nexport default {\n\tname: 'ColorPickerField',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tNcColorPicker,\n\t\tNcNoteCard,\n\t\tUndo,\n\t},\n\n\tmixins: [\n\t\tTextValueMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tmethods: {\n\t\tdebounceSave: debounce(async function() {\n\t\t\tawait this.save()\n\t\t}, 200),\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './shared/field.scss';\n\n.field {\n\t// Override default NcButton styles\n\t&__button {\n\t\twidth: 230px !important;\n\t\tborder-radius: var(--border-radius-large) !important;\n\t\tbackground-color: var(--color-primary-default) !important;\n\n\t\t// emulated hover state because it would not make sense\n\t\t// to create a dedicated global variable for the color-primary-default\n\t\t&:hover::after {\n\t\t\tbackground-color: white;\n\t\t\tcontent: \"\";\n\t\t\tposition: absolute;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\topacity: .2;\n\t\t\tfilter: var(--primary-invert-if-bright);\n\t\t}\n\n\t\t// Above the ::after\n\t\t&::v-deep * {\n\t\t\tz-index: 1;\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!./ColorPickerField.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!./ColorPickerField.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!./ColorPickerField.vue?vue&type=style&index=0&id=73de0887&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ColorPickerField.vue?vue&type=style&index=0&id=73de0887&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ColorPickerField.vue?vue&type=template&id=73de0887&scoped=true&\"\nimport script from \"./ColorPickerField.vue?vue&type=script&lang=js&\"\nexport * from \"./ColorPickerField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ColorPickerField.vue?vue&type=style&index=0&id=73de0887&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"73de0887\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"field\"},[_c('label',{attrs:{\"for\":_vm.id}},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),_c('div',{staticClass:\"field__row\"},[_c('NcButton',{attrs:{\"type\":\"secondary\",\"id\":_vm.id,\"aria-label\":_vm.ariaLabel,\"data-admin-theming-setting-file-picker\":\"\"},on:{\"click\":_vm.activateLocalFilePicker},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Upload',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('theming', 'Upload'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.showReset)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('theming', 'Reset to default'),\"data-admin-theming-setting-file-reset\":\"\"},on:{\"click\":_vm.undo},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Undo',{attrs:{\"size\":20}})]},proxy:true}],null,false,33666776)}):_vm._e(),_vm._v(\" \"),(_vm.showRemove)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('theming', 'Remove background image'),\"data-admin-theming-setting-file-remove\":\"\"},on:{\"click\":_vm.removeBackground},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Delete',{attrs:{\"size\":20}})]},proxy:true}],null,false,2705356561)}):_vm._e(),_vm._v(\" \"),(_vm.showLoading)?_c('NcLoadingIcon',{staticClass:\"field__loading-icon\",attrs:{\"size\":20}}):_vm._e()],1),_vm._v(\" \"),((_vm.name === 'logoheader' || _vm.name === 'favicon') && _vm.mimeValue !== _vm.defaultMimeValue)?_c('div',{staticClass:\"field__preview\",class:{\n\t\t\t'field__preview--logoheader': _vm.name === 'logoheader',\n\t\t\t'field__preview--favicon': _vm.name === 'favicon',\n\t\t}}):_vm._e(),_vm._v(\" \"),(_vm.errorMessage)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.errorMessage))])]):_vm._e(),_vm._v(\" \"),_c('input',{ref:\"input\",attrs:{\"type\":\"file\"},on:{\"change\":_vm.onChange}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<div class=\"field\">\n\t\t<label :for=\"id\">{{ displayName }}</label>\n\t\t<div class=\"field__row\">\n\t\t\t<NcButton type=\"secondary\"\n\t\t\t\t:id=\"id\"\n\t\t\t\t:aria-label=\"ariaLabel\"\n\t\t\t\tdata-admin-theming-setting-file-picker\n\t\t\t\t@click=\"activateLocalFilePicker\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Upload :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ t('theming', 'Upload') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"showReset\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:aria-label=\"t('theming', 'Reset to default')\"\n\t\t\t\tdata-admin-theming-setting-file-reset\n\t\t\t\t@click=\"undo\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Undo :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"showRemove\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:aria-label=\"t('theming', 'Remove background image')\"\n\t\t\t\tdata-admin-theming-setting-file-remove\n\t\t\t\t@click=\"removeBackground\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Delete :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcLoadingIcon v-if=\"showLoading\"\n\t\t\t\tclass=\"field__loading-icon\"\n\t\t\t\t:size=\"20\" />\n\t\t</div>\n\n\t\t<div v-if=\"(name === 'logoheader' || name === 'favicon') && mimeValue !== defaultMimeValue\"\n\t\t\tclass=\"field__preview\"\n\t\t\t:class=\"{\n\t\t\t\t'field__preview--logoheader': name === 'logoheader',\n\t\t\t\t'field__preview--favicon': name === 'favicon',\n\t\t\t}\" />\n\n\t\t<NcNoteCard v-if=\"errorMessage\"\n\t\t\ttype=\"error\"\n\t\t\t:show-alert=\"true\">\n\t\t\t<p>{{ errorMessage }}</p>\n\t\t</NcNoteCard>\n\n\t\t<input ref=\"input\"\n\t\t\ttype=\"file\"\n\t\t\t@change=\"onChange\">\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\nimport {\n\tNcButton,\n\tNcLoadingIcon,\n\tNcNoteCard,\n} from '@nextcloud/vue'\nimport Delete from 'vue-material-design-icons/Delete.vue'\nimport Undo from 'vue-material-design-icons/UndoVariant.vue'\nimport Upload from 'vue-material-design-icons/Upload.vue'\n\nimport FieldMixin from '../../mixins/admin/FieldMixin.js'\n\nexport default {\n\tname: 'FileInputField',\n\n\tcomponents: {\n\t\tDelete,\n\t\tNcButton,\n\t\tNcLoadingIcon,\n\t\tNcNoteCard,\n\t\tUndo,\n\t\tUpload,\n\t},\n\n\tmixins: [\n\t\tFieldMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmimeName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmimeValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultMimeValue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tshowLoading: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tshowReset() {\n\t\t\treturn this.mimeValue !== this.defaultMimeValue\n\t\t},\n\n\t\tshowRemove() {\n\t\t\tif (this.name === 'background') {\n\t\t\t\tif (this.mimeValue.startsWith('image/')) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\tif (this.mimeValue === this.defaultMimeValue) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t},\n\n\tmethods: {\n\t\tactivateLocalFilePicker() {\n\t\t\tthis.reset()\n\t\t\t// Set to null so that selecting the same file will trigger the change event\n\t\t\tthis.$refs.input.value = null\n\t\t\tthis.$refs.input.click()\n\t\t},\n\n\t\tasync onChange(e) {\n\t\t\tconst file = e.target.files[0]\n\n\t\t\tconst formData = new FormData()\n\t\t\tformData.append('key', this.name)\n\t\t\tformData.append('image', file)\n\n\t\t\tconst url = generateUrl('/apps/theming/ajax/uploadImage')\n\t\t\ttry {\n\t\t\t\tthis.showLoading = true\n\t\t\t\tawait axios.post(url, formData)\n\t\t\t\tthis.showLoading = false\n\t\t\t\tthis.$emit('update:mime-value', file.type)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.showLoading = false\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\n\t\tasync undo() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/undoChanges')\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.mimeName,\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:mime-value', this.defaultMimeValue)\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\n\t\tasync removeBackground() {\n\t\t\tthis.reset()\n\t\t\tconst url = generateUrl('/apps/theming/ajax/updateStylesheet')\n\t\t\ttry {\n\t\t\t\tawait axios.post(url, {\n\t\t\t\t\tsetting: this.mimeName,\n\t\t\t\t\tvalue: 'backgroundColor',\n\t\t\t\t})\n\t\t\t\tthis.$emit('update:mime-value', 'backgroundColor')\n\t\t\t\tthis.handleSuccess()\n\t\t\t} catch (e) {\n\t\t\t\tthis.errorMessage = e.response.data.data?.message\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import './shared/field.scss';\n\n.field {\n\t&__loading-icon {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&__preview {\n\t\twidth: 70px;\n\t\theight: 70px;\n\t\tbackground-size: contain;\n\t\tbackground-position: center;\n\t\tbackground-repeat: no-repeat;\n\t\tmargin: 10px 0;\n\n\t\t&--logoheader {\n\t\t\tbackground-image: var(--image-logoheader);\n\t\t}\n\n\t\t&--favicon {\n\t\t\tbackground-image: var(--image-favicon);\n\t\t}\n\t}\n}\n\ninput[type=\"file\"] {\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!./FileInputField.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!./FileInputField.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!./FileInputField.vue?vue&type=style&index=0&id=3d620660&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FileInputField.vue?vue&type=style&index=0&id=3d620660&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FileInputField.vue?vue&type=template&id=3d620660&scoped=true&\"\nimport script from \"./FileInputField.vue?vue&type=script&lang=js&\"\nexport * from \"./FileInputField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FileInputField.vue?vue&type=style&index=0&id=3d620660&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3d620660\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextField.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!./TextField.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<div class=\"field\">\n\t\t<NcTextField :value.sync=\"localValue\"\n\t\t\t:label=\"displayName\"\n\t\t\t:label-visible=\"true\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t:type=\"type\"\n\t\t\t:maxlength=\"maxlength\"\n\t\t\t:spellcheck=\"false\"\n\t\t\t:success=\"showSuccess\"\n\t\t\t:error=\"Boolean(errorMessage)\"\n\t\t\t:helper-text=\"errorMessage\"\n\t\t\t:show-trailing-button=\"value !== defaultValue\"\n\t\t\ttrailing-button-icon=\"undo\"\n\t\t\t@trailing-button-click=\"undo\"\n\t\t\t@keydown.enter=\"save\"\n\t\t\t@blur=\"save\" />\n\t</div>\n</template>\n\n<script>\nimport { NcTextField } from '@nextcloud/vue'\n\nimport TextValueMixin from '../../mixins/admin/TextValueMixin.js'\n\nexport default {\n\tname: 'TextField',\n\n\tcomponents: {\n\t\tNcTextField,\n\t},\n\n\tmixins: [\n\t\tTextValueMixin,\n\t],\n\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdefaultValue: {\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\tdisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tplaceholder: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmaxlength: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.field {\n\tmax-width: 400px;\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!./TextField.vue?vue&type=style&index=0&id=21244e1d&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TextField.vue?vue&type=style&index=0&id=21244e1d&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TextField.vue?vue&type=template&id=21244e1d&scoped=true&\"\nimport script from \"./TextField.vue?vue&type=script&lang=js&\"\nexport * from \"./TextField.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TextField.vue?vue&type=style&index=0&id=21244e1d&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"21244e1d\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"field\"},[_c('NcTextField',{attrs:{\"value\":_vm.localValue,\"label\":_vm.displayName,\"label-visible\":true,\"placeholder\":_vm.placeholder,\"type\":_vm.type,\"maxlength\":_vm.maxlength,\"spellcheck\":false,\"success\":_vm.showSuccess,\"error\":Boolean(_vm.errorMessage),\"helper-text\":_vm.errorMessage,\"show-trailing-button\":_vm.value !== _vm.defaultValue,\"trailing-button-icon\":\"undo\"},on:{\"update:value\":function($event){_vm.localValue=$event},\"trailing-button-click\":_vm.undo,\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.save.apply(null, arguments)},\"blur\":_vm.save}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2022 Christopher Ng <chrng8@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<section>\n\t\t<NcSettingsSection :title=\"t('theming', 'Theming')\"\n\t\t\t:description=\"t('theming', 'Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users.')\"\n\t\t\t:doc-url=\"docUrl\"\n\t\t\tdata-admin-theming-settings>\n\t\t\t<div class=\"admin-theming\">\n\t\t\t\t<NcNoteCard v-if=\"!isThemable\"\n\t\t\t\t\ttype=\"error\"\n\t\t\t\t\t:show-alert=\"true\">\n\t\t\t\t\t<p>{{ notThemableErrorMessage }}</p>\n\t\t\t\t</NcNoteCard>\n\n\t\t\t\t<!-- Name, web link, slogan... fields -->\n\t\t\t\t<TextField v-for=\"field in textFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:data-admin-theming-setting-field=\"field.name\"\n\t\t\t\t\t:default-value=\"field.defaultValue\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:maxlength=\"field.maxlength\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t:placeholder=\"field.placeholder\"\n\t\t\t\t\t:type=\"field.type\"\n\t\t\t\t\t:value.sync=\"field.value\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\n\t\t\t\t<!-- Primary color picker -->\n\t\t\t\t<ColorPickerField :name=\"colorPickerField.name\"\n\t\t\t\t\t:default-value=\"colorPickerField.defaultValue\"\n\t\t\t\t\t:display-name=\"colorPickerField.displayName\"\n\t\t\t\t\t:value.sync=\"colorPickerField.value\"\n\t\t\t\t\tdata-admin-theming-setting-primary-color\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\n\t\t\t\t<!-- Default background picker -->\n\t\t\t\t<FileInputField v-for=\"field in fileInputFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:aria-label=\"field.ariaLabel\"\n\t\t\t\t\t:data-admin-theming-setting-file=\"field.name\"\n\t\t\t\t\t:default-mime-value=\"field.defaultMimeValue\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:mime-name=\"field.mimeName\"\n\t\t\t\t\t:mime-value.sync=\"field.mimeValue\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<div class=\"admin-theming__preview\" data-admin-theming-preview>\n\t\t\t\t\t<div class=\"admin-theming__preview-logo\" data-admin-theming-preview-logo />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</NcSettingsSection>\n\t\t<NcSettingsSection :title=\"t('theming', 'Advanced options')\">\n\t\t\t<div class=\"admin-theming-advanced\">\n\t\t\t\t<TextField v-for=\"field in advancedTextFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t:value.sync=\"field.value\"\n\t\t\t\t\t:default-value=\"field.defaultValue\"\n\t\t\t\t\t:type=\"field.type\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:placeholder=\"field.placeholder\"\n\t\t\t\t\t:maxlength=\"field.maxlength\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<FileInputField v-for=\"field in advancedFileInputFields\"\n\t\t\t\t\t:key=\"field.name\"\n\t\t\t\t\t:name=\"field.name\"\n\t\t\t\t\t:mime-name=\"field.mimeName\"\n\t\t\t\t\t:mime-value.sync=\"field.mimeValue\"\n\t\t\t\t\t:default-mime-value=\"field.defaultMimeValue\"\n\t\t\t\t\t:display-name=\"field.displayName\"\n\t\t\t\t\t:aria-label=\"field.ariaLabel\"\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<CheckboxField :name=\"userThemingField.name\"\n\t\t\t\t\t:value=\"userThemingField.value\"\n\t\t\t\t\t:default-value=\"userThemingField.defaultValue\"\n\t\t\t\t\t:display-name=\"userThemingField.displayName\"\n\t\t\t\t\t:label=\"userThemingField.label\"\n\t\t\t\t\t:description=\"userThemingField.description\"\n\t\t\t\t\tdata-admin-theming-setting-disable-user-theming\n\t\t\t\t\t@update:theming=\"$emit('update:theming')\" />\n\t\t\t\t<a v-if=\"!canThemeIcons\"\n\t\t\t\t\t:href=\"docUrlIcons\"\n\t\t\t\t\trel=\"noreferrer noopener\">\n\t\t\t\t\t<em>{{ t('theming', 'Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color.') }}</em>\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</NcSettingsSection>\n\t</section>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\n\nimport {\n\tNcNoteCard,\n\tNcSettingsSection,\n} from '@nextcloud/vue'\nimport CheckboxField from './components/admin/CheckboxField.vue'\nimport ColorPickerField from './components/admin/ColorPickerField.vue'\nimport FileInputField from './components/admin/FileInputField.vue'\nimport TextField from './components/admin/TextField.vue'\n\nconst {\n\tbackgroundMime,\n\tcanThemeIcons,\n\tcolor,\n\tdocUrl,\n\tdocUrlIcons,\n\tfaviconMime,\n\tisThemable,\n\tlegalNoticeUrl,\n\tlogoheaderMime,\n\tlogoMime,\n\tname,\n\tnotThemableErrorMessage,\n\tprivacyPolicyUrl,\n\tslogan,\n\turl,\n\tuserThemingDisabled,\n} = loadState('theming', 'adminThemingParameters')\n\nconst textFields = [\n\t{\n\t\tname: 'name',\n\t\tvalue: name,\n\t\tdefaultValue: 'Nextcloud',\n\t\ttype: 'text',\n\t\tdisplayName: t('theming', 'Name'),\n\t\tplaceholder: t('theming', 'Name'),\n\t\tmaxlength: 250,\n\t},\n\t{\n\t\tname: 'url',\n\t\tvalue: url,\n\t\tdefaultValue: 'https://nextcloud.com',\n\t\ttype: 'url',\n\t\tdisplayName: t('theming', 'Web link'),\n\t\tplaceholder: 'https://…',\n\t\tmaxlength: 500,\n\t},\n\t{\n\t\tname: 'slogan',\n\t\tvalue: slogan,\n\t\tdefaultValue: t('theming', 'a safe home for all your data'),\n\t\ttype: 'text',\n\t\tdisplayName: t('theming', 'Slogan'),\n\t\tplaceholder: t('theming', 'Slogan'),\n\t\tmaxlength: 500,\n\t},\n]\n\nconst colorPickerField = {\n\tname: 'color',\n\tvalue: color,\n\tdefaultValue: '#0082c9',\n\tdisplayName: t('theming', 'Color'),\n}\n\nconst fileInputFields = [\n\t{\n\t\tname: 'logo',\n\t\tmimeName: 'logoMime',\n\t\tmimeValue: logoMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Logo'),\n\t\tariaLabel: t('theming', 'Upload new logo'),\n\t},\n\t{\n\t\tname: 'background',\n\t\tmimeName: 'backgroundMime',\n\t\tmimeValue: backgroundMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Background and login image'),\n\t\tariaLabel: t('theming', 'Upload new background and login image'),\n\t},\n]\n\nconst advancedTextFields = [\n\t{\n\t\tname: 'imprintUrl',\n\t\tvalue: legalNoticeUrl,\n\t\tdefaultValue: '',\n\t\ttype: 'url',\n\t\tdisplayName: t('theming', 'Legal notice link'),\n\t\tplaceholder: 'https://…',\n\t\tmaxlength: 500,\n\t},\n\t{\n\t\tname: 'privacyUrl',\n\t\tvalue: privacyPolicyUrl,\n\t\tdefaultValue: '',\n\t\ttype: 'url',\n\t\tdisplayName: t('theming', 'Privacy policy link'),\n\t\tplaceholder: 'https://…',\n\t\tmaxlength: 500,\n\t},\n]\n\nconst advancedFileInputFields = [\n\t{\n\t\tname: 'logoheader',\n\t\tmimeName: 'logoheaderMime',\n\t\tmimeValue: logoheaderMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Header logo'),\n\t\tariaLabel: t('theming', 'Upload new header logo'),\n\t},\n\t{\n\t\tname: 'favicon',\n\t\tmimeName: 'faviconMime',\n\t\tmimeValue: faviconMime,\n\t\tdefaultMimeValue: '',\n\t\tdisplayName: t('theming', 'Favicon'),\n\t\tariaLabel: t('theming', 'Upload new favicon'),\n\t},\n]\n\nconst userThemingField = {\n\tname: 'disable-user-theming',\n\tvalue: userThemingDisabled,\n\tdefaultValue: false,\n\tdisplayName: t('theming', 'User settings'),\n\tlabel: t('theming', 'Disable user theming'),\n\tdescription: t('theming', 'Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on.'),\n}\n\nexport default {\n\tname: 'AdminTheming',\n\n\tcomponents: {\n\t\tCheckboxField,\n\t\tColorPickerField,\n\t\tFileInputField,\n\t\tNcNoteCard,\n\t\tNcSettingsSection,\n\t\tTextField,\n\t},\n\n\temits: [\n\t\t'update:theming',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\ttextFields,\n\t\t\tcolorPickerField,\n\t\t\tfileInputFields,\n\t\t\tadvancedTextFields,\n\t\t\tadvancedFileInputFields,\n\t\t\tuserThemingField,\n\n\t\t\tcanThemeIcons,\n\t\t\tdocUrl,\n\t\t\tdocUrlIcons,\n\t\t\tisThemable,\n\t\t\tnotThemableErrorMessage,\n\t\t}\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.admin-theming,\n.admin-theming-advanced {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px 0;\n}\n\n.admin-theming {\n\t&__preview {\n\t\twidth: 230px;\n\t\theight: 140px;\n\t\tbackground-size: cover;\n\t\tbackground-position: center;\n\t\ttext-align: center;\n\t\tmargin-top: 10px;\n\t\t/* This is basically https://github.com/nextcloud/server/blob/master/core/css/guest.css\n\t\t But without the user variables. That way the admin can preview the render as guest*/\n\t\t/* As guest, there is no user color color-background-plain */\n\t\tbackground-color: var(--color-primary-default, #0082c9);\n\t\t/* As guest, there is no user background (--image-background)\n\t\t1. Empty background if defined\n\t\t2. Else default background\n\t\t3. Finally default gradient (should not happened, the background is always defined anyway) */\n\t\tbackground-image: var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)));\n\n\t\t&-logo {\n\t\t\twidth: 20%;\n\t\t\theight: 20%;\n\t\t\tmargin-top: 20px;\n\t\t\tdisplay: inline-block;\n\t\t\tbackground-size: contain;\n\t\t\tbackground-position: center;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-image: var(--image-logo, url('../../../core/img/logo/logo.svg'));\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!./AdminTheming.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!./AdminTheming.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!./AdminTheming.vue?vue&type=style&index=0&id=4f7ac635&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminTheming.vue?vue&type=style&index=0&id=4f7ac635&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AdminTheming.vue?vue&type=template&id=4f7ac635&scoped=true&\"\nimport script from \"./AdminTheming.vue?vue&type=script&lang=js&\"\nexport * from \"./AdminTheming.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AdminTheming.vue?vue&type=style&index=0&id=4f7ac635&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f7ac635\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('NcSettingsSection',{attrs:{\"title\":_vm.t('theming', 'Theming'),\"description\":_vm.t('theming', 'Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users.'),\"doc-url\":_vm.docUrl,\"data-admin-theming-settings\":\"\"}},[_c('div',{staticClass:\"admin-theming\"},[(!_vm.isThemable)?_c('NcNoteCard',{attrs:{\"type\":\"error\",\"show-alert\":true}},[_c('p',[_vm._v(_vm._s(_vm.notThemableErrorMessage))])]):_vm._e(),_vm._v(\" \"),_vm._l((_vm.textFields),function(field){return _c('TextField',{key:field.name,attrs:{\"data-admin-theming-setting-field\":field.name,\"default-value\":field.defaultValue,\"display-name\":field.displayName,\"maxlength\":field.maxlength,\"name\":field.name,\"placeholder\":field.placeholder,\"type\":field.type,\"value\":field.value},on:{\"update:value\":function($event){return _vm.$set(field, \"value\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_c('ColorPickerField',{attrs:{\"name\":_vm.colorPickerField.name,\"default-value\":_vm.colorPickerField.defaultValue,\"display-name\":_vm.colorPickerField.displayName,\"value\":_vm.colorPickerField.value,\"data-admin-theming-setting-primary-color\":\"\"},on:{\"update:value\":function($event){return _vm.$set(_vm.colorPickerField, \"value\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}}),_vm._v(\" \"),_vm._l((_vm.fileInputFields),function(field){return _c('FileInputField',{key:field.name,attrs:{\"aria-label\":field.ariaLabel,\"data-admin-theming-setting-file\":field.name,\"default-mime-value\":field.defaultMimeValue,\"display-name\":field.displayName,\"mime-name\":field.mimeName,\"mime-value\":field.mimeValue,\"name\":field.name},on:{\"update:mimeValue\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:mime-value\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_c('div',{staticClass:\"admin-theming__preview\",attrs:{\"data-admin-theming-preview\":\"\"}},[_c('div',{staticClass:\"admin-theming__preview-logo\",attrs:{\"data-admin-theming-preview-logo\":\"\"}})])],2)]),_vm._v(\" \"),_c('NcSettingsSection',{attrs:{\"title\":_vm.t('theming', 'Advanced options')}},[_c('div',{staticClass:\"admin-theming-advanced\"},[_vm._l((_vm.advancedTextFields),function(field){return _c('TextField',{key:field.name,attrs:{\"name\":field.name,\"value\":field.value,\"default-value\":field.defaultValue,\"type\":field.type,\"display-name\":field.displayName,\"placeholder\":field.placeholder,\"maxlength\":field.maxlength},on:{\"update:value\":function($event){return _vm.$set(field, \"value\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_vm._l((_vm.advancedFileInputFields),function(field){return _c('FileInputField',{key:field.name,attrs:{\"name\":field.name,\"mime-name\":field.mimeName,\"mime-value\":field.mimeValue,\"default-mime-value\":field.defaultMimeValue,\"display-name\":field.displayName,\"aria-label\":field.ariaLabel},on:{\"update:mimeValue\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:mime-value\":function($event){return _vm.$set(field, \"mimeValue\", $event)},\"update:theming\":function($event){return _vm.$emit('update:theming')}}})}),_vm._v(\" \"),_c('CheckboxField',{attrs:{\"name\":_vm.userThemingField.name,\"value\":_vm.userThemingField.value,\"default-value\":_vm.userThemingField.defaultValue,\"display-name\":_vm.userThemingField.displayName,\"label\":_vm.userThemingField.label,\"description\":_vm.userThemingField.description,\"data-admin-theming-setting-disable-user-theming\":\"\"},on:{\"update:theming\":function($event){return _vm.$emit('update:theming')}}}),_vm._v(\" \"),(!_vm.canThemeIcons)?_c('a',{attrs:{\"href\":_vm.docUrlIcons,\"rel\":\"noreferrer noopener\"}},[_c('em',[_vm._v(_vm._s(_vm.t('theming', 'Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color.')))])]):_vm._e()],2)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport App from './AdminTheming.vue'\nimport { refreshStyles } from './helpers/refreshStyles.js'\n\nVue.prototype.OC = OC\nVue.prototype.t = t\n\nconst View = Vue.extend(App)\nconst theming = new View()\ntheming.$mount('#admin-theming')\ntheming.$on('update:theming', refreshStyles)\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const refreshStyles = () => {\n\t// Refresh server-side generated theming CSS\n\t[...document.head.querySelectorAll('link.theme')].forEach(theme => {\n\t\tconst url = new URL(theme.href)\n\t\turl.searchParams.set('v', Date.now())\n\t\tconst newTheme = theme.cloneNode()\n\t\tnewTheme.href = url.toString()\n\t\tnewTheme.onload = () => theme.remove()\n\t\tdocument.head.append(newTheme)\n\t})\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\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../../../core/img/logo/logo.svg\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".admin-theming[data-v-4f7ac635],.admin-theming-advanced[data-v-4f7ac635]{display:flex;flex-direction:column;gap:8px 0}.admin-theming__preview[data-v-4f7ac635]{width:230px;height:140px;background-size:cover;background-position:center;text-align:center;margin-top:10px;background-color:var(--color-primary-default, #0082c9);background-image:var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)))}.admin-theming__preview-logo[data-v-4f7ac635]{width:20%;height:20%;margin-top:20px;display:inline-block;background-size:contain;background-position:center;background-repeat:no-repeat;background-image:var(--image-logo, url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \"))}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/AdminTheming.vue\"],\"names\":[],\"mappings\":\"AACA,yEAEC,YAAA,CACA,qBAAA,CACA,SAAA,CAIA,yCACC,WAAA,CACA,YAAA,CACA,qBAAA,CACA,0BAAA,CACA,iBAAA,CACA,eAAA,CAIA,sDAAA,CAKA,iIAAA,CAEA,8CACC,SAAA,CACA,UAAA,CACA,eAAA,CACA,oBAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,2EAAA\",\"sourcesContent\":[\"\\n.admin-theming,\\n.admin-theming-advanced {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 8px 0;\\n}\\n\\n.admin-theming {\\n\\t&__preview {\\n\\t\\twidth: 230px;\\n\\t\\theight: 140px;\\n\\t\\tbackground-size: cover;\\n\\t\\tbackground-position: center;\\n\\t\\ttext-align: center;\\n\\t\\tmargin-top: 10px;\\n\\t\\t/* This is basically https://github.com/nextcloud/server/blob/master/core/css/guest.css\\n\\t\\t But without the user variables. That way the admin can preview the render as guest*/\\n\\t\\t/* As guest, there is no user color color-background-plain */\\n\\t\\tbackground-color: var(--color-primary-default, #0082c9);\\n\\t\\t/* As guest, there is no user background (--image-background)\\n\\t\\t1. Empty background if defined\\n\\t\\t2. Else default background\\n\\t\\t3. Finally default gradient (should not happened, the background is always defined anyway) */\\n\\t\\tbackground-image: var(--image-background-plain, var(--image-background-default, linear-gradient(40deg, #0082c9 0%, #30b6ff 100%)));\\n\\n\\t\\t&-logo {\\n\\t\\t\\twidth: 20%;\\n\\t\\t\\theight: 20%;\\n\\t\\t\\tmargin-top: 20px;\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\tbackground-size: contain;\\n\\t\\t\\tbackground-position: center;\\n\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t\\tbackground-image: var(--image-logo, url('../../../core/img/logo/logo.svg'));\\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, \".field[data-v-17145f08]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-17145f08]{display:flex;gap:0 4px}.field__description[data-v-17145f08]{color:var(--color-text-maxcontrast)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/shared/field.scss\",\"webpack://./apps/theming/src/components/admin/CheckboxField.vue\"],\"names\":[],\"mappings\":\"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCzBD,qCACC,mCAAA\",\"sourcesContent\":[\"/**\\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.com>\\n *\\n * @license AGPL-3.0-or-later\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n.field {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 4px 0;\\n\\n\\t&__row {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 4px;\\n\\t}\\n}\\n\",\"\\n@import './shared/field.scss';\\n\\n.field {\\n\\t&__description {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".field[data-v-73de0887]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-73de0887]{display:flex;gap:0 4px}.field__button[data-v-73de0887]{width:230px !important;border-radius:var(--border-radius-large) !important;background-color:var(--color-primary-default) !important}.field__button[data-v-73de0887]:hover::after{background-color:#fff;content:\\\"\\\";position:absolute;width:100%;height:100%;opacity:.2;filter:var(--primary-invert-if-bright)}.field__button[data-v-73de0887] *{z-index:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/shared/field.scss\",\"webpack://./apps/theming/src/components/admin/ColorPickerField.vue\"],\"names\":[],\"mappings\":\"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCxBD,gCACC,sBAAA,CACA,mDAAA,CACA,wDAAA,CAIA,6CACC,qBAAA,CACA,UAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,sCAAA,CAID,kCACC,SAAA\",\"sourcesContent\":[\"/**\\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.com>\\n *\\n * @license AGPL-3.0-or-later\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n.field {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 4px 0;\\n\\n\\t&__row {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 4px;\\n\\t}\\n}\\n\",\"\\n@import './shared/field.scss';\\n\\n.field {\\n\\t// Override default NcButton styles\\n\\t&__button {\\n\\t\\twidth: 230px !important;\\n\\t\\tborder-radius: var(--border-radius-large) !important;\\n\\t\\tbackground-color: var(--color-primary-default) !important;\\n\\n\\t\\t// emulated hover state because it would not make sense\\n\\t\\t// to create a dedicated global variable for the color-primary-default\\n\\t\\t&:hover::after {\\n\\t\\t\\tbackground-color: white;\\n\\t\\t\\tcontent: \\\"\\\";\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\theight: 100%;\\n\\t\\t\\topacity: .2;\\n\\t\\t\\tfilter: var(--primary-invert-if-bright);\\n\\t\\t}\\n\\n\\t\\t// Above the ::after\\n\\t\\t&::v-deep * {\\n\\t\\t\\tz-index: 1;\\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, \".field[data-v-3d620660]{display:flex;flex-direction:column;gap:4px 0}.field__row[data-v-3d620660]{display:flex;gap:0 4px}.field__loading-icon[data-v-3d620660]{width:44px;height:44px}.field__preview[data-v-3d620660]{width:70px;height:70px;background-size:contain;background-position:center;background-repeat:no-repeat;margin:10px 0}.field__preview--logoheader[data-v-3d620660]{background-image:var(--image-logoheader)}.field__preview--favicon[data-v-3d620660]{background-image:var(--image-favicon)}input[type=file][data-v-3d620660]{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/shared/field.scss\",\"webpack://./apps/theming/src/components/admin/FileInputField.vue\"],\"names\":[],\"mappings\":\"AAsBA,wBACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,6BACC,YAAA,CACA,SAAA,CCzBD,sCACC,UAAA,CACA,WAAA,CAGD,iCACC,UAAA,CACA,WAAA,CACA,uBAAA,CACA,0BAAA,CACA,2BAAA,CACA,aAAA,CAEA,6CACC,wCAAA,CAGD,0CACC,qCAAA,CAKH,kCACC,YAAA\",\"sourcesContent\":[\"/**\\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\\n *\\n * @author Christopher Ng <chrng8@gmail.com>\\n *\\n * @license AGPL-3.0-or-later\\n *\\n * This program is free software: you can redistribute it and/or modify\\n * it under the terms of the GNU Affero General Public License as\\n * published by the Free Software Foundation, either version 3 of the\\n * License, or (at your option) any later version.\\n *\\n * This program is distributed in the hope that it will be useful,\\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n * GNU Affero General Public License for more details.\\n *\\n * You should have received a copy of the GNU Affero General Public License\\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\\n *\\n */\\n\\n.field {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 4px 0;\\n\\n\\t&__row {\\n\\t\\tdisplay: flex;\\n\\t\\tgap: 0 4px;\\n\\t}\\n}\\n\",\"\\n@import './shared/field.scss';\\n\\n.field {\\n\\t&__loading-icon {\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\t&__preview {\\n\\t\\twidth: 70px;\\n\\t\\theight: 70px;\\n\\t\\tbackground-size: contain;\\n\\t\\tbackground-position: center;\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\tmargin: 10px 0;\\n\\n\\t\\t&--logoheader {\\n\\t\\t\\tbackground-image: var(--image-logoheader);\\n\\t\\t}\\n\\n\\t\\t&--favicon {\\n\\t\\t\\tbackground-image: var(--image-favicon);\\n\\t\\t}\\n\\t}\\n}\\n\\ninput[type=\\\"file\\\"] {\\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, \".field[data-v-21244e1d]{max-width:400px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/admin/TextField.vue\"],\"names\":[],\"mappings\":\"AACA,wBACC,eAAA\",\"sourcesContent\":[\"\\n.field {\\n\\tmax-width: 400px;\\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","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (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 = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 5544;","__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\t5544: 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 = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (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((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(62786)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","styleRefreshFields","emits","data","showSuccess","errorMessage","computed","id","concat","this","name","methods","reset","handleSuccess","setTimeout","includes","$emit","mixins","FieldMixin","watch","value","localValue","async","url","generateUrl","valueToPost","axios","setting","e","_e$response$data$data","response","message","defaultValue","_e$response$data$data2","components","NcCheckboxRadioSwitch","NcNoteCard","TextValueMixin","props","type","String","required","Boolean","displayName","label","description","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_c","_self","staticClass","attrs","_v","_s","on","$event","save","_e","NcButton","NcColorPicker","Undo","debounceSave","debounce","t","undo","scopedSlots","_u","key","fn","proxy","Delete","NcLoadingIcon","Upload","mimeName","mimeValue","defaultMimeValue","ariaLabel","showLoading","showReset","showRemove","startsWith","activateLocalFilePicker","$refs","input","click","file","target","files","formData","FormData","append","_e$response$data$data3","removeBackground","class","ref","onChange","NcTextField","placeholder","maxlength","Number","indexOf","_k","keyCode","apply","arguments","backgroundMime","canThemeIcons","color","docUrl","docUrlIcons","faviconMime","isThemable","legalNoticeUrl","logoheaderMime","logoMime","notThemableErrorMessage","privacyPolicyUrl","slogan","userThemingDisabled","loadState","textFields","colorPickerField","fileInputFields","advancedTextFields","advancedFileInputFields","userThemingField","CheckboxField","ColorPickerField","FileInputField","NcSettingsSection","TextField","_l","field","$set","Vue","OC","theming","App","$mount","$on","refreshStyles","document","head","querySelectorAll","forEach","theme","URL","href","searchParams","set","Date","now","newTheme","cloneNode","toString","onload","remove","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_EXPORT___","___CSS_LOADER_URL_REPLACEMENT_0___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/theming-personal-theming.js b/dist/theming-personal-theming.js
index 41883c94f0d..a3141d9a848 100644
--- a/dist/theming-personal-theming.js
+++ b/dist/theming-personal-theming.js
@@ -1,3 +1,3 @@
/*! For license information please see theming-personal-theming.js.LICENSE.txt */
-(()=>{"use strict";var e,n={9665:(e,n,a)=>{var o=a(20144),r=a(79753),i=a(79954),s=a(4820),c=a(20571),d=a.n(c),l=a(13299),g=a.n(l),u=a(80419),h=a(82675),m=a(41728),p=a(20296),A=a.n(p),b=a(69867),v=a.n(b),k=a(1082),C=a.n(k),f=(a(97248),a(64024)),_=a(45994),y=a(25108);const w=(0,i.j)("theming","backgroundImage"),x=(0,i.j)("theming","shippedBackgrounds"),T=(0,i.j)("theming","themingDefaultBackground"),B=(0,i.j)("theming","defaultShippedBackground"),I=e=>(0,r.generateFilePath)("theming","","img/background/")+e,D=(0,f.fn)(t("theming","Select a background from your files")).setMultiSelect(!1).setModal(!0).setType(1).setMimeTypeFilter(["image/png","image/gif","image/jpeg","image/svg+xml","image/svg"]).build(),S={name:"BackgroundSettings",components:{Check:u.default,Close:h.default,ImageEdit:m.Z,NcColorPicker:v()},data:()=>({loading:!1,Theming:(0,i.j)("theming","data",{}),backgroundImage:w}),computed:{shippedBackgrounds(){return Object.keys(x).map((e=>({name:e,url:I(e),preview:I("preview/"+e),details:x[e]}))).filter((e=>!(!this.isGlobalBackgroundDeleted&&!this.isGlobalBackgroundDefault)||e.name!==B))},isGlobalBackgroundDefault:()=>!!T,isGlobalBackgroundDeleted:()=>"backgroundColor"===T,isBackgroundDisabled(){return"disabled"===this.backgroundImage||!this.backgroundImage}},methods:{invertTextColor(e){return this.calculateLuma(e)>.6},calculateLuma(e){const[t,n,a]=this.hexToRGB(e);return(.2126*t+.7152*n+.0722*a)/255},hexToRGB(e){const t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]:null},async update(e){this.backgroundImage=e.backgroundImage,this.Theming.color=e.backgroundColor,this.$emit("update:background"),this.loading=!1},async setDefault(){this.loading="default";const e=await s.default.post((0,r.generateUrl)("/apps/theming/background/default"));this.update(e.data)},async setShipped(e){this.loading=e;const t=await s.default.post((0,r.generateUrl)("/apps/theming/background/shipped"),{value:e});this.update(t.data)},async setFile(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.loading="custom";const n=await s.default.post((0,r.generateUrl)("/apps/theming/background/custom"),{value:e,color:t});this.update(n.data)},async removeBackground(){this.loading="remove";const e=await s.default.delete((0,r.generateUrl)("/apps/theming/background/custom"));this.update(e.data)},async pickColor(e){var t,n,a;this.loading="color";const o=(null==e||null===(t=e.target)||void 0===t||null===(n=t.dataset)||void 0===n?void 0:n.color)||(null===(a=this.Theming)||void 0===a?void 0:a.color)||"#0082c9",i=await s.default.post((0,r.generateUrl)("/apps/theming/background/color"),{color:o});this.update(i.data)},debouncePickColor:A()((function(){this.pickColor(...arguments)}),200),async pickFile(){const e=await D.pick();this.loading="custom";let t=null,n=null;try{var a;const o=(0,r.generateRemoteUrl)("dav/files/"+(0,_.ts)().uid+e);t=await s.default.get(o,{responseType:"blob"});const i=URL.createObjectURL(t.data),c=await this.getColorPaletteFromBlob(i);n=null==c||null===(a=c.DarkVibrant)||void 0===a?void 0:a.hex,this.setFile(e,n),y.debug("Extracted colour",n,"from custom image",e,c)}catch(a){this.setFile(e),y.error("Unable to extract colour from custom image",{error:a,path:e,response:t,color:n})}},getColorPaletteFromBlob:e=>new Promise(((t,n)=>{new(C())(e).getPalette(((e,a)=>{e&&n(e),t(a)}))}))}};var E=a(93379),U=a.n(E),j=a(7795),P=a.n(j),O=a(90569),G=a.n(O),F=a(3565),q=a.n(F),L=a(19216),Z=a.n(L),R=a(44589),N=a.n(R),z=a(24766),W={};W.styleTagTransform=N(),W.setAttributes=q(),W.insert=G().bind(null,"head"),W.domAPI=P(),W.insertStyleElement=Z(),U()(z.Z,W),z.Z&&z.Z.locals&&z.Z.locals;var M=a(51900);const K=(0,M.Z)(S,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"background-selector",attrs:{"data-user-theming-background-settings":""}},[t("button",{staticClass:"background background__filepicker",class:{"icon-loading":"custom"===e.loading,"background--active":"custom"===e.backgroundImage},attrs:{"data-color-bright":e.invertTextColor(e.Theming.color),"data-user-theming-background-custom":"",tabindex:"0"},on:{click:e.pickFile}},[e._v("\n\t\t"+e._s(e.t("theming","Custom background"))+"\n\t\t"),"custom"!==e.backgroundImage?t("ImageEdit",{attrs:{size:26}}):e._e(),e._v(" "),t("Check",{attrs:{size:44}})],1),e._v(" "),t("button",{staticClass:"background background__default",class:{"icon-loading":"default"===e.loading,"background--active":"default"===e.backgroundImage},style:{"--border-color":e.Theming.defaultColor},attrs:{"data-color-bright":e.invertTextColor(e.Theming.defaultColor),"data-user-theming-background-default":"",tabindex:"0"},on:{click:e.setDefault}},[e._v("\n\t\t"+e._s(e.t("theming","Default background"))+"\n\t\t"),t("Check",{attrs:{size:44}})],1),e._v(" "),t("NcColorPicker",{on:{input:e.debouncePickColor},model:{value:e.Theming.color,callback:function(t){e.$set(e.Theming,"color",t)},expression:"Theming.color"}},[t("button",{staticClass:"background background__color",style:{backgroundColor:e.Theming.color,"--border-color":e.Theming.color},attrs:{"data-color":e.Theming.color,"data-color-bright":e.invertTextColor(e.Theming.color),"data-user-theming-background-color":"",tabindex:"0"}},[e._v("\n\t\t\t"+e._s(e.t("theming","Change color"))+"\n\t\t")])]),e._v(" "),t("button",{staticClass:"background background__delete",class:{"background--active":e.isBackgroundDisabled},attrs:{"data-user-theming-background-clear":"",tabindex:"0"},on:{click:e.removeBackground}},[e._v("\n\t\t"+e._s(e.t("theming","No background"))+"\n\t\t"),e.isBackgroundDisabled?e._e():t("Close",{attrs:{size:32}}),e._v(" "),t("Check",{attrs:{size:44}})],1),e._v(" "),e._l(e.shippedBackgrounds,(function(n){return t("button",{key:n.name,staticClass:"background background__shipped",class:{"icon-loading":e.loading===n.name,"background--active":e.backgroundImage===n.name},style:{backgroundImage:"url("+n.preview+")","--border-color":n.details.primary_color},attrs:{title:n.details.attribution,"aria-label":n.details.attribution,"data-color-bright":"dark"===n.details.theming,"data-user-theming-background-shipped":n.name,tabindex:"0"},on:{click:function(t){return e.setShipped(n.name)}}},[t("Check",{attrs:{size:44}})],1)}))],2)}),[],!1,null,"34c50308",null).exports;var $=a(25108);const Y={name:"ItemPreview",components:{NcCheckboxRadioSwitch:d()},props:{enforced:{type:Boolean,default:!1},selected:{type:Boolean,default:!1},theme:{type:Object,required:!0},type:{type:String,default:""},unique:{type:Boolean,default:!1}},computed:{switchType(){return this.unique?"switch":"radio"},name(){return this.unique?null:this.type},img(){return(0,r.generateFilePath)("theming","img",this.theme.id+".jpg")},checked:{get(){return this.selected},set(e){$.debug("Changed theme",this.theme.id,e),this.unique?this.$emit("change",{enabled:!0===e,id:this.theme.id}):this.$emit("change",{enabled:!0,id:this.theme.id})}}},methods:{onToggle(){"radio"!==this.switchType?this.checked=!this.checked:this.checked=!0}}};var H=a(36907),V={};V.styleTagTransform=N(),V.setAttributes=q(),V.insert=G().bind(null,"head"),V.domAPI=P(),V.insertStyleElement=Z(),U()(H.Z,V),H.Z&&H.Z.locals&&H.Z.locals;const Q=(0,M.Z)(Y,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"theming__preview",class:"theming__preview--"+e.theme.id},[t("div",{staticClass:"theming__preview-image",style:{backgroundImage:"url("+e.img+")"},on:{click:e.onToggle}}),e._v(" "),t("div",{staticClass:"theming__preview-description"},[t("h3",[e._v(e._s(e.theme.title))]),e._v(" "),t("p",[e._v(e._s(e.theme.description))]),e._v(" "),e.enforced?t("span",{staticClass:"theming__preview-warning",attrs:{role:"note"}},[e._v("\n\t\t\t"+e._s(e.t("theming","Theme selection is enforced"))+"\n\t\t")]):e._e(),e._v(" "),t("NcCheckboxRadioSwitch",{staticClass:"theming__preview-toggle",attrs:{checked:e.checked,disabled:e.enforced,name:e.name,type:e.switchType},on:{"update:checked":function(t){e.checked=t}}},[e._v("\n\t\t\t"+e._s(e.theme.enableLabel)+"\n\t\t")])],1)])}),[],!1,null,"30cd5e6b",null).exports;var J=a(25108);const X=(0,i.j)("theming","themes",[]),ee=(0,i.j)("theming","enforceTheme",""),te=(0,i.j)("theming","shortcutsDisabled",!1),ne=(0,i.j)("theming","isUserThemingDisabled");J.debug("Available themes",X);const ae={name:"UserThemes",components:{ItemPreview:Q,NcCheckboxRadioSwitch:d(),NcSettingsSection:g(),BackgroundSettings:K},data:()=>({availableThemes:X,enforceTheme:ee,shortcutsDisabled:te,isUserThemingDisabled:ne}),computed:{themes(){return this.availableThemes.filter((e=>1===e.type))},fonts(){return this.availableThemes.filter((e=>2===e.type))},selectedTheme(){return this.themes.find((e=>!0===e.enabled))||this.themes[0]},description(){return t("theming","Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level.").replace("{guidelines}",this.guidelinesLink).replace("{linkend}","</a>")},guidelinesLink:()=>'<a target="_blank" href="https://www.w3.org/WAI/standards-guidelines/wcag/" rel="noreferrer nofollow">',descriptionDetail(){return t("theming","If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!").replace("{issuetracker}",this.issuetrackerLink).replace("{designteam}",this.designteamLink).replace(/\{linkend\}/g,"</a>")},issuetrackerLink:()=>'<a target="_blank" href="https://github.com/nextcloud/server/issues/" rel="noreferrer nofollow">',designteamLink:()=>'<a target="_blank" href="https://nextcloud.com/design" rel="noreferrer nofollow">'},watch:{shortcutsDisabled(e){this.changeShortcutsDisabled(e)}},methods:{refreshGlobalStyles(){[...document.head.querySelectorAll("link.theme")].forEach((e=>{const t=new URL(e.href);t.searchParams.set("v",Date.now());const n=e.cloneNode();n.href=t.toString(),n.onload=()=>e.remove(),document.head.append(n)}))},updateBackground(e){this.background="custom"===e.type||"default"===e.type?e.type:e.value,this.refreshGlobalStyles()},changeTheme(e){let{enabled:t,id:n}=e;this.themes.forEach((e=>{e.id===n&&t?e.enabled=!0:e.enabled=!1})),this.updateBodyAttributes(),this.selectItem(t,n)},changeFont(e){let{enabled:t,id:n}=e;this.fonts.forEach((e=>{e.id===n&&t?e.enabled=!0:e.enabled=!1})),this.updateBodyAttributes(),this.selectItem(t,n)},async changeShortcutsDisabled(e){e?await(0,s.default)({url:(0,r.generateOcsUrl)("apps/provisioning_api/api/v1/config/users/{appId}/{configKey}",{appId:"theming",configKey:"shortcuts_disabled"}),data:{configValue:"yes"},method:"POST"}):await(0,s.default)({url:(0,r.generateOcsUrl)("apps/provisioning_api/api/v1/config/users/{appId}/{configKey}",{appId:"theming",configKey:"shortcuts_disabled"}),method:"DELETE"})},updateBodyAttributes(){const e=this.themes.filter((e=>!0===e.enabled)).map((e=>e.id)),t=this.fonts.filter((e=>!0===e.enabled)).map((e=>e.id));this.themes.forEach((e=>{document.body.toggleAttribute("data-theme-".concat(e.id),e.enabled)})),this.fonts.forEach((e=>{document.body.toggleAttribute("data-theme-".concat(e.id),e.enabled)})),document.body.setAttribute("data-themes",[...e,...t].join(","))},async selectItem(e,n){try{e?await(0,s.default)({url:(0,r.generateOcsUrl)("apps/theming/api/v1/theme/{themeId}/enable",{themeId:n}),method:"PUT"}):await(0,s.default)({url:(0,r.generateOcsUrl)("apps/theming/api/v1/theme/{themeId}",{themeId:n}),method:"DELETE"})}catch(e){J.error(e,e.response),OC.Notification.showTemporary(t("theming",e.response.data.ocs.meta.message+". Unable to apply the setting."))}}}};var oe=a(1080),re={};re.styleTagTransform=N(),re.setAttributes=q(),re.insert=G().bind(null,"head"),re.domAPI=P(),re.insertStyleElement=Z(),U()(oe.Z,re),oe.Z&&oe.Z.locals&&oe.Z.locals;const ie=(0,M.Z)(ae,(function(){var e=this,t=e._self._c;return t("section",[t("NcSettingsSection",{staticClass:"theming",attrs:{title:e.t("theming","Appearance and accessibility"),"limit-width":!1}},[t("p",{domProps:{innerHTML:e._s(e.description)}}),e._v(" "),t("p",{domProps:{innerHTML:e._s(e.descriptionDetail)}}),e._v(" "),t("div",{staticClass:"theming__preview-list"},e._l(e.themes,(function(n){return t("ItemPreview",{key:n.id,attrs:{enforced:n.id===e.enforceTheme,selected:e.selectedTheme.id===n.id,theme:n,unique:1===e.themes.length,type:"theme"},on:{change:e.changeTheme}})})),1),e._v(" "),t("div",{staticClass:"theming__preview-list"},e._l(e.fonts,(function(n){return t("ItemPreview",{key:n.id,attrs:{selected:n.enabled,theme:n,unique:1===e.fonts.length,type:"font"},on:{change:e.changeFont}})})),1)]),e._v(" "),t("NcSettingsSection",{attrs:{title:e.t("theming","Keyboard shortcuts")}},[t("p",[e._v(e._s(e.t("theming","In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps.")))]),e._v(" "),t("NcCheckboxRadioSwitch",{staticClass:"theming__preview-toggle",attrs:{checked:e.shortcutsDisabled,name:"shortcuts_disabled",type:"switch"},on:{"update:checked":function(t){e.shortcutsDisabled=t},change:e.changeShortcutsDisabled}},[e._v("\n\t\t\t"+e._s(e.t("theming","Disable all keyboard shortcuts"))+"\n\t\t")])],1),e._v(" "),t("NcSettingsSection",{staticClass:"background",attrs:{title:e.t("theming","Background"),"data-user-theming-background-disabled":""}},[e.isUserThemingDisabled?[t("p",[e._v(e._s(e.t("theming","Customization has been disabled by your administrator")))])]:[t("p",[e._v(e._s(e.t("theming","Set a custom background")))]),e._v(" "),t("BackgroundSettings",{staticClass:"background__grid",on:{"update:background":e.refreshGlobalStyles}})]],2)],1)}),[],!1,null,"4e5e21ba",null).exports;o.default.prototype.OC=OC,o.default.prototype.t=t;const se=new(o.default.extend(ie));se.$mount("#theming"),se.$on("update:background",(()=>{[...document.head.querySelectorAll("link.theme")].forEach((e=>{const t=new URL(e.href);t.searchParams.set("v",Date.now());const n=e.cloneNode();n.href=t.toString(),n.onload=()=>e.remove(),document.head.append(n)}))}))},1080:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(87537),o=n.n(a),r=n(23645),i=n.n(r)()(o());i.push([e.id,".theming p[data-v-4e5e21ba]{max-width:800px}.theming[data-v-4e5e21ba] a{font-weight:bold}.theming[data-v-4e5e21ba] a:hover,.theming[data-v-4e5e21ba] a:focus{text-decoration:underline}.theming__preview-list[data-v-4e5e21ba]{--gap: 30px;display:grid;margin-top:var(--gap);column-gap:var(--gap);row-gap:var(--gap);grid-template-columns:1fr 1fr}.background__grid[data-v-4e5e21ba]{margin-top:30px}@media(max-width: 1440px){.theming__preview-list[data-v-4e5e21ba]{display:flex;flex-direction:column}}","",{version:3,sources:["webpack://./apps/theming/src/UserThemes.vue"],names:[],mappings:"AAGC,4BACC,eAAA,CAID,4BACC,gBAAA,CAEA,oEAEC,yBAAA,CAIF,wCACC,WAAA,CAEA,YAAA,CACA,qBAAA,CACA,qBAAA,CACA,kBAAA,CACA,6BAAA,CAKD,mCACC,eAAA,CAIF,0BACC,wCACC,YAAA,CACA,qBAAA,CAAA",sourcesContent:["\n.theming {\n\t// Limit width of settings sections for readability\n\tp {\n\t\tmax-width: 800px;\n\t}\n\n\t// Proper highlight for links and focus feedback\n\t&::v-deep a {\n\t\tfont-weight: bold;\n\n\t\t&:hover,\n\t\t&:focus {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t}\n\n\t&__preview-list {\n\t\t--gap: 30px;\n\n\t\tdisplay: grid;\n\t\tmargin-top: var(--gap);\n\t\tcolumn-gap: var(--gap);\n\t\trow-gap: var(--gap);\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n}\n\n.background {\n\t&__grid {\n\t\tmargin-top: 30px;\n\t}\n}\n\n@media (max-width: 1440px) {\n\t.theming__preview-list {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t}\n}\n"],sourceRoot:""}]);const s=i},24766:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(87537),o=n.n(a),r=n(23645),i=n.n(r)()(o());i.push([e.id,".background-selector[data-v-34c50308]{display:flex;flex-wrap:wrap;justify-content:center}.background-selector .background[data-v-34c50308]{overflow:hidden;width:176px;height:96px;margin:8px;text-align:center;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-position:center center;background-size:cover}.background-selector .background__filepicker.background--active[data-v-34c50308]{color:#fff;background-image:var(--image-background)}.background-selector .background__default[data-v-34c50308]{background-color:var(--color-primary-default);background-image:var(--image-background-default)}.background-selector .background__filepicker[data-v-34c50308],.background-selector .background__default[data-v-34c50308],.background-selector .background__color[data-v-34c50308]{border-color:var(--color-border)}.background-selector .background__color[data-v-34c50308]{color:var(--color-primary-text);background-color:var(--color-primary-default)}.background-selector .background__default[data-v-34c50308],.background-selector .background__shipped[data-v-34c50308]{color:#fff}.background-selector .background[data-color-bright][data-v-34c50308]{color:#000}.background-selector .background--active[data-v-34c50308],.background-selector .background[data-v-34c50308]:hover,.background-selector .background[data-v-34c50308]:focus{border:2px solid var(--border-color, var(--color-primary)) !important}.background-selector .background span[data-v-34c50308]{margin:4px}.background-selector .background .check-icon[data-v-34c50308]{display:none}.background-selector .background--active:not(.icon-loading) .check-icon[data-v-34c50308]{display:block !important}","",{version:3,sources:["webpack://./apps/theming/src/components/BackgroundSettings.vue"],names:[],mappings:"AACA,sCACC,YAAA,CACA,cAAA,CACA,sBAAA,CAEA,kDACC,eAAA,CACA,WAAA,CACA,WAAA,CACA,UAAA,CACA,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,iCAAA,CACA,qBAAA,CAGC,iFACC,UAAA,CACA,wCAAA,CAIF,2DACC,6CAAA,CACA,gDAAA,CAGD,kLACC,gCAAA,CAGD,yDACC,+BAAA,CACA,6CAAA,CAID,sHAEC,UAAA,CAID,qEACC,UAAA,CAGD,0KAIC,qEAAA,CAID,uDACC,UAAA,CAGD,8DACC,YAAA,CAIA,yFAEC,wBAAA",sourcesContent:["\n.background-selector {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tjustify-content: center;\n\n\t.background {\n\t\toverflow: hidden;\n\t\twidth: 176px;\n\t\theight: 96px;\n\t\tmargin: 8px;\n\t\ttext-align: center;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-position: center center;\n\t\tbackground-size: cover;\n\n\t\t&__filepicker {\n\t\t\t&.background--active {\n\t\t\t\tcolor: white;\n\t\t\t\tbackground-image: var(--image-background);\n\t\t\t}\n\t\t}\n\n\t\t&__default {\n\t\t\tbackground-color: var(--color-primary-default);\n\t\t\tbackground-image: var(--image-background-default);\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\tcolor: var(--color-primary-text);\n\t\t\tbackground-color: var(--color-primary-default);\n\t\t}\n\n\t\t// Over a background image\n\t\t&__default,\n\t\t&__shipped {\n\t\t\tcolor: white;\n\t\t}\n\n\t\t// Text and svg icon dark on bright background\n\t\t&[data-color-bright] {\n\t\t\tcolor: black;\n\t\t}\n\n\t\t&--active,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\t// Use theme color primary, see inline css variable in template\n\t\t\tborder: 2px solid var(--border-color, var(--color-primary)) !important;\n\t\t}\n\n\t\t// Icon\n\t\tspan {\n\t\t\tmargin: 4px;\n\t\t}\n\n\t\t.check-icon {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t&--active:not(.icon-loading) {\n\t\t\t.check-icon {\n\t\t\t\t// Show checkmark\n\t\t\t\tdisplay: block !important;\n\t\t\t}\n\t\t}\n\t}\n}\n\n"],sourceRoot:""}]);const s=i},36907:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(87537),o=n.n(a),r=n(23645),i=n.n(r)()(o());i.push([e.id,".theming__preview[data-v-30cd5e6b]{--ratio: 16;position:relative;display:flex;justify-content:flex-start;max-width:800px}.theming__preview[data-v-30cd5e6b],.theming__preview *[data-v-30cd5e6b]{user-select:none}.theming__preview-image[data-v-30cd5e6b]{flex-basis:calc(16px*var(--ratio));flex-shrink:0;height:calc(10px*var(--ratio));margin-right:var(--gap);cursor:pointer;border-radius:var(--border-radius);background-repeat:no-repeat;background-position:top left;background-size:cover}.theming__preview-description[data-v-30cd5e6b]{display:flex;flex-direction:column}.theming__preview-description h3[data-v-30cd5e6b]{font-weight:bold;margin-bottom:0}.theming__preview-description label[data-v-30cd5e6b]{padding:12px 0}.theming__preview--default[data-v-30cd5e6b]{grid-column:span 2}.theming__preview-warning[data-v-30cd5e6b]{color:var(--color-warning)}@media(max-width: 682.6666666667px){.theming__preview[data-v-30cd5e6b]{flex-direction:column}.theming__preview-image[data-v-30cd5e6b]{margin:0}}","",{version:3,sources:["webpack://./apps/theming/src/components/ItemPreview.vue"],names:[],mappings:"AAGA,mCAEC,WAAA,CAEA,iBAAA,CACA,YAAA,CACA,0BAAA,CACA,eAAA,CAEA,wEAEC,gBAAA,CAGD,yCACC,kCAAA,CACA,aAAA,CACA,8BAAA,CACA,uBAAA,CACA,cAAA,CACA,kCAAA,CACA,2BAAA,CACA,4BAAA,CACA,qBAAA,CAGD,+CACC,YAAA,CACA,qBAAA,CAEA,kDACC,gBAAA,CACA,eAAA,CAGD,qDACC,cAAA,CAIF,4CACC,kBAAA,CAGD,2CACC,0BAAA,CAIF,oCACC,mCACC,qBAAA,CAEA,yCACC,QAAA,CAAA",sourcesContent:["\n@use 'sass:math';\n\n.theming__preview {\n\t// We make previews on 16/10 screens\n\t--ratio: 16;\n\n\tposition: relative;\n\tdisplay: flex;\n\tjustify-content: flex-start;\n\tmax-width: 800px;\n\n\t&,\n\t* {\n\t\tuser-select: none;\n\t}\n\n\t&-image {\n\t\tflex-basis: calc(16px * var(--ratio));\n\t\tflex-shrink: 0;\n\t\theight: calc(10px * var(--ratio));\n\t\tmargin-right: var(--gap);\n\t\tcursor: pointer;\n\t\tborder-radius: var(--border-radius);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: top left;\n\t\tbackground-size: cover;\n\t}\n\n\t&-description {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\n\t\th3 {\n\t\t\tfont-weight: bold;\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\tlabel {\n\t\t\tpadding: 12px 0;\n\t\t}\n\t}\n\n\t&--default {\n\t\tgrid-column: span 2;\n\t}\n\n\t&-warning {\n\t\tcolor: var(--color-warning);\n\t}\n}\n\n@media (max-width: math.div(1024px, 1.5)) {\n\t.theming__preview {\n\t\tflex-direction: column;\n\n\t\t&-image {\n\t\t\tmargin: 0;\n\t\t}\n\t}\n}\n\n"],sourceRoot:""}]);const s=i}},a={};function o(e){var t=a[e];if(void 0!==t)return t.exports;var r=a[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.m=n,e=[],o.O=(t,n,a,r)=>{if(!n){var i=1/0;for(l=0;l<e.length;l++){n=e[l][0],a=e[l][1],r=e[l][2];for(var s=!0,c=0;c<n.length;c++)(!1&r||i>=r)&&Object.keys(o.O).every((e=>o.O[e](n[c])))?n.splice(c--,1):(s=!1,r<i&&(i=r));if(s){e.splice(l--,1);var d=a();void 0!==d&&(t=d)}}return t}r=r||0;for(var l=e.length;l>0&&e[l-1][2]>r;l--)e[l]=e[l-1];e[l]=[n,a,r]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),o.j=1474,(()=>{o.b=document.baseURI||self.location.href;var e={1474:0};o.O.j=t=>0===e[t];var t=(t,n)=>{var a,r,i=n[0],s=n[1],c=n[2],d=0;if(i.some((t=>0!==e[t]))){for(a in s)o.o(s,a)&&(o.m[a]=s[a]);if(c)var l=c(o)}for(t&&t(n);d<i.length;d++)r=i[d],o.o(e,r)&&e[r]&&e[r][0](),e[r]=0;return o.O(l)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),o.nc=void 0;var r=o.O(void 0,[7874],(()=>o(9665)));r=o.O(r)})();
-//# sourceMappingURL=theming-personal-theming.js.map?v=a8ce25d07610b809b967 \ No newline at end of file
+(()=>{"use strict";var e,a={47546:(e,a,n)=>{var r=n(20144),o=n(79753),i=n(79954),s=n(4820),c=n(20571),d=n.n(c),l=n(13299),g=n.n(l),u=n(80419),h=n(82675),m=n(41728),p=n(20296),A=n.n(p),b=n(69867),v=n.n(b),k=n(1082),f=n.n(k),C=(n(97248),n(64024)),_=n(45994),y=n(25108);const w=(0,i.j)("theming","backgroundImage"),x=(0,i.j)("theming","shippedBackgrounds"),T=(0,i.j)("theming","themingDefaultBackground"),B=(0,i.j)("theming","defaultShippedBackground"),I=e=>(0,o.generateFilePath)("theming","","img/background/")+e,D=(0,C.fn)(t("theming","Select a background from your files")).setMultiSelect(!1).setModal(!0).setType(1).setMimeTypeFilter(["image/png","image/gif","image/jpeg","image/svg+xml","image/svg"]).build(),S={name:"BackgroundSettings",components:{Check:u.default,Close:h.default,ImageEdit:m.Z,NcColorPicker:v()},data:()=>({loading:!1,Theming:(0,i.j)("theming","data",{}),backgroundImage:w}),computed:{shippedBackgrounds(){return Object.keys(x).map((e=>({name:e,url:I(e),preview:I("preview/"+e),details:x[e]}))).filter((e=>!(!this.isGlobalBackgroundDeleted&&!this.isGlobalBackgroundDefault)||e.name!==B))},isGlobalBackgroundDefault:()=>!!T,isGlobalBackgroundDeleted:()=>"backgroundColor"===T,isBackgroundDisabled(){return"disabled"===this.backgroundImage||!this.backgroundImage}},methods:{invertTextColor(e){return this.calculateLuma(e)>.6},calculateLuma(e){const[t,a,n]=this.hexToRGB(e);return(.2126*t+.7152*a+.0722*n)/255},hexToRGB(e){const t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]:null},async update(e){this.backgroundImage=e.backgroundImage,this.Theming.color=e.backgroundColor,this.$emit("update:background"),this.loading=!1},async setDefault(){this.loading="default";const e=await s.default.post((0,o.generateUrl)("/apps/theming/background/default"));this.update(e.data)},async setShipped(e){this.loading=e;const t=await s.default.post((0,o.generateUrl)("/apps/theming/background/shipped"),{value:e});this.update(t.data)},async setFile(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.loading="custom";const a=await s.default.post((0,o.generateUrl)("/apps/theming/background/custom"),{value:e,color:t});this.update(a.data)},async removeBackground(){this.loading="remove";const e=await s.default.delete((0,o.generateUrl)("/apps/theming/background/custom"));this.update(e.data)},async pickColor(e){var t,a,n;this.loading="color";const r=(null==e||null===(t=e.target)||void 0===t||null===(a=t.dataset)||void 0===a?void 0:a.color)||(null===(n=this.Theming)||void 0===n?void 0:n.color)||"#0082c9",i=await s.default.post((0,o.generateUrl)("/apps/theming/background/color"),{color:r});this.update(i.data)},debouncePickColor:A()((function(){this.pickColor(...arguments)}),200),async pickFile(){const e=await D.pick();this.loading="custom";let t=null,a=null;try{var n;const r=(0,o.generateRemoteUrl)("dav/files/"+(0,_.ts)().uid+e);t=await s.default.get(r,{responseType:"blob"});const i=URL.createObjectURL(t.data),c=await this.getColorPaletteFromBlob(i);a=null==c||null===(n=c.DarkVibrant)||void 0===n?void 0:n.hex,this.setFile(e,a),y.debug("Extracted colour",a,"from custom image",e,c)}catch(n){this.setFile(e),y.error("Unable to extract colour from custom image",{error:n,path:e,response:t,color:a})}},getColorPaletteFromBlob:e=>new Promise(((t,a)=>{new(f())(e).getPalette(((e,n)=>{e&&a(e),t(n)}))}))}};var E=n(93379),U=n.n(E),j=n(7795),P=n.n(j),O=n(90569),G=n.n(O),F=n(3565),q=n.n(F),L=n(19216),Z=n.n(L),R=n(44589),N=n.n(R),z=n(80829),W={};W.styleTagTransform=N(),W.setAttributes=q(),W.insert=G().bind(null,"head"),W.domAPI=P(),W.insertStyleElement=Z(),U()(z.Z,W),z.Z&&z.Z.locals&&z.Z.locals;var M=n(51900);const K=(0,M.Z)(S,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"background-selector",attrs:{"data-user-theming-background-settings":""}},[t("button",{staticClass:"background background__filepicker",class:{"icon-loading":"custom"===e.loading,"background--active":"custom"===e.backgroundImage},attrs:{"data-color-bright":e.invertTextColor(e.Theming.color),"data-user-theming-background-custom":"",tabindex:"0"},on:{click:e.pickFile}},[e._v("\n\t\t"+e._s(e.t("theming","Custom background"))+"\n\t\t"),"custom"!==e.backgroundImage?t("ImageEdit",{attrs:{size:26}}):e._e(),e._v(" "),t("Check",{attrs:{size:44}})],1),e._v(" "),t("button",{staticClass:"background background__default",class:{"icon-loading":"default"===e.loading,"background--active":"default"===e.backgroundImage},style:{"--border-color":e.Theming.defaultColor},attrs:{"data-color-bright":e.invertTextColor(e.Theming.defaultColor),"data-user-theming-background-default":"",tabindex:"0"},on:{click:e.setDefault}},[e._v("\n\t\t"+e._s(e.t("theming","Default background"))+"\n\t\t"),t("Check",{attrs:{size:44}})],1),e._v(" "),t("NcColorPicker",{on:{input:e.debouncePickColor},model:{value:e.Theming.color,callback:function(t){e.$set(e.Theming,"color",t)},expression:"Theming.color"}},[t("button",{staticClass:"background background__color",style:{backgroundColor:e.Theming.color,"--border-color":e.Theming.color},attrs:{"data-color":e.Theming.color,"data-color-bright":e.invertTextColor(e.Theming.color),"data-user-theming-background-color":"",tabindex:"0"}},[e._v("\n\t\t\t"+e._s(e.t("theming","Change color"))+"\n\t\t")])]),e._v(" "),t("button",{staticClass:"background background__delete",class:{"background--active":e.isBackgroundDisabled},attrs:{"data-user-theming-background-clear":"",tabindex:"0"},on:{click:e.removeBackground}},[e._v("\n\t\t"+e._s(e.t("theming","No background"))+"\n\t\t"),e.isBackgroundDisabled?e._e():t("Close",{attrs:{size:32}}),e._v(" "),t("Check",{attrs:{size:44}})],1),e._v(" "),e._l(e.shippedBackgrounds,(function(a){return t("button",{key:a.name,staticClass:"background background__shipped",class:{"icon-loading":e.loading===a.name,"background--active":e.backgroundImage===a.name},style:{backgroundImage:"url("+a.preview+")","--border-color":a.details.primary_color},attrs:{title:a.details.attribution,"aria-label":a.details.attribution,"data-color-bright":"dark"===a.details.theming,"data-user-theming-background-shipped":a.name,tabindex:"0"},on:{click:function(t){return e.setShipped(a.name)}}},[t("Check",{attrs:{size:44}})],1)}))],2)}),[],!1,null,"8a72fa3e",null).exports;var $=n(25108);const Y={name:"ItemPreview",components:{NcCheckboxRadioSwitch:d()},props:{enforced:{type:Boolean,default:!1},selected:{type:Boolean,default:!1},theme:{type:Object,required:!0},type:{type:String,default:""},unique:{type:Boolean,default:!1}},computed:{switchType(){return this.unique?"switch":"radio"},name(){return this.unique?null:this.type},img(){return(0,o.generateFilePath)("theming","img",this.theme.id+".jpg")},checked:{get(){return this.selected},set(e){$.debug("Changed theme",this.theme.id,e),this.unique?this.$emit("change",{enabled:!0===e,id:this.theme.id}):this.$emit("change",{enabled:!0,id:this.theme.id})}}},methods:{onToggle(){"radio"!==this.switchType?this.checked=!this.checked:this.checked=!0}}};var H=n(36907),V={};V.styleTagTransform=N(),V.setAttributes=q(),V.insert=G().bind(null,"head"),V.domAPI=P(),V.insertStyleElement=Z(),U()(H.Z,V),H.Z&&H.Z.locals&&H.Z.locals;const Q=(0,M.Z)(Y,(function(){var e=this,t=e._self._c;return t("div",{staticClass:"theming__preview",class:"theming__preview--"+e.theme.id},[t("div",{staticClass:"theming__preview-image",style:{backgroundImage:"url("+e.img+")"},on:{click:e.onToggle}}),e._v(" "),t("div",{staticClass:"theming__preview-description"},[t("h3",[e._v(e._s(e.theme.title))]),e._v(" "),t("p",[e._v(e._s(e.theme.description))]),e._v(" "),e.enforced?t("span",{staticClass:"theming__preview-warning",attrs:{role:"note"}},[e._v("\n\t\t\t"+e._s(e.t("theming","Theme selection is enforced"))+"\n\t\t")]):e._e(),e._v(" "),t("NcCheckboxRadioSwitch",{staticClass:"theming__preview-toggle",attrs:{checked:e.checked,disabled:e.enforced,name:e.name,type:e.switchType},on:{"update:checked":function(t){e.checked=t}}},[e._v("\n\t\t\t"+e._s(e.theme.enableLabel)+"\n\t\t")])],1)])}),[],!1,null,"30cd5e6b",null).exports;var J=n(25108);const X=(0,i.j)("theming","themes",[]),ee=(0,i.j)("theming","enforceTheme",""),te=(0,i.j)("theming","shortcutsDisabled",!1),ae=(0,i.j)("theming","isUserThemingDisabled");J.debug("Available themes",X);const ne={name:"UserThemes",components:{ItemPreview:Q,NcCheckboxRadioSwitch:d(),NcSettingsSection:g(),BackgroundSettings:K},data:()=>({availableThemes:X,enforceTheme:ee,shortcutsDisabled:te,isUserThemingDisabled:ae}),computed:{themes(){return this.availableThemes.filter((e=>1===e.type))},fonts(){return this.availableThemes.filter((e=>2===e.type))},selectedTheme(){return this.themes.find((e=>!0===e.enabled))||this.themes[0]},description(){return t("theming","Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level.").replace("{guidelines}",this.guidelinesLink).replace("{linkend}","</a>")},guidelinesLink:()=>'<a target="_blank" href="https://www.w3.org/WAI/standards-guidelines/wcag/" rel="noreferrer nofollow">',descriptionDetail(){return t("theming","If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!").replace("{issuetracker}",this.issuetrackerLink).replace("{designteam}",this.designteamLink).replace(/\{linkend\}/g,"</a>")},issuetrackerLink:()=>'<a target="_blank" href="https://github.com/nextcloud/server/issues/" rel="noreferrer nofollow">',designteamLink:()=>'<a target="_blank" href="https://nextcloud.com/design" rel="noreferrer nofollow">'},watch:{shortcutsDisabled(e){this.changeShortcutsDisabled(e)}},methods:{refreshGlobalStyles(){[...document.head.querySelectorAll("link.theme")].forEach((e=>{const t=new URL(e.href);t.searchParams.set("v",Date.now());const a=e.cloneNode();a.href=t.toString(),a.onload=()=>e.remove(),document.head.append(a)}))},updateBackground(e){this.background="custom"===e.type||"default"===e.type?e.type:e.value,this.refreshGlobalStyles()},changeTheme(e){let{enabled:t,id:a}=e;this.themes.forEach((e=>{e.id===a&&t?e.enabled=!0:e.enabled=!1})),this.updateBodyAttributes(),this.selectItem(t,a)},changeFont(e){let{enabled:t,id:a}=e;this.fonts.forEach((e=>{e.id===a&&t?e.enabled=!0:e.enabled=!1})),this.updateBodyAttributes(),this.selectItem(t,a)},async changeShortcutsDisabled(e){e?await(0,s.default)({url:(0,o.generateOcsUrl)("apps/provisioning_api/api/v1/config/users/{appId}/{configKey}",{appId:"theming",configKey:"shortcuts_disabled"}),data:{configValue:"yes"},method:"POST"}):await(0,s.default)({url:(0,o.generateOcsUrl)("apps/provisioning_api/api/v1/config/users/{appId}/{configKey}",{appId:"theming",configKey:"shortcuts_disabled"}),method:"DELETE"})},updateBodyAttributes(){const e=this.themes.filter((e=>!0===e.enabled)).map((e=>e.id)),t=this.fonts.filter((e=>!0===e.enabled)).map((e=>e.id));this.themes.forEach((e=>{document.body.toggleAttribute("data-theme-".concat(e.id),e.enabled)})),this.fonts.forEach((e=>{document.body.toggleAttribute("data-theme-".concat(e.id),e.enabled)})),document.body.setAttribute("data-themes",[...e,...t].join(","))},async selectItem(e,a){try{e?await(0,s.default)({url:(0,o.generateOcsUrl)("apps/theming/api/v1/theme/{themeId}/enable",{themeId:a}),method:"PUT"}):await(0,s.default)({url:(0,o.generateOcsUrl)("apps/theming/api/v1/theme/{themeId}",{themeId:a}),method:"DELETE"})}catch(e){J.error(e,e.response),OC.Notification.showTemporary(t("theming",e.response.data.ocs.meta.message+". Unable to apply the setting."))}}}};var re=n(1080),oe={};oe.styleTagTransform=N(),oe.setAttributes=q(),oe.insert=G().bind(null,"head"),oe.domAPI=P(),oe.insertStyleElement=Z(),U()(re.Z,oe),re.Z&&re.Z.locals&&re.Z.locals;const ie=(0,M.Z)(ne,(function(){var e=this,t=e._self._c;return t("section",[t("NcSettingsSection",{staticClass:"theming",attrs:{title:e.t("theming","Appearance and accessibility"),"limit-width":!1}},[t("p",{domProps:{innerHTML:e._s(e.description)}}),e._v(" "),t("p",{domProps:{innerHTML:e._s(e.descriptionDetail)}}),e._v(" "),t("div",{staticClass:"theming__preview-list"},e._l(e.themes,(function(a){return t("ItemPreview",{key:a.id,attrs:{enforced:a.id===e.enforceTheme,selected:e.selectedTheme.id===a.id,theme:a,unique:1===e.themes.length,type:"theme"},on:{change:e.changeTheme}})})),1),e._v(" "),t("div",{staticClass:"theming__preview-list"},e._l(e.fonts,(function(a){return t("ItemPreview",{key:a.id,attrs:{selected:a.enabled,theme:a,unique:1===e.fonts.length,type:"font"},on:{change:e.changeFont}})})),1)]),e._v(" "),t("NcSettingsSection",{attrs:{title:e.t("theming","Keyboard shortcuts")}},[t("p",[e._v(e._s(e.t("theming","In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps.")))]),e._v(" "),t("NcCheckboxRadioSwitch",{staticClass:"theming__preview-toggle",attrs:{checked:e.shortcutsDisabled,name:"shortcuts_disabled",type:"switch"},on:{"update:checked":function(t){e.shortcutsDisabled=t},change:e.changeShortcutsDisabled}},[e._v("\n\t\t\t"+e._s(e.t("theming","Disable all keyboard shortcuts"))+"\n\t\t")])],1),e._v(" "),t("NcSettingsSection",{staticClass:"background",attrs:{title:e.t("theming","Background"),"data-user-theming-background-disabled":""}},[e.isUserThemingDisabled?[t("p",[e._v(e._s(e.t("theming","Customization has been disabled by your administrator")))])]:[t("p",[e._v(e._s(e.t("theming","Set a custom background")))]),e._v(" "),t("BackgroundSettings",{staticClass:"background__grid",on:{"update:background":e.refreshGlobalStyles}})]],2)],1)}),[],!1,null,"4e5e21ba",null).exports;r.default.prototype.OC=OC,r.default.prototype.t=t;const se=new(r.default.extend(ie));se.$mount("#theming"),se.$on("update:background",(()=>{[...document.head.querySelectorAll("link.theme")].forEach((e=>{const t=new URL(e.href);t.searchParams.set("v",Date.now());const a=e.cloneNode();a.href=t.toString(),a.onload=()=>e.remove(),document.head.append(a)}))}))},1080:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(87537),r=a.n(n),o=a(23645),i=a.n(o)()(r());i.push([e.id,".theming p[data-v-4e5e21ba]{max-width:800px}.theming[data-v-4e5e21ba] a{font-weight:bold}.theming[data-v-4e5e21ba] a:hover,.theming[data-v-4e5e21ba] a:focus{text-decoration:underline}.theming__preview-list[data-v-4e5e21ba]{--gap: 30px;display:grid;margin-top:var(--gap);column-gap:var(--gap);row-gap:var(--gap);grid-template-columns:1fr 1fr}.background__grid[data-v-4e5e21ba]{margin-top:30px}@media(max-width: 1440px){.theming__preview-list[data-v-4e5e21ba]{display:flex;flex-direction:column}}","",{version:3,sources:["webpack://./apps/theming/src/UserThemes.vue"],names:[],mappings:"AAGC,4BACC,eAAA,CAID,4BACC,gBAAA,CAEA,oEAEC,yBAAA,CAIF,wCACC,WAAA,CAEA,YAAA,CACA,qBAAA,CACA,qBAAA,CACA,kBAAA,CACA,6BAAA,CAKD,mCACC,eAAA,CAIF,0BACC,wCACC,YAAA,CACA,qBAAA,CAAA",sourcesContent:["\n.theming {\n\t// Limit width of settings sections for readability\n\tp {\n\t\tmax-width: 800px;\n\t}\n\n\t// Proper highlight for links and focus feedback\n\t&::v-deep a {\n\t\tfont-weight: bold;\n\n\t\t&:hover,\n\t\t&:focus {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t}\n\n\t&__preview-list {\n\t\t--gap: 30px;\n\n\t\tdisplay: grid;\n\t\tmargin-top: var(--gap);\n\t\tcolumn-gap: var(--gap);\n\t\trow-gap: var(--gap);\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n}\n\n.background {\n\t&__grid {\n\t\tmargin-top: 30px;\n\t}\n}\n\n@media (max-width: 1440px) {\n\t.theming__preview-list {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t}\n}\n"],sourceRoot:""}]);const s=i},80829:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(87537),r=a.n(n),o=a(23645),i=a.n(o)()(r());i.push([e.id,".background-selector[data-v-8a72fa3e]{display:flex;flex-wrap:wrap;justify-content:center}.background-selector .background[data-v-8a72fa3e]{overflow:hidden;width:176px;height:96px;margin:8px;text-align:center;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-position:center center;background-size:cover}.background-selector .background__filepicker.background--active[data-v-8a72fa3e]{color:#fff;background-image:var(--image-background)}.background-selector .background__default[data-v-8a72fa3e]{background-color:var(--color-primary-default);background-image:var(--image-background-plain, var(--image-background-default))}.background-selector .background__filepicker[data-v-8a72fa3e],.background-selector .background__default[data-v-8a72fa3e],.background-selector .background__color[data-v-8a72fa3e]{border-color:var(--color-border)}.background-selector .background__color[data-v-8a72fa3e]{color:var(--color-primary-text);background-color:var(--color-primary-default)}.background-selector .background__default[data-v-8a72fa3e],.background-selector .background__shipped[data-v-8a72fa3e]{color:#fff}.background-selector .background[data-color-bright][data-v-8a72fa3e]{color:#000}.background-selector .background--active[data-v-8a72fa3e],.background-selector .background[data-v-8a72fa3e]:hover,.background-selector .background[data-v-8a72fa3e]:focus{border:2px solid var(--border-color, var(--color-primary)) !important}.background-selector .background span[data-v-8a72fa3e]{margin:4px}.background-selector .background .check-icon[data-v-8a72fa3e]{display:none}.background-selector .background--active:not(.icon-loading) .check-icon[data-v-8a72fa3e]{display:block !important}","",{version:3,sources:["webpack://./apps/theming/src/components/BackgroundSettings.vue"],names:[],mappings:"AACA,sCACC,YAAA,CACA,cAAA,CACA,sBAAA,CAEA,kDACC,eAAA,CACA,WAAA,CACA,WAAA,CACA,UAAA,CACA,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,iCAAA,CACA,qBAAA,CAGC,iFACC,UAAA,CACA,wCAAA,CAIF,2DACC,6CAAA,CACA,+EAAA,CAGD,kLACC,gCAAA,CAGD,yDACC,+BAAA,CACA,6CAAA,CAID,sHAEC,UAAA,CAID,qEACC,UAAA,CAGD,0KAIC,qEAAA,CAID,uDACC,UAAA,CAGD,8DACC,YAAA,CAIA,yFAEC,wBAAA",sourcesContent:["\n.background-selector {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tjustify-content: center;\n\n\t.background {\n\t\toverflow: hidden;\n\t\twidth: 176px;\n\t\theight: 96px;\n\t\tmargin: 8px;\n\t\ttext-align: center;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-position: center center;\n\t\tbackground-size: cover;\n\n\t\t&__filepicker {\n\t\t\t&.background--active {\n\t\t\t\tcolor: white;\n\t\t\t\tbackground-image: var(--image-background);\n\t\t\t}\n\t\t}\n\n\t\t&__default {\n\t\t\tbackground-color: var(--color-primary-default);\n\t\t\tbackground-image: var(--image-background-plain, var(--image-background-default));\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\tcolor: var(--color-primary-text);\n\t\t\tbackground-color: var(--color-primary-default);\n\t\t}\n\n\t\t// Over a background image\n\t\t&__default,\n\t\t&__shipped {\n\t\t\tcolor: white;\n\t\t}\n\n\t\t// Text and svg icon dark on bright background\n\t\t&[data-color-bright] {\n\t\t\tcolor: black;\n\t\t}\n\n\t\t&--active,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\t// Use theme color primary, see inline css variable in template\n\t\t\tborder: 2px solid var(--border-color, var(--color-primary)) !important;\n\t\t}\n\n\t\t// Icon\n\t\tspan {\n\t\t\tmargin: 4px;\n\t\t}\n\n\t\t.check-icon {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t&--active:not(.icon-loading) {\n\t\t\t.check-icon {\n\t\t\t\t// Show checkmark\n\t\t\t\tdisplay: block !important;\n\t\t\t}\n\t\t}\n\t}\n}\n\n"],sourceRoot:""}]);const s=i},36907:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(87537),r=a.n(n),o=a(23645),i=a.n(o)()(r());i.push([e.id,".theming__preview[data-v-30cd5e6b]{--ratio: 16;position:relative;display:flex;justify-content:flex-start;max-width:800px}.theming__preview[data-v-30cd5e6b],.theming__preview *[data-v-30cd5e6b]{user-select:none}.theming__preview-image[data-v-30cd5e6b]{flex-basis:calc(16px*var(--ratio));flex-shrink:0;height:calc(10px*var(--ratio));margin-right:var(--gap);cursor:pointer;border-radius:var(--border-radius);background-repeat:no-repeat;background-position:top left;background-size:cover}.theming__preview-description[data-v-30cd5e6b]{display:flex;flex-direction:column}.theming__preview-description h3[data-v-30cd5e6b]{font-weight:bold;margin-bottom:0}.theming__preview-description label[data-v-30cd5e6b]{padding:12px 0}.theming__preview--default[data-v-30cd5e6b]{grid-column:span 2}.theming__preview-warning[data-v-30cd5e6b]{color:var(--color-warning)}@media(max-width: 682.6666666667px){.theming__preview[data-v-30cd5e6b]{flex-direction:column}.theming__preview-image[data-v-30cd5e6b]{margin:0}}","",{version:3,sources:["webpack://./apps/theming/src/components/ItemPreview.vue"],names:[],mappings:"AAGA,mCAEC,WAAA,CAEA,iBAAA,CACA,YAAA,CACA,0BAAA,CACA,eAAA,CAEA,wEAEC,gBAAA,CAGD,yCACC,kCAAA,CACA,aAAA,CACA,8BAAA,CACA,uBAAA,CACA,cAAA,CACA,kCAAA,CACA,2BAAA,CACA,4BAAA,CACA,qBAAA,CAGD,+CACC,YAAA,CACA,qBAAA,CAEA,kDACC,gBAAA,CACA,eAAA,CAGD,qDACC,cAAA,CAIF,4CACC,kBAAA,CAGD,2CACC,0BAAA,CAIF,oCACC,mCACC,qBAAA,CAEA,yCACC,QAAA,CAAA",sourcesContent:["\n@use 'sass:math';\n\n.theming__preview {\n\t// We make previews on 16/10 screens\n\t--ratio: 16;\n\n\tposition: relative;\n\tdisplay: flex;\n\tjustify-content: flex-start;\n\tmax-width: 800px;\n\n\t&,\n\t* {\n\t\tuser-select: none;\n\t}\n\n\t&-image {\n\t\tflex-basis: calc(16px * var(--ratio));\n\t\tflex-shrink: 0;\n\t\theight: calc(10px * var(--ratio));\n\t\tmargin-right: var(--gap);\n\t\tcursor: pointer;\n\t\tborder-radius: var(--border-radius);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: top left;\n\t\tbackground-size: cover;\n\t}\n\n\t&-description {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\n\t\th3 {\n\t\t\tfont-weight: bold;\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\tlabel {\n\t\t\tpadding: 12px 0;\n\t\t}\n\t}\n\n\t&--default {\n\t\tgrid-column: span 2;\n\t}\n\n\t&-warning {\n\t\tcolor: var(--color-warning);\n\t}\n}\n\n@media (max-width: math.div(1024px, 1.5)) {\n\t.theming__preview {\n\t\tflex-direction: column;\n\n\t\t&-image {\n\t\t\tmargin: 0;\n\t\t}\n\t}\n}\n\n"],sourceRoot:""}]);const s=i}},n={};function r(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={id:e,loaded:!1,exports:{}};return a[e].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.m=a,e=[],r.O=(t,a,n,o)=>{if(!a){var i=1/0;for(l=0;l<e.length;l++){a=e[l][0],n=e[l][1],o=e[l][2];for(var s=!0,c=0;c<a.length;c++)(!1&o||i>=o)&&Object.keys(r.O).every((e=>r.O[e](a[c])))?a.splice(c--,1):(s=!1,o<i&&(i=o));if(s){e.splice(l--,1);var d=n();void 0!==d&&(t=d)}}return t}o=o||0;for(var l=e.length;l>0&&e[l-1][2]>o;l--)e[l]=e[l-1];e[l]=[a,n,o]},r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var a in t)r.o(t,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},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=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),r.j=1474,(()=>{r.b=document.baseURI||self.location.href;var e={1474:0};r.O.j=t=>0===e[t];var t=(t,a)=>{var n,o,i=a[0],s=a[1],c=a[2],d=0;if(i.some((t=>0!==e[t]))){for(n in s)r.o(s,n)&&(r.m[n]=s[n]);if(c)var l=c(r)}for(t&&t(a);d<i.length;d++)o=i[d],r.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return r.O(l)},a=self.webpackChunknextcloud=self.webpackChunknextcloud||[];a.forEach(t.bind(null,0)),a.push=t.bind(null,a.push.bind(a))})(),r.nc=void 0;var o=r.O(void 0,[7874],(()=>r(47546)));o=r.O(o)})();
+//# sourceMappingURL=theming-personal-theming.js.map?v=1f5be71f263fef96c8f1 \ No newline at end of file
diff --git a/dist/theming-personal-theming.js.map b/dist/theming-personal-theming.js.map
index 84281da85f4..1fcae06571d 100644
--- a/dist/theming-personal-theming.js.map
+++ b/dist/theming-personal-theming.js.map
@@ -1 +1 @@
-{"version":3,"file":"theming-personal-theming.js?v=a8ce25d07610b809b967","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/theming/src/components/BackgroundSettings.vue","webpack:///nextcloud/apps/theming/src/components/BackgroundSettings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/components/BackgroundSettings.vue?247e","webpack://nextcloud/./apps/theming/src/components/BackgroundSettings.vue?65db","webpack://nextcloud/./apps/theming/src/components/BackgroundSettings.vue?da76","webpack://nextcloud/./apps/theming/src/components/ItemPreview.vue?7631","webpack:///nextcloud/apps/theming/src/components/ItemPreview.vue","webpack:///nextcloud/apps/theming/src/components/ItemPreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/components/ItemPreview.vue?fb82","webpack://nextcloud/./apps/theming/src/components/ItemPreview.vue?8797","webpack:///nextcloud/apps/theming/src/UserThemes.vue","webpack:///nextcloud/apps/theming/src/UserThemes.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/UserThemes.vue?385c","webpack://nextcloud/./apps/theming/src/UserThemes.vue?7eb2","webpack://nextcloud/./apps/theming/src/UserThemes.vue?b683","webpack:///nextcloud/apps/theming/src/personal-settings.js","webpack:///nextcloud/apps/theming/src/helpers/refreshStyles.js","webpack:///nextcloud/apps/theming/src/UserThemes.vue?vue&type=style&index=0&id=4e5e21ba&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/BackgroundSettings.vue?vue&type=style&index=0&id=34c50308&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/theming/src/components/ItemPreview.vue?vue&type=style&index=0&id=30cd5e6b&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","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/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (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((key) => (__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 Christopher Ng <chrng8@gmail.com>\n - @author Greta Doci <gretadoci@gmail.com>\n - @author John Molakvoæ <skjnldsv@protonmail.com>\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\" data-user-theming-background-settings>\n\t\t<!-- Custom background -->\n\t\t<button class=\"background background__filepicker\"\n\t\t\t:class=\"{ 'icon-loading': loading === 'custom', 'background--active': backgroundImage === 'custom' }\"\n\t\t\t:data-color-bright=\"invertTextColor(Theming.color)\"\n\t\t\tdata-user-theming-background-custom\n\t\t\ttabindex=\"0\"\n\t\t\t@click=\"pickFile\">\n\t\t\t{{ t('theming', 'Custom background') }}\n\t\t\t<ImageEdit v-if=\"backgroundImage !== 'custom'\" :size=\"26\" />\n\t\t\t<Check :size=\"44\" />\n\t\t</button>\n\n\t\t<!-- Default background -->\n\t\t<button class=\"background background__default\"\n\t\t\t:class=\"{ 'icon-loading': loading === 'default', 'background--active': backgroundImage === 'default' }\"\n\t\t\t:data-color-bright=\"invertTextColor(Theming.defaultColor)\"\n\t\t\t:style=\"{ '--border-color': Theming.defaultColor }\"\n\t\t\tdata-user-theming-background-default\n\t\t\ttabindex=\"0\"\n\t\t\t@click=\"setDefault\">\n\t\t\t{{ t('theming', 'Default background') }}\n\t\t\t<Check :size=\"44\" />\n\t\t</button>\n\n\t\t<!-- Custom color picker -->\n\t\t<NcColorPicker v-model=\"Theming.color\" @input=\"debouncePickColor\">\n\t\t\t<button class=\"background background__color\"\n\t\t\t\t:data-color=\"Theming.color\"\n\t\t\t\t:data-color-bright=\"invertTextColor(Theming.color)\"\n\t\t\t\t:style=\"{ backgroundColor: Theming.color, '--border-color': Theming.color}\"\n\t\t\t\tdata-user-theming-background-color\n\t\t\t\ttabindex=\"0\">\n\t\t\t\t{{ t('theming', 'Change color') }}\n\t\t\t</button>\n\t\t</NcColorPicker>\n\n\t\t<!-- Remove background -->\n\t\t<button class=\"background background__delete\"\n\t\t\t:class=\"{ 'background--active': isBackgroundDisabled }\"\n\t\t\tdata-user-theming-background-clear\n\t\t\ttabindex=\"0\"\n\t\t\t@click=\"removeBackground\">\n\t\t\t{{ t('theming', 'No background') }}\n\t\t\t<Close v-if=\"!isBackgroundDisabled\" :size=\"32\" />\n\t\t\t<Check :size=\"44\" />\n\t\t</button>\n\n\t\t<!-- Background set selection -->\n\t\t<button v-for=\"shippedBackground in shippedBackgrounds\"\n\t\t\t:key=\"shippedBackground.name\"\n\t\t\t:title=\"shippedBackground.details.attribution\"\n\t\t\t:aria-label=\"shippedBackground.details.attribution\"\n\t\t\t:class=\"{ 'icon-loading': loading === shippedBackground.name, 'background--active': backgroundImage === shippedBackground.name }\"\n\t\t\t:data-color-bright=\"shippedBackground.details.theming === 'dark'\"\n\t\t\t:data-user-theming-background-shipped=\"shippedBackground.name\"\n\t\t\t:style=\"{ backgroundImage: 'url(' + shippedBackground.preview + ')', '--border-color': shippedBackground.details.primary_color }\"\n\t\t\tclass=\"background background__shipped\"\n\t\t\ttabindex=\"0\"\n\t\t\t@click=\"setShipped(shippedBackground.name)\">\n\t\t\t<Check :size=\"44\" />\n\t\t</button>\n\t</div>\n</template>\n\n<script>\nimport { generateFilePath, generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport axios from '@nextcloud/axios'\nimport Check from 'vue-material-design-icons/Check.vue'\nimport Close from 'vue-material-design-icons/Close.vue'\nimport ImageEdit from 'vue-material-design-icons/ImageEdit.vue'\nimport debounce from 'debounce'\nimport NcColorPicker from '@nextcloud/vue/dist/Components/NcColorPicker.js'\nimport Vibrant from 'node-vibrant'\nimport { Palette } from 'node-vibrant/lib/color.js'\nimport { getFilePickerBuilder } from '@nextcloud/dialogs'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nconst backgroundImage = loadState('theming', 'backgroundImage')\nconst shippedBackgroundList = loadState('theming', 'shippedBackgrounds')\nconst themingDefaultBackground = loadState('theming', 'themingDefaultBackground')\nconst defaultShippedBackground = loadState('theming', 'defaultShippedBackground')\n\nconst prefixWithBaseUrl = (url) => generateFilePath('theming', '', 'img/background/') + url\nconst picker = getFilePickerBuilder(t('theming', 'Select a background from your files'))\n\t.setMultiSelect(false)\n\t.setModal(true)\n\t.setType(1)\n\t.setMimeTypeFilter(['image/png', 'image/gif', 'image/jpeg', 'image/svg+xml', 'image/svg'])\n\t.build()\n\nexport default {\n\tname: 'BackgroundSettings',\n\n\tcomponents: {\n\t\tCheck,\n\t\tClose,\n\t\tImageEdit,\n\t\tNcColorPicker,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\tTheming: loadState('theming', 'data', {}),\n\n\t\t\t// User background image and color settings\n\t\t\tbackgroundImage,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tshippedBackgrounds() {\n\t\t\treturn Object.keys(shippedBackgroundList)\n\t\t\t\t.map(fileName => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: fileName,\n\t\t\t\t\t\turl: prefixWithBaseUrl(fileName),\n\t\t\t\t\t\tpreview: prefixWithBaseUrl('preview/' + fileName),\n\t\t\t\t\t\tdetails: shippedBackgroundList[fileName],\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.filter(background => {\n\t\t\t\t\t// If the admin did not changed the global background\n\t\t\t\t\t// let's hide the default background to not show it twice\n\t\t\t\t\tif (!this.isGlobalBackgroundDeleted && !this.isGlobalBackgroundDefault) {\n\t\t\t\t\t\treturn background.name !== defaultShippedBackground\n\t\t\t\t\t}\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t},\n\n\t\tisGlobalBackgroundDefault() {\n\t\t\treturn !!themingDefaultBackground\n\t\t},\n\n\t\tisGlobalBackgroundDeleted() {\n\t\t\treturn themingDefaultBackground === 'backgroundColor'\n\t\t},\n\n\t\tisBackgroundDisabled() {\n\t\t\treturn this.backgroundImage === 'disabled'\n\t\t\t|| !this.backgroundImage\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Do we need to invert the text if color is too bright?\n\t\t *\n\t\t * @param {string} color the hex color\n\t\t */\n\t\tinvertTextColor(color) {\n\t\t\treturn this.calculateLuma(color) > 0.6\n\t\t},\n\n\t\t/**\n\t\t * Calculate luminance of provided hex color\n\t\t *\n\t\t * @param {string} color the hex color\n\t\t */\n\t\tcalculateLuma(color) {\n\t\t\tconst [red, green, blue] = this.hexToRGB(color)\n\t\t\treturn (0.2126 * red + 0.7152 * green + 0.0722 * blue) / 255\n\t\t},\n\n\t\t/**\n\t\t * Convert hex color to RGB\n\t\t *\n\t\t * @param {string} hex the hex color\n\t\t */\n\t\thexToRGB(hex) {\n\t\t\tconst result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n\t\t\treturn result\n\t\t\t\t? [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)]\n\t\t\t\t: null\n\t\t},\n\n\t\t/**\n\t\t * Update local state\n\t\t *\n\t\t * @param {object} data destructuring object\n\t\t * @param {string} data.backgroundColor background color value\n\t\t * @param {string} data.backgroundImage background image value\n\t\t * @param {string} data.version cache buster number\n\t\t * @see https://github.com/nextcloud/server/blob/c78bd45c64d9695724fc44fe8453a88824b85f2f/apps/theming/lib/Controller/UserThemeController.php#L187-L191\n\t\t */\n\t\tasync update(data) {\n\t\t\t// Update state\n\t\t\tthis.backgroundImage = data.backgroundImage\n\t\t\tthis.Theming.color = data.backgroundColor\n\n\t\t\t// Notify parent and reload style\n\t\t\tthis.$emit('update:background')\n\t\t\tthis.loading = false\n\t\t},\n\n\t\tasync setDefault() {\n\t\t\tthis.loading = 'default'\n\t\t\tconst result = await axios.post(generateUrl('/apps/theming/background/default'))\n\t\t\tthis.update(result.data)\n\t\t},\n\n\t\tasync setShipped(shipped) {\n\t\t\tthis.loading = shipped\n\t\t\tconst result = await axios.post(generateUrl('/apps/theming/background/shipped'), { value: shipped })\n\t\t\tthis.update(result.data)\n\t\t},\n\n\t\tasync setFile(path, color = null) {\n\t\t\tthis.loading = 'custom'\n\t\t\tconst result = await axios.post(generateUrl('/apps/theming/background/custom'), { value: path, color })\n\t\t\tthis.update(result.data)\n\t\t},\n\n\t\tasync removeBackground() {\n\t\t\tthis.loading = 'remove'\n\t\t\tconst result = await axios.delete(generateUrl('/apps/theming/background/custom'))\n\t\t\tthis.update(result.data)\n\t\t},\n\n\t\tasync pickColor(event) {\n\t\t\tthis.loading = 'color'\n\t\t\tconst color = event?.target?.dataset?.color || this.Theming?.color || '#0082c9'\n\t\t\tconst result = await axios.post(generateUrl('/apps/theming/background/color'), { color })\n\t\t\tthis.update(result.data)\n\t\t},\n\t\tdebouncePickColor: debounce(function() {\n\t\t\tthis.pickColor(...arguments)\n\t\t}, 200),\n\n\t\tasync pickFile() {\n\t\t\tconst path = await picker.pick()\n\t\t\tthis.loading = 'custom'\n\n\t\t\t// Extract primary color from image\n\t\t\tlet response = null\n\t\t\tlet color = null\n\t\t\ttry {\n\t\t\t\tconst fileUrl = generateRemoteUrl('dav/files/' + getCurrentUser().uid + path)\n\t\t\t\tresponse = await axios.get(fileUrl, { responseType: 'blob' })\n\t\t\t\tconst blobUrl = URL.createObjectURL(response.data)\n\t\t\t\tconst palette = await this.getColorPaletteFromBlob(blobUrl)\n\n\t\t\t\t// DarkVibrant is accessible AND visually pleasing\n\t\t\t\t// Vibrant is not accessible enough and others are boring\n\t\t\t\tcolor = palette?.DarkVibrant?.hex\n\t\t\t\tthis.setFile(path, color)\n\n\t\t\t\t// Log data\n\t\t\t\tconsole.debug('Extracted colour', color, 'from custom image', path, palette)\n\t\t\t} catch (error) {\n\t\t\t\tthis.setFile(path)\n\t\t\t\tconsole.error('Unable to extract colour from custom image', { error, path, response, color })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Extract a Vibrant color palette from a blob URL\n\t\t *\n\t\t * @param {string} blobUrl the blob URL\n\t\t * @return {Promise<Palette>}\n\t\t */\n\t\tgetColorPaletteFromBlob(blobUrl) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst vibrant = new Vibrant(blobUrl)\n\t\t\t\tvibrant.getPalette((error, palette) => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\treject(error)\n\t\t\t\t\t}\n\t\t\t\t\tresolve(palette)\n\t\t\t\t})\n\t\t\t})\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\toverflow: hidden;\n\t\twidth: 176px;\n\t\theight: 96px;\n\t\tmargin: 8px;\n\t\ttext-align: center;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-position: center center;\n\t\tbackground-size: cover;\n\n\t\t&__filepicker {\n\t\t\t&.background--active {\n\t\t\t\tcolor: white;\n\t\t\t\tbackground-image: var(--image-background);\n\t\t\t}\n\t\t}\n\n\t\t&__default {\n\t\t\tbackground-color: var(--color-primary-default);\n\t\t\tbackground-image: var(--image-background-default);\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\tcolor: var(--color-primary-text);\n\t\t\tbackground-color: var(--color-primary-default);\n\t\t}\n\n\t\t// Over a background image\n\t\t&__default,\n\t\t&__shipped {\n\t\t\tcolor: white;\n\t\t}\n\n\t\t// Text and svg icon dark on bright background\n\t\t&[data-color-bright] {\n\t\t\tcolor: black;\n\t\t}\n\n\t\t&--active,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\t// Use theme color primary, see inline css variable in template\n\t\t\tborder: 2px solid var(--border-color, var(--color-primary)) !important;\n\t\t}\n\n\t\t// Icon\n\t\tspan {\n\t\t\tmargin: 4px;\n\t\t}\n\n\t\t.check-icon {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t&--active:not(.icon-loading) {\n\t\t\t.check-icon {\n\t\t\t\t// Show checkmark\n\t\t\t\tdisplay: block !important;\n\t\t\t}\n\t\t}\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!./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=34c50308&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BackgroundSettings.vue?vue&type=style&index=0&id=34c50308&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./BackgroundSettings.vue?vue&type=template&id=34c50308&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=34c50308&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"34c50308\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"background-selector\",attrs:{\"data-user-theming-background-settings\":\"\"}},[_c('button',{staticClass:\"background background__filepicker\",class:{ 'icon-loading': _vm.loading === 'custom', 'background--active': _vm.backgroundImage === 'custom' },attrs:{\"data-color-bright\":_vm.invertTextColor(_vm.Theming.color),\"data-user-theming-background-custom\":\"\",\"tabindex\":\"0\"},on:{\"click\":_vm.pickFile}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('theming', 'Custom background'))+\"\\n\\t\\t\"),(_vm.backgroundImage !== 'custom')?_c('ImageEdit',{attrs:{\"size\":26}}):_vm._e(),_vm._v(\" \"),_c('Check',{attrs:{\"size\":44}})],1),_vm._v(\" \"),_c('button',{staticClass:\"background background__default\",class:{ 'icon-loading': _vm.loading === 'default', 'background--active': _vm.backgroundImage === 'default' },style:({ '--border-color': _vm.Theming.defaultColor }),attrs:{\"data-color-bright\":_vm.invertTextColor(_vm.Theming.defaultColor),\"data-user-theming-background-default\":\"\",\"tabindex\":\"0\"},on:{\"click\":_vm.setDefault}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('theming', 'Default background'))+\"\\n\\t\\t\"),_c('Check',{attrs:{\"size\":44}})],1),_vm._v(\" \"),_c('NcColorPicker',{on:{\"input\":_vm.debouncePickColor},model:{value:(_vm.Theming.color),callback:function ($$v) {_vm.$set(_vm.Theming, \"color\", $$v)},expression:\"Theming.color\"}},[_c('button',{staticClass:\"background background__color\",style:({ backgroundColor: _vm.Theming.color, '--border-color': _vm.Theming.color}),attrs:{\"data-color\":_vm.Theming.color,\"data-color-bright\":_vm.invertTextColor(_vm.Theming.color),\"data-user-theming-background-color\":\"\",\"tabindex\":\"0\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('theming', 'Change color'))+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('button',{staticClass:\"background background__delete\",class:{ 'background--active': _vm.isBackgroundDisabled },attrs:{\"data-user-theming-background-clear\":\"\",\"tabindex\":\"0\"},on:{\"click\":_vm.removeBackground}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('theming', 'No background'))+\"\\n\\t\\t\"),(!_vm.isBackgroundDisabled)?_c('Close',{attrs:{\"size\":32}}):_vm._e(),_vm._v(\" \"),_c('Check',{attrs:{\"size\":44}})],1),_vm._v(\" \"),_vm._l((_vm.shippedBackgrounds),function(shippedBackground){return _c('button',{key:shippedBackground.name,staticClass:\"background background__shipped\",class:{ 'icon-loading': _vm.loading === shippedBackground.name, 'background--active': _vm.backgroundImage === shippedBackground.name },style:({ backgroundImage: 'url(' + shippedBackground.preview + ')', '--border-color': shippedBackground.details.primary_color }),attrs:{\"title\":shippedBackground.details.attribution,\"aria-label\":shippedBackground.details.attribution,\"data-color-bright\":shippedBackground.details.theming === 'dark',\"data-user-theming-background-shipped\":shippedBackground.name,\"tabindex\":\"0\"},on:{\"click\":function($event){return _vm.setShipped(shippedBackground.name)}}},[_c('Check',{attrs:{\"size\":44}})],1)})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"theming__preview\",class:'theming__preview--' + _vm.theme.id},[_c('div',{staticClass:\"theming__preview-image\",style:({ backgroundImage: 'url(' + _vm.img + ')' }),on:{\"click\":_vm.onToggle}}),_vm._v(\" \"),_c('div',{staticClass:\"theming__preview-description\"},[_c('h3',[_vm._v(_vm._s(_vm.theme.title))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.theme.description))]),_vm._v(\" \"),(_vm.enforced)?_c('span',{staticClass:\"theming__preview-warning\",attrs:{\"role\":\"note\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('theming', 'Theme selection is enforced'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{staticClass:\"theming__preview-toggle\",attrs:{\"checked\":_vm.checked,\"disabled\":_vm.enforced,\"name\":_vm.name,\"type\":_vm.switchType},on:{\"update:checked\":function($event){_vm.checked=$event}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.theme.enableLabel)+\"\\n\\t\\t\")])],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div :class=\"'theming__preview--' + theme.id\" class=\"theming__preview\">\n\t\t<div class=\"theming__preview-image\" :style=\"{ backgroundImage: 'url(' + img + ')' }\" @click=\"onToggle\" />\n\t\t<div class=\"theming__preview-description\">\n\t\t\t<h3>{{ theme.title }}</h3>\n\t\t\t<p>{{ theme.description }}</p>\n\t\t\t<span v-if=\"enforced\" class=\"theming__preview-warning\" role=\"note\">\n\t\t\t\t{{ t('theming', 'Theme selection is enforced') }}\n\t\t\t</span>\n\t\t\t<NcCheckboxRadioSwitch class=\"theming__preview-toggle\"\n\t\t\t\t:checked.sync=\"checked\"\n\t\t\t\t:disabled=\"enforced\"\n\t\t\t\t:name=\"name\"\n\t\t\t\t:type=\"switchType\">\n\t\t\t\t{{ theme.enableLabel }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { generateFilePath } from '@nextcloud/router'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\n\nexport default {\n\tname: 'ItemPreview',\n\tcomponents: {\n\t\tNcCheckboxRadioSwitch,\n\t},\n\tprops: {\n\t\tenforced: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tselected: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ttheme: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tunique: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcomputed: {\n\t\tswitchType() {\n\t\t\treturn this.unique ? 'switch' : 'radio'\n\t\t},\n\n\t\tname() {\n\t\t\treturn !this.unique ? this.type : null\n\t\t},\n\n\t\timg() {\n\t\t\treturn generateFilePath('theming', 'img', this.theme.id + '.jpg')\n\t\t},\n\n\t\tchecked: {\n\t\t\tget() {\n\t\t\t\treturn this.selected\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tconsole.debug('Changed theme', this.theme.id, checked)\n\n\t\t\t\t// If this is a radio, we can only enable\n\t\t\t\tif (!this.unique) {\n\t\t\t\t\tthis.$emit('change', { enabled: true, id: this.theme.id })\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// If this is a switch, we can disable the theme\n\t\t\t\tthis.$emit('change', { enabled: checked === true, id: this.theme.id })\n\t\t\t},\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonToggle() {\n\t\t\tif (this.switchType === 'radio') {\n\t\t\t\tthis.checked = true\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Invert state\n\t\t\tthis.checked = !this.checked\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n@use 'sass:math';\n\n.theming__preview {\n\t// We make previews on 16/10 screens\n\t--ratio: 16;\n\n\tposition: relative;\n\tdisplay: flex;\n\tjustify-content: flex-start;\n\tmax-width: 800px;\n\n\t&,\n\t* {\n\t\tuser-select: none;\n\t}\n\n\t&-image {\n\t\tflex-basis: calc(16px * var(--ratio));\n\t\tflex-shrink: 0;\n\t\theight: calc(10px * var(--ratio));\n\t\tmargin-right: var(--gap);\n\t\tcursor: pointer;\n\t\tborder-radius: var(--border-radius);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: top left;\n\t\tbackground-size: cover;\n\t}\n\n\t&-description {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\n\t\th3 {\n\t\t\tfont-weight: bold;\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\tlabel {\n\t\t\tpadding: 12px 0;\n\t\t}\n\t}\n\n\t&--default {\n\t\tgrid-column: span 2;\n\t}\n\n\t&-warning {\n\t\tcolor: var(--color-warning);\n\t}\n}\n\n@media (max-width: math.div(1024px, 1.5)) {\n\t.theming__preview {\n\t\tflex-direction: column;\n\n\t\t&-image {\n\t\t\tmargin: 0;\n\t\t}\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!./ItemPreview.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!./ItemPreview.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!./ItemPreview.vue?vue&type=style&index=0&id=30cd5e6b&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemPreview.vue?vue&type=style&index=0&id=30cd5e6b&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ItemPreview.vue?vue&type=template&id=30cd5e6b&scoped=true&\"\nimport script from \"./ItemPreview.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemPreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ItemPreview.vue?vue&type=style&index=0&id=30cd5e6b&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"30cd5e6b\",\n null\n \n)\n\nexport default component.exports","<!--\n - @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n - @copyright Copyright (c) 2022 Greta Doci <gretadoci@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<section>\n\t\t<NcSettingsSection :title=\"t('theming', 'Appearance and accessibility')\"\n\t\t\t:limit-width=\"false\"\n\t\t\tclass=\"theming\">\n\t\t\t<p v-html=\"description\" />\n\t\t\t<p v-html=\"descriptionDetail\" />\n\n\t\t\t<div class=\"theming__preview-list\">\n\t\t\t\t<ItemPreview v-for=\"theme in themes\"\n\t\t\t\t\t:key=\"theme.id\"\n\t\t\t\t\t:enforced=\"theme.id === enforceTheme\"\n\t\t\t\t\t:selected=\"selectedTheme.id === theme.id\"\n\t\t\t\t\t:theme=\"theme\"\n\t\t\t\t\t:unique=\"themes.length === 1\"\n\t\t\t\t\ttype=\"theme\"\n\t\t\t\t\t@change=\"changeTheme\" />\n\t\t\t</div>\n\n\t\t\t<div class=\"theming__preview-list\">\n\t\t\t\t<ItemPreview v-for=\"theme in fonts\"\n\t\t\t\t\t:key=\"theme.id\"\n\t\t\t\t\t:selected=\"theme.enabled\"\n\t\t\t\t\t:theme=\"theme\"\n\t\t\t\t\t:unique=\"fonts.length === 1\"\n\t\t\t\t\ttype=\"font\"\n\t\t\t\t\t@change=\"changeFont\" />\n\t\t\t</div>\n\t\t</NcSettingsSection>\n\n\t\t<NcSettingsSection :title=\"t('theming', 'Keyboard shortcuts')\">\n\t\t\t<p>{{ t('theming', 'In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps.') }}</p>\n\t\t\t<NcCheckboxRadioSwitch class=\"theming__preview-toggle\"\n\t\t\t\t:checked.sync=\"shortcutsDisabled\"\n\t\t\t\tname=\"shortcuts_disabled\"\n\t\t\t\ttype=\"switch\"\n\t\t\t\t@change=\"changeShortcutsDisabled\">\n\t\t\t\t{{ t('theming', 'Disable all keyboard shortcuts') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcSettingsSection>\n\n\t\t<NcSettingsSection :title=\"t('theming', 'Background')\"\n\t\t\tclass=\"background\"\n\t\t\tdata-user-theming-background-disabled>\n\t\t\t<template v-if=\"isUserThemingDisabled\">\n\t\t\t\t<p>{{ t('theming', 'Customization has been disabled by your administrator') }}</p>\n\t\t\t</template>\n\t\t\t<template v-else>\n\t\t\t\t<p>{{ t('theming', 'Set a custom background') }}</p>\n\t\t\t\t<BackgroundSettings class=\"background__grid\" @update:background=\"refreshGlobalStyles\" />\n\t\t\t</template>\n\t\t</NcSettingsSection>\n\t</section>\n</template>\n\n<script>\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport axios from '@nextcloud/axios'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport NcSettingsSection from '@nextcloud/vue/dist/Components/NcSettingsSection.js'\n\nimport BackgroundSettings from './components/BackgroundSettings.vue'\nimport ItemPreview from './components/ItemPreview.vue'\n\nconst availableThemes = loadState('theming', 'themes', [])\nconst enforceTheme = loadState('theming', 'enforceTheme', '')\nconst shortcutsDisabled = loadState('theming', 'shortcutsDisabled', false)\n\nconst isUserThemingDisabled = loadState('theming', 'isUserThemingDisabled')\n\nconsole.debug('Available themes', availableThemes)\n\nexport default {\n\tname: 'UserThemes',\n\n\tcomponents: {\n\t\tItemPreview,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcSettingsSection,\n\t\tBackgroundSettings,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tavailableThemes,\n\n\t\t\t// Admin defined configs\n\t\t\tenforceTheme,\n\t\t\tshortcutsDisabled,\n\t\t\tisUserThemingDisabled,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tthemes() {\n\t\t\treturn this.availableThemes.filter(theme => theme.type === 1)\n\t\t},\n\n\t\tfonts() {\n\t\t\treturn this.availableThemes.filter(theme => theme.type === 2)\n\t\t},\n\n\t\t// Selected theme, fallback on first (default) if none\n\t\tselectedTheme() {\n\t\t\treturn this.themes.find(theme => theme.enabled === true) || this.themes[0]\n\t\t},\n\n\t\tdescription() {\n\t\t\t// using the `t` replace method escape html, we have to do it manually :/\n\t\t\treturn t(\n\t\t\t\t'theming',\n\t\t\t\t'Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level.'\n\t\t\t)\n\t\t\t\t.replace('{guidelines}', this.guidelinesLink)\n\t\t\t\t.replace('{linkend}', '</a>')\n\t\t},\n\n\t\tguidelinesLink() {\n\t\t\treturn '<a target=\"_blank\" href=\"https://www.w3.org/WAI/standards-guidelines/wcag/\" rel=\"noreferrer nofollow\">'\n\t\t},\n\n\t\tdescriptionDetail() {\n\t\t\treturn t(\n\t\t\t\t'theming',\n\t\t\t\t'If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!'\n\t\t\t)\n\t\t\t\t.replace('{issuetracker}', this.issuetrackerLink)\n\t\t\t\t.replace('{designteam}', this.designteamLink)\n\t\t\t\t.replace(/\\{linkend\\}/g, '</a>')\n\t\t},\n\n\t\tissuetrackerLink() {\n\t\t\treturn '<a target=\"_blank\" href=\"https://github.com/nextcloud/server/issues/\" rel=\"noreferrer nofollow\">'\n\t\t},\n\n\t\tdesignteamLink() {\n\t\t\treturn '<a target=\"_blank\" href=\"https://nextcloud.com/design\" rel=\"noreferrer nofollow\">'\n\t\t},\n\t},\n\n\twatch: {\n\t\tshortcutsDisabled(newState) {\n\t\t\tthis.changeShortcutsDisabled(newState)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t// Refresh server-side generated theming CSS\n\t\trefreshGlobalStyles() {\n\t\t\t[...document.head.querySelectorAll('link.theme')].forEach(theme => {\n\t\t\t\tconst url = new URL(theme.href)\n\t\t\t\turl.searchParams.set('v', Date.now())\n\t\t\t\tconst newTheme = theme.cloneNode()\n\t\t\t\tnewTheme.href = url.toString()\n\t\t\t\tnewTheme.onload = () => theme.remove()\n\t\t\t\tdocument.head.append(newTheme)\n\t\t\t})\n\t\t},\n\n\t\tupdateBackground(data) {\n\t\t\tthis.background = (data.type === 'custom' || data.type === 'default') ? data.type : data.value\n\t\t\tthis.refreshGlobalStyles()\n\t\t},\n\n\t\tchangeTheme({ enabled, id }) {\n\t\t\t// Reset selected and select new one\n\t\t\tthis.themes.forEach(theme => {\n\t\t\t\tif (theme.id === id && enabled) {\n\t\t\t\t\ttheme.enabled = true\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\ttheme.enabled = false\n\t\t\t})\n\n\t\t\tthis.updateBodyAttributes()\n\t\t\tthis.selectItem(enabled, id)\n\t\t},\n\n\t\tchangeFont({ enabled, id }) {\n\t\t\t// Reset selected and select new one\n\t\t\tthis.fonts.forEach(font => {\n\t\t\t\tif (font.id === id && enabled) {\n\t\t\t\t\tfont.enabled = true\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tfont.enabled = false\n\t\t\t})\n\n\t\t\tthis.updateBodyAttributes()\n\t\t\tthis.selectItem(enabled, id)\n\t\t},\n\n\t\tasync changeShortcutsDisabled(newState) {\n\t\t\tif (newState) {\n\t\t\t\tawait axios({\n\t\t\t\t\turl: generateOcsUrl('apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', {\n\t\t\t\t\t\tappId: 'theming',\n\t\t\t\t\t\tconfigKey: 'shortcuts_disabled',\n\t\t\t\t\t}),\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tconfigValue: 'yes',\n\t\t\t\t\t},\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tawait axios({\n\t\t\t\t\turl: generateOcsUrl('apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', {\n\t\t\t\t\t\tappId: 'theming',\n\t\t\t\t\t\tconfigKey: 'shortcuts_disabled',\n\t\t\t\t\t}),\n\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tupdateBodyAttributes() {\n\t\t\tconst enabledThemesIDs = this.themes.filter(theme => theme.enabled === true).map(theme => theme.id)\n\t\t\tconst enabledFontsIDs = this.fonts.filter(font => font.enabled === true).map(font => font.id)\n\n\t\t\tthis.themes.forEach(theme => {\n\t\t\t\tdocument.body.toggleAttribute(`data-theme-${theme.id}`, theme.enabled)\n\t\t\t})\n\t\t\tthis.fonts.forEach(font => {\n\t\t\t\tdocument.body.toggleAttribute(`data-theme-${font.id}`, font.enabled)\n\t\t\t})\n\n\t\t\tdocument.body.setAttribute('data-themes', [...enabledThemesIDs, ...enabledFontsIDs].join(','))\n\t\t},\n\n\t\t/**\n\t\t * Commit a change and force reload css\n\t\t * Fetching the file again will trigger the server update\n\t\t *\n\t\t * @param {boolean} enabled the theme state\n\t\t * @param {string} themeId the theme ID to change\n\t\t */\n\t\tasync selectItem(enabled, themeId) {\n\t\t\ttry {\n\t\t\t\tif (enabled) {\n\t\t\t\t\tawait axios({\n\t\t\t\t\t\turl: generateOcsUrl('apps/theming/api/v1/theme/{themeId}/enable', { themeId }),\n\t\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tawait axios({\n\t\t\t\t\t\turl: generateOcsUrl('apps/theming/api/v1/theme/{themeId}', { themeId }),\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(err, err.response)\n\t\t\t\tOC.Notification.showTemporary(t('theming', err.response.data.ocs.meta.message + '. Unable to apply the setting.'))\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.theming {\n\t// Limit width of settings sections for readability\n\tp {\n\t\tmax-width: 800px;\n\t}\n\n\t// Proper highlight for links and focus feedback\n\t&::v-deep a {\n\t\tfont-weight: bold;\n\n\t\t&:hover,\n\t\t&:focus {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t}\n\n\t&__preview-list {\n\t\t--gap: 30px;\n\n\t\tdisplay: grid;\n\t\tmargin-top: var(--gap);\n\t\tcolumn-gap: var(--gap);\n\t\trow-gap: var(--gap);\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n}\n\n.background {\n\t&__grid {\n\t\tmargin-top: 30px;\n\t}\n}\n\n@media (max-width: 1440px) {\n\t.theming__preview-list {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\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!./UserThemes.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!./UserThemes.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!./UserThemes.vue?vue&type=style&index=0&id=4e5e21ba&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserThemes.vue?vue&type=style&index=0&id=4e5e21ba&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserThemes.vue?vue&type=template&id=4e5e21ba&scoped=true&\"\nimport script from \"./UserThemes.vue?vue&type=script&lang=js&\"\nexport * from \"./UserThemes.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserThemes.vue?vue&type=style&index=0&id=4e5e21ba&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4e5e21ba\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('NcSettingsSection',{staticClass:\"theming\",attrs:{\"title\":_vm.t('theming', 'Appearance and accessibility'),\"limit-width\":false}},[_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.description)}}),_vm._v(\" \"),_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.descriptionDetail)}}),_vm._v(\" \"),_c('div',{staticClass:\"theming__preview-list\"},_vm._l((_vm.themes),function(theme){return _c('ItemPreview',{key:theme.id,attrs:{\"enforced\":theme.id === _vm.enforceTheme,\"selected\":_vm.selectedTheme.id === theme.id,\"theme\":theme,\"unique\":_vm.themes.length === 1,\"type\":\"theme\"},on:{\"change\":_vm.changeTheme}})}),1),_vm._v(\" \"),_c('div',{staticClass:\"theming__preview-list\"},_vm._l((_vm.fonts),function(theme){return _c('ItemPreview',{key:theme.id,attrs:{\"selected\":theme.enabled,\"theme\":theme,\"unique\":_vm.fonts.length === 1,\"type\":\"font\"},on:{\"change\":_vm.changeFont}})}),1)]),_vm._v(\" \"),_c('NcSettingsSection',{attrs:{\"title\":_vm.t('theming', 'Keyboard shortcuts')}},[_c('p',[_vm._v(_vm._s(_vm.t('theming', 'In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps.')))]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{staticClass:\"theming__preview-toggle\",attrs:{\"checked\":_vm.shortcutsDisabled,\"name\":\"shortcuts_disabled\",\"type\":\"switch\"},on:{\"update:checked\":function($event){_vm.shortcutsDisabled=$event},\"change\":_vm.changeShortcutsDisabled}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('theming', 'Disable all keyboard shortcuts'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('NcSettingsSection',{staticClass:\"background\",attrs:{\"title\":_vm.t('theming', 'Background'),\"data-user-theming-background-disabled\":\"\"}},[(_vm.isUserThemingDisabled)?[_c('p',[_vm._v(_vm._s(_vm.t('theming', 'Customization has been disabled by your administrator')))])]:[_c('p',[_vm._v(_vm._s(_vm.t('theming', 'Set a custom background')))]),_vm._v(\" \"),_c('BackgroundSettings',{staticClass:\"background__grid\",on:{\"update:background\":_vm.refreshGlobalStyles}})]],2)],1)\n}\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 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 './UserThemes.vue'\nimport { refreshStyles } from './helpers/refreshStyles.js'\n\nVue.prototype.OC = OC\nVue.prototype.t = t\n\nconst View = Vue.extend(App)\nconst theming = new View()\ntheming.$mount('#theming')\ntheming.$on('update:background', refreshStyles)\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const refreshStyles = () => {\n\t// Refresh server-side generated theming CSS\n\t[...document.head.querySelectorAll('link.theme')].forEach(theme => {\n\t\tconst url = new URL(theme.href)\n\t\turl.searchParams.set('v', Date.now())\n\t\tconst newTheme = theme.cloneNode()\n\t\tnewTheme.href = url.toString()\n\t\tnewTheme.onload = () => theme.remove()\n\t\tdocument.head.append(newTheme)\n\t})\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, \".theming p[data-v-4e5e21ba]{max-width:800px}.theming[data-v-4e5e21ba] a{font-weight:bold}.theming[data-v-4e5e21ba] a:hover,.theming[data-v-4e5e21ba] a:focus{text-decoration:underline}.theming__preview-list[data-v-4e5e21ba]{--gap: 30px;display:grid;margin-top:var(--gap);column-gap:var(--gap);row-gap:var(--gap);grid-template-columns:1fr 1fr}.background__grid[data-v-4e5e21ba]{margin-top:30px}@media(max-width: 1440px){.theming__preview-list[data-v-4e5e21ba]{display:flex;flex-direction:column}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/UserThemes.vue\"],\"names\":[],\"mappings\":\"AAGC,4BACC,eAAA,CAID,4BACC,gBAAA,CAEA,oEAEC,yBAAA,CAIF,wCACC,WAAA,CAEA,YAAA,CACA,qBAAA,CACA,qBAAA,CACA,kBAAA,CACA,6BAAA,CAKD,mCACC,eAAA,CAIF,0BACC,wCACC,YAAA,CACA,qBAAA,CAAA\",\"sourcesContent\":[\"\\n.theming {\\n\\t// Limit width of settings sections for readability\\n\\tp {\\n\\t\\tmax-width: 800px;\\n\\t}\\n\\n\\t// Proper highlight for links and focus feedback\\n\\t&::v-deep a {\\n\\t\\tfont-weight: bold;\\n\\n\\t\\t&:hover,\\n\\t\\t&:focus {\\n\\t\\t\\ttext-decoration: underline;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview-list {\\n\\t\\t--gap: 30px;\\n\\n\\t\\tdisplay: grid;\\n\\t\\tmargin-top: var(--gap);\\n\\t\\tcolumn-gap: var(--gap);\\n\\t\\trow-gap: var(--gap);\\n\\t\\tgrid-template-columns: 1fr 1fr;\\n\\t}\\n}\\n\\n.background {\\n\\t&__grid {\\n\\t\\tmargin-top: 30px;\\n\\t}\\n}\\n\\n@media (max-width: 1440px) {\\n\\t.theming__preview-list {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\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-34c50308]{display:flex;flex-wrap:wrap;justify-content:center}.background-selector .background[data-v-34c50308]{overflow:hidden;width:176px;height:96px;margin:8px;text-align:center;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-position:center center;background-size:cover}.background-selector .background__filepicker.background--active[data-v-34c50308]{color:#fff;background-image:var(--image-background)}.background-selector .background__default[data-v-34c50308]{background-color:var(--color-primary-default);background-image:var(--image-background-default)}.background-selector .background__filepicker[data-v-34c50308],.background-selector .background__default[data-v-34c50308],.background-selector .background__color[data-v-34c50308]{border-color:var(--color-border)}.background-selector .background__color[data-v-34c50308]{color:var(--color-primary-text);background-color:var(--color-primary-default)}.background-selector .background__default[data-v-34c50308],.background-selector .background__shipped[data-v-34c50308]{color:#fff}.background-selector .background[data-color-bright][data-v-34c50308]{color:#000}.background-selector .background--active[data-v-34c50308],.background-selector .background[data-v-34c50308]:hover,.background-selector .background[data-v-34c50308]:focus{border:2px solid var(--border-color, var(--color-primary)) !important}.background-selector .background span[data-v-34c50308]{margin:4px}.background-selector .background .check-icon[data-v-34c50308]{display:none}.background-selector .background--active:not(.icon-loading) .check-icon[data-v-34c50308]{display:block !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/BackgroundSettings.vue\"],\"names\":[],\"mappings\":\"AACA,sCACC,YAAA,CACA,cAAA,CACA,sBAAA,CAEA,kDACC,eAAA,CACA,WAAA,CACA,WAAA,CACA,UAAA,CACA,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,iCAAA,CACA,qBAAA,CAGC,iFACC,UAAA,CACA,wCAAA,CAIF,2DACC,6CAAA,CACA,gDAAA,CAGD,kLACC,gCAAA,CAGD,yDACC,+BAAA,CACA,6CAAA,CAID,sHAEC,UAAA,CAID,qEACC,UAAA,CAGD,0KAIC,qEAAA,CAID,uDACC,UAAA,CAGD,8DACC,YAAA,CAIA,yFAEC,wBAAA\",\"sourcesContent\":[\"\\n.background-selector {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tjustify-content: center;\\n\\n\\t.background {\\n\\t\\toverflow: hidden;\\n\\t\\twidth: 176px;\\n\\t\\theight: 96px;\\n\\t\\tmargin: 8px;\\n\\t\\ttext-align: center;\\n\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tbackground-position: center center;\\n\\t\\tbackground-size: cover;\\n\\n\\t\\t&__filepicker {\\n\\t\\t\\t&.background--active {\\n\\t\\t\\t\\tcolor: white;\\n\\t\\t\\t\\tbackground-image: var(--image-background);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&__default {\\n\\t\\t\\tbackground-color: var(--color-primary-default);\\n\\t\\t\\tbackground-image: var(--image-background-default);\\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\\tcolor: var(--color-primary-text);\\n\\t\\t\\tbackground-color: var(--color-primary-default);\\n\\t\\t}\\n\\n\\t\\t// Over a background image\\n\\t\\t&__default,\\n\\t\\t&__shipped {\\n\\t\\t\\tcolor: white;\\n\\t\\t}\\n\\n\\t\\t// Text and svg icon dark on bright background\\n\\t\\t&[data-color-bright] {\\n\\t\\t\\tcolor: black;\\n\\t\\t}\\n\\n\\t\\t&--active,\\n\\t\\t&:hover,\\n\\t\\t&:focus {\\n\\t\\t\\t// Use theme color primary, see inline css variable in template\\n\\t\\t\\tborder: 2px solid var(--border-color, var(--color-primary)) !important;\\n\\t\\t}\\n\\n\\t\\t// Icon\\n\\t\\tspan {\\n\\t\\t\\tmargin: 4px;\\n\\t\\t}\\n\\n\\t\\t.check-icon {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\n\\t\\t&--active:not(.icon-loading) {\\n\\t\\t\\t.check-icon {\\n\\t\\t\\t\\t// Show checkmark\\n\\t\\t\\t\\tdisplay: block !important;\\n\\t\\t\\t}\\n\\t\\t}\\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, \".theming__preview[data-v-30cd5e6b]{--ratio: 16;position:relative;display:flex;justify-content:flex-start;max-width:800px}.theming__preview[data-v-30cd5e6b],.theming__preview *[data-v-30cd5e6b]{user-select:none}.theming__preview-image[data-v-30cd5e6b]{flex-basis:calc(16px*var(--ratio));flex-shrink:0;height:calc(10px*var(--ratio));margin-right:var(--gap);cursor:pointer;border-radius:var(--border-radius);background-repeat:no-repeat;background-position:top left;background-size:cover}.theming__preview-description[data-v-30cd5e6b]{display:flex;flex-direction:column}.theming__preview-description h3[data-v-30cd5e6b]{font-weight:bold;margin-bottom:0}.theming__preview-description label[data-v-30cd5e6b]{padding:12px 0}.theming__preview--default[data-v-30cd5e6b]{grid-column:span 2}.theming__preview-warning[data-v-30cd5e6b]{color:var(--color-warning)}@media(max-width: 682.6666666667px){.theming__preview[data-v-30cd5e6b]{flex-direction:column}.theming__preview-image[data-v-30cd5e6b]{margin:0}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/ItemPreview.vue\"],\"names\":[],\"mappings\":\"AAGA,mCAEC,WAAA,CAEA,iBAAA,CACA,YAAA,CACA,0BAAA,CACA,eAAA,CAEA,wEAEC,gBAAA,CAGD,yCACC,kCAAA,CACA,aAAA,CACA,8BAAA,CACA,uBAAA,CACA,cAAA,CACA,kCAAA,CACA,2BAAA,CACA,4BAAA,CACA,qBAAA,CAGD,+CACC,YAAA,CACA,qBAAA,CAEA,kDACC,gBAAA,CACA,eAAA,CAGD,qDACC,cAAA,CAIF,4CACC,kBAAA,CAGD,2CACC,0BAAA,CAIF,oCACC,mCACC,qBAAA,CAEA,yCACC,QAAA,CAAA\",\"sourcesContent\":[\"\\n@use 'sass:math';\\n\\n.theming__preview {\\n\\t// We make previews on 16/10 screens\\n\\t--ratio: 16;\\n\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\tjustify-content: flex-start;\\n\\tmax-width: 800px;\\n\\n\\t&,\\n\\t* {\\n\\t\\tuser-select: none;\\n\\t}\\n\\n\\t&-image {\\n\\t\\tflex-basis: calc(16px * var(--ratio));\\n\\t\\tflex-shrink: 0;\\n\\t\\theight: calc(10px * var(--ratio));\\n\\t\\tmargin-right: var(--gap);\\n\\t\\tcursor: pointer;\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\tbackground-position: top left;\\n\\t\\tbackground-size: cover;\\n\\t}\\n\\n\\t&-description {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\n\\t\\th3 {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t}\\n\\n\\t\\tlabel {\\n\\t\\t\\tpadding: 12px 0;\\n\\t\\t}\\n\\t}\\n\\n\\t&--default {\\n\\t\\tgrid-column: span 2;\\n\\t}\\n\\n\\t&-warning {\\n\\t\\tcolor: var(--color-warning);\\n\\t}\\n}\\n\\n@media (max-width: math.div(1024px, 1.5)) {\\n\\t.theming__preview {\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&-image {\\n\\t\\t\\tmargin: 0;\\n\\t\\t}\\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","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (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 = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 1474;","__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\t1474: 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 = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (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((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(9665)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","backgroundImage","loadState","shippedBackgroundList","themingDefaultBackground","defaultShippedBackground","prefixWithBaseUrl","url","generateFilePath","picker","getFilePickerBuilder","t","setMultiSelect","setModal","setType","setMimeTypeFilter","build","name","components","Check","Close","ImageEdit","NcColorPicker","data","loading","Theming","computed","shippedBackgrounds","Object","keys","map","fileName","preview","details","filter","background","isGlobalBackgroundDeleted","isGlobalBackgroundDefault","isBackgroundDisabled","methods","invertTextColor","color","calculateLuma","red","green","blue","hexToRGB","hex","result","exec","parseInt","backgroundColor","$emit","axios","generateUrl","update","shipped","value","path","arguments","length","undefined","event","_event$target","_event$target$dataset","_this$Theming","target","dataset","debouncePickColor","debounce","pickColor","pick","response","_palette$DarkVibrant","fileUrl","generateRemoteUrl","getCurrentUser","uid","responseType","blobUrl","URL","createObjectURL","palette","getColorPaletteFromBlob","DarkVibrant","setFile","console","debug","error","Promise","resolve","reject","Vibrant","getPalette","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","class","on","pickFile","_v","_s","_e","style","defaultColor","setDefault","model","callback","$$v","$set","expression","removeBackground","_l","shippedBackground","key","primary_color","attribution","theming","$event","setShipped","NcCheckboxRadioSwitch","props","enforced","type","Boolean","default","selected","theme","required","String","unique","switchType","img","id","checked","get","set","enabled","onToggle","title","description","enableLabel","availableThemes","enforceTheme","shortcutsDisabled","isUserThemingDisabled","ItemPreview","NcSettingsSection","BackgroundSettings","themes","fonts","selectedTheme","find","replace","guidelinesLink","descriptionDetail","issuetrackerLink","designteamLink","watch","newState","changeShortcutsDisabled","refreshGlobalStyles","document","head","querySelectorAll","forEach","href","searchParams","Date","now","newTheme","cloneNode","toString","onload","remove","append","updateBackground","changeTheme","_ref","updateBodyAttributes","selectItem","changeFont","_ref2","font","generateOcsUrl","appId","configKey","configValue","method","enabledThemesIDs","enabledFontsIDs","body","toggleAttribute","concat","setAttribute","join","themeId","err","OC","Notification","showTemporary","ocs","meta","message","domProps","Vue","App","$mount","$on","refreshStyles","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","O","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"theming-personal-theming.js?v=1f5be71f263fef96c8f1","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/theming/src/components/BackgroundSettings.vue","webpack:///nextcloud/apps/theming/src/components/BackgroundSettings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/components/BackgroundSettings.vue?1780","webpack://nextcloud/./apps/theming/src/components/BackgroundSettings.vue?65db","webpack://nextcloud/./apps/theming/src/components/BackgroundSettings.vue?da76","webpack://nextcloud/./apps/theming/src/components/ItemPreview.vue?7631","webpack:///nextcloud/apps/theming/src/components/ItemPreview.vue","webpack:///nextcloud/apps/theming/src/components/ItemPreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/components/ItemPreview.vue?fb82","webpack://nextcloud/./apps/theming/src/components/ItemPreview.vue?8797","webpack:///nextcloud/apps/theming/src/UserThemes.vue","webpack:///nextcloud/apps/theming/src/UserThemes.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/theming/src/UserThemes.vue?385c","webpack://nextcloud/./apps/theming/src/UserThemes.vue?7eb2","webpack://nextcloud/./apps/theming/src/UserThemes.vue?b683","webpack:///nextcloud/apps/theming/src/personal-settings.js","webpack:///nextcloud/apps/theming/src/helpers/refreshStyles.js","webpack:///nextcloud/apps/theming/src/UserThemes.vue?vue&type=style&index=0&id=4e5e21ba&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/theming/src/components/BackgroundSettings.vue?vue&type=style&index=0&id=8a72fa3e&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/theming/src/components/ItemPreview.vue?vue&type=style&index=0&id=30cd5e6b&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","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/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (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((key) => (__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 Christopher Ng <chrng8@gmail.com>\n - @author Greta Doci <gretadoci@gmail.com>\n - @author John Molakvoæ <skjnldsv@protonmail.com>\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\" data-user-theming-background-settings>\n\t\t<!-- Custom background -->\n\t\t<button class=\"background background__filepicker\"\n\t\t\t:class=\"{ 'icon-loading': loading === 'custom', 'background--active': backgroundImage === 'custom' }\"\n\t\t\t:data-color-bright=\"invertTextColor(Theming.color)\"\n\t\t\tdata-user-theming-background-custom\n\t\t\ttabindex=\"0\"\n\t\t\t@click=\"pickFile\">\n\t\t\t{{ t('theming', 'Custom background') }}\n\t\t\t<ImageEdit v-if=\"backgroundImage !== 'custom'\" :size=\"26\" />\n\t\t\t<Check :size=\"44\" />\n\t\t</button>\n\n\t\t<!-- Default background -->\n\t\t<button class=\"background background__default\"\n\t\t\t:class=\"{ 'icon-loading': loading === 'default', 'background--active': backgroundImage === 'default' }\"\n\t\t\t:data-color-bright=\"invertTextColor(Theming.defaultColor)\"\n\t\t\t:style=\"{ '--border-color': Theming.defaultColor }\"\n\t\t\tdata-user-theming-background-default\n\t\t\ttabindex=\"0\"\n\t\t\t@click=\"setDefault\">\n\t\t\t{{ t('theming', 'Default background') }}\n\t\t\t<Check :size=\"44\" />\n\t\t</button>\n\n\t\t<!-- Custom color picker -->\n\t\t<NcColorPicker v-model=\"Theming.color\" @input=\"debouncePickColor\">\n\t\t\t<button class=\"background background__color\"\n\t\t\t\t:data-color=\"Theming.color\"\n\t\t\t\t:data-color-bright=\"invertTextColor(Theming.color)\"\n\t\t\t\t:style=\"{ backgroundColor: Theming.color, '--border-color': Theming.color}\"\n\t\t\t\tdata-user-theming-background-color\n\t\t\t\ttabindex=\"0\">\n\t\t\t\t{{ t('theming', 'Change color') }}\n\t\t\t</button>\n\t\t</NcColorPicker>\n\n\t\t<!-- Remove background -->\n\t\t<button class=\"background background__delete\"\n\t\t\t:class=\"{ 'background--active': isBackgroundDisabled }\"\n\t\t\tdata-user-theming-background-clear\n\t\t\ttabindex=\"0\"\n\t\t\t@click=\"removeBackground\">\n\t\t\t{{ t('theming', 'No background') }}\n\t\t\t<Close v-if=\"!isBackgroundDisabled\" :size=\"32\" />\n\t\t\t<Check :size=\"44\" />\n\t\t</button>\n\n\t\t<!-- Background set selection -->\n\t\t<button v-for=\"shippedBackground in shippedBackgrounds\"\n\t\t\t:key=\"shippedBackground.name\"\n\t\t\t:title=\"shippedBackground.details.attribution\"\n\t\t\t:aria-label=\"shippedBackground.details.attribution\"\n\t\t\t:class=\"{ 'icon-loading': loading === shippedBackground.name, 'background--active': backgroundImage === shippedBackground.name }\"\n\t\t\t:data-color-bright=\"shippedBackground.details.theming === 'dark'\"\n\t\t\t:data-user-theming-background-shipped=\"shippedBackground.name\"\n\t\t\t:style=\"{ backgroundImage: 'url(' + shippedBackground.preview + ')', '--border-color': shippedBackground.details.primary_color }\"\n\t\t\tclass=\"background background__shipped\"\n\t\t\ttabindex=\"0\"\n\t\t\t@click=\"setShipped(shippedBackground.name)\">\n\t\t\t<Check :size=\"44\" />\n\t\t</button>\n\t</div>\n</template>\n\n<script>\nimport { generateFilePath, generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport axios from '@nextcloud/axios'\nimport Check from 'vue-material-design-icons/Check.vue'\nimport Close from 'vue-material-design-icons/Close.vue'\nimport ImageEdit from 'vue-material-design-icons/ImageEdit.vue'\nimport debounce from 'debounce'\nimport NcColorPicker from '@nextcloud/vue/dist/Components/NcColorPicker.js'\nimport Vibrant from 'node-vibrant'\nimport { Palette } from 'node-vibrant/lib/color.js'\nimport { getFilePickerBuilder } from '@nextcloud/dialogs'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nconst backgroundImage = loadState('theming', 'backgroundImage')\nconst shippedBackgroundList = loadState('theming', 'shippedBackgrounds')\nconst themingDefaultBackground = loadState('theming', 'themingDefaultBackground')\nconst defaultShippedBackground = loadState('theming', 'defaultShippedBackground')\n\nconst prefixWithBaseUrl = (url) => generateFilePath('theming', '', 'img/background/') + url\nconst picker = getFilePickerBuilder(t('theming', 'Select a background from your files'))\n\t.setMultiSelect(false)\n\t.setModal(true)\n\t.setType(1)\n\t.setMimeTypeFilter(['image/png', 'image/gif', 'image/jpeg', 'image/svg+xml', 'image/svg'])\n\t.build()\n\nexport default {\n\tname: 'BackgroundSettings',\n\n\tcomponents: {\n\t\tCheck,\n\t\tClose,\n\t\tImageEdit,\n\t\tNcColorPicker,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\tTheming: loadState('theming', 'data', {}),\n\n\t\t\t// User background image and color settings\n\t\t\tbackgroundImage,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tshippedBackgrounds() {\n\t\t\treturn Object.keys(shippedBackgroundList)\n\t\t\t\t.map(fileName => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: fileName,\n\t\t\t\t\t\turl: prefixWithBaseUrl(fileName),\n\t\t\t\t\t\tpreview: prefixWithBaseUrl('preview/' + fileName),\n\t\t\t\t\t\tdetails: shippedBackgroundList[fileName],\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.filter(background => {\n\t\t\t\t\t// If the admin did not changed the global background\n\t\t\t\t\t// let's hide the default background to not show it twice\n\t\t\t\t\tif (!this.isGlobalBackgroundDeleted && !this.isGlobalBackgroundDefault) {\n\t\t\t\t\t\treturn background.name !== defaultShippedBackground\n\t\t\t\t\t}\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t},\n\n\t\tisGlobalBackgroundDefault() {\n\t\t\treturn !!themingDefaultBackground\n\t\t},\n\n\t\tisGlobalBackgroundDeleted() {\n\t\t\treturn themingDefaultBackground === 'backgroundColor'\n\t\t},\n\n\t\tisBackgroundDisabled() {\n\t\t\treturn this.backgroundImage === 'disabled'\n\t\t\t|| !this.backgroundImage\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Do we need to invert the text if color is too bright?\n\t\t *\n\t\t * @param {string} color the hex color\n\t\t */\n\t\tinvertTextColor(color) {\n\t\t\treturn this.calculateLuma(color) > 0.6\n\t\t},\n\n\t\t/**\n\t\t * Calculate luminance of provided hex color\n\t\t *\n\t\t * @param {string} color the hex color\n\t\t */\n\t\tcalculateLuma(color) {\n\t\t\tconst [red, green, blue] = this.hexToRGB(color)\n\t\t\treturn (0.2126 * red + 0.7152 * green + 0.0722 * blue) / 255\n\t\t},\n\n\t\t/**\n\t\t * Convert hex color to RGB\n\t\t *\n\t\t * @param {string} hex the hex color\n\t\t */\n\t\thexToRGB(hex) {\n\t\t\tconst result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n\t\t\treturn result\n\t\t\t\t? [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)]\n\t\t\t\t: null\n\t\t},\n\n\t\t/**\n\t\t * Update local state\n\t\t *\n\t\t * @param {object} data destructuring object\n\t\t * @param {string} data.backgroundColor background color value\n\t\t * @param {string} data.backgroundImage background image value\n\t\t * @param {string} data.version cache buster number\n\t\t * @see https://github.com/nextcloud/server/blob/c78bd45c64d9695724fc44fe8453a88824b85f2f/apps/theming/lib/Controller/UserThemeController.php#L187-L191\n\t\t */\n\t\tasync update(data) {\n\t\t\t// Update state\n\t\t\tthis.backgroundImage = data.backgroundImage\n\t\t\tthis.Theming.color = data.backgroundColor\n\n\t\t\t// Notify parent and reload style\n\t\t\tthis.$emit('update:background')\n\t\t\tthis.loading = false\n\t\t},\n\n\t\tasync setDefault() {\n\t\t\tthis.loading = 'default'\n\t\t\tconst result = await axios.post(generateUrl('/apps/theming/background/default'))\n\t\t\tthis.update(result.data)\n\t\t},\n\n\t\tasync setShipped(shipped) {\n\t\t\tthis.loading = shipped\n\t\t\tconst result = await axios.post(generateUrl('/apps/theming/background/shipped'), { value: shipped })\n\t\t\tthis.update(result.data)\n\t\t},\n\n\t\tasync setFile(path, color = null) {\n\t\t\tthis.loading = 'custom'\n\t\t\tconst result = await axios.post(generateUrl('/apps/theming/background/custom'), { value: path, color })\n\t\t\tthis.update(result.data)\n\t\t},\n\n\t\tasync removeBackground() {\n\t\t\tthis.loading = 'remove'\n\t\t\tconst result = await axios.delete(generateUrl('/apps/theming/background/custom'))\n\t\t\tthis.update(result.data)\n\t\t},\n\n\t\tasync pickColor(event) {\n\t\t\tthis.loading = 'color'\n\t\t\tconst color = event?.target?.dataset?.color || this.Theming?.color || '#0082c9'\n\t\t\tconst result = await axios.post(generateUrl('/apps/theming/background/color'), { color })\n\t\t\tthis.update(result.data)\n\t\t},\n\t\tdebouncePickColor: debounce(function() {\n\t\t\tthis.pickColor(...arguments)\n\t\t}, 200),\n\n\t\tasync pickFile() {\n\t\t\tconst path = await picker.pick()\n\t\t\tthis.loading = 'custom'\n\n\t\t\t// Extract primary color from image\n\t\t\tlet response = null\n\t\t\tlet color = null\n\t\t\ttry {\n\t\t\t\tconst fileUrl = generateRemoteUrl('dav/files/' + getCurrentUser().uid + path)\n\t\t\t\tresponse = await axios.get(fileUrl, { responseType: 'blob' })\n\t\t\t\tconst blobUrl = URL.createObjectURL(response.data)\n\t\t\t\tconst palette = await this.getColorPaletteFromBlob(blobUrl)\n\n\t\t\t\t// DarkVibrant is accessible AND visually pleasing\n\t\t\t\t// Vibrant is not accessible enough and others are boring\n\t\t\t\tcolor = palette?.DarkVibrant?.hex\n\t\t\t\tthis.setFile(path, color)\n\n\t\t\t\t// Log data\n\t\t\t\tconsole.debug('Extracted colour', color, 'from custom image', path, palette)\n\t\t\t} catch (error) {\n\t\t\t\tthis.setFile(path)\n\t\t\t\tconsole.error('Unable to extract colour from custom image', { error, path, response, color })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Extract a Vibrant color palette from a blob URL\n\t\t *\n\t\t * @param {string} blobUrl the blob URL\n\t\t * @return {Promise<Palette>}\n\t\t */\n\t\tgetColorPaletteFromBlob(blobUrl) {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst vibrant = new Vibrant(blobUrl)\n\t\t\t\tvibrant.getPalette((error, palette) => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\treject(error)\n\t\t\t\t\t}\n\t\t\t\t\tresolve(palette)\n\t\t\t\t})\n\t\t\t})\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\toverflow: hidden;\n\t\twidth: 176px;\n\t\theight: 96px;\n\t\tmargin: 8px;\n\t\ttext-align: center;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-position: center center;\n\t\tbackground-size: cover;\n\n\t\t&__filepicker {\n\t\t\t&.background--active {\n\t\t\t\tcolor: white;\n\t\t\t\tbackground-image: var(--image-background);\n\t\t\t}\n\t\t}\n\n\t\t&__default {\n\t\t\tbackground-color: var(--color-primary-default);\n\t\t\tbackground-image: var(--image-background-plain, var(--image-background-default));\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\tcolor: var(--color-primary-text);\n\t\t\tbackground-color: var(--color-primary-default);\n\t\t}\n\n\t\t// Over a background image\n\t\t&__default,\n\t\t&__shipped {\n\t\t\tcolor: white;\n\t\t}\n\n\t\t// Text and svg icon dark on bright background\n\t\t&[data-color-bright] {\n\t\t\tcolor: black;\n\t\t}\n\n\t\t&--active,\n\t\t&:hover,\n\t\t&:focus {\n\t\t\t// Use theme color primary, see inline css variable in template\n\t\t\tborder: 2px solid var(--border-color, var(--color-primary)) !important;\n\t\t}\n\n\t\t// Icon\n\t\tspan {\n\t\t\tmargin: 4px;\n\t\t}\n\n\t\t.check-icon {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t&--active:not(.icon-loading) {\n\t\t\t.check-icon {\n\t\t\t\t// Show checkmark\n\t\t\t\tdisplay: block !important;\n\t\t\t}\n\t\t}\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!./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=8a72fa3e&prod&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BackgroundSettings.vue?vue&type=style&index=0&id=8a72fa3e&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./BackgroundSettings.vue?vue&type=template&id=8a72fa3e&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=8a72fa3e&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8a72fa3e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"background-selector\",attrs:{\"data-user-theming-background-settings\":\"\"}},[_c('button',{staticClass:\"background background__filepicker\",class:{ 'icon-loading': _vm.loading === 'custom', 'background--active': _vm.backgroundImage === 'custom' },attrs:{\"data-color-bright\":_vm.invertTextColor(_vm.Theming.color),\"data-user-theming-background-custom\":\"\",\"tabindex\":\"0\"},on:{\"click\":_vm.pickFile}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('theming', 'Custom background'))+\"\\n\\t\\t\"),(_vm.backgroundImage !== 'custom')?_c('ImageEdit',{attrs:{\"size\":26}}):_vm._e(),_vm._v(\" \"),_c('Check',{attrs:{\"size\":44}})],1),_vm._v(\" \"),_c('button',{staticClass:\"background background__default\",class:{ 'icon-loading': _vm.loading === 'default', 'background--active': _vm.backgroundImage === 'default' },style:({ '--border-color': _vm.Theming.defaultColor }),attrs:{\"data-color-bright\":_vm.invertTextColor(_vm.Theming.defaultColor),\"data-user-theming-background-default\":\"\",\"tabindex\":\"0\"},on:{\"click\":_vm.setDefault}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('theming', 'Default background'))+\"\\n\\t\\t\"),_c('Check',{attrs:{\"size\":44}})],1),_vm._v(\" \"),_c('NcColorPicker',{on:{\"input\":_vm.debouncePickColor},model:{value:(_vm.Theming.color),callback:function ($$v) {_vm.$set(_vm.Theming, \"color\", $$v)},expression:\"Theming.color\"}},[_c('button',{staticClass:\"background background__color\",style:({ backgroundColor: _vm.Theming.color, '--border-color': _vm.Theming.color}),attrs:{\"data-color\":_vm.Theming.color,\"data-color-bright\":_vm.invertTextColor(_vm.Theming.color),\"data-user-theming-background-color\":\"\",\"tabindex\":\"0\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('theming', 'Change color'))+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('button',{staticClass:\"background background__delete\",class:{ 'background--active': _vm.isBackgroundDisabled },attrs:{\"data-user-theming-background-clear\":\"\",\"tabindex\":\"0\"},on:{\"click\":_vm.removeBackground}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('theming', 'No background'))+\"\\n\\t\\t\"),(!_vm.isBackgroundDisabled)?_c('Close',{attrs:{\"size\":32}}):_vm._e(),_vm._v(\" \"),_c('Check',{attrs:{\"size\":44}})],1),_vm._v(\" \"),_vm._l((_vm.shippedBackgrounds),function(shippedBackground){return _c('button',{key:shippedBackground.name,staticClass:\"background background__shipped\",class:{ 'icon-loading': _vm.loading === shippedBackground.name, 'background--active': _vm.backgroundImage === shippedBackground.name },style:({ backgroundImage: 'url(' + shippedBackground.preview + ')', '--border-color': shippedBackground.details.primary_color }),attrs:{\"title\":shippedBackground.details.attribution,\"aria-label\":shippedBackground.details.attribution,\"data-color-bright\":shippedBackground.details.theming === 'dark',\"data-user-theming-background-shipped\":shippedBackground.name,\"tabindex\":\"0\"},on:{\"click\":function($event){return _vm.setShipped(shippedBackground.name)}}},[_c('Check',{attrs:{\"size\":44}})],1)})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"theming__preview\",class:'theming__preview--' + _vm.theme.id},[_c('div',{staticClass:\"theming__preview-image\",style:({ backgroundImage: 'url(' + _vm.img + ')' }),on:{\"click\":_vm.onToggle}}),_vm._v(\" \"),_c('div',{staticClass:\"theming__preview-description\"},[_c('h3',[_vm._v(_vm._s(_vm.theme.title))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.theme.description))]),_vm._v(\" \"),(_vm.enforced)?_c('span',{staticClass:\"theming__preview-warning\",attrs:{\"role\":\"note\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('theming', 'Theme selection is enforced'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{staticClass:\"theming__preview-toggle\",attrs:{\"checked\":_vm.checked,\"disabled\":_vm.enforced,\"name\":_vm.name,\"type\":_vm.switchType},on:{\"update:checked\":function($event){_vm.checked=$event}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.theme.enableLabel)+\"\\n\\t\\t\")])],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div :class=\"'theming__preview--' + theme.id\" class=\"theming__preview\">\n\t\t<div class=\"theming__preview-image\" :style=\"{ backgroundImage: 'url(' + img + ')' }\" @click=\"onToggle\" />\n\t\t<div class=\"theming__preview-description\">\n\t\t\t<h3>{{ theme.title }}</h3>\n\t\t\t<p>{{ theme.description }}</p>\n\t\t\t<span v-if=\"enforced\" class=\"theming__preview-warning\" role=\"note\">\n\t\t\t\t{{ t('theming', 'Theme selection is enforced') }}\n\t\t\t</span>\n\t\t\t<NcCheckboxRadioSwitch class=\"theming__preview-toggle\"\n\t\t\t\t:checked.sync=\"checked\"\n\t\t\t\t:disabled=\"enforced\"\n\t\t\t\t:name=\"name\"\n\t\t\t\t:type=\"switchType\">\n\t\t\t\t{{ theme.enableLabel }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { generateFilePath } from '@nextcloud/router'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\n\nexport default {\n\tname: 'ItemPreview',\n\tcomponents: {\n\t\tNcCheckboxRadioSwitch,\n\t},\n\tprops: {\n\t\tenforced: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tselected: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ttheme: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tunique: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcomputed: {\n\t\tswitchType() {\n\t\t\treturn this.unique ? 'switch' : 'radio'\n\t\t},\n\n\t\tname() {\n\t\t\treturn !this.unique ? this.type : null\n\t\t},\n\n\t\timg() {\n\t\t\treturn generateFilePath('theming', 'img', this.theme.id + '.jpg')\n\t\t},\n\n\t\tchecked: {\n\t\t\tget() {\n\t\t\t\treturn this.selected\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tconsole.debug('Changed theme', this.theme.id, checked)\n\n\t\t\t\t// If this is a radio, we can only enable\n\t\t\t\tif (!this.unique) {\n\t\t\t\t\tthis.$emit('change', { enabled: true, id: this.theme.id })\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// If this is a switch, we can disable the theme\n\t\t\t\tthis.$emit('change', { enabled: checked === true, id: this.theme.id })\n\t\t\t},\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonToggle() {\n\t\t\tif (this.switchType === 'radio') {\n\t\t\t\tthis.checked = true\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Invert state\n\t\t\tthis.checked = !this.checked\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n@use 'sass:math';\n\n.theming__preview {\n\t// We make previews on 16/10 screens\n\t--ratio: 16;\n\n\tposition: relative;\n\tdisplay: flex;\n\tjustify-content: flex-start;\n\tmax-width: 800px;\n\n\t&,\n\t* {\n\t\tuser-select: none;\n\t}\n\n\t&-image {\n\t\tflex-basis: calc(16px * var(--ratio));\n\t\tflex-shrink: 0;\n\t\theight: calc(10px * var(--ratio));\n\t\tmargin-right: var(--gap);\n\t\tcursor: pointer;\n\t\tborder-radius: var(--border-radius);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: top left;\n\t\tbackground-size: cover;\n\t}\n\n\t&-description {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\n\t\th3 {\n\t\t\tfont-weight: bold;\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\tlabel {\n\t\t\tpadding: 12px 0;\n\t\t}\n\t}\n\n\t&--default {\n\t\tgrid-column: span 2;\n\t}\n\n\t&-warning {\n\t\tcolor: var(--color-warning);\n\t}\n}\n\n@media (max-width: math.div(1024px, 1.5)) {\n\t.theming__preview {\n\t\tflex-direction: column;\n\n\t\t&-image {\n\t\t\tmargin: 0;\n\t\t}\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!./ItemPreview.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!./ItemPreview.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!./ItemPreview.vue?vue&type=style&index=0&id=30cd5e6b&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ItemPreview.vue?vue&type=style&index=0&id=30cd5e6b&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ItemPreview.vue?vue&type=template&id=30cd5e6b&scoped=true&\"\nimport script from \"./ItemPreview.vue?vue&type=script&lang=js&\"\nexport * from \"./ItemPreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ItemPreview.vue?vue&type=style&index=0&id=30cd5e6b&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"30cd5e6b\",\n null\n \n)\n\nexport default component.exports","<!--\n - @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n - @copyright Copyright (c) 2022 Greta Doci <gretadoci@gmail.com>\n -\n - @author Christopher Ng <chrng8@gmail.com>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n-->\n\n<template>\n\t<section>\n\t\t<NcSettingsSection :title=\"t('theming', 'Appearance and accessibility')\"\n\t\t\t:limit-width=\"false\"\n\t\t\tclass=\"theming\">\n\t\t\t<p v-html=\"description\" />\n\t\t\t<p v-html=\"descriptionDetail\" />\n\n\t\t\t<div class=\"theming__preview-list\">\n\t\t\t\t<ItemPreview v-for=\"theme in themes\"\n\t\t\t\t\t:key=\"theme.id\"\n\t\t\t\t\t:enforced=\"theme.id === enforceTheme\"\n\t\t\t\t\t:selected=\"selectedTheme.id === theme.id\"\n\t\t\t\t\t:theme=\"theme\"\n\t\t\t\t\t:unique=\"themes.length === 1\"\n\t\t\t\t\ttype=\"theme\"\n\t\t\t\t\t@change=\"changeTheme\" />\n\t\t\t</div>\n\n\t\t\t<div class=\"theming__preview-list\">\n\t\t\t\t<ItemPreview v-for=\"theme in fonts\"\n\t\t\t\t\t:key=\"theme.id\"\n\t\t\t\t\t:selected=\"theme.enabled\"\n\t\t\t\t\t:theme=\"theme\"\n\t\t\t\t\t:unique=\"fonts.length === 1\"\n\t\t\t\t\ttype=\"font\"\n\t\t\t\t\t@change=\"changeFont\" />\n\t\t\t</div>\n\t\t</NcSettingsSection>\n\n\t\t<NcSettingsSection :title=\"t('theming', 'Keyboard shortcuts')\">\n\t\t\t<p>{{ t('theming', 'In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps.') }}</p>\n\t\t\t<NcCheckboxRadioSwitch class=\"theming__preview-toggle\"\n\t\t\t\t:checked.sync=\"shortcutsDisabled\"\n\t\t\t\tname=\"shortcuts_disabled\"\n\t\t\t\ttype=\"switch\"\n\t\t\t\t@change=\"changeShortcutsDisabled\">\n\t\t\t\t{{ t('theming', 'Disable all keyboard shortcuts') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcSettingsSection>\n\n\t\t<NcSettingsSection :title=\"t('theming', 'Background')\"\n\t\t\tclass=\"background\"\n\t\t\tdata-user-theming-background-disabled>\n\t\t\t<template v-if=\"isUserThemingDisabled\">\n\t\t\t\t<p>{{ t('theming', 'Customization has been disabled by your administrator') }}</p>\n\t\t\t</template>\n\t\t\t<template v-else>\n\t\t\t\t<p>{{ t('theming', 'Set a custom background') }}</p>\n\t\t\t\t<BackgroundSettings class=\"background__grid\" @update:background=\"refreshGlobalStyles\" />\n\t\t\t</template>\n\t\t</NcSettingsSection>\n\t</section>\n</template>\n\n<script>\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport axios from '@nextcloud/axios'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport NcSettingsSection from '@nextcloud/vue/dist/Components/NcSettingsSection.js'\n\nimport BackgroundSettings from './components/BackgroundSettings.vue'\nimport ItemPreview from './components/ItemPreview.vue'\n\nconst availableThemes = loadState('theming', 'themes', [])\nconst enforceTheme = loadState('theming', 'enforceTheme', '')\nconst shortcutsDisabled = loadState('theming', 'shortcutsDisabled', false)\n\nconst isUserThemingDisabled = loadState('theming', 'isUserThemingDisabled')\n\nconsole.debug('Available themes', availableThemes)\n\nexport default {\n\tname: 'UserThemes',\n\n\tcomponents: {\n\t\tItemPreview,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcSettingsSection,\n\t\tBackgroundSettings,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tavailableThemes,\n\n\t\t\t// Admin defined configs\n\t\t\tenforceTheme,\n\t\t\tshortcutsDisabled,\n\t\t\tisUserThemingDisabled,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tthemes() {\n\t\t\treturn this.availableThemes.filter(theme => theme.type === 1)\n\t\t},\n\n\t\tfonts() {\n\t\t\treturn this.availableThemes.filter(theme => theme.type === 2)\n\t\t},\n\n\t\t// Selected theme, fallback on first (default) if none\n\t\tselectedTheme() {\n\t\t\treturn this.themes.find(theme => theme.enabled === true) || this.themes[0]\n\t\t},\n\n\t\tdescription() {\n\t\t\t// using the `t` replace method escape html, we have to do it manually :/\n\t\t\treturn t(\n\t\t\t\t'theming',\n\t\t\t\t'Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level.'\n\t\t\t)\n\t\t\t\t.replace('{guidelines}', this.guidelinesLink)\n\t\t\t\t.replace('{linkend}', '</a>')\n\t\t},\n\n\t\tguidelinesLink() {\n\t\t\treturn '<a target=\"_blank\" href=\"https://www.w3.org/WAI/standards-guidelines/wcag/\" rel=\"noreferrer nofollow\">'\n\t\t},\n\n\t\tdescriptionDetail() {\n\t\t\treturn t(\n\t\t\t\t'theming',\n\t\t\t\t'If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!'\n\t\t\t)\n\t\t\t\t.replace('{issuetracker}', this.issuetrackerLink)\n\t\t\t\t.replace('{designteam}', this.designteamLink)\n\t\t\t\t.replace(/\\{linkend\\}/g, '</a>')\n\t\t},\n\n\t\tissuetrackerLink() {\n\t\t\treturn '<a target=\"_blank\" href=\"https://github.com/nextcloud/server/issues/\" rel=\"noreferrer nofollow\">'\n\t\t},\n\n\t\tdesignteamLink() {\n\t\t\treturn '<a target=\"_blank\" href=\"https://nextcloud.com/design\" rel=\"noreferrer nofollow\">'\n\t\t},\n\t},\n\n\twatch: {\n\t\tshortcutsDisabled(newState) {\n\t\t\tthis.changeShortcutsDisabled(newState)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t// Refresh server-side generated theming CSS\n\t\trefreshGlobalStyles() {\n\t\t\t[...document.head.querySelectorAll('link.theme')].forEach(theme => {\n\t\t\t\tconst url = new URL(theme.href)\n\t\t\t\turl.searchParams.set('v', Date.now())\n\t\t\t\tconst newTheme = theme.cloneNode()\n\t\t\t\tnewTheme.href = url.toString()\n\t\t\t\tnewTheme.onload = () => theme.remove()\n\t\t\t\tdocument.head.append(newTheme)\n\t\t\t})\n\t\t},\n\n\t\tupdateBackground(data) {\n\t\t\tthis.background = (data.type === 'custom' || data.type === 'default') ? data.type : data.value\n\t\t\tthis.refreshGlobalStyles()\n\t\t},\n\n\t\tchangeTheme({ enabled, id }) {\n\t\t\t// Reset selected and select new one\n\t\t\tthis.themes.forEach(theme => {\n\t\t\t\tif (theme.id === id && enabled) {\n\t\t\t\t\ttheme.enabled = true\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\ttheme.enabled = false\n\t\t\t})\n\n\t\t\tthis.updateBodyAttributes()\n\t\t\tthis.selectItem(enabled, id)\n\t\t},\n\n\t\tchangeFont({ enabled, id }) {\n\t\t\t// Reset selected and select new one\n\t\t\tthis.fonts.forEach(font => {\n\t\t\t\tif (font.id === id && enabled) {\n\t\t\t\t\tfont.enabled = true\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tfont.enabled = false\n\t\t\t})\n\n\t\t\tthis.updateBodyAttributes()\n\t\t\tthis.selectItem(enabled, id)\n\t\t},\n\n\t\tasync changeShortcutsDisabled(newState) {\n\t\t\tif (newState) {\n\t\t\t\tawait axios({\n\t\t\t\t\turl: generateOcsUrl('apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', {\n\t\t\t\t\t\tappId: 'theming',\n\t\t\t\t\t\tconfigKey: 'shortcuts_disabled',\n\t\t\t\t\t}),\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tconfigValue: 'yes',\n\t\t\t\t\t},\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tawait axios({\n\t\t\t\t\turl: generateOcsUrl('apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', {\n\t\t\t\t\t\tappId: 'theming',\n\t\t\t\t\t\tconfigKey: 'shortcuts_disabled',\n\t\t\t\t\t}),\n\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\tupdateBodyAttributes() {\n\t\t\tconst enabledThemesIDs = this.themes.filter(theme => theme.enabled === true).map(theme => theme.id)\n\t\t\tconst enabledFontsIDs = this.fonts.filter(font => font.enabled === true).map(font => font.id)\n\n\t\t\tthis.themes.forEach(theme => {\n\t\t\t\tdocument.body.toggleAttribute(`data-theme-${theme.id}`, theme.enabled)\n\t\t\t})\n\t\t\tthis.fonts.forEach(font => {\n\t\t\t\tdocument.body.toggleAttribute(`data-theme-${font.id}`, font.enabled)\n\t\t\t})\n\n\t\t\tdocument.body.setAttribute('data-themes', [...enabledThemesIDs, ...enabledFontsIDs].join(','))\n\t\t},\n\n\t\t/**\n\t\t * Commit a change and force reload css\n\t\t * Fetching the file again will trigger the server update\n\t\t *\n\t\t * @param {boolean} enabled the theme state\n\t\t * @param {string} themeId the theme ID to change\n\t\t */\n\t\tasync selectItem(enabled, themeId) {\n\t\t\ttry {\n\t\t\t\tif (enabled) {\n\t\t\t\t\tawait axios({\n\t\t\t\t\t\turl: generateOcsUrl('apps/theming/api/v1/theme/{themeId}/enable', { themeId }),\n\t\t\t\t\t\tmethod: 'PUT',\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tawait axios({\n\t\t\t\t\t\turl: generateOcsUrl('apps/theming/api/v1/theme/{themeId}', { themeId }),\n\t\t\t\t\t\tmethod: 'DELETE',\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(err, err.response)\n\t\t\t\tOC.Notification.showTemporary(t('theming', err.response.data.ocs.meta.message + '. Unable to apply the setting.'))\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.theming {\n\t// Limit width of settings sections for readability\n\tp {\n\t\tmax-width: 800px;\n\t}\n\n\t// Proper highlight for links and focus feedback\n\t&::v-deep a {\n\t\tfont-weight: bold;\n\n\t\t&:hover,\n\t\t&:focus {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t}\n\n\t&__preview-list {\n\t\t--gap: 30px;\n\n\t\tdisplay: grid;\n\t\tmargin-top: var(--gap);\n\t\tcolumn-gap: var(--gap);\n\t\trow-gap: var(--gap);\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n}\n\n.background {\n\t&__grid {\n\t\tmargin-top: 30px;\n\t}\n}\n\n@media (max-width: 1440px) {\n\t.theming__preview-list {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\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!./UserThemes.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!./UserThemes.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!./UserThemes.vue?vue&type=style&index=0&id=4e5e21ba&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserThemes.vue?vue&type=style&index=0&id=4e5e21ba&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UserThemes.vue?vue&type=template&id=4e5e21ba&scoped=true&\"\nimport script from \"./UserThemes.vue?vue&type=script&lang=js&\"\nexport * from \"./UserThemes.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserThemes.vue?vue&type=style&index=0&id=4e5e21ba&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4e5e21ba\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',[_c('NcSettingsSection',{staticClass:\"theming\",attrs:{\"title\":_vm.t('theming', 'Appearance and accessibility'),\"limit-width\":false}},[_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.description)}}),_vm._v(\" \"),_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.descriptionDetail)}}),_vm._v(\" \"),_c('div',{staticClass:\"theming__preview-list\"},_vm._l((_vm.themes),function(theme){return _c('ItemPreview',{key:theme.id,attrs:{\"enforced\":theme.id === _vm.enforceTheme,\"selected\":_vm.selectedTheme.id === theme.id,\"theme\":theme,\"unique\":_vm.themes.length === 1,\"type\":\"theme\"},on:{\"change\":_vm.changeTheme}})}),1),_vm._v(\" \"),_c('div',{staticClass:\"theming__preview-list\"},_vm._l((_vm.fonts),function(theme){return _c('ItemPreview',{key:theme.id,attrs:{\"selected\":theme.enabled,\"theme\":theme,\"unique\":_vm.fonts.length === 1,\"type\":\"font\"},on:{\"change\":_vm.changeFont}})}),1)]),_vm._v(\" \"),_c('NcSettingsSection',{attrs:{\"title\":_vm.t('theming', 'Keyboard shortcuts')}},[_c('p',[_vm._v(_vm._s(_vm.t('theming', 'In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps.')))]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{staticClass:\"theming__preview-toggle\",attrs:{\"checked\":_vm.shortcutsDisabled,\"name\":\"shortcuts_disabled\",\"type\":\"switch\"},on:{\"update:checked\":function($event){_vm.shortcutsDisabled=$event},\"change\":_vm.changeShortcutsDisabled}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('theming', 'Disable all keyboard shortcuts'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('NcSettingsSection',{staticClass:\"background\",attrs:{\"title\":_vm.t('theming', 'Background'),\"data-user-theming-background-disabled\":\"\"}},[(_vm.isUserThemingDisabled)?[_c('p',[_vm._v(_vm._s(_vm.t('theming', 'Customization has been disabled by your administrator')))])]:[_c('p',[_vm._v(_vm._s(_vm.t('theming', 'Set a custom background')))]),_vm._v(\" \"),_c('BackgroundSettings',{staticClass:\"background__grid\",on:{\"update:background\":_vm.refreshGlobalStyles}})]],2)],1)\n}\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 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 './UserThemes.vue'\nimport { refreshStyles } from './helpers/refreshStyles.js'\n\nVue.prototype.OC = OC\nVue.prototype.t = t\n\nconst View = Vue.extend(App)\nconst theming = new View()\ntheming.$mount('#theming')\ntheming.$on('update:background', refreshStyles)\n","/**\n * @copyright 2022 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const refreshStyles = () => {\n\t// Refresh server-side generated theming CSS\n\t[...document.head.querySelectorAll('link.theme')].forEach(theme => {\n\t\tconst url = new URL(theme.href)\n\t\turl.searchParams.set('v', Date.now())\n\t\tconst newTheme = theme.cloneNode()\n\t\tnewTheme.href = url.toString()\n\t\tnewTheme.onload = () => theme.remove()\n\t\tdocument.head.append(newTheme)\n\t})\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, \".theming p[data-v-4e5e21ba]{max-width:800px}.theming[data-v-4e5e21ba] a{font-weight:bold}.theming[data-v-4e5e21ba] a:hover,.theming[data-v-4e5e21ba] a:focus{text-decoration:underline}.theming__preview-list[data-v-4e5e21ba]{--gap: 30px;display:grid;margin-top:var(--gap);column-gap:var(--gap);row-gap:var(--gap);grid-template-columns:1fr 1fr}.background__grid[data-v-4e5e21ba]{margin-top:30px}@media(max-width: 1440px){.theming__preview-list[data-v-4e5e21ba]{display:flex;flex-direction:column}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/UserThemes.vue\"],\"names\":[],\"mappings\":\"AAGC,4BACC,eAAA,CAID,4BACC,gBAAA,CAEA,oEAEC,yBAAA,CAIF,wCACC,WAAA,CAEA,YAAA,CACA,qBAAA,CACA,qBAAA,CACA,kBAAA,CACA,6BAAA,CAKD,mCACC,eAAA,CAIF,0BACC,wCACC,YAAA,CACA,qBAAA,CAAA\",\"sourcesContent\":[\"\\n.theming {\\n\\t// Limit width of settings sections for readability\\n\\tp {\\n\\t\\tmax-width: 800px;\\n\\t}\\n\\n\\t// Proper highlight for links and focus feedback\\n\\t&::v-deep a {\\n\\t\\tfont-weight: bold;\\n\\n\\t\\t&:hover,\\n\\t\\t&:focus {\\n\\t\\t\\ttext-decoration: underline;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview-list {\\n\\t\\t--gap: 30px;\\n\\n\\t\\tdisplay: grid;\\n\\t\\tmargin-top: var(--gap);\\n\\t\\tcolumn-gap: var(--gap);\\n\\t\\trow-gap: var(--gap);\\n\\t\\tgrid-template-columns: 1fr 1fr;\\n\\t}\\n}\\n\\n.background {\\n\\t&__grid {\\n\\t\\tmargin-top: 30px;\\n\\t}\\n}\\n\\n@media (max-width: 1440px) {\\n\\t.theming__preview-list {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\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-8a72fa3e]{display:flex;flex-wrap:wrap;justify-content:center}.background-selector .background[data-v-8a72fa3e]{overflow:hidden;width:176px;height:96px;margin:8px;text-align:center;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-position:center center;background-size:cover}.background-selector .background__filepicker.background--active[data-v-8a72fa3e]{color:#fff;background-image:var(--image-background)}.background-selector .background__default[data-v-8a72fa3e]{background-color:var(--color-primary-default);background-image:var(--image-background-plain, var(--image-background-default))}.background-selector .background__filepicker[data-v-8a72fa3e],.background-selector .background__default[data-v-8a72fa3e],.background-selector .background__color[data-v-8a72fa3e]{border-color:var(--color-border)}.background-selector .background__color[data-v-8a72fa3e]{color:var(--color-primary-text);background-color:var(--color-primary-default)}.background-selector .background__default[data-v-8a72fa3e],.background-selector .background__shipped[data-v-8a72fa3e]{color:#fff}.background-selector .background[data-color-bright][data-v-8a72fa3e]{color:#000}.background-selector .background--active[data-v-8a72fa3e],.background-selector .background[data-v-8a72fa3e]:hover,.background-selector .background[data-v-8a72fa3e]:focus{border:2px solid var(--border-color, var(--color-primary)) !important}.background-selector .background span[data-v-8a72fa3e]{margin:4px}.background-selector .background .check-icon[data-v-8a72fa3e]{display:none}.background-selector .background--active:not(.icon-loading) .check-icon[data-v-8a72fa3e]{display:block !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/BackgroundSettings.vue\"],\"names\":[],\"mappings\":\"AACA,sCACC,YAAA,CACA,cAAA,CACA,sBAAA,CAEA,kDACC,eAAA,CACA,WAAA,CACA,WAAA,CACA,UAAA,CACA,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,iCAAA,CACA,qBAAA,CAGC,iFACC,UAAA,CACA,wCAAA,CAIF,2DACC,6CAAA,CACA,+EAAA,CAGD,kLACC,gCAAA,CAGD,yDACC,+BAAA,CACA,6CAAA,CAID,sHAEC,UAAA,CAID,qEACC,UAAA,CAGD,0KAIC,qEAAA,CAID,uDACC,UAAA,CAGD,8DACC,YAAA,CAIA,yFAEC,wBAAA\",\"sourcesContent\":[\"\\n.background-selector {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\tjustify-content: center;\\n\\n\\t.background {\\n\\t\\toverflow: hidden;\\n\\t\\twidth: 176px;\\n\\t\\theight: 96px;\\n\\t\\tmargin: 8px;\\n\\t\\ttext-align: center;\\n\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tbackground-position: center center;\\n\\t\\tbackground-size: cover;\\n\\n\\t\\t&__filepicker {\\n\\t\\t\\t&.background--active {\\n\\t\\t\\t\\tcolor: white;\\n\\t\\t\\t\\tbackground-image: var(--image-background);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&__default {\\n\\t\\t\\tbackground-color: var(--color-primary-default);\\n\\t\\t\\tbackground-image: var(--image-background-plain, var(--image-background-default));\\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\\tcolor: var(--color-primary-text);\\n\\t\\t\\tbackground-color: var(--color-primary-default);\\n\\t\\t}\\n\\n\\t\\t// Over a background image\\n\\t\\t&__default,\\n\\t\\t&__shipped {\\n\\t\\t\\tcolor: white;\\n\\t\\t}\\n\\n\\t\\t// Text and svg icon dark on bright background\\n\\t\\t&[data-color-bright] {\\n\\t\\t\\tcolor: black;\\n\\t\\t}\\n\\n\\t\\t&--active,\\n\\t\\t&:hover,\\n\\t\\t&:focus {\\n\\t\\t\\t// Use theme color primary, see inline css variable in template\\n\\t\\t\\tborder: 2px solid var(--border-color, var(--color-primary)) !important;\\n\\t\\t}\\n\\n\\t\\t// Icon\\n\\t\\tspan {\\n\\t\\t\\tmargin: 4px;\\n\\t\\t}\\n\\n\\t\\t.check-icon {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\n\\t\\t&--active:not(.icon-loading) {\\n\\t\\t\\t.check-icon {\\n\\t\\t\\t\\t// Show checkmark\\n\\t\\t\\t\\tdisplay: block !important;\\n\\t\\t\\t}\\n\\t\\t}\\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, \".theming__preview[data-v-30cd5e6b]{--ratio: 16;position:relative;display:flex;justify-content:flex-start;max-width:800px}.theming__preview[data-v-30cd5e6b],.theming__preview *[data-v-30cd5e6b]{user-select:none}.theming__preview-image[data-v-30cd5e6b]{flex-basis:calc(16px*var(--ratio));flex-shrink:0;height:calc(10px*var(--ratio));margin-right:var(--gap);cursor:pointer;border-radius:var(--border-radius);background-repeat:no-repeat;background-position:top left;background-size:cover}.theming__preview-description[data-v-30cd5e6b]{display:flex;flex-direction:column}.theming__preview-description h3[data-v-30cd5e6b]{font-weight:bold;margin-bottom:0}.theming__preview-description label[data-v-30cd5e6b]{padding:12px 0}.theming__preview--default[data-v-30cd5e6b]{grid-column:span 2}.theming__preview-warning[data-v-30cd5e6b]{color:var(--color-warning)}@media(max-width: 682.6666666667px){.theming__preview[data-v-30cd5e6b]{flex-direction:column}.theming__preview-image[data-v-30cd5e6b]{margin:0}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/theming/src/components/ItemPreview.vue\"],\"names\":[],\"mappings\":\"AAGA,mCAEC,WAAA,CAEA,iBAAA,CACA,YAAA,CACA,0BAAA,CACA,eAAA,CAEA,wEAEC,gBAAA,CAGD,yCACC,kCAAA,CACA,aAAA,CACA,8BAAA,CACA,uBAAA,CACA,cAAA,CACA,kCAAA,CACA,2BAAA,CACA,4BAAA,CACA,qBAAA,CAGD,+CACC,YAAA,CACA,qBAAA,CAEA,kDACC,gBAAA,CACA,eAAA,CAGD,qDACC,cAAA,CAIF,4CACC,kBAAA,CAGD,2CACC,0BAAA,CAIF,oCACC,mCACC,qBAAA,CAEA,yCACC,QAAA,CAAA\",\"sourcesContent\":[\"\\n@use 'sass:math';\\n\\n.theming__preview {\\n\\t// We make previews on 16/10 screens\\n\\t--ratio: 16;\\n\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\tjustify-content: flex-start;\\n\\tmax-width: 800px;\\n\\n\\t&,\\n\\t* {\\n\\t\\tuser-select: none;\\n\\t}\\n\\n\\t&-image {\\n\\t\\tflex-basis: calc(16px * var(--ratio));\\n\\t\\tflex-shrink: 0;\\n\\t\\theight: calc(10px * var(--ratio));\\n\\t\\tmargin-right: var(--gap);\\n\\t\\tcursor: pointer;\\n\\t\\tborder-radius: var(--border-radius);\\n\\t\\tbackground-repeat: no-repeat;\\n\\t\\tbackground-position: top left;\\n\\t\\tbackground-size: cover;\\n\\t}\\n\\n\\t&-description {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\n\\t\\th3 {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t}\\n\\n\\t\\tlabel {\\n\\t\\t\\tpadding: 12px 0;\\n\\t\\t}\\n\\t}\\n\\n\\t&--default {\\n\\t\\tgrid-column: span 2;\\n\\t}\\n\\n\\t&-warning {\\n\\t\\tcolor: var(--color-warning);\\n\\t}\\n}\\n\\n@media (max-width: math.div(1024px, 1.5)) {\\n\\t.theming__preview {\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&-image {\\n\\t\\t\\tmargin: 0;\\n\\t\\t}\\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","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (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 = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 1474;","__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\t1474: 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 = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (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((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(47546)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","backgroundImage","loadState","shippedBackgroundList","themingDefaultBackground","defaultShippedBackground","prefixWithBaseUrl","url","generateFilePath","picker","getFilePickerBuilder","t","setMultiSelect","setModal","setType","setMimeTypeFilter","build","name","components","Check","Close","ImageEdit","NcColorPicker","data","loading","Theming","computed","shippedBackgrounds","Object","keys","map","fileName","preview","details","filter","background","isGlobalBackgroundDeleted","isGlobalBackgroundDefault","isBackgroundDisabled","methods","invertTextColor","color","calculateLuma","red","green","blue","hexToRGB","hex","result","exec","parseInt","backgroundColor","$emit","axios","generateUrl","update","shipped","value","path","arguments","length","undefined","event","_event$target","_event$target$dataset","_this$Theming","target","dataset","debouncePickColor","debounce","pickColor","pick","response","_palette$DarkVibrant","fileUrl","generateRemoteUrl","getCurrentUser","uid","responseType","blobUrl","URL","createObjectURL","palette","getColorPaletteFromBlob","DarkVibrant","setFile","console","debug","error","Promise","resolve","reject","Vibrant","getPalette","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","class","on","pickFile","_v","_s","_e","style","defaultColor","setDefault","model","callback","$$v","$set","expression","removeBackground","_l","shippedBackground","key","primary_color","attribution","theming","$event","setShipped","NcCheckboxRadioSwitch","props","enforced","type","Boolean","default","selected","theme","required","String","unique","switchType","img","id","checked","get","set","enabled","onToggle","title","description","enableLabel","availableThemes","enforceTheme","shortcutsDisabled","isUserThemingDisabled","ItemPreview","NcSettingsSection","BackgroundSettings","themes","fonts","selectedTheme","find","replace","guidelinesLink","descriptionDetail","issuetrackerLink","designteamLink","watch","newState","changeShortcutsDisabled","refreshGlobalStyles","document","head","querySelectorAll","forEach","href","searchParams","Date","now","newTheme","cloneNode","toString","onload","remove","append","updateBackground","changeTheme","_ref","updateBodyAttributes","selectItem","changeFont","_ref2","font","generateOcsUrl","appId","configKey","configValue","method","enabledThemesIDs","enabledFontsIDs","body","toggleAttribute","concat","setAttribute","join","themeId","err","OC","Notification","showTemporary","ocs","meta","message","domProps","Vue","App","$mount","$on","refreshStyles","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","O","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file